Einführungs-Tutorial: Audiobearbeitung mit der Freeware SoX

  • Ersteller Ersteller Gast315604
  • Erstellt am Erstellt am
G

Gast315604

Guest
Da es vielleicht für andere Musikerinnen und Musiker interessant sein könnte, möchte ich hier den Einstieg in die Nutzung des kostenlosen Tools SoX beschreiben. SoX soll für Linux, MacOS und Windows verfügbar sein. Dieses Tutorial zeigt die Nutzung unter Windows. SoX steht unter der GNU General Public License, was laut Wikipedia bedeutet:
... Unter GPL lizenzierte Software darf für alle Zwecke ausgeführt werden (auch kommerzielle Zwecke ...

Hintergrund

Auf SoX bin ich gestoßen, als ich nach der "besten SRC" (Sample Rate Conversion) gesucht hatte. In einer Diskussion wurde SoX lobend erwähnt und auf einen Vergleichstest verwiesen. Mir schien das vielversprechend. Ich habe deswegen die SRC von SoX gegen die SRC meines kommerziellen Audiosequencers getestet. Für meine damaligen Einsatzzwecke (Downsampling von Stereomastern und Upsampling von Einzeltracks) schien mir die SRC von SoX noch etwas besser aufzulösen bzw. weniger zu verschleiern.

Da SoX noch viel mehr kann als "nur" SRC, arbeitete ich mich etwas umfassender in die Nutzung von SoX ein und war oft positiv überrascht. Nach meiner Einschätzung ist ein Vorteil, dass SoX direkt auf der Ebene der Audiodaten arbeitet. Es scheint keine überflüssigen digitalen Signalwege zu geben, etwa über Clip/-parameter, Track/-parameter, Kanal/-parameter, Master/-parameter, Inserts/Sends/Returns oder Ähnliches.

Der Nachteil, dass SoX ohne grafische Oberfläche durch Textbefehle in der Kommandozeile gesteuert wird, kann gleichzeitig ein Vorteil sein: es ermöglicht skriptgesteuerte Verarbeitung von Audiodateien.

Eine Freeware-Alternative mit grafischer Oberfläche könnte wohl "Audacity" sein. Ich kann aber weder zu dem Programm noch zu dessen Audioqualität etwas sagen, da ich es nicht nutze.

(Relativ) Wichtig:
Es folgen jetzt ersteinmal nur für den ersten Einstieg notwendige, aber leider umfangreiche Beschreibungen. Das lässt das Ganze komplizierter erscheinen, als es ist. Wenn das Ganze läuft, muss man nur noch einzelne Kommandos schreiben.

Wer ersteinmal ein paar Hörbeispiele möchte, bevor sie/er sich die Grundlagen anschaut, bitte ab Post #5 einsteigen.


Und jetzt in medias res ...
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 3 Benutzer

  • Ersteller
  • #2
"Installation"

Vorweg: Die Nutzung von SoX geschieht auf eigenes Risiko. Ich habe bisher keine Probleme erlebt. Da SoX eine sogenannte "portable app" ist, braucht es keine wirkliche Installation auf einem bestimmten System. Um zu demonstrieren, dass man auf Nummer sicher gehen kann, wird dieses Tutorial zeigen, wie man SoX von einem USB-Stick aus nutzen und auf einem billigen, alten Webbook nutzen kann. Und ja, das heißt, dass keine hohen Ansprüche an die Rechner-Hardware gestellt werden:

01 System.webp


Download

Zum Herunterladen (Sourceforge Projektseite) auf den "Download" Button klicken und kurz warten. Im Download-Ordner findet sich dann der "Installer". Ich vermute, dass lediglich die Dateien in das Zielverzeichnis geschrieben werden. Zumindest zeigt Windows keine installierte SoX-Anwendung an. Außerdem funktioniert die Nutzung von SoX von einem USB-Stick auch auf anderen Rechnern, auf denen der heruntergeladene "Installer" nicht ausgeführt wurde.

Nach Aufruf des "Installers":

02a Setup.webp

(wegen Nutzung als "portable app" deaktiviere ich die Einträge in das Startmenü und auf den Desktop)

"Browse..." Button zur Auswahl des USB-Sticks als Zielverzeichnis:

02b Setup.webp

(der Unterordner "sox-<version-nr>" wird automatisch hinzugefügt)

Windows zeigt keine installierte "SoX"-Anwendung an:

02c Setup.webp


Damit ist die "Installation" abgeschlossen. Wer mag, kann sich die Readme-Datei ansehen oder sich durch einen verfrühten Blick in das Manual "sox.pdf" kräftig demotivieren ...:weep:

02d Setup.webp
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 2 Benutzer
  • Ersteller
  • #3
Aufruf der Command Shell

Um eine Audiobearbeitung mit SoX starten zu können, muss zunächst die Command-Shell aufgerufen werden. Bitte nicht beirren lassen, das ist nix Wildes.

Man kann sich das (etwas vereinfacht) so vorstellen, dass die grafische Benutzeroberfläche von Windows z.B. nach dem Anklicken eines Menüeintrages im Hintergrund ein auszuführendes Kommando erzeugt. In der grafischen Benutzeroberfläche sieht man das konkrete Kommando nicht. Im Gegensatz dazu wird in der Command-Shell das Kommando geschrieben (statt mit der Maus zu klicken), aber es gibt keine grafische Anzeige.

Zum Aufruf der Command-Shell gibt es vor Allem zwei Möglichkeiten:

A) Die Tastenkombination {Windows-Taste}+R (für "Run") drücken und dann "cmd" eingeben:

03a WinR.webp


B) In der Suchleiste "cmd" eingeben:

03b SearchCmd.webp

(Anmerkung für Fortgeschrittene: Das muss nicht als Administrator ausgeführt werden.)

In beiden Fällen öffnet sich nach Bestätigung ("OK"-Button bzw. Aufrufen von "Eingabeaufforderung") ein Fenster für eine Command-Shell.

03c-cmdshell-webp.1037329
 

Anhänge

  • 03c CmdShell.webp
    03c CmdShell.webp
    7,6 KB · Aufrufe: 151
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
  • Interessant
Reaktionen: 3 Benutzer

  • Ersteller
  • #4
Aufbau von SoX-Kommandos

In den einfacheren Fällen - so in diesem Tutorial - liest SoX die Daten aus einem Audio-Input, macht dann irgendetwas mit den Daten und schreibt das Ergebnis in einen Audio-Output:

"...\sox.exe" "...\quelle.wav" "...\ziel.wav"

Dabei unterstützt SoX eine Vielzahl von Audioformaten sowohl für den Input, als auch für den Output. Eine Besonderheit ist, dass auch Audiogeräte als Input oder/und als Output gelten können. Beginnen wir also ersteinmal mit dem Abspielen einer Audiodatei.

Zum besseren Verständnis aber vorher noch ein kurzer Abstecher zu Audiogeräten unter Windows: Unten rechts in der Symbolleiste (oder in den ausgeblendeten Symbolen) sollte ein Lautsprecher-Icon zu sehen sein. Nach einem Rechts-Klick auf das Lautsprecher-Icon öffnet sich ein Menü:

04a WinSounds.webp


Nach Auswahl des Menüpunktes "Sounds" öffnet sich der Dialog für die Audiogeräte:

04b WinSoundsWiedergabe.webp


Unter dem Reiter "Wiedergabe" werden die auf dem Computer verfügbaren Audiogeräte für die Wiedergabe gelistet. In diesem Beispiel sind diese als "Lautsprecher" bezeichnet. Über das Wiedergabe-Gerät mit dem grünen Häkchen gibt Windows default-mäßig Audio aus. Das alles nur zur Info. Das muss nicht jedesmal angesehen werden.

