Eine Frage zu linux/sox

Antworten
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Eine Frage zu linux/sox

Beitrag von Melomane »

Hallo,

in dem Beitrag
viewtopic.php?p=188266#p188266
habe ich Fehlermeldungen gepostet von sox beim Versuch, eine Datei zu bearbeiten.

Nach ein wenig googlen habe ich es dann mit folgenden Befehlszeilenvarianten versucht:

Code: Alles auswählen

sox --norm=-1 "$FN" "$FNP" vol -1
sox -G "$FN" "$FNP" vol -1
FN und FNP sind infile und outfile.

Aber diese Versuche waren nicht zielführend, die Fehlermeldungen bleiben.

Müssen die Parameter -G bzw. --norm an anderer Stelle positioniert werden? Oder lässt sich das sowieso nicht in einem Rutsch erledigen? Muss erst normalisiert werden und dann in einem zweiten Schritt invertiert?

Viele Grüße

Jochen
Bild
Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Jürgen,

die Warnungen von sox zeigen zum einen, dass Dithering angewendet wird. Das wird passieren, weil du normieren (also Multiplikation mit einem Faktor mit anschließender Requanitisierung) lässt. Normieren heisst aber, dass der Maximalpegel ausgereizt wird und es dann ab und zu Übersteuerung wegen Dithering kommt. Zum anderen scheinen auch ohne Dither bereits Werte nicht darstellbar zu sein. Ich tippe auf Ausreizung wegen der Normierung. Aus meiner Sicht hast du zwei Optionen.

1. Keine Normierung machen:

Code: Alles auswählen

sox -v -1 infile outfile
, möglicherweise sogar Dithering noch gezwungenermaßen abschalten:

Code: Alles auswählen

sox -D -v -1 infile outfile
In diesem Fall kann das einzige Problem sein, dass ein Minimalwert von -2^(N-1) (N = Auflösung in Bits) im Originalfile nicht in den entsprechend positiven Wert gewandelt werden kann. Das ist eben so, und ließe sich nur über die zweite Option lösen.

2. Normierung mit Headroom für Dithering

Code: Alles auswählen

sox infile norm 'x' -vol -1 outfile
, wobei 'x' in dB und recht klein sein darf. Ich würde wohl mit -1 nehmen.
Damit vermeidest du den Restfehler in Punkt 1, musst aber alle Werte requantisieren, mit Dither.

Grüße,
Andree
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo Andree,

die Zeile:

Code: Alles auswählen

sox "$FN" "$FNP" vol -1
Ohne Normalisierung also warf ja die Fehlermeldung aus.

Ich werde deine Vorschläge morgen testen. Ich argwöhne aber, dass die CD schon "ab Werk" übersteuert ist. Und ob man das Elend beseitigen kann?

Viele Grüße

Jochen
Bild
Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Jochen,
Melomane hat geschrieben: 18.09.2020, 20:32Ich argwöhne aber, dass die CD schon "ab Werk" übersteuert ist. Und ob man das Elend beseitigen kann?
Die CD kann nur den Wertebereich voll ausnutzen. Und wie geschrieben: Mit Dither kann es dann clippen, oder falls der Wert -32768 invertiert werden muss. +32768 gibt es nämlich bei 16 Bit nicht.

Wenn allerdings beim Mastering der CD bereits Mist gebaut wurde, lässt sich das nur sehr schwer beheben. Ich habe bei einem Titel mal Clipping "per Hand" entfernt. Dazu muss man den Pegel absenken und an den betroffenen Stellen manuell angepasste Filter anwenden. Das ist sehr aufwändig, und ich kann mir nicht vorstellen, dass du das machen willst. Invertiere einfach ohne Dither und ohne Normalisierung, und gut ist.

Grüße,
Andree
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo Andree,

also: Bei mir funktioniert es nur im Zweischrittverfahren = erst norm, dann vol.

Code: Alles auswählen

sox "$FN" --norm=-1 "$FNP"
dann

Code: Alles auswählen

sox "$FN" "$FNP" vol -1
Auf diese Weise werden die Fehlermeldungen bzgl. clipping etc. vermieden.

Alle Versuche, das in einem Einzeiler abzuhandeln ergeben entweder die Fehlermeldung über clipping/dither oder führen dazu, dass sox gar nicht erst anläuft. Mag sein, dass das am armbian-sox liegt. Oder daran, dass sox nicht mein tägliches Arbeitsinstrument ist. ;)
Bild
Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Jochen,

dann hast du ja zumindest eine Lösung. Ich denke nur, dass du bei deinem Vorgehen ohne Not Auflösung verlierst. Du normierst. Das ist letztlich eine Multiplikation aller Werte mit demselben Faktor, gefolgt von Dithering und abschließender Quantisierung. Eigentlich willst du nur ohne Dithering invertieren, das geht mit "-D vol -1". Nur im Extremfall von bereits im Originalfile vorhandener Vollaussteuerung im negativen Wertebereich kann es dabei überhaupt zu Clipping kommen. Das ist sehr unwahrscheinlich, und das Clipping ist extrem gering (16 Bit: 32768 -> 32767). Das ist aus meiner Sicht gegenüber der Normierung mit Dithering zu bevorzugen.

Grüße,
Andree
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo,

ich habe mich noch mal daran gemacht. Mit folgendem Befehl:

Code: Alles auswählen

sox  -S -D -v -0.9 infile outfile
kommen keine Fehlermeldungen mehr in Sachen clipping. Laut Manpage werden grundsätzlich negative Werte für -v invertiert. Sollte also alles gut sein in der Hinsicht.

Nun würde ich aber gerne infile vor der Bearbeitung mit -v nach 24bit wandeln. Geht das in dem Einzeiler und wo müsste ggf. -b 24 eingefügt werden? Wenn ich das vor infile mache und das richtig wäre: In welcher Reihenfolge arbeitet sox die drei Anweisungen -D -v -b ab?

Viele Grüße

Jochen
Bild
Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Hallo Jochen,

sox rechnet das intern mit float64, du brauchst da nichtes explizit zu setzen.
1. Wenn du jetzt wieder mit "-v -0.9" arbeitest, solltest du "-D" nicht benutzen. Hier ist Dithering richtig, wichtig und gewollt.
2. Wenn du mit 24 bit ausgeben willst, nimmst du "-b 24" vor "outfile".

Grüße,
Andree
Bild
frankl
Aktiver Hörer
Beiträge: 486
Registriert: 20.01.2013, 01:43
Wohnort: Aachen

Beitrag von frankl »

Hallo Jochen,

'sox' liest die Daten aus infile intern als 32 Bit Integers ein, wendet darauf die Lautstärkeänderung an und schmeißt für die Ausgabe die unteren 16 Bit wieder raus. Wenn Du mit 0.9 multiplizierst wäre es allerdings besser, das Dithering eingeschaltet zu lassen (also ohne '-D'). Wenn ich es richtig verstehe, willst Du doch nur die Polarität ändern, oder? Ich würde das besser mit

Code: Alles auswählen

sox -V1 -D infile outfile vol -1
machen. Denn dann ist der Output schon genauso gedithered wie der Input. Wie Andree weiter oben schon angemerkt hat, könnte es in Input einzelne Samples mit Wert -2^15 geben, die mit obigem Kommando in der Ausgabe zu 2^15-1 werden (und was ohne die `-V1` Option eine Warnung über Clipping ergibt, die ich einfach ignorieren würde, da das Clipping dann eingentlich schon im Input war).

Viele Grüße,
Frank
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo Frank,

ich möchte bei der fraglichen Datei auch die Lautstärke noch etwas absenken.

Und danke für eure Antworten!

Viele Grüße

Jochen
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo nochmal,

Frank, wenn ich deine Lösung nehme, verzerrt es halt in meinen Ohren an Tuttistellen. Deutlicher noch als im originalen CD-Rip. Zeigt also, dass da tatsächlich was im Argen liegt. Also hilft die Absenkung der Lautstärke tatsächlich. Und da sei auch Hans-Martin Dank für seine Hilfe via PN. :cheers: Auch für die Geschichte mit der Invertierung. Die bekommt der Einspielung auch sehr gut. Aufgeräumter ist die Musik. Auch wenn die Dame des Hauses und meines Herzens meint, dann sei's eher als Begleitmusik tauglich, während das Original fordernd sei und aufmerksames Hören erfordere. Ich denke, sei's drum; die Bearbeitung ermöglicht ein ermüdungsfreies Hören.

Ach ja, worum geht es? Schaut in den Thread mit dem, was gerade gehört wird.

Viele Grüße

Jochen
Bild
Daihedz
Aktiver Hörer
Beiträge: 793
Registriert: 25.06.2010, 15:09

Beitrag von Daihedz »

Hallo Jochen

Versuche es doch mal auch, falls Du magst, als Altrnative zu Sox mit dem neuen CamillaDSP. CamillaDSP kommt nicht ganz so schlank wie sox daher, kann aber mit einer geeigneten Config so konfiguriert werden, dass die gesamte Kontrolle der Abläufe beim User ist. Und Camilladsp rechnet intern per Default durchgängig mit 64 Bit, falls es nicht explizit auf 32 Bit Genauigkeit reduziert wird. Bei mir läuft Camilladsp ganz prima und ersetzt dabei und nebenbei auch Brutefir. Ich attestiere Camilladsp mittelfristig die Potenz, einige Audio-Utilities abzulösen. Nicht nur in der Linux-Welt, sondern auch unter MacOS und Windows.

https://github.com/HEnquist/camilladsp
https://www.diyaudio.com/forums/pc-base ... n-etc.html

Kamellengrüsse
Simon
Bild
Buschel
Aktiver Hörer
Beiträge: 989
Registriert: 12.12.2013, 20:12
Wohnort: Raum Karlsruhe

Beitrag von Buschel »

Guten Morgen, Jochen,
Melomane hat geschrieben: 27.09.2020, 20:54Frank, wenn ich deine Lösung nehme, verzerrt es halt in meinen Ohren an Tuttistellen. Deutlicher noch als im originalen CD-Rip. Zeigt also, dass da tatsächlich was im Argen liegt. Also hilft die Absenkung der Lautstärke tatsächlich.
Das hört sich nach intersample overs bzw. zu hohem True Peak Level an. Die sieht man im Orignalfile nicht unbedingt, weil sich die PCM-Werte noch im gültigen Wertebereich befinden. Sobald das durch die Rekonstruktionsfilter des DACs gegangen ist, führen die damit verbundenen Überschwinger zu Übersteuerungen. Falls das auftritt, lässt sich das über ein simples Absenken wie bei dir vermeiden. Ich selbst senke um etwa 2 dB bevor ich das Upsampling ausführe. Damit habe ich bisher keine Probleme mehr gesehen.

Falls dich interessiert um wieviel der TP übersteuert, kannst du zur Probe einfach mal ein Upsampling auf die 4-fache Abstastfrequenz (oder mehr) machen. Dann zeigt sox die stärkste Übersteuerung an.

Viele Grüße,
Andree
Bild
Melomane
Aktiver Hörer
Beiträge: 3114
Registriert: 14.10.2011, 18:30

Beitrag von Melomane »

Hallo,

ich werde eure Vorschläge bei passender Gelegenheit in Angriff nehmen. Danke nochmal für eure Unterstützung. :cheers:

Viele Grüße

Jochen
Bild
Antworten