Hallo, Ein Lied ist auf einer SD-Karte gespeichert und mit dem ATmega2560 verbunden. Wie kann ich diese Datei mit C auslesen und bearbeiten? Die Geschwindigkeit der Musik soll um 10% verschnellert bzw. verlangsamt werden! Gibts dazu einen speziellen Algorithmus??? Wär cool wenn ihr mir helfen könntet...bin am verzweifeln Lg Matthias
Matthias O. schrieb: > Ein Lied ist auf einer SD-Karte gespeichert Wie? Als s/w-Scan einer Notenseite?
Matthias O. schrieb: > Hallo, > > Ein Lied ist auf einer SD-Karte gespeichert In welcher Form. Welches ist das Dateiformat? Ist es gesampelte Musik (MP3, WAV, ...) oder ist das zb Midi?
Es wird eine Wav datei sein Gesampelt muss sie noch werden...muss mich auch noch schlau machen wie das Resampling geht
>Die Geschwindigkeit der Musik soll um 10% verschnellert bzw. verlangsamt >werden! Darf sich die Tonhöhe dabei ändern? viel Erfolg hauspapa
:
Bearbeitet durch User
Matthias O. schrieb: > Es wird eine Wav datei sein OK. In einer WAV Datei ist einfach nur die abzuspielende Welle in Form von Werten enthalten. Wenn du also zb die Sequenz
1 | 0x10, 0x20, 0x30, 0x20, 0x10, ... |
um 10% länger machen sollst, wie machst du das. Na, zb dadurch, dass du jeden 10-ten Wert 1 mal wiederholst. Aus den original 10 Bytes werden 11 Bytes, was um 10% länger ist.
Falls die Tonhöhe sich nicht verändern soll: Das kannst du (bei halbwegs vernünftiger Ziel-Audioqualität) auf einem ATmega2560 gleich wieder vergessen; viel zu rechenaufwendig.
Matthias O. schrieb: > Nein, darf sie nicht Dann hst du wenig Chancen. Irgendwas muss sich noch ändern. Da aber die wenigsten ein absolutes Gehör haben, wird es bis zu einem gewissen Grad kaum jemanden auffallen, dass sich die Tonlage ein wenig verschoben hat.
:
Bearbeitet durch User
S. K. schrieb: > Darf sich die Tonhöhe dabei ändern? Matthias O. schrieb: > Nein, darf sie nicht Das wird auf einem Atmega fast unmöglich sein, erst recht in Echtzeit.
Karl H. schrieb: > Matthias O. schrieb: >> Nein, darf sie nicht > > Dann hst du wenig Chancen. Irgendwas muss sich noch ändern. > Da aber die wenigsten ein absolutes Gehör haben, wird es bis zu einem > gewissen Grad kaum jemanden auffallen, dass sich die Tonlage ein wenig > verschoben hat. Du kannst nicht so einfach 10 Sinusschwingungen in der Zeitdauer unterbringen, die 11 Schwingungen benötigen würden. D.h. bei einem reinen Sinus, dessen Frequenz du kennst würde das gehen, indem du eine 11-te Schwingung anhängst anstatt die 10 auf die Zeitdauer von 11 zu strecken. Nur blöderweise hast du keinen reinen Sinus. Du könntest natürlich das Musikstück durch eine FFT jagen, die dir in der Samplefrequenz zu jedem Zeitpunkt die exakte spektrale Verteilung feststellt, die dann im Zeitbereich ein wenig strecken und mit einer Synthese dann wieder die Kurve generieren. Aber wenn du in diesem Jahrhundert noch fertig werden willst, würde ich das lassen. Das einfachste ist sicherlich nach zb für 10% länger nach jeweils 10 Bytes ein 11. Byte einschieben, das entweder eine Kopie des 10ten ist oder sich aus dem Mittelwert des original 10.ten mit dem original 11.ten Bytes ergibt. Ich denke allerdings, dass die meisten Sound-Editoren eine derartige Operation problemlos erledigen können.
> Geschwindigkeit der Musik soll um 10% verschnellert bzw. verlangsamt
einfach 2 mal abspeichern.
Hallo, ich würde doch ganz klar sagen, dass sich ein Verdoppeln jedes zehnten Samples sehr komisch anhören wird. Da bleibt ja quasi die Lautsprechermembran kurz stehen -> Oberwellen. Der klassische Ansatz ist, eine Kurve, die aus 10 Samples aufgebaut wird zu interpolieren und 11 äquidistante Punkte herauszunehmen. Mit der ursprünglichen Samplerate abgespielt, ergibt das eine Verlangsamung um 10%. Aber eben auch einen Frequenzshift hin zu tiefer. Ohne Shift kriegt man das nur mit einer FFT hin. Das kannst du aber nur sinnvoll auf einem DSP oder einem entsprechend angepassten µC rechnen. Der Cortex M4 ist für einfache DSP-Aufgaben geeignet. Nichtsdestotrotz: Viel Spaß, das ist nicht gerade trivial. Grüße, Daniel
Achja, alternativ geht natürlich auch, die Samplerate zu variieren. Statt 48.000 kann man auch nur 43.200 Samples ausgeben. Auch das ergibt eine saubere, langsame, aber tiefere Wiedergabe. Ohne Frequenzshift bleibt in meinen Augen nur der oben angesprochene Weg über das Spektrum auf einem DSP-Prozessor. Gruß, Daniel
Auf einem PC ist das kein Problem. Das können diverse DJ-Programme (MediaMonkey, Virtual DJ, Audacity). Das Tempo ändert sich, die Tonhöhe bleibt constant. Nennt sich "Pitch".
Helmut -. schrieb: > Auf einem PC ist das kein Problem. Das können diverse DJ-Programme > (MediaMonkey, Virtual DJ, Audacity). Das Tempo ändert sich, die Tonhöhe > bleibt constant. Nennt sich "Pitch". Ich dachte Pitch wäre die Tonhöhe...
Aber die verwenden dazu ja auch einen gewissen Algorithmus, damit das on-the-fly geschieht. Wo bekommt man den??
Noch was bezüglich des Shifts: Der Kammerton A4 hat eine Frequenz von 440 Hz. Eine Verlangsamung um 10% bedeutet eine Frequenz von 396 Hz. Bei 392 Hz liegt das G4. Eine Streckung um 10% bedeutet also im Allgemeinen (das ist proportional übertragbar auf alle anderen Töne) eine Transponierung um fast zwei Halbtöne. Bei reiner Instrumentalmusik (insbesondere synthetische) wird man den Unterschied kaum hören. Kennt man jedoch die Stimme eines Interpreten, hört man das teilweise schon recht deutlich. Und wenn du die Übung zum Mixen machst, dann kommst du um eine stufenweise Anpassung bzgl. Tempo und Tonart nicht herum. Gruß, Daniel
Matthias O. schrieb: > Aber die verwenden dazu ja auch einen gewissen Algorithmus, damit das > on-the-fly geschieht. > Wo bekommt man den?? Such mal nach: music pitch algorithm Ansonsten würde ich mir an einer Hochschule/Uni ein DSP-Buch besorgen.
Matthias O. schrieb: > Aber die verwenden dazu ja auch einen gewissen Algorithmus, damit das > on-the-fly geschieht. Mit welchem Boliden willst du das denn machen? Dir ist hoffentlich klar, dass es da um ein wenig mehr geht, als einfach nur ein paar Additionen und Multiplikationen?
Ich muss leider noch nachtragen, dass ich blind nachgeplappert habe. Was du suchen musst, ist das hier: https://en.wikipedia.org/wiki/Audio_time-scale/pitch_modification Gruß, Daniel
Kennstd u jemanden, der jemanden kennt, der bei einem Radiosender arbeitet, und selbiger jemanden von der Technik kennt? Die praktizieren das auch, um sekundengenau den Beeep zur vollen Stunde für die Nachrichten erreicht. Da wird aber der letzte Song nicht um bis zu 10 % beschleunigt, aber die Geschwindigkeit wird angepasst. der Musikdatenpool der Sender ist sicher nicht MP3, aber das Schallarchiv des SDR1 für die Sendung "Sie wünschen, wir spielen" existiert bestimmt immer noch, das war noch Vinyl auf 7500€-Plattenspielern. Da hat man noch analog gepitcht, heute sind die Quellen digital, da ist der Zugriff quasi direkt, und man kann da auch pitchen. Aber 10% sind schon ne Hausnummer über 100. Die oben genannte Sendung war quasi ein kleines Kindheitstrauma für mich: Es gab nur wenige Sender, und im Hörfunk anzuhören "ich bin siebzig Jahre alt, und ich möchte das Lied "Ich hab' Ehrfurcht vor schlohweissen Haaren" oder "Es gibt, Millionen von Sternen...", bzw "Danke, für diesen guten Morgen"... OK, etwas OT, aber bei einem Sender mal nachfragen bringt evtl Info. Die pitchen schon ab und an mal bei interaktiven Sendungen, wenn da ein Sonderwunsch reinkommt.
Typisch, dass alle gleich wieder mal nach dsp o.ä. schreien. Tatsächlich hat es elm-chan doch schon vorgemacht: http://elm-chan.org/works/vp/report.html
avr schrieb: > Typisch, dass alle gleich wieder mal nach dsp o.ä. schreien. Tatsächlich > hat es elm-chan doch schon vorgemacht: > http://elm-chan.org/works/vp/report.html elm-chan - who else?
@avr Du wiederholt doch eigentlich nur den allgemeinen Konsens? Elm Chan beschreibt einen Pitch Changer. Dass der mit einem AVR realisierbar ist, darüber waren wir uns einig. Neu ist,dass das auch ohne Tempoänderung funktioniert, indem man immer wieder kleine Sequenzen verwirft. Wie das in der Praxis klingt, bleibt zu testen. Der TE möchte aber eine Tempoänderung ohne Pitch. Also exakt das Gegenteil. Das sehe ich mit dem bisschen Pointerarithmetik nicht realisierbar. Du etwa? Also, Freiwillige vor. Wer löst das auf einem AVR? Ich wil nicht sagen, das das nicht möglich wäre, mir fehlt aber das mathematische Verständnis. Welche Operation im Frequenzbereich entspricht der Tempoänderung ohne Pitch im Zeitbereich?
Daniel schrieb: > Der TE möchte aber eine Tempoänderung ohne Pitch. Also exakt das > Gegenteil. Nein nicht das Gegenteil. Versuch doch bitte mal seine Ausführungen zu verstehen. Pitch Änderung ist technisch gesehen genau das gleiche wie Tempoänderung. Der Unterschied liegt bei der Abspielgeschwindigkeit (Samples/s). Abgesehen davon ist es wohl relativ einleuchtend, dass man sehr grobe Änderungen am Audiosignal vornehmen muss wenn man das Tempo ohne Pitch ändert. Diese Pointerarithmetik (was eigentlich nur ein Ringbuffer ist), wurde auch schon bei analogen Geräten angewendet. Dort gab es spezielle Leseköpfe mit mehrere Spulen. Diese Köpfe haben sich gedreht. Dadurch konnte man beim abspielen die Tonhöhe verändern.
avr schrieb: > Daniel schrieb: >> Der TE möchte aber eine Tempoänderung ohne Pitch. Also exakt das >> Gegenteil. > > Nein nicht das Gegenteil. Doch das will er. Er will, dass ein Erzähler langsamer spricht. Damit er den Wetterbericht anstatt in 5 Minuten in 6 Minuten verliest. Aber er will nicht, dass sich die 25 jährige Sprecherin wie Ivan Rebroff anhört.
Was ihr da machen wollt, nennt sich formantenunabhängige Transponierung und gelingt nur, wenn man einerseits resampelt und andererseits lokale Pausen verkürzt / verlängert. Das läuft auf einen diskreten Algorithmus hinaus, der Nulldurchgänge findet und nutzt. Es gibt in professionellen Audio-Programmen mehrere Tuning-Prozess-Optionen, die das in unterschiedlicher Qualität und mit verschiedenen Methoden leisten. Magix Sampltitude und Steinberg Wavelab können das z.B. Der Grundklang der Musik wird allerdings hierbei nicht verändert - also der Ivan-Effekt bleibt aus. Das Ergebnis ist gemessen am Rechenaufwand erstaunlich gut und ehrlich gesagt konnte auch Ich trotz mehrerer Versuche in dem Thema, einen guten Algo zu entwickeln, bisher nicht wirklich da heranreichen. Lediglich der manuelle Schnitt ist da überlegen, aber das geht nur bei Sprache / Synchronarbeit. Es gibt allerdings teilweise hörbare glitches, die man nacharbeiten muss und es funktioniert auch nur für einige Halbtöne, d.h. 10%, weil das sonst unweigerlich zu unakzeptablen Fehlern führt. Das Ganze zielführend, kontinuierlich und ohne diskrete Bearbeitung zu machen, klappt nur mit Faltungsoperationen nach vorheriger Zerlegung von Samples in die musikalischen Aspekte Tonhöhe und Formant (= Frequenzhüllkurve). Im Prinzip ist das eine 2D-FFT. Mit Hilfe der Faltung können die Frequenzen in nahezu beliebigem Tempo wieder zusammengesetzt werden und dem Formanten-EQ geshaped werden. Die bekannten Autotune-Geräte in der Musikindustrie (z.B. Antares) oder auch die V-Synthese von Roland arbeiten so. Das Signal ist dann mehr oder weniger frei von Glitches, aber Artefakte sind unüberhörbar. Schon ein Signal, das ungeändert durch die FFT-IFFT-Kette läuft ist nicht mehr authentisch, weil es zweimal gefenstert wurde. Es klingt aber nicht so arg schlecht, man kann damit Chorpassagen mischen und Mehrklang-Akkorde aus Stimmen und Instrumenten live in allen Tonarten spielen. Wenn im vorliegenden Fall die Frequenzänderung statisch ist, könnte man einen eng aufgelöste FFT machen und statisch um genau 1 oder 2 Punkte verschieben. Mit einem guten Filter / Fenster bei der IFFT kann man da schon einen vernüftigen Klang hinbekommen. Engmaschig heisst hier konkret eine nichtlineare FFT mit z.B. 128 Tönen in Halbton-Abstufung -> 196/185 Frequenzsprung. Wenn man genau einen Ganzton nähme, wären es rund 12% bei 64 Frequenzen. Das in Echtzeit gewonnene FFT-Profil ist dann die Formantenkurve.
:
Bearbeitet durch User
Thomas S. schrieb: > Da wird aber der letzte Song nicht um bis zu 10 % beschleunigt, aber die > Geschwindigkeit wird angepasst. Nee :-) Die machen da kein DJ-ING. Die Software startet das Material passend, damit es hinkommt. Die stellen das meistens vorher zusammen und pressen jede Sekunde raus. Die Summation und Einstreuung von Werbung und Jingles geht da auch komplett als overlay und wird automatisiert eingerechnet. Daniel schrieb: > Der Kammerton A4 hat eine Frequenz von 440 Hz. In ->Kammer-Orchestern sind es 443 und auch bei sonstiger akustischer Musik habe ich noch nie Material gehabt, wo ein A auf 440Hz lag. Musik, die mit Gitarren aufgenommen wurde liegen besonders schräg, weil die gerne mal ein C vom Keyboard holen, dann nach Gehör 3x die Quinte bilden, um über G,D zum A und E zu gelangen. Da sie unwillkürlich ziemlich rein stimmen, läuft der Ton weg. Genau das macht dann im Übrigen die voluminös klingende Gitarre. > Bei reiner Instrumentalmusik (insbesondere synthetische) wird man den > Unterschied kaum hören. Naja, es wird ja nicht nur das Tempo höher sondern auch der Anschlag schneller. Besonders bei Basstrommeln, Schlagwerk, aber auch dem Ausklangverhalten (Decay) von Instrumenten hört man das Tempo. Eine Gitarrensaite, die hochgedreht wurde, klingt scheinbar schneller ab, so als hätte sie mehr Dämpfung. Würde sie hingegen real schneller gespielt, dann käme der neue Ton in den noch etwas lauteren alten hinein und würde anders interferieren. Das ist absolut hörbar. Ich inzwischen mehr oder weniger zielsicher heraus, wenn z.B. Toms und Becken langsamer eingespielt und dann schneller gemischt wurden, weil der Drummer das Tempo nicht sauber hinbekam :-) Auch bei Sängern kann man es hören, weil das Vibratotempo nicht mehr zum Gesangtempo passt, da es ja ebenfalls steigt.
Karl H. schrieb: > Doch das will er. > Er will, dass ein Erzähler langsamer spricht. Damit er den Wetterbericht > anstatt in 5 Minuten in 6 Minuten verliest. Aber er will nicht, dass > sich die 25 jährige Sprecherin wie Ivan Rebroff anhört. Mann, dann lies doch mal den nächsten Satz, statt nur einen Brocken herauszuzitieren... Den Pitch entfernt man durch eine andere Samplerate beim Ausgeben und dadurch ändert sich effektiv nur die Geschwindigkeit. Es ist wohl klar, dass dieses Verfahren nicht das beste ist. Aber aus meiner Sicht das einzig praktikable auf einem Atmega.
avr schrieb: > Mann, dann lies doch mal den nächsten Satz, statt nur einen Brocken > herauszuzitieren... Ganz ruhig. Zitiere doch bitte du mal die Passage, wo du denkst, dass die gewünschte Funktionalität beschrieben wird. Wir findens nämlich nicht.
avr schrieb: > Den Pitch entfernt man durch eine andere Samplerate beim Ausgeben und > dadurch ändert sich effektiv nur die Geschwindigkeit. Nein, entweder, man spielt es mit einer anderen Rate ab, dann ändert sich beides, nämlich Tonhöhe UND Tempo, oder man resampelt es, damit es auf einer anderen Rate gespielt werden kann, dann bleibt beides gleich. Den inneren, festen Zusammenhang zwischen Tonhöhe und Tempo kann man nicht mehr ändern, weil dieser zur Zeit des Sampelns bestimmt wurde, egal, was man später mit dem Signal macht.
Jürgen S. schrieb: > Den inneren, festen Zusammenhang zwischen Tonhöhe und Tempo kann man > nicht mehr ändern, weil dieser zur Zeit des Sampelns bestimmt wurde, > egal, was man später mit dem Signal macht. Nein. Genau darum geht es hier, die Tonhöhe beizubehalten und das Tempo zu ändern. https://de.wikipedia.org/wiki/Time-Stretching
Jürgen S. schrieb: > Nein, entweder, man spielt es mit einer anderen Rate ab, dann ändert > sich beides, nämlich Tonhöhe UND Tempo, oder man resampelt es, damit es > auf einer anderen Rate gespielt werden kann, dann bleibt beides gleich. ja es ändert sich beides. Und wenn man den pitch zurückkorrigiert (siehe elm-chan), hat man am Ende nur das Tempo verändert. Und das ganze geht auch ohne Probleme auf einem Atmega. Auch wenn das hier keiner glauben will... Wie gut die Qualität ist kann ich nicht beurteilen, aber im Vergleich zu der Alterative mit FFT ist das Verfahren doch in kürzester Zeit implementiert.
avr schrieb: > Jürgen S. schrieb: >> Nein, entweder, man spielt es mit einer anderen Rate ab, dann ändert >> sich beides, nämlich Tonhöhe UND Tempo, oder man resampelt es, damit es >> auf einer anderen Rate gespielt werden kann, dann bleibt beides gleich. > > ja es ändert sich beides. Und wenn man den pitch zurückkorrigiert (siehe > elm-chan), hat man am Ende nur das Tempo verändert. Und das ganze geht > auch ohne Probleme auf einem Atmega. Auch wenn das hier keiner glauben > will... Da hast du recht, das ist eine schnelle und einfach zu implementierende Lösung. Das hat aber vermutlich keiner mitbekommen, dass du beide Methoden kombinieren willst. Jetzt ist es klarer. Und falls der TE noch mitliest: DAS IST DIE LÖSUNG!
Daniel schrieb: > Da hast du recht, das ist eine schnelle und einfach zu implementierende > Lösung. Das hat aber vermutlich keiner mitbekommen, dass du beide > Methoden kombinieren willst. Jetzt ist es klarer. > > Und falls der TE noch mitliest: DAS IST DIE LÖSUNG! Bei dem Wissensstand, den der TE bisher demonstriert hat, bezweifle ich dass er diese Lösung implementieren kann.
Mark B. schrieb: > Bei dem Wissensstand, den der TE bisher demonstriert hat, bezweifle ich > dass er diese Lösung implementieren kann. Kommt drauf an, wie ernst es ihm ist. Aber ob er das kann, danach hat er nicht gefragt ;-)
Lies Dir mal den von mir verlinkten Wikipedia-Artikel durch. Da ist ein Beispiel verlinkt.
Rufus Τ. F. schrieb: > Lies Dir mal den von mir verlinkten Wikipedia-Artikel durch. Da ist ein > Beispiel verlinkt. Meinst Du das hier: smbPitchShift.cpp ? Das Beispiel ist schon gut. Allerdings ist es wohl eher nicht für 8-Bit Prozessoren gedacht. Ich bezweifle dass ein ATmega2560 das während des Abspielens, also in Echtzeit rechnen kann.
Rufus Τ. F. schrieb: > Nein. Genau darum geht es hier, die Tonhöhe beizubehalten und das Tempo > zu ändern. > > https://de.wikipedia.org/wiki/Time-Stretching Ja, das war das Ziel, aber ich antwortete auf die Beschreibung weiter oben, das mit angeblichem pitchen oder resampeln tun zu wollen. Das geht eben nicht. Das Signal muss zerlegt und neu zusammengesetzt werden und dies künstlich unter den Randbedingungen der FFT. Details und Probleme hatte ich erörtert. Dieser Sachverhalt ist auch in den gelinkten Artikeln so beschrieben. Und wenngleich dort die Methodik als machbar gepriesen wird, muss klar dargestellt werden, dass dort deutliche Artefakte entstehen. Die Problematik besteht in der unzureichenden Auflösung der FFT und der nicht ganzzahlig dazu passenden Frequenzen. Die dazu nötige Fensterung verzerrt das Signal derart, dass es bei der Synthese unweigerlich zu Fehlern kommt und zwar zu hörbaren. Dies gilt um so mehr für die vorgestellte AVR-Methodik auf der ELM-Chan-Seite: Der dort (und auch anderswo sehr gerne) gemachte Denkfehler ist der, dass man ja nur in den Nullpunkten schneiden und loopen müsse, um störungfreie Pausen und Cuts applizieren zu können. Das ist Mitnichten so, denn es gibt streng genommen beim Audio keinen Nullpunkt, da dieser letztlich immer vom Folgefilter (z.B. letztlich den Lautsprecher) neu definiert wird. Stichwort AC-Kopplung. Jedesmal, wenn man dort unterbricht, fügt man dem Signal neue Frequenzen hinzu, weil ein Phasensprung ausgelöst wird - auch wenn man den nicht direkt sieht. Unterbrechbar und loopbar sind / wären nur die Frequenzen an sich und die haben je nach Betrachtung alle zu einem anderen Zeitpunkt ihren "Nullpunkt". Dass sie mal zufällig an irgendeinem Punkt zur absoluten Null summieren, macht keine Aussage - zumindest nicht für diesen Sachverhalt. Will man das aber richtig tun, landet man eben wieder bei der FFT und das ist hinreichend untersucht und probiert, was damit geht und was nicht. Und um es gleich vorwegzunehmen, ja, ich habe das mit FPGAs gemacht, und Ja, damit geht nochmal erheblich mehr, als mit den DSPs (bei mir die Chameleon mit 56303) - aber Nein, auch da ist es nicht wirklich zu machen, da klar hörbar! Wie schon gesagt, ist es bereits nicht möglich, ein Signal komplett in eine FFT zu zerlegen und unverändert wieder mit einer iFFT zusammenzubauen. Man hört immer das Fenster oder die sich bildenden Kammfilter-/Phaseneffekte bei sehr eng liegenden Abtastfrequenzen. Lässt man das Fenster bei beiden (i)FFTs weg, gelingt zwar eine theoretisch exakte Rekonstruktion, aber sie scheitert an der Auflösung. Dreht man die Auflösung hoch, wird die Periodenzeit zu gross und man kann es nicht mehr mit der Hüllkurve modulieren, um die Lautstärke zu erhalten.
:
Bearbeitet durch User
Übrigens dünkt mir, dass dieses Thema ins DSP-Unterforum gehört. Noch klassischer digitale Signalverarbeitung als das hier geht ja fast nicht. Und danke Jürgen S. für die interessanten Beiträge.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.