Lauteste Stelle über mehrere Musikfiles finden
#10
Hallo Kuni,

zuerst dachte ich "ja, das ist einfach"... aber beim Lesen der Antworten hab ich mich gefragt, was genau Du machen willst...

(12.12.2022, 19:13)Kuni schrieb: Das würde ja bedeuten, daß zB bei einem in Einzelstücke geschnittenen live Konzert die leisen Stücke brüllt laut sind, so wie die lauteren Titel.

Daraus vermute ich, Du willst alle Files mit der gleichen Lautstärke-Anpassung versehen, um das Lautstärke-Verhältnis zueinander nicht zu ändern? Das ist natürlich sinnvoll, wenn alle Titel aus einer Quelle (Live-Konzert, Album, ...) stammen. Oder kommt der andere Fall auch vor - verschiedene Quellen mit unterschiedlichen Lautstärken?

Nächste Frage - geht es um die wahrgenommene Lautstärke, oder um eine technische Kontrolle der Aussteuerung? Ich vermute letzteres? (Analoge oder digitale Aufnahme?)

Und dann noch - brauchst Du die Stelle zum wiederholten Abspielen und Ausprobieren? Oder nur den Zahlenwert, um wieviel das Signal noch verstärkt werden kann?

(12.12.2022, 19:50)Sonicman schrieb: SoX als Freeware kann das prinzipiell, muss aber über die command line oder batches programmiert werden, was sicherlich viel Einarbeitungszeit bedarf.

SoX verwende ich sehr gerne. Die Angst vor der Einarbeitungszeit will ich gerne mildern, wenn man keine Angst vor der Kommandozeile hat.

SoX hat die Funktionen ("Effekte") "stat" und "stats", die unterschiedlich aufbereitete Ausgabe produzieren (siehe auch Explanation of audio stat using sox). Ich habe ein Verzeichnis mit den Tracks einer CD als Dateien (heißen in meinem Fall gerade track01.cdda.wav bis track14.cdda.wav). Der Aufruf ist (verkürzt) immer "sox <input file(s)> <output file> <effect>". Wichtig: Statt der Ausgabedatei steht hier "-n", was "bitte keine Ausgabe produzieren" bedeutet; wenn man das vergisst, wird das letzte Eingabe-File als Ausgabe interpretiert und vielleicht überschrieben...

Also - der Aufruf "sox track01.cdda.wav -n stat" liefert folgende Ausgabe:

Code:
$ sox track01.cdda.wav -n stat

Samples read:          7407624
Length (seconds):    83.986667
Scaled by:        2147483647.0
Maximum amplitude:    0.112549
Minimum amplitude:    -0.114166
Midline amplitude:    -0.000809
Mean    norm:          0.010811
Mean    amplitude:    -0.000036
RMS    amplitude:    0.015106
Maximum delta:        0.066132
Minimum delta:        0.000000
Mean    delta:        0.006890
RMS    delta:        0.009652
Rough  frequency:        4484
Volume adjustment:        8.759

Besser lesbar ist die Ausgabe von "sox track01.cdda.wav -n stats":

Code:
$ sox track01.cdda.wav -n stats

            Overall    Left      Right
DC offset  -0.000036 -0.000036 -0.000036
Min level  -0.114166 -0.114166 -0.096680
Max level  0.112549  0.112549  0.108917
Pk lev dB    -18.85    -18.85    -19.26
RMS lev dB    -36.42    -36.16    -36.69
RMS Pk dB    -27.64    -27.64    -28.03
RMS Tr dB      -inf      -inf      -inf
Crest factor      -      7.34      7.44
Flat factor    2.92      0.00      4.44
Pk count        2.50        2        3
Bit-depth      13/16    13/16    13/16
Num samples    3.70M
Length s      83.987
Scale max  1.000000
Window s      0.050

Fürs digitale Aussteuern wäre hier jetzt wohl "Pk lev dB" die nützlichste Angabe - so viel Platz ist noch bis zur digitalen Null.

Jetzt kann man natürlich auch einfach alle Files auf einmal als Eingabe benutzen, nämlich mit "track*.wav":

Code:
$ sox track*.wav -n stats

            Overall    Left      Right
DC offset  -0.000065 -0.000064 -0.000065
Min level  -0.957428 -0.851166 -0.957428
Max level  0.930511  0.898254  0.930511
Pk lev dB      -0.38    -0.93    -0.38
RMS lev dB    -21.58    -21.62    -21.55
RMS Pk dB    -11.43    -11.43    -11.47
RMS Tr dB      -inf      -inf      -inf
Crest factor      -    10.83    11.44
Flat factor    0.00      0.00      0.00
Pk count          2        2        2
Bit-depth      16/16    16/16    16/16
Num samples    142M
Length s    3221.480
Scale max  1.000000
Window s      0.050

