mathemat. Problem: Loops zusammenschneiden?

Jay
Jay
HCA Piano/Spieltechnik
Ex-Moderator
HCA
Zuletzt hier
06.11.24
Registriert
29.10.03
Beiträge
4.792
Kekse
7.202
Ort
München
Hallo,

wie der Titel schon andeutet, handelt es sich hier um eine sehr theoretische Frage. Und zwar habe ich für einen Kumpel nach dessen Wünschen eine kleines Sequenzerprogramm geschrieben. Er spielt damit einen Part ein (Start mit Fußschalter), und wenn er wieder auf den Fußschalter drückt, wird der Part geloopt und er kann Solo drüber spielen. Soweit kein Problem.

Wenn ich jetzt den Rhythmuspart zu einer Schleife zusammenschneide, muss ich ja verhindern, dass der Übergang vom Ende zum Anfang "ploppt". Hier fehlt mir das amtliche Fachwissen, also habe ich vorerst eine Lösung verwendet, die mir einigermaßen gängig erschien: Ein bestimmter Teil (im Moment knapp 20 ms) am Anfang und Ende der Schleife werden mit einer Funktion multipliziert, die "sachte" gegen 0 läuft. Meine Funktion der Wahl ist eine halbe Sinuswelle (pi/2 bis 3*pi/2), die ich dann normiert habe, so dass die Funktionswerte bei 1 beginnen und bei 0 enden.

Mit der Einstellung gehts schon ganz gut, so dass man den Übergang fast nicht mehr hört (hängt ja auch von der Aufnahme ab). Meine Fragen dazu sind: Welche Funktionen gibt es noch, die man dafür verwenden kann (Gauss?)? Wie lange ist die ideale Ein-und Ausfadezeit bzw. wie kann ich die bestimmen? Gibt es noch andere Verfahren außer der Multiplikation, auch über FFT o.ä.?

Gruß,
Jay
 
Eigenschaft
 
Hi jay!

Also ich kenn mich mathematisch auf dem Gebiet auch so gut wie gar nicht aus, aber wenn ich mir das so vorstelle, ist doch diese Popproblem eigentlich eine Überlagerung zweier Wellen. Das heißt der letzte Funktionswert der letzten Welle ist ein anderer als der erste Funktionswert der Welle oder? Wenn dem so ist, müßte man eine Funktion finden, die den Unterschied der Funktionswerte ausgleicht. Ich könnte mir vorstellen, dass das mit der Fouriertransformation tatsächlich funktioniert. Allerdings würde ich auch mal schauen, ob eine LaPlace- Transformation mit Grenzwertsätzen nicht auch funktionieren könnte. Ist nur eine Vermutung...

Gruß Marco
 
Reidelrock schrieb:
Also ich kenn mich mathematisch auf dem Gebiet auch so gut wie gar nicht aus, aber wenn ich mir das so vorstelle, ist doch diese Popproblem eigentlich eine Überlagerung zweier Wellen. Das heißt der letzte Funktionswert der letzten Welle ist ein anderer als der erste Funktionswert der Welle oder?
Ja. Beim Zusammensetzen entsteht dadurch ein Sprung, der das Störgeräusch verursacht. Man muss also diesen Übergang weich gestalten, was ich bisher dadurch gelöst habe, dass ich beide Enden auf 0 zurückfahre wie oben beschrieben.

Reidelrock schrieb:
Wenn dem so ist, müßte man eine Funktion finden, die den Unterschied der Funktionswerte ausgleicht. Ich könnte mir vorstellen, dass das mit der Fouriertransformation tatsächlich funktioniert. Allerdings würde ich auch mal schauen, ob eine LaPlace- Transformation mit Grenzwertsätzen nicht auch funktionieren könnte. Ist nur eine Vermutung...
Im Grundstudium habe ich das gehasst. :rolleyes: Das Problem neben der Auswahl eines geeigneten Verfahrens ist auch dessen Implementierung. Die Multiplikation ist digital ja kein Problem. FFT auch nicht, nur was genau mache ich dann, wenn ich das Spektrum habe? Aber Laplace-Trafo? Ich habe ja keine bestimmte Funktion, sondern einen Haufen digitaler Werte. Da weiß ich nicht, wie ich die transformieren soll. :confused:

Danke schonmal fürs Gedanken machen. :)
 
Die Idee mit dem Sinus ist schon ganz richtig. Wenn du jetzt stattdessen einen Sinus^^2 nimmst (hast du ja schon de facto durch die Normierung auf 0 und 1), und die nicht ERST aus- und DANN wieder einblendest, sondern richtig überlappen lässt, dann sollte ein nahezu unhörbarer Übergang rauskommen. Denn, wie wir wissen, ist sin² + cos² = 1, ne?
Dass das in der Praxis nicht ganz so funktioniert, liegt daran, dass dein Signal kein Rauschen ist, sondern irgendein beliebiges, so dass Interferenzen einem da Sorgen machen können.

Wenn es rein um die Verhinderung eines "Knack" geht, dann tut es auch ein ganz schneller Fade (der dann auch linear sein darf) von vielleicht 10ms.

Jens
 