Also los:

Wie oben dargestellt beginnt jedes Kommando ersteinmal mit dem Aufruf der SoX-Anwendung. Das geht schon mal ganz einfach, indem das Symbol der Anwendung "sox.exe" per Drag'n'Drop vom USB-Stick auf das Fenster der Command-Shell gezogen wird:

04c SoX.webp


Und schon steht da: "<Pfad>\sox.exe" (je nach Pfad mit oder ohne Anführungszeichen)

Bevor der Audio-Input angegeben werden kann, muss noch manuell ein Leerzeichen eingegeben werden, um den Aufruf der Anwendung von dem ersten Parameter (hier dem Audio-Input) zu trennen.

Für dieses Tutorial dient als Audio-Input eine kurze Datei (original als 44k1/24bit *.wav, hier leider nur als 320kbps *.mp3):



Nachdem das zusätzliche Leerzeichen eingegeben wurde, geht das Anfügen der Audiodatei genauso einfach, indem auch das Symbol der Audiodatei (hier: "agit_example.wav") per Drag'n'Drop vom USB-Stick auf das Fenster der Command-Shell gezogen wird:

04d AudioQuelle.webp


Und schon steht da nach dem "<Pfad>\sox.exe" jetzt zusätzlich "<Pfad>\agit_example.wav" (je nach Pfad mit oder ohne Anführungszeichen)

Und wie soll es jetzt auch anders sein: Bevor der Audio-Output angegeben werden kann, muss erneut manuell ein Leerzeichen eingegeben werden, um den zweiten Parameter (hier der Audio-Output) von dem ersten Parameter (hier dem Audio-Input) zu trennen.

Jetzt wird es aber doch kurz nochmal ein bischen tricky. Es muss nun manuell eingegeben werden (für dieses Beispiel):

-t waveaudio "Lautsprecher"

SoX unterstützt viele verschiedene Audio-"Formate", kann diese aber in manchen Fällen nicht automatisch erkennen. Daher kann es notwendig sein, zusätzlich zu einem Audio-Output (oder einem Audio-Input) auch dessen Format mitzuteilen. Das ist in diesem Beispiel der Fall, da der Audio-Output hier keine Datei werden soll, sondern ein Audio-Wiedergabegerät ist.

Das "-t" gehört also zu den sogenannten "format-options" und ist in dem "sox.pdf" Manual im Abschnitt "Input & Output File Format Options" beschrieben. Die hier möglichen Angaben stehen in einem anderen Dokument, nämlich dem "soxformat.pdf". Jedenfalls gibt es dort neben vielen anderen auch den Eintrag "waveaudio".

Also: -t waveaudio "Lautsprecher" heißt quasi "Die Bezeichnung 'Lautsprecher' soll einen Audio-Input oder Audio-Output definieren, der den Typ 'MS Windows native audio device driver' hat." Und da diese Angabe *vor* dem Audio-Output steht, bezieht sie sich auf den Audio-Output.

Der Text "Lautsprecher" entspricht dem Reiter "Wiedergabe" in dem oben geschilderten "Sounds" Dialogfenster. Falls da bei einem anderen Rechner andere Einträge stehen, müsste der Text entsprechend angepasst werden.

---
Zusammenfassung

Das Kommando "<Pfad>\sox.exe" "<Pfad>\<Audiodatei>.wav" -t waveaudio "Lautsprecher" gibt die "<Audiodatei>.wav" über das Default-Wiedergabegerät aus:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die wiederzugebende Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und dann das Wiedergabegerät definieren, hier: -t waveaudio "Lautsprecher".

So gesehen ganz simpel, oder? <Enter>-Taste drücken und los geht's:

04e playback.webp


Die Wiedergabe kann vorzeitig beendet werden durch Abbrechen des Prozesses mittels der Tastenkombination <strg>+c (Das Fenster der Command-Shell bleibt geöffnet) oder durch Schließen des Fensters der Command-Shell.

Geschafft:

Damit sind die nur für den ersten Einstieg notwendigen, aber leider umfangreichen Beschreibungen erledigt. Jetzt kommen endlich Praxisbeispiele und die werden auch noch viel einfacher. Yiiiiieehhhpiiiieeehh ... :juhuu:
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 4 Benutzer
  • Ersteller
  • #5
Transponierung / Veränderung der Tonhöhe

Es gibt verschiedene Verfahren zur Veränderung der Tonhöhe. Hier werden zwei vorgestellt.

Verfahren No. 1: Langsamer oder schneller abspielen

Diese Tonhöhenänderung entspricht den Ergebnissen eines zu langsam oder zu schnell laufenden/rotierenden Tonbandes/Plattenspielers. Das Originalsignal bleibt mehr oder weniger erhalten, aber zusammen mit der Tonhöhenänderung verändert sich auch das Tempo.

Dazu ein weiterer, aber kurzer Exkurs in den Aufbau der SoX Kommandos: Zusätzlich zu Audio-Inputs, Audio-Outputs und ggf. deren "format-options" kennt SoX noch sogenannte "effects", also Effekte. Wenn Effekte angewendet werden sollen, dann müssen diese *nach* dem Audio-Output angegeben werden:

"...\sox.exe" [optional: format-options] "...\quelle.wav" [optional: format-options] "...\ziel.wav" [optional: effect]

Der Effekt für langsameres/schnelleres "Abspielen" heißt "speed" (siehe ggf. das "sox.pdf" Manual). Tonhöhenänderungen werden oft in 100-tel eines Halbtons, sogenannten "cents" angegeben. Eine solche Angabe akzeptiert auch der "speed" Effekt:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die wiederzugebende Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und dann das Wiedergabegerät definieren, hier: -t waveaudio "Lautsprecher".
4) Ein Leerzeichen eingeben und dann den anzuwendenden Effekt definieren, hier: speed -100c (einen Halbton tiefer / auf das abschließende "c" bei der Parametrierung achten).

05a speed-100c.webp


Und nach dem Vorhören kann das Ergebnis auch in eine Datei geschrieben werden: Dafür wird der in Schritt 3) eingetragene Text ersetzt durch "<Pfad>/<Ziel-Dateiname>" (manuell eingegebene "<Pfad>\<Dateiname>" sicherheitshalber immer in Anführungszeichen schreiben):

05b speed-100c.webp


Ein paar Audiobeispiele (Original siehe Post #4):

-4 Halbtöne

- 1 Halbton

+ 1 Halbton

+4 Halbtöne



Verfahren No. 2: Pitch-Shift

Als Pitch-Shifting wird die Veränderung der Tonhöhe unter Beibehaltung des Tempos bezeichnet. Dieses Verfahren generiert ein mehr oder weniger künstliches Signal auf Basis des Originalsignales. Je nach Art und Umfang des Pitch-Shiftings kann das Ergebnis ungewöhnliche Klangerkmale aufweisen, die u.a. als "Artefakte" bezeichnet werden.

Der Effekt für Pitch-Shift heißt "pitch" (siehe ggf. das "sox.pdf" Manual):

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die wiederzugebende Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und dann das Wiedergabegerät definieren, hier: -t waveaudio "Lautsprecher".
4) Ein Leerzeichen eingeben und dann den anzuwendenden Effekt definieren, hier: pitch -100 (einen Halbton tiefer / hier kein abschließendes "c" bei der Parametrierung).

05c pitch-100.webp