Man sieht, dass beim ersten Track gut 18 dB Platz zur digitalen Vollaussteuerung sind, während auf die ganze CD gerechnet davon nur knapp 0.4 dB übrig bleiben - eine Verstärkung also nicht nötig oder möglich ist.

Wenn das schon Deine Fragestellung war, ist die Lösung also wirklich einfach. Wenn Du aber die Stelle gerne einkreisen und dann mehrfach zum Herantasten an die Verzerrungen abspielen willst, muss man etwas differenzierter suchen. Man könnte z.B. obige Statistik für jeden Track einzeln erzeugen, und die Ausgabe zur besseren Lesbarkeit filtern. Das ist eine kurze Schleife in der Shell (ich gehe von bash aus; unter Windows / DosBox oder so geht es ähnlich, aber mit leicht anderer Syntax):

Code:
for i in track*; do echo $i; sox $i -n stats 2>&1 | grep "Pk lev dB"; done

Kurze Erklärung: "for i in ...; do ...; done" ist die Schleife über die Dateien. Darin stehen zwei Befehle: "echo" gibt den Dateinamen aus, und der andere ist der sox-Aufruf. 2>&1 ist der unverständliche Teil (die Ausgabe ist nicht auf stdout, sonder auf stderr, und das wird hier zusammengeführt), und "grep" filtert die gesuchten Zeilen aus der Ausgabe. Ergebnis:

Code:
$ for i in track*; do echo $i; sox $i -n stats 2>&1 | grep "Pk lev dB"; done

track01.cdda.wav
Pk lev dB    -18.85    -18.85    -19.26
track02.cdda.wav
Pk lev dB    -11.10    -11.89    -11.10
track03.cdda.wav
Pk lev dB      -1.62    -2.63    -1.62
track04.cdda.wav
Pk lev dB    -12.58    -12.58    -14.66
track05.cdda.wav
Pk lev dB      -0.38    -1.40    -0.38
track06.cdda.wav
Pk lev dB      -7.70    -7.70    -8.85
track07.cdda.wav
Pk lev dB    -16.71    -16.71    -16.79
track08.cdda.wav
Pk lev dB      -3.59    -3.98    -3.59
track09.cdda.wav
Pk lev dB    -11.37    -11.37    -12.76
track10.cdda.wav
Pk lev dB      -2.22    -2.52    -2.22
track11.cdda.wav
Pk lev dB      -8.66    -8.75    -8.66
track12.cdda.wav
Pk lev dB      -0.93    -1.13    -0.93
track13.cdda.wav
Pk lev dB      -3.99    -5.52    -3.99
track14.cdda.wav
Pk lev dB      -0.63    -0.93    -0.63

Nun sieht man, welches die leisen (z.B. 1 und 7) und die lauten Tracks (z.B. 5, 12 und 14) sind. Jetzt könntest Du gezielt den lautesten Track im Audioeditor aufmachen.

Mehr Skriptarbeit wird nötig, wenn Du z.B. den 10-Sekunden-Schnipsel finden willst, an dem die lauteste Stelle ist - und dann z.B. noch mit Gewichtung nach Gehör, oder nach frequenzabhängiger Aussteuerbarkeit des Bandgeräts... geht alles - mach ich aber nur, wenn es Teil der Aufgabenstellung ist Wink

Ah, wo wir noch bei SoX sind - "Zusammenkopieren und im Wave-Editor öffnen" wird damit auch viel einfacher:

Code:
sox track*.wav alles.wav

hängt alle Eingabe-Files hintereinander. Statt dem * kannst Du auch mehrere Dateinamen angeben, z.B. "sox track01.cdda.wav track05.cdda.wav bla.wav" schreibt zwei Tracks hintereinander nach "bla.wav".

Die Methode, das zusammenkopierte File dann im Audioeditor zu öffnen ist dann garnicht mal so schlecht - in linearer Darstellung in Audacity findet man mit dem Auge doch sehr schnell die Stellen, nach denen man aussteuern würde:

   

(12.12.2022, 19:59)Linus schrieb: Nach meiner Erfahrung ist der Spitzenwert im wav file nicht aussagekräftig. Man muss tatsächlich nach der "lautesten" Stelle oder Stück suchen. Sprich ein Programm muss in der Lage sein den Wert für die integrierte Loudness zu ermitteln.

Ja - wie gesagt, je nachdem, was man sucht. Für die wahrgenommene Lautstärke auf jeden Fall - und auch für die nicht-digitale Aussteuerung ist nicht das lauteste Sample entscheidend.

Viele Grüße
Andreas
Zitieren


Nachrichten in diesem Thema
RE: Lauteste Stelle über mehrere Musikfiles finden - von andreas42 - 13.12.2022, 09:36

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste