2016-05-25 3 views
0

Ich habe SoX verwendet, um weißes Rauschen zu erzeugen. Ich bin nach einem Weg, um die Lautstärke über die gesamte Strecke in einer Art und Weise modulieren, die ein ähnliches Muster wie dies schaffen wird:Hüllkurvenmuster in SoX (Sound eXchange) oder ffmpeg

White noise envelope effect

ich mit verblassen experimentiert haben, aber das blendet sich bis zu 100% Volumen und blendet auf 0% Volumen aus, was in diesem Fall nur ein Schmerz ist.

Der Tremolo-Effekt ist nicht ganz das, was ich bin nach entweder, wie die Frequenz des Musters wird die Zeit ändern über. Die einzige andere Alternative besteht darin, die Datei für weißes Rauschen in separate Dateien aufzuteilen, Fade anzuwenden und dann auf jedes Ende zu trimmen, damit es nicht vollständig verblasst, aber dies scheint eine Menge unnötiger Verarbeitung zu sein.

Ich habe Using SoX to change the volume level of a range of time in an audio file dieses Beispiel Check-out, aber ich glaube nicht, es ist ganz das, was ich bin nach.

Ich bin mit der Befehlszeile in Ubuntu mit SOX, aber ich bin offen für Vorschläge mit ffmpeg oder einer anderen Linux-basierten Befehlszeilen Lösung.

Antwort

1

Mit ffmpeg, die Lautstärke Filter

ffmpeg -i input.wav -af \ 
"volume='if(lt(mod(t\,5)/5\,0.5), 0.2+0.8*mod(2*t\,5)/5\, 1.0-0.8*mod(t-(5/2)\,5)/(5/2))':eval=frame" \ 
    output.wav 

Der Ausdruck in den Filter oben verwenden könnte, erhöht sich das Volumen von 0,2 bis 1,0 über t = 0 bis t = 2,5 Sekunden, dann nach und nach wieder auf 0,2 zu t = 5 Sekunden. Die Dauer des Umschlags beträgt hier 5 Sekunden.

+0

Einfache und elegante Antwort. Das hat perfekt funktioniert. Ich frage mich jedoch, ob ich, wenn ich eine Reihe von Hüllkurven unterschiedlicher Länge in der Audiospur verwenden möchte, wie würde ich das tun? Danke vielmals! :) – pJay

+0

Sie würden dann mehrere Volume-Filter mit jeweils einem Ausdruck verketten, so dass ihre Anwendungen nicht überlappen, dh wenn ein Filter die Hüllkurve zwischen 30s und 50s erstellt, dann ändert kein anderer Filter das Volumen in diesem Bereich (außer Sie wollen) . Sie verketten sich wie folgt: '-af" volume = ..., volume = ..., volume = ... "' – Mulvya

+0

Brilliant. Das hat mich in die richtige Richtung gelenkt, obwohl ich die Daisy-Chain nicht so funktionieren konnte, wie Sie es vorgeschlagen haben, aber ich habe es geschafft, if-else-Anweisungen in if-else-Anweisungen einzubetten, also "volume = 'if (x, y, wenn (x, y, wenn (x, y, z))) ' – pJay