Ein paar Audiobeispiele (Original siehe Post #4):

-4 Halbtöne

- 1 Halbton

+ 1 Halbton

+4 Halbtöne


---
Mein persönliches Fazit:

Wenn es zum Beispiel beim Üben oder in dichten Arrangements nicht auf möglichst hohe Klangtreue ankommt, können beide Varianten brauchbar sein. Der "speed" Effekt bietet einen "echter" wirkenden Klang, aber ggf. zu drastische Tempoveränderungen. Der "pitch" Effekt bietet konstantes Tempo, aber ggf. zu drastische klangliche Veränderungen.

Aus der Erinnerung heraus meine ich, soetwas von z.B. Ableton*'s Warp Algorithmus und dessen verschiedenen Parametrierungen schon besser gehört zu haben. Sicher bin ich mir da aber nicht, es ist schon etliche Jahre her. Zumindest ist SoX deutlich günstiger.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 2 Benutzer
  • Ersteller
  • #6
SRC (sample rate conversion)

Nach den anerkennenden Worten für SoX im Post #1 ziehe ich dieses Thema hier vor, damit auch die Fachleute (hoffentlich) ein bischen was davon haben.

Sample Rate Conversion bezeichnet einen Vorgang, bei dem ein digitales Audiosignal mit gegebener Samplingfrequenz als Grundlage genommen wird, um ein digitales Audiosignal zu berechnen, das möglichst identisch klingt, aber eine andere Samplingfrequenz aufweist.

SRC wird notwendig, wenn z.B ein Arrangement in einer Audio-Workstation mit höheren Samplingfrequenzen "gefahren" wird, aber abschließend ein Stereomaster in CD-Qualität, also bei 44k1 / 16bit benötigt wird. In die umgekehrte Richtung ermöglicht SRC digitale Audiosignale mit zu niedriger Samplingfrequenz so umzurechnen, dass diese im Kontext höherer Samplingfrequenzen verwendet werden können, z.B. im Homeaudio-Bereich oder in Audio-Workstations.

Das (zumindest aus meiner Sicht) Hauptkriterium für SRC ist die Frage, wie nahe das Ergebnis rein klanglich an das Original herankommt.

Leider können hier im Musiker-Board "nur" mp3 Dateien hochgeladen werden. Die tatsächliche Klangqualität sowohl eines Originals als auch eines SRC Ergebnisses sind nach der mp3 Kompression also nicht mehr vorhanden und damit nicht wirklich vergleichbar. Ich werde hier dennoch Hörbeispiele posten, um zumindest einen grundsätzlichen Eindruck zu vermitteln. Für die mp3 Kompression verwende ich den Lame Encoder mit einer konstanten 320 kbit/s bitrate. Ansonsten empfehle ich die beispielhaften SoX Kommandos als Blaupausen für eigene Tests mit eigenem Audiomaterial am eigenen Rechner und der eigenen, gewohnten Abhöre.

Upsampling (Erhöhung der Samplingrate)

SoX betrachtet die Änderung der Samplingrate als Effekt. Der Name des SoX "Effektes" ist "rate" (siehe ggf. das "sox.pdf" Manual). Ohne zusehr in die Details zu gehen sollte erwähnt werden, dass üblicherweise Signalanteile zu hoher Frequenzen herausgefiltert werden (Stichworte: Nyquist-Theorem, Aliasing). Der "rate" Effekt ermöglicht die Parametrierung des entsprechenden Tiefpassfilters hinsichtlich des Phasenverhaltens (siehe Beispiel, "-M" für minimum phase response) und der oberen Grenzfrequenz (siehe Beispiel, "-b 94" für 94% bandwidth). Außerdem kann die Qualität gewählt werden, die ich immer mit "-v" (für very high) angebe. Diese Parametrierung kann sich auf klangliche Details im Ergebnis der SRC auswirken.

Zum Beispiel:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die originale Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und "<Pfad>/<Ziel-Dateiname>" (manuell eingegebene "<Pfad>\<Dateiname>" sicherheitshalber immer in Anführungszeichen schreiben).
4) Ein Leerzeichen eingeben und dann den anzuwendenden Effekt definieren, hier: rate -v -M -b 94 19200

06a upsampled.webp


Klangbeispiele:

- von 44k1 (original)

- nach 192k (upsampled)



Downsampling (Verringerung der Samplingrate)

Zum Beispiel:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die originale Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und "<Pfad>/<Ziel-Dateiname>" (manuell eingegebene "<Pfad>\<Dateiname>" sicherheitshalber immer in Anführungszeichen schreiben).
4) Ein Leerzeichen eingeben und dann den anzuwendenden Effekt definieren, hier: rate -v -M -b 94 44100

06b downsampled.webp


Klangbeispiele:

- von 192k (upsampled)

- nach 44k1 (downsampled)

- vgl. Original (war 44k1)
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 3 Benutzer
Ein super Ein- und Überblick für ein mega-interessantes Tool! (y)

Bei Linux kann man SoX für Debian-basierten Distributionen direkt im Terminal mit sudo apt install sox installieren, die aktuelle Version (14.4.2) ist bereits in den Repos.
Es gibt in den Arch-Respo sogar noch eine neuere Version (14.8.1-1, aber weshalb die nicht auch bei Sourceforge steht… 🤔).

Man kann aber auch das tar.gz-Archiv runterladen, entpacken, darin gibt es einige README und *.txt-Dateien, eine PDF habe ich darin zwar nicht gefunden, aber es geht ja um den Inhalt.

Im Ubuntu-Wiki gibt es auch eine eigene Seite zu SoX, auf der die Befehlssyntax (für Linux) wir üblich gut erklärt wird.

Ich werde es auf jeden Fall bei Gelegenheit ausprobieren!
 
  • Gefällt mir
Reaktionen: 2 Benutzer
Im Ubuntu-Wiki gibt es auch eine eigene Seite zu SoX

Vielen Dank für diesen Software-Tip @Finn Anklam !

Es wäre sicher nicht allzu kompliziert, eine grafische Oberfläche dafür zu schreiben. Es gibt auch schon welche, ich habe kurz gesucht und diese gefunden - habe die Links und ihre Inhalte aber nicht geprüft
https://www.justmastering.com/tools-soxgui.php (nicht mehr maintained - und als xlsm bitte mit der entsprechenden Vorsicht rangehen)
vermutlich gibt es noch ein paar mehr.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: 1 Benutzer
  • #10
Teamwork ;)
 
  • Haha
  • Gefällt mir
Reaktionen: 2 Benutzer
  • Ersteller
  • #11
Informationen über eine Audiodatei und deren Inhalt

Manchmal habe ich eine Audiodatei und würde gerne Genaueres darüber wissen, wie zum Beispiel den maximalen Peak-Pegel je Kanal oder das Audioformat. Es ist nicht allgegenwärtig, solche Informationen ermitteln zu können. SoX kann da helfen. Dazu ein paar Infos zum Verständnis:

Jede digitale Datei (z.B. Texte, Bilder, Audio, Video, Programme) ist eine Menge von Nullen und Einsen. Der Nutzen dieser Datenmenge ergibt sich erst aus der Interpretation dieser Datenmenge.

Wer sich mit auch nur einem einizgen Audio-Dateiformat (z.B. *.wav, *.aiff, *.mp3) befasst hat, wird vermutlich erkannt haben, dass dasselbe Audio-Dateiformat für verschiedene Samplingformate genutzt werden kann. Von der Stanford-Uni gab es eine grafisch gelungene Darstellung des Aufbaus von *.wav. Mittlerweile finde ich diese nur noch als Kopie. Das soll an dieser Stelle nur der Erklärung der Hintergründe dienen. Für die Nutzung von SoX ist das nicht notwendig:

07a Wave.webp


Eine *.wav Datei beinhaltet immer mindestens einen Bereich zur Beschreibung des Formates der Samplingdaten und einen Bereich mit den Samplingdaten selbst. Die Samplingdaten können - zumindest theoretisch - sehr unterschiedlich aufgebaut sein. Variieren können:
  • Datenmenge je Sample (z.B. 32bit, 24bit, 16bit bzw. vier, drei oder zwei Bytes oder un-/komprimiert - siehe Feld "AudioFormat")
  • Kanalanzahl (z.B. mono, stereo, mehrkanalig - siehe Feld "NumChannels")
  • Anordnung der Samples (z.B. bei Stereo abwechselnd a) ein linkes Sample und ein rechtes Sample oder b) ein Block von linken Samples und ein Block von rechten Samples oder c) alle Samples des linken Kanals und alle Samples des rechten Kanals)
  • Repräsentation je Sample (z.B. Fließkomma oder Ganzzahl, un-/signed, Reihenfolge der Bits je Byte, Reihenfolge der Bytes je Sample)
Und für die korrekte Wiedergabe ist dann noch die Samplingrate wichtig (siehe Feld "SampleRate").

SoX kann einige dieser Informationen ermitteln. Ich nehme an relativ wenig abhängig vom Dateiformat. Ich habe das aber bisher nur für *.wav ausprobiert.

Dazu ist nochmals ein kurzer Exkurs in den Aufbau von SoX Kommandos notwendig: Zusätzlich zu dem Bisherigen sind als "global" bezeichnete Optionen möglich. Mit den "global-options" kann die Arbeitsweise des Programmes selbst konfiguriert werden. Die Möglichkeiten sind so vielfältig, dass diese bei Interesse am besten im sox.pdf Manual im Abschnitt "Global Options" nachgeschlagen werden können. Die "global-options" werden immer direkt *nach* dem Programmaufruf angegeben, das heißt noch *vor* dem Audio-Input und ggf. dessen "format-options".

"...\sox.exe" [optional: global-options] [optional: format-options] "...\quelle.wav" [optional: format-options] "...\ziel.wav" [optional: effect]

An dieser Stelle werden zwei der "global-options" genutzt:
  1. "--info" führt dazu, dass SoX Informationen zum Audio-Input darstellt. Diese muss als *erste* "global-option" angegeben werden, falls sie überhaupt genutzt wird. Ein Audio-Output muss dann nicht angegeben werden.
  2. "-V <num>" bestimmt generell (also nicht nur für "--info"), wie ausführlich oder nicht die Ausgaben von SoX sind.
Zum Beispiel:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und "--info".
3) Ein Leerzeichen eingeben und "-V2".
4) Ein Leerzeichen eingeben und dann die originale Audiodatei auf die Command-Shell ziehen.

1783930801809.webp


Aha. Es ist eine Mono-Datei mit 24 Bit per Sample in Ganzzahldarstellung bei 192kHz Samplingrate. Und kann man da noch mehr erfahren? Zum Beispiel mit "-V4" (statt "-V2") erhält man zusätzlich:

1783931057432.webp


Okay, also ist es ein sogenanntes "EXTENSIBLE" Audiofomat (bei *.wav wohl alle Audioformate, die größer als 16 bit oder nicht Ganzzahldarstellung sind) und man hätte es sich auch selbst ausrechnen können:
  • 3 bytes per sample (24 bits/samp --> 3 block align) und daher ...
  • ... 3.115.537 samples * 3 bytes_per_sample * 1 Kanal = 9.346.611 bytes und ...
  • ... 192000 samples_per_sec * 3 bytes_per_sample * 1 Kanal = 576.000 byte/sec
---
Das waren jetzt eher technische Informationen. Aber was ist mit dem Audio-Inhalt einer Datei? Dazu bietet SoX einen Quasi-"Effekt" namens "stats" (siehe sox.pdf Manual).

Dafür ist nochmal ein kurzer Exkurs zu den SoX Kommandos notwendig: Da mit SoX alles Mögliche gemacht werden kann, muss der grundsätzliche Aufbau für SoX Kommandos sehr allgemeingültig gehalten sein. Es scheint einzuhaltende Reihenfolgen zu geben. Und so scheinen Effekte nur *nach* einem Audio-Output möglich zu sein. Andersherum: die Angabe eines Effektes erfordert es, dass ein Audio-Ouput angegeben wurde. Bei der bloßen Anzeige von Informationen gibt es aber keinen Audio-Output. Für solche Situationen wird als Dummy "--null" angeboten (siehe das sox.pdf Manual im Abschnitt "Special Filenames").

Zum Beispiel:

1) Die Anwendung "sox.exe" auf die Command-Shell ziehen.
2) Ein Leerzeichen eingeben und dann die originale Audiodatei auf die Command-Shell ziehen.
3) Ein Leerzeichen eingeben und "--null" (Dummy anstelle eines Audio-Output).
4) Ein Leerzeichen eingeben und dann den anzuwendenden Effekt definieren, hier: stats

1783932036004.webp
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 1 Benutzer
  • Ersteller
  • #12
Standard-Effekte

Um dem Titel dieses Threads zu entsprechen, schiebe ich an dieser Stelle ein paar Klangbeispiele für einige der wirklich zahlreichen Effekte von SoX ein.

Wie die SoX Kommandos aufgebaut sind und mit Drag'n'Drop zusammengestellt werden können, wurde weiter oben ausführlich gezeigt. Daher schreibe ich nun nur noch die kompletten Kommandos aus (ohne Screenshot). Falls es notwendig werden sollte erklärt das SoX.pdf Manual im Abschnitt "Common Notation and Parameters" welche Parameter wie zu schreiben sind.

Gain/Volume

So ähnlich wie bei einem Audio-Sequencer (Clip-Gain, Channel-Level, Master-Volume) gibt es auch in SoX mehrere Möglichkeiten, den Pegel eines Audiosignals zu verändern.

Ebenso wie bei einem professionellen Audio-Sequencer können die verschiedenen Möglichkeiten etwas unterschiedlich "gut" klingen. Ich hatte einmal drei Möglicheiten am Beispiel einer etwas komplexeren Signalkette getestet: den "gain" Effekt, den "vol" Effekt und die "-v" Option für den Audio-Input. Ich beschränke mich hier auf die damals meiner Meinung nach am "besten" klingende Lösung, den "gain" Effekt. Diese Bewertung ist aber ggf. mit anderen Signalketten nicht richtig. Im Zweifel selbst probieren.

Wie es bei SoX halt so ist, kann der "gain" Effekt viele optionale Parameter (ggf. im SoX.pdf Manual nachschlagen). Hier die grundsätzliche Funktion:

"...\sox.exe" "...\agit_example.wav" "...\agit_example_gainleiser.wav" gain -5.43 (ein Hörbeispiel wäre wohl überflüssig?)

EQ

Es gibt die Effekte: allpass (two-pole all-pass filter), band (band-pass filter), bandpass/bandreject (two-pole butterworth), bandreject (band-reject filter), bass/treble (two-pole shelving filter), equalizer (two-pole peaking eq filter), highpass/lowpass (single- or double pole high- or low-pass filter), loudness (loudness control).

Anmerkung: Jenseits meines beschränkten Horizontes gibt es noch biquad (biquad IIR filter), fir (FIR filter), hilbert (odd-tap Hilbert transform filter, bandpass characteristic) und sinc (sinc kaiser-windowed low-/high-/band-pass or band-reject filter).

Ein Beispiel für *das* Arbeitstier, den parametrischen EQ, ist vielleicht am sinnvollsten (hier zur "Entschärfung" des Klangs - f=4,5kHz, Q=25, -9dB):

E:\sox-14-4-2\sox.exe E:\SoX_MusikerBoard\agit_example.wav -t waveaudio "Lautsprecher" equalizer 4500 25q -9
- ohne EQ

- mit EQ


(Anmerkung: Dass da tatsächlich was passiert ist, erfordert ggf. den direkten Vergleich kurzer Audio-Abschnitte. Meiner Einschätzung nach spricht das für die Qualität. SoX hat das Signal nicht sooo offensichtlich "geschrottet", wie manch andere EQs das tun.)

Dynamics

Es gibt die Effekte: compand (compress or expand), contrast (vermutlich ähnlich einem One-Knob-Kompressor), mcompand (multi-band compress or expand). Über die Klangqualität kann ich nichts sagen, da die Parametrierung schon des einfachen "compand" Effektes nicht die peak-reduction liefert, die ich erwarten würde (ich verstehe es wohl irgendwie falsch).

Oft bevorzuge ich Limiting. Einen einfachen Limiter bietet aber auch die "-l" Option des "gain" Effektes. Der ist super einfach zu bedienen, klingt bei höherer Limitierung aber auch schnell "krachig".

Aus oben genannten Gründen folgt hier kein Klangbeispiel.

Reverb

Zum Beispiel ein Small Room (35% Wet, 100% HF-damping, 25% room-scale, 75% stereo-depth, 0msec pre-delay, -10dB wet-gain):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_smallroom.wav" reverb 35 100 25 75 0 -10


Zum Beispiel ein Large Room (60% Wet, 35% HF-damping, 100% room-scale, 100% stereo-depth, 0msec pre-delay, -10dB wet-gain):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_largeroom.wav" reverb 60 35 100 100 0 -10


Modulationseffekte

Es gibt die Effekte: chorus, flanger, phaser und tremolo.

Zum Beispiel ein einstufiger Chorus (100% In, 95% Out, 20msec delay, 0.4 decay, 0.6 speed, 5 depth, sinusförmig):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_chorus1stage.wav" chorus 1 0.95 20 0.4 0.6 5 -s


Zum Beispiel ein dreistufiger Chorus:

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_chorus3stages.wav" chorus 1 0.80 20 0.4 0.6 0.5 -s 25 0.3 0.5 0.5 -s 30 0.2 04 0.5 -t


Zum Beispiel ein Flanger (12msec base delay, 7msec swept delay, -95% regen, 100% width, 0.1 sweeps per second, sinusförmig, 50% swept delay phasenversatz, linear interpoliert):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_flanger.wav" flanger 12 7 -95 100 0.1 sine 50 linear



Zum Beispiel ein Phaser (100% In, 45% Out, 5msec delay, 0.7 decay, 0.25 sweeps per second, sinusförmig):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_phaser.wav" phaser 1 0.45 5 0.7 0.25 -s


Zum Beispiel ein Tremolo (2.5 sweeps per second, 55% depth):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_tremolo.wav" tremolo 2.5 55
(sorry, unpassendes Audiosignal)

Delay

Es gibt die Effekte: echo (parallele echoes) und echos (serielle echoes).

Zum Beispiel parallele Echos (100% In, 100% Out, 2000msec delay, 0.25 decay, 4000msec delay, 0.1 decay):

"...\sox.exe" "...\agit_example_upsampled.wav" "...\agit_example_upsampled_echo2times.wav" echo 1 1 2000 0.25 4000 0.1


Sättigung

Einen Sättigungseffekt gibt es auch. Dieser heißt zwar "overdrive", ist aber aus meiner Sicht kein Verzerrer. Auch zur Lautheitserhöhung ist er für meine Ohren noch weniger geeignet, als die "-l" Option des "gain" Effektes (siehe oben im "Dynamics" Abschnitt).

Ein Hörbeispiel für den "overdrive" Effekt ist vermutlich überflüssig.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 1 Benutzer
  • Ersteller
  • #13
Mehrkanal-Audio

Gelegentlich wollte ich aus einer Stereo-Datei zwei Mono-Dateien machen oder umgekehrt zwei Mono-Dateien in eine Stereo-Datei zusammenfassen. Ja, das kann jeder Audiosequencer, wenn die Spuren und der Mix entsprechend eingestellt werden. Dabei durchläuft das Signal aber den gesamten digitalen Signalweg vom Clip bis zum Stereomaster. Dabei sind Klangverluste zu erwarten.

Das Gleiche verlustfrei direkt auf der Ebene der digtalen Audiodaten zu machen, das kann dann schon nicht mehr jede Audio-Anwendung.

SoX ist für den Umgang mit Mehrkanal-Audio ausgelegt. Ich habe das mangels Notwendigkeit bisher nur für Stereo also Zweikanal-Audio getestet. Da es sich dabei um ein etwas fortgeschritteneres Thema handelt, wird hier einfach ein bischen mit SoX "herumgespielt", die Erklärungen knapp gehalten und auf das Manual "sox.pdf" verwiesen.


Mehrere Kanäle zusammenfassen

Wie in Post #11 erwähnt, kann die Arbeitsweise von SoX mittels "global-options" (Manual: "Global Options") gesteuert werden. Es gibt eine "global-option" namens "--combine" (Manual: "Input File Combining"), die zu diesem Zweck in ihrer sozusagen Betriebsart "merge" genutzt wird. Bisher noch nicht erwähnt wurde die Möglichkeit, in SoX Kommandos mehrere Audio-Inputs anzugeben.

"...\sox.exe" -V3 --no-dither --combine merge
-v 1.05 "...\agit_example_upsampled_flanger.wav"
-v 0.95 "...\agit_example_upsampled_phaser.wav"
--comment "" "...\agit_example_upsampled_stereoflangerphaser.wav"

global-options:
-V3: Anzeige von Informationen
--no-dither: kein automatisches Dithering (Manual: "Dithering")
--combine merge: Kanäle der Input-Files zusammenfassen

format-options:
-v <num>: Verstärkungsfaktor, nur für Audio-Inputs (Anm.: Faktor, nicht dB / Manual "Input File Options")
--comment "": Text für Metadaten Kommentarfeld, nur für den Audio-Output (Anm.: default "Processed by SoX" / Manual "Output File Format Options")




Einzelne Kanäle extrahieren

Es gibt den "remix" Effekt, der viele Parameter kennt, die im Manual sox.pdf studiert werden können. Für das Auslesen aus einer Stereodatei reichen die folgenden zwei SoX Kommandos:

"...\sox.exe" -V3 --no-dither "...\agit_example_upsampled_stereoflangerphaser.wav"
--comment "" "...\agit_example_upsampled_leftfromstereo.wav remix 1

"...\sox.exe" -V3 --no-dither "...\agit_example_upsampled_stereoflangerphaser.wav"
--comment "" "...\agit_example_upsampled_leftfromstereo.wav remix 2

Es muss also für jeden zu extrahierenden Kanal ein eigenes Kommando erfolgen. Welcher Kanal zu extrahieren ist, bestimmt der (hier) einzige Parameter des "remix" Effektes. Nach SoX Logik ist der L-Kanal der erste Kanal und der R-Kanal ist der zweite Kanal.


Audiosignale vergleichen

Um prüfen zu können, wie sauber SoX dabei arbeitet, müssen die originalen Audio-Daten mit den zusammengefassten bzw. extrahierten Audiodaten verglichen werden. Eine im Digitalen dafür anwendbare Methode ist das phasenverkehrte Summieren von zwei Audiosignalen. Sind beide Audiosignale identisch, muss das Ergebnis duchgängiger Nullpegel sein.

(Anmerkung: Im Digitalen ist das bloße Mathematik. Wenn B gleich A ist, dann B - A = A - A = 0.)

"...\sox.exe" -V3 --no-dither --combine mix
-v 1 "...\agit_example_upsampled.wav"
-v -1 "...\agit_example_upsampled.wav"
"...\agit_example_upsampled_zeroed.wav"

Hier wird der "--combine" Effekt mit seiner Betriebsart "mix" genutzt. Zum Test des Verfahrens wude hier zweimal dieselbe Datei verwendet, dabei jedoch einmal phassenverkehrt (negatives Vorzeichen bei "-v -1"). Da hier beide Dateien nur einen Kanal aufweisen, hat auch die Eregbnisdatei nur einen Kanal. Wie man hört, hört man, wenn man sich die Ergebnisdatei anhört, Nichts. Aber ist das exakt genug? Also (siehe obigen Post #11):

"...\sox.exe" "...\agit_example_upsampled_zeroed.wav" --null stats

07a Nulling.webp


Okay, wenn der "Min level" 0 und der "Max level" ebenfalls 0 und die "Bit-depth" auch 0 ist, dann wird das Audiosignal in dieser Datei wohl komplett 0 (Nullpegel, Stille) sein.

So, jetzt ist alles zusammen, um die Genauigkeit von SoX beim Kombinieren und Extrahieren von einzelnen Kanälen zu testen:
  1. Monodatei X einmal für den linken Kanal und einmal für den rechten Kanal unverändert (kein "-v"!) in Stereodatei Y zusammenfassen. (siehe oben: "--combine merge")
  2. Linken Kanal als Y_L und rechten Kanal as Y_R unverändert(!) aus der Stereodatei extrahieren. (siehe oben: "remix 1" bzw. "remix 2")
  3. Beide unverändert(!) vergleichen: Ist Y_L = X? Ist Y_R = X? (siehe oben: phasenverkehrtes "--combine mix" und dann "stats" Effekt)
(Anmerkung: unverändert bedeutet u.a. auch, dass in jedem Schritt "--no-dither" angegeben wird.)

:juhuu: Und Yeaaaiiihh ... in beiden Fällen erhalte ich die bedeutungsgleiche Anzeige wie im vorherigen Screenshot. Das heißt, die Audiodaten blieben identisch erhalten, trotz des Einpackens in eine Stereodatei und des Wiederauspackens in zwei Monodateien.

Wenn das nix is' ... für eine Freeware ...
 
Zuletzt bearbeitet von einem Moderator:
  • Interessant
  • Gefällt mir
Reaktionen: 2 Benutzer
  • Ersteller
  • #14
So, na dann, damit ist das Einführungs-Tutorial abgeschlossen.

Wer bis hierhin durchgehalten hat, ist selber Schuld ... weil jetzt geht's off-topic. Aber nur im Sinne von, dass jetzt eine Fortgeschrittenen-Thematik kommt. Wäre ja auch langweilig, wenn's nicht noch komplizierter geht. Auf, auf, von :gruebel: zu :stars:.

(Anmerkung: Das wird so zur Sache gehen, dass detaillierte Erklärungen für Alles keinen Spaß mehr machen würden. Bei Bedarf gerne nachfragen, zum Beispiel falls: eine Win-fähige Formulierung unter Linux nicht funzen sollte, die Audiowiedergabe ruckelt, oder oder oder ...)

Mixdown mit SoX


Die Frage stand vielleicht schon im Raum: Wenn man zwei Monodateien zu einer Stereodatei zusammenfassen kann, geht das auch für mehr als zwei Monodateien? Kann man also mit SoX einen Stereomixdown einer Mehrspuraufnahme machen, zum Beispiel für Proberaum- oder Live-Mitschnitte oder auch "seriöse" Mix-Projekte?

Ja, das geht. Und warum sollte man das machen, das wird doch bestimmt saukompliziert? Weil:
  1. Es klingt.
  2. Man kann bei SoX relativ sicher sein kann, dass nur das mit dem Material passiert, was man explizit angegeben hat.
  3. Falls nötig kommt SoX möglicherweise mit hohen Auflösungen klar, die (noch) nicht jeder Audiosequencer kann.

Das Audiomaterial

Auf der Suche nach "multitrack recording files download" bin ich über "homerecording1x1.de/kostenlose-multitracks/" zu "www.telefunken-elektroakustik.com/multitracks/" gekommen. Und wenn wir hier schon lieber den eigenen Kopf heiß laufen lassen, als uns mit KI zu quälen, dann doch gleich was ganz Echtes: "www.telefunken-elektroakustik.com/multitrack/leftover-salmon-rivers-risin/". Zum Thema Nutzung und Urheberrecht sagt Telefunken:

08a copyright.webp


Auch wenn das in einem Forum ein bischen doof ist, möchte ich (um selbst auf der sicheren Seite zu sein) darauf hinweisen, dass alle Klangbeispiele in diesem Beitrag #14 in oben dargestelltem Sinne urheberrechtlich geschützt sind. Sorry.

Einfacher Multitrack Mixdown

Weil alles in ein SoX Kommando muss, wird dieses sehr umfangreich werden. Pfadangaben werden da nerven und können vermieden werden, indem

A) dem Betriebssystem der Pfad zur sox.exe mitgeteilt wird, zum Beispiel:

set PATH=%PATH%;"E:\sox-14-4-2"

B) dem Pfad zu den Audiodateien ein Laufwerksbuchstabe zugewiesen wird, zum Beispiel:

subst z: "E:\SoX_MusikerBoard\LS_RiversRisin_Full Session"

Um ersteinmal einfach anzufangen sollen nun die Drums und der Bass gemischt werden:

Mit der "--combine mix" option (siehe Post #13) wird aus Monodateien eine gemischte Monodatei. Wir wollen aber Stereo. Geht also nicht.

Mit der "--combine merge" option (siehe Post #13) entsteht eine Mehrkanal Audiodatei. Bei zwei Drum-Overheads und einer Bass-DI Spur würde eine 3-Kanal Audiodatei entstehen. Wir wollen aber Stereo. Geht also auch nicht? Doch, geht, weil wir den "remix" Efffekt haben (siehe Post #13):

sox.exe -V3 --combine merge "z:\DRUMS- OH L-M60-API.wav" "z:\DRUMS- OH R-M60-API.wav" "z:\BASS-DI-API.wav" -t waveaudio "Lautsprecher" remix 1,3 2,3

Yeah, das rockt ja schon mal gut los ... :m_drummer::m_git1: ... und zwar weil der "remix" Effekt zwei Parameter bekommt und daher weiß, dass er eine Stereodatei bauen soll. Jeder Parameter ist eine Liste für den jeweiligen Ausgabekanal. In der Liste je Ausgabekanal werden die Audio-Input Kanäle angegeben, die in den jeweiligen Ausgabekanal übernommen werden sollen.

(Anmerkung: Die für die Klangbeispiele erzeugten Audiodateien sollen nach dem ersten Refrain beendet werden, nach 1 Minute, und dabei langsam ausgefadet werden, für 10 Sekunden. Dafür habe ich noch vor dem "remix" zwei andere Effekte eingesetzt: "... trim 0 60 fade t 0 60 10 ..." - siehe ggf. das sox.pdf Manual.)

Und jetzt den Song komplettieren mit Akkustikgitarre, Banjo und den Vocals mit der Mandoline (jetzt also insgesamt 6 Kanäle):

sox.exe -V3 --combine merge "z:\DRUMS- OH L-M60-API.wav" "z:\DRUMS- OH R-M60-API.wav" "z:\BASS-DI-API.wav" "z:\AC GUITAR-M60-GRACE.wav" "z:\BANJO-M260-GRACE.wav" "z:\VOX MANDOLIN-M80-GRACE.wav" -t waveaudio "Lautsprecher" remix 1,3,4,6 2,3,5,6


Na endlich. Das war doch vorher schon klar: So einfach reicht das noch nicht aus. Aus meiner Sicht: a) das Banjo ist zu laut im Vergleich zur Akkustikgitarre, b) auf der Akkustikgitarre ist auch die BackVoc und wenn die ganz links ist verbindet sie sich nicht zusammen mit der LeadVoc, c) die Drums gehen unter und die Kick kommt merkwürdig von rechts.

Es wird also Pegel und Panorama brauchen. Und EQ wird auch noch notwendig werden. Und vielleicht noch mehr. Aber ... warte mal, EQ ist doch ein SoX Effekt. Und Effekte kommen immer nach dem Audio-Output, gehen also nicht je Audio-Input.

Soweit also der Fun-Part ... :yawn:... jetzt wird's ernst:patpat:.

Vorüberlegungen

Ein Mischpultkanal hat u.a. häufig einen EQ, einen Panoramaregler und einen Fader für den Pegel im Mix. EQ und Pegel können mit einem SoX Kommando nachgebildet werden. Aber Panorama? Und außerdem werden mehrere solcher Kanäle für einen MixDown benötigt.

A) Panorama

Ein Mono-Audiosignal wird im Panorama angeordnet, indem es auf beide Stereokanäle geroutet wird, aber je Stereokanal unterschiedliche Pegel haben kann. Siehe obiges Beispiel: Dort wurden Bass und LeadVocMitMandoline in beide Stereokanäle ge"remix"t und erschienen damit in der Stereomitte. Und die anderen Spuren wurden nur auf einen der Stereokanäle ge"remix"t, wobei man sich das Routing auf den jeweils anderen Stereokanal mit Nullpegel (mute) denken kann weswegen es dann weggelassen werden konnte.

Jetzt ist das mit den durch einen Panoramaregler verursachten Gain-Verhältnissen so eine Sache. Ich habe das mal analysiert und mir eine Tabelle daraus abgeleitet. Aber um es hier nicht zu sehr zu verkomplizieren, reicht es ersteinmal auch aus, das beliebig so anzugeben, dass die gewünschte Stereoposition entsteht.

B) mehrere Kanäle

Mehrere solcher Kanäle bedeuten mehrere SoX Kommandos. Aber dann müsste jede Spur einzeln gerendert und anschließend zusammengemixt werden. Das wäre zu kompliziert und fehleranfällig in der Anwendung. Es müsste eine Möglichkeit geben, den Audio-Output von SoX Kommandos als Audio-Inputs in einem anderen SoX Kommando zu verwenden ...

SoX-Pipes

Pipe ist hier im Sinne von "Rohrleitung" zu verstehen. Das sox.pdf Manual deutet diese Möglichkeit an im Abschnitt "Special Filenames" als "-".

(Anm.: Das werden jetzt doch nochmal viele Worte zur ersten Erklärung von etwas, das wenn man es erstmal "hat" eigentlich simpel ist. Und ... die Scheibweise "-p" bzw. "--sox-pipe" hat bei mir nicht funktioniert.)

Nach vielem Herumprobieren hat sich für mich folgende Schreibweise bewährt:

sox.exe -V3 --combine merge --type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain 0.0" --type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain 0.0" -t waveaudio "Lautsprecher"

Das sieht nicht schön aus. Im Folgenden werden die einzelnen Kanäle in eigenen Zeilen dargestellt. Zum Ausführen in der Kommandozeile müssen solche Kommands vorher in den Editor kopiert und die Zeilenumbrüche entfernt werden.

sox.exe -V3 --combine merge
--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain 0.0"
--type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain 0.0"
-t waveaudio "Lautsprecher"

Die sozusagen "inneren" Kommandos je Kanal sind hier farbig markiert und werden gleich erklärt. Vorher aber: Ein solches inneres Kommando muss als Audio-Input in das eigentliche, sozusagen "äußere" Kommando eingehen. Dafür wird das gesamte innere Kommando so ähnlich wie eine Dateiangabe in Anführungszeichen geschrieben und vor den Aufruf von sox.exe wird ein "| " geschrieben. Damit eine solche Pipe vom äußeren Kommando erkannt wird, muss das dem äußeren Kommando mittels "--type sox" mitgeteilt werden. Also für jeden Kanal ein Audio-Input nach dem Schema:

--type sox "| <inneres Kommando>"

Jetzt zu der Schreibweise der inneren Kommandos. Die bloße Funktionalität eines inneren Kommandos entspricht dem bereits Bekannten, z.B.:

sox.exe "z:\DRUMS- OH L-M60-API.wav" <Audio-Output> gain 0.0

Nun wird aber in dem äußeren Kommando das gesamte innere Kommando in Anführungszeichen geschrieben werden. Aber die inneren Kommandos enthalten selbst bereits Anführungszeichen, was Probleme verursachen würde. Daher muss (unter Windows) den Anführungszeichen der inneren Kommandos ein "\" vorangestellt werden:

sox.exe \"z:\DRUMS- OH L-M60-API.wav\" <Audio-Output> gain 0.0

Jetzt muss nur noch der Audio-Output des inneren Kommandos als Pipe angegeben werden, was auch hier die Angabe des Typs erfordert:

sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain 0.0

(Anm.: Das "-" vor dem "gain" Effekt ist wie oben erwähnt im sox.pdf Manual im Abschnitt "Special Filenames" aufgeführt.)

Vollständiger Multitrack Mixdown

So, jetzt gilt es nur noch, die obige Überlegung zum Panorama in der Praxis zu testen. Also: dasselbe Mono-Signal muss mit verschiedenem Gain in beide Stereokanäle eingehen können. Daraus folgt, dass jedes nicht hart-links oder hart-rechts gepantes Mono-Signal als zwei Audio-Inputs mit unteschiedlichem Gain vorgesehen werden muss.

Ich fange wieder mit den Drums an. Da kam die Kick zusehr von rechts und es schien insgesamt etwas drucklos.

Zuerst Overhead-links (mehr Snare, weniger Kick). Die "gain" Werte ergeben sich aus der Panorama-Anordnung (3.5 dB Differenz) und der Pegelanpassung für das andere Overhead-Signal und für den Gesamtmix:

sox.exe -V3 --combine merge
--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -7.55"
--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -11.0"
-t waveaudio "Lautsprecher" remix 1 2

(nicht vergessen, die Zeilenumbrüche zu entfernen ...)

Und dann Overhead-rechts (bessere Kick) dazu, auch mehr zur Stereomitte hin und

sox.exe -V3 --combine merge

--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -7.55"
--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -11.0"

--type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain -3.0"
--type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain -0.0"

-t waveaudio "Lautsprecher" remix 1,3 2,4


und der Bass, ein bischen nach rechts, damit er besser mit der Kick "verschmilzt", und per EQ bereits deutlich entschärft:

--type sox "| sox.exe \"z:\BASS-DI-API.wav\" --type sox - equalizer 2750 4q -12 gain -9.0"
--type sox "| sox.exe \"z:\BASS-DI-API.wav\" --type sox - equalizer 2750 4q -12 gain -6.5"
-t waveaudio "Lautsprecher" remix 1,3,5 2,4,6


und jetzt die Akustikgitarre, mehr zur Mitte hin, per EQ entdröhnt und entschärft und mit dem "contrast" Effekt (One-Knob-Dynamics?) etwas weniger flirrig:

--type sox "| sox.exe \"z:\AC GUITAR-M60-GRACE.wav\" --type sox - equalizer 60 2o -15 equalizer 4000 0.5o -4.5 contrast 3 gain -3.75"
--type sox "| sox.exe \"z:\AC GUITAR-M60-GRACE.wav\" --type sox - equalizer 60 2o -15 equalizer 4000 0.5o -4.5 contrast 3 gain -17.2"
-t waveaudio "Lautsprecher" remix 1,3,5,7 2,4,6,8


und das Banjo, im Panorama so platziert, dass es mit der Akustikgitarre eine schlüssige Stereobreite ergibt, und per EQ etwas präsenter gemacht:

--type sox "| sox.exe \"z:\BANJO-M260-GRACE.wav\" --type sox - equalizer 3000 1.5o 1.5 gain -23.9"
--type sox "| sox.exe \"z:\BANJO-M260-GRACE.wav\" --type sox - equalizer 3000 1.5o 1.5 gain -8.15"
-t waveaudio "Lautsprecher" remix 1,3,5,7,9 2,4,6,8,10


und last-but-not-least die Lead Vocals (mit der Mandoline), für ein ausgewogenes Gesamtbild leicht rechts, per EQ etwas mehr Ton und weniger Schärfe und der "contrast" Effekt macht hier ein bischen Leveling:

--type sox "| sox.exe \"z:\VOX MANDOLIN-M80-GRACE.wav\" --type sox - gain -11.55 equalizer 500 0.5o 0.8 equalizer 1000 0.5o -4.5 contrast 10"
--type sox "| sox.exe \"z:\VOX MANDOLIN-M80-GRACE.wav\" --type sox - gain -10.55 equalizer 500 0.5o 0.8 equalizer 1000 0.5o -4.5 contrast 10"
-t waveaudio "Lautsprecher" remix 1,3,5,7,9,11 2,4,6,8,10,12


(Anmerkung: In diesem Fall meldete SoX "WARN equalizer: equalizer clipped 38 samples; decrease volume?", was vermutlich durch die Anhebung bei 500Hz entstand. Vermieden wurde das, indem hier der "gain" Effekt vor dem "equalizer" Effekt platziert wurde, so dass der "equalizer" Effekt von vornherein den geringeren Pegel bekommt.)

---
So, jetzt ist es fast fertig. Gemastered wird es hier nicht, aber unnötig Pegel und damit Bitauflösung verschenken muss ja auch nicht sein: Der "stats" Effekt (siehe Post #11) meldet einen Peaklevel von -14,3 dB. Also kann nochmal um 14 dB angehoben werden.

Ich vermute aber, dass der "remix" Effekt eine automatische Pegelbegrenzung macht, wenn er zuviele Kanäle oder/und zu hohe Pegel als Input erhält. Weil:
  • Beim Versuch die Pegel der Audio-Inputs anzuheben ging es ab einem Punkt selbst bei weiterer Anhebung um +3 dB kaum noch über einen Peaklevel von ca. -3 dB hinaus, aber es gab deutliche Verzerrungen.
  • Beim Versuch den Master-Pegel per "gain" Effekt anzuheben zeigte sich ein ähnliches Verhalten, wenn der "gain" Effekt vor dem "remix" Effekt platziert wurde.
Bei Platzierung des "gain" Effektes hinter dem "remix" Effekt ergibt sich (Achtung, deutlich höherer Pegel als vorher):


So ergibt sich nun als gesamtes SoX Kommando:





...
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: 2 Benutzer
  • Ersteller
  • #15
(... fortgesetzt, kann obigen Post nicht mehr bearbeiten ...)

Abschließend eine kurze technische Einordnung - das gesamte SoX Kommando ist:

sox.exe -V3 --combine merge

--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -7.55"
--type sox "| sox.exe \"z:\DRUMS- OH L-M60-API.wav\" --type sox - gain -11.0"

--type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain -3.0"
--type sox "| sox.exe \"z:\DRUMS- OH R-M60-API.wav\" --type sox - gain 0.0"

--type sox "| sox.exe \"z:\BASS-DI-API.wav\" --type sox - equalizer 2750 4q -12 gain -9.0"
--type sox "| sox.exe \"z:\BASS-DI-API.wav\" --type sox - equalizer 2750 4q -12 gain -6.5"

--type sox "| sox.exe \"z:\AC GUITAR-M60-GRACE.wav\" --type sox - equalizer 60 2o -15 equalizer 4000 0.5o -4.5 contrast 3 gain -3.75"
--type sox "| sox.exe \"z:\AC GUITAR-M60-GRACE.wav\" --type sox - equalizer 60 2o -15 equalizer 4000 0.5o -4.5 contrast 3 gain -17.2"

--type sox "| sox.exe \"z:\BANJO-M260-GRACE.wav\" --type sox - equalizer 3000 1.5o 1.5 gain -23.9"
--type sox "| sox.exe \"z:\BANJO-M260-GRACE.wav\" --type sox - equalizer 3000 1.5o 1.5 gain -8.15"

--type sox "| sox.exe \"z:\VOX MANDOLIN-M80-GRACE.wav\" --type sox - gain -11.55 equalizer 500 0.5o 0.8 equalizer 1000 0.5o -4.5 contrast 10"
--type sox "| sox.exe \"z:\VOX MANDOLIN-M80-GRACE.wav\" --type sox - gain -10.55 equalizer 500 0.5o 0.8 equalizer 1000 0.5o -4.5 contrast 10"

-t waveaudio "Lautsprecher"

trim 0 60 fade t 0 60 10 remix 1,3,5,7,9,11 2,4,6,8,10,12 gain 14


Das sind also 13 Aufrufe der sox.exe und tatsächlich sind 12 einzelne sox.exe Prozesse gestartet (siehe Task-Manager):

08b prozesse.webp


Und das macht dann bei Echtzeit-Mixing und -Wiedergabe von 44k1/24bit Audiodateien auf meinem alten Webpad/-book mit 1.44Ghz Atom x5 CPU eine Prozessorlast von unter 60%:

08c cpuload.webp


Okay, dieser Rechner ist jetzt auch fast am Ende - es gibt schon die ersten sporadischen Aussetzer. Aber dass das überhaupt geht. Und außerdem gibt es noch eine "global-option" namens "--buffer <num>" (siehe sox.pdf Manual). Mit größerer buffersize läßt sich u.U. noch ein bischen mehr aus einem Rechner herausholen.

Schluss jetzt. Viel Spass mit SoX (falls).
 
Zuletzt bearbeitet von einem Moderator:
  • Wow
  • Gefällt mir
Reaktionen: 2 Benutzer
×
Dir gefällt Musiker-Board.de? ❤️ Lasse dir unsere neuesten Inhalte in der Google-Suche ganz oben anzeigen!
Affiliate/Werbung
Universal Audio
Avalon VT-737 Tube ChSt Native
38 €
Jetzt kaufen
Zurück
Oben