Wie schneide ich mehrere Teile einer Audiodatei mit Crossfades zusammen?

538
Sarge Borsch

Ich möchte mehrere Abschnitte einer Audiodatei zusammenhalten, jedoch ohne Unterbrechungen ("Klicks") an den Verbindungspunkten. Es gibt einen SoX-Befehl, der dies ausführt ( https://superuser.com/a/677351 ), aber es wird kein Crossfade ausgeführt, sodass Diskontinuitäten auftreten. Gibt es eine Möglichkeit, dies mithilfe eines Befehlszeilendienstprogramms oder einer Bibliothek zu erreichen? (Neben dem Schreiben meines eigenen Codes würde ich das sicherlich tun, wenn ich muss)

1

1 Antwort auf die Frage

1
Sarge Borsch

Es stellt sich heraus, dass dies mit SoX durchaus möglich ist, sogar mit nur einem einzigen SoX-Aufruf, Verwendung trimund spliceEffekten. Die numerischen Argumente sind jedoch nicht einfach zu schreiben. Alle Zuschneidebereiche außer dem letzten müssen am Ende zusätzliche Zeit einschließen, die zum Überblenden verwendet wird, und Argumente für das Verbinden müssen auch die richtige Länge des ersten Bereichs angeben, einschließlich dieser zusätzlichen Zeit, 1. + 2. nach dem ersten Spleißen, 1. + 2. + 3. usw.

Ich habe ein Skript geschrieben, das dies tut (in Scala-Sprache), und ich werde es früher oder später veröffentlichen.

Es gibt einen Nachteil in Sox, der trimEffekt scheint mit dem Fließkomma-Format nicht zu funktionieren. Am Ende werden Audiodaten in (höchstens) 24-Bit-Ganzzahlformat konvertiert. Dies kann je nach Anwendungsfall akzeptabel sein oder nicht.

Ich weiß, dass es drei Jahre später ist, hätte aber gerne ein Sox-Beispiel gesehen (ich kenne Scala nicht), auch wenn das Timing nicht genau angezeigt wird. kr37 vor 5 Jahren 0
@ kr37 Ich habe es lange nicht benutzt, aber vielleicht finde ich es und aktualisiere die Antwort mit mehr Details, wenn ich etwas Freizeit habe. Fühlen Sie sich frei, mich am Wochenende erneut anzurufen, wenn ich das noch nicht mache. Sarge Borsch vor 5 Jahren 0
Danke, in meinem Fall ist das Timing nicht besonders. Es scheint, dass ein einfacher `sox test.wav out.wav-Abgleich 50:00 = 51: 00 52:00 = 53: 00 54:00 = 55: 00 Splice -q` gut funktioniert. kr37 vor 5 Jahren 0