.Jens schrieb:
Die Idee mit dem Sinus ist schon ganz richtig. Wenn du jetzt stattdessen einen Sinus^^2 nimmst (hast du ja schon de facto durch die Normierung auf 0 und 1), und die nicht ERST aus- und DANN wieder einblendest, sondern richtig überlappen lässt, dann sollte ein nahezu unhörbarer Übergang rauskommen. Denn, wie wir wissen, ist sin² + cos² = 1, ne?
Dass das in der Praxis nicht ganz so funktioniert, liegt daran, dass dein Signal kein Rauschen ist, sondern irgendein beliebiges, so dass Interferenzen einem da Sorgen machen können.
Der Idealfall ist natürlich der unhörbare Übergang. Das Aus- und wieder Einblenden hat den Vorteil, dass der Funktionswert 0 ein unproblematischer Mittelpunkt ist. Welchen "Treffpunkt" müsste ich denn bei einem Direktübergang wählen? Einfach die Mitte?

Und ich nehme mal an, mit Interferenzen meinst du den dadurch entstehenden ungleichmäßigen Wellenverlauf. Lässt sich das überhaupt verhindern?
 
Jay schrieb:
Der Idealfall ist natürlich der unhörbare Übergang. Das Aus- und wieder Einblenden hat den Vorteil, dass der Funktionswert 0 ein unproblematischer Mittelpunkt ist. Welchen "Treffpunkt" müsste ich denn bei einem Direktübergang wählen? Einfach die Mitte?
Bei dem (durchaus üblichen) sin²-Übergang nimmst du tatsächlich die Mitte. Oder anders gesagt: du nimmst je eine Viertelperiode von einem sin² und einem cos² und lässt die gleichzeitig "loslaufen". Damit hast du (theoretisch) einen gleichbleibenden Summenpegel.

Und ich nehme mal an, mit Interferenzen meinst du den dadurch entstehenden ungleichmäßigen Wellenverlauf.
Ja.
Lässt sich das überhaupt verhindern?
Nein. Jedenfalls nicht, wenn der gewählte Übergang für beliebige Signale gelten soll.

Jens
 
.Jens schrieb:
Wenn es rein um die Verhinderung eines "Knack" geht, dann tut es auch ein ganz schneller Fade (der dann auch linear sein darf) von vielleicht 10ms.
Das hätte ich auch vorgeschlagen. Warum eigentlich so kompliziert? Sinusfunktionen, FFT, whatever... das ist doch alles overkill, wenn du nur den Plopp verhindern willst. Für einen linearen Fade auf 0 und von dort wieder auf reichen schon je 10 oder 20 Samples, das ist komplett unhörbar. Was genau ist eigentlich das Problem mit deiner momentanen Lösung?

Eine andere, auch recht leicht zu realisierende Möglichkeit wäre noch ein echter Crossfade zwischen dem Ende des Loops und dem Anfang; dazu brauchst du natürlich einen kurzen überlappenden Teil am Ende oder am Anfang (oder beides).
 
clemens schrieb:
Das hätte ich auch vorgeschlagen. Warum eigentlich so kompliziert? Sinusfunktionen, FFT, whatever... das ist doch alles overkill, wenn du nur den Plopp verhindern willst. Für einen linearen Fade auf 0 und von dort wieder auf reichen schon je 10 oder 20 Samples, das ist komplett unhörbar. Was genau ist eigentlich das Problem mit deiner momentanen Lösung?
Die aktuelle Lösung ist gut, aber nicht optimal. Und 10 bis 20 Samples reichen nicht. Je nach Rate triffts "einige Hundert" eher. In der Testversion haben sich 800 Samples bei einer Rate von 44100 pro Sekunde recht gut gemacht. Außerdem würde ich gern wissen, wie die "Lehrbuchlösung" aussieht.

clemens schrieb:
Eine andere, auch recht leicht zu realisierende Möglichkeit wäre noch ein echter Crossfade zwischen dem Ende des Loops und dem Anfang; dazu brauchst du natürlich einen kurzen überlappenden Teil am Ende oder am Anfang (oder beides).
Überlappen geht nicht, da der Rhythmus sonst verloren geht. Als Spieler schaltet man ja genau im Rhythmus an und aus, da kann man nicht einfach ein Stück rausschneiden, selbst wenn es nur einige ms sind.

Den Mittelpunkttreff-Vorschlag vom Jens muss ich erst noch ausprobieren ...
 
Jay schrieb:
Überlappen geht nicht, da der Rhythmus sonst verloren geht. Als Spieler schaltet man ja genau im Rhythmus an und aus, da kann man nicht einfach ein Stück rausschneiden, selbst wenn es nur einige ms sind.
Doch, wenn du einfach nach dem Stopp noch ein paar Millisekunden länger aufnimmst.
 
clemens schrieb:
Doch, wenn du einfach nach dem Stopp noch ein paar Millisekunden länger aufnimmst.
Stimmt. Da hat mal wieder einer nicht mtgedacht. ;)
 

Unser weiteres Online-Angebot:
Bassic.de · Deejayforum.de · Sequencer.de · Clavio.de · Guitarworld.de · Recording.de

Musiker-Board Logo
Zurück
Oben