Forum: Mikrocontroller und Digitale Elektronik Musiktempoänderung


von Matthias O. (Gast)


Lesenswert?

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

von Route_66 H. (route_66)


Lesenswert?

Matthias O. schrieb:
> Ein Lied ist auf einer SD-Karte gespeichert

Wie? Als s/w-Scan einer Notenseite?

von Karl H. (kbuchegg)


Lesenswert?

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?

von Matthias O. (Gast)


Lesenswert?

Es wird eine Wav datei sein
Gesampelt muss sie noch werden...muss mich auch noch schlau machen wie 
das Resampling geht

von S. K. (hauspapa)


Lesenswert?

>Die Geschwindigkeit der Musik soll um 10% verschnellert bzw. verlangsamt
>werden!

Darf sich die Tonhöhe dabei ändern?

viel Erfolg
hauspapa

: Bearbeitet durch User
von Matthias O. (Gast)


Lesenswert?

Nein, darf sie nicht

von Karl H. (kbuchegg)


Lesenswert?

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.

von Wolllaus (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Matthias O. (Gast)


Lesenswert?

Hey cool danke...

Was würdest du da vorschlagen?

von Jan H. (jan_m_h)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von fluuppu (Gast)


Lesenswert?

> Geschwindigkeit der Musik soll um 10% verschnellert bzw. verlangsamt

einfach 2 mal abspeichern.

von Daniel (Gast)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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

von Matthias O. (Gast)


Lesenswert?

Vielen Dank für dir Tipps

von Helmut -. (dc3yc)


Lesenswert?

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".

von Cyblord -. (cyblord)


Lesenswert?

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...

von Matthias O. (Gast)


Lesenswert?

Auf dem PC bringts mir leider nichts...

von Matthias O. (Gast)


Lesenswert?

Aber die verwenden dazu ja auch einen gewissen Algorithmus, damit das 
on-the-fly geschieht.
Wo bekommt man den??

von Daniel (Gast)


Lesenswert?

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

von Daniel (Gast)


Lesenswert?

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.

von Christopher B. (chrimbo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Guck mal ob dir das weiterhilft

von Karl H. (kbuchegg)


Lesenswert?

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?

von Daniel (Gast)


Lesenswert?

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

von Thomas S. (thommi)


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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?

von Daniel (Gast)


Lesenswert?

@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?

von avr (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von avr (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von avr (Gast)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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!

von Mark B. (markbrandis)


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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 ;-)

von Matthias O. (Gast)


Lesenswert?

Hat vielleicht wer einen Beispielcode??

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Lies Dir mal den von mir verlinkten Wikipedia-Artikel durch. Da ist ein 
Beispiel verlinkt.

von Mark B. (markbrandis)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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
von Mark B. (markbrandis)


Lesenswert?

Ü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
Noch kein Account? Hier anmelden.