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

zu

.
(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:
- Es klingt.
- Man kann bei SoX relativ sicher sein kann, dass nur das mit dem Material passiert, was man explizit angegeben hat.
- 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:
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 ...


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

... jetzt wird's ernst

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