WAV-Lautstärkeregler
Multipliziert jedes Sample in einem unkomprimierten PCM- oder IEEE-Float-WAV mit einem Amplitudenfaktor, mit einem optionalen Peak-Scan, der eine positive Steigerung des verfügbaren Headrooms reduziert. Der ursprüngliche Container wird kopiert und nur Bytes in seinem Audiodatenblock werden lokal neu geschrieben.
Eine Little-Endian-PCM- oder IEEE-Float-RIFF/RF64-WAVE-Datei mit bis zu 100 MB. Komprimierte WAV-Codecs benötigen einen Decoder und werden abgelehnt.
Die Ergebnisse werden ohne Gewähr für ihre Richtigkeit bereitgestellt. Die Methode und ihre Quellen stehen unten, damit Sie den Rechenweg prüfen können.
So funktioniert es
Was das bringt
Eine WAV-Lautstärkeänderung ist eine Multiplikation und keine feste Zahl, die jedem Sample hinzugefügt wird. Das Hinzufügen einer Konstante würde die Wellenform von Null weg verschieben und einen DC-Offset erzeugen. Durch die Multiplikation positiver und negativer Samples mit demselben Faktor bleibt die Stille bei Null, die Kanalbalance bleibt erhalten und die relative Dynamik der Aufnahme bleibt erhalten, bis ein Wert die harte Grenze des Formats erreicht.
Das Tool meldet beide Seiten dieses Vorgangs: die tatsächlich angewendete Verstärkung und die Sample-Peaks davor und danach. Wenn der Schutz einen Boost reduziert, wird dies im Ergebnis numerisch angezeigt, anstatt dass die angeforderte Zahl erfolgreich aussieht, während eine andere verwendet wird.
Die Methode
NIST drückt ein Feld- oder Amplitudenpegelverhältnis mit dem 20-fachen Logarithmus zur Basis 10 aus. Das Auflösen dieser Beziehung nach einem Multiplikator ergibt:
gain dB = 20 × log10(output amplitude / input amplitude)
multiplier = 10^(gain dB / 20)
Eine negative Einstellung erzeugt einen Multiplikator unter eins. Eine positive Einstellung erzeugt eins über eins. -6.0205999 dB ist genau 10^(-6.0205999 / 20) = 0.5; +6.0205999 dB ist 2.
Bevor Samples berührt werden, liest die Implementierung die RIFF-Struktur. Chunks haben eine vierstellige Kennung, eine 32-Bit-Nutzdatengröße und ein Füllbyte, wenn die Nutzdatenlänge ungerade ist. RF64 verwendet das gleiche Layout, speichert jedoch die Audiolänge in seinem ds64-Block. Der fmt -Block liefert die Sample-Darstellung und data liefert die verschachtelten Kanal-Samples.
Die akzeptierten Darstellungen sind bewusst endlich und explizit:
| WAV-Beispieltyp | Gespeicherter Bereich | Vollständige Interpretation |
|---|---|---|
| 8-Bit-PCM | ohne Vorzeichen 0 bis 255 | 128 subtrahieren, dann durch 128 dividieren |
| 16-Bit-PCM | unterzeichnet -32.768 bis 32.767 | dividiere durch 32.768 |
| 24-Bit-PCM | unterzeichnet -8.388.608 bis 8.388.607 | dividiere durch 8.388.608 |
| 32-Bit-PCM | unterzeichnet -2.147.483.648 bis 2.147.483.647 | dividiere durch 2.147.483.648 |
| 32/64-Bit-Float | IEEE-Gleitkomma | nominell -1 bis +1 |
Der ganzzahlige positive Vollausschlag ist um einen Code kleiner als der negative Betrag. Die Headroom-Berechnung misst daher die positivste und negativste Stichprobe getrennt:
positive headroom = largest positive code / measured positive code
negative headroom = absolute lowest negative code / absolute measured negative code
safe multiplier = min(positive headroom, negative headroom)
applied multiplier = min(requested multiplier, safe multiplier)
Stille hat keine endliche Spitzenbeschränkung. Eine Float-Datei, die bereits den Bereich überschreitet, ist der umgekehrte Fall: Kein positiver Faktor kann sie wieder unter den vollen Skalenwert bringen. Der Schutz verwendet 0 dB, anstatt die angeforderte Richtung zu ändern, und der Schreiber klemmt und zählt alle verbleibenden Werte außerhalb des Bereichs.
Vor dem Weiterlesen
Das größte Sample eines WAV beträgt 50 % des Skalenendwerts. Was ist der größte konstante Boost mit Spitzenschutz?
Ungefähr +6,0206 dB. Der verfügbare Multiplikator ist 1 / 0,5 = 2 und ein Amplitudenverhältnis von zwei beträgt 20 × log10(2). Hierbei handelt es sich um ein Sample-Peak-Ergebnis, nicht um eine Aussage über die wahrgenommene Lautstärke oder den tatsächlichen Peak zwischen den Samples.
Ein gelungenes Beispiel
Der Formeltest erstellt ein einsekündiges Mono-16-Bit-PCM-WAV mit fünf Samples pro Sekunde. Seine bekannten Beispielcodes sind:
0, 16000, -16000, 8000, -8000
Die gewählte Verstärkung beträgt -6.0205999 dB, der Multiplikator beträgt also genau 0,5:
| Figur | Arbeiten | Ergebnis |
|---|---|---|
| Höhepunkt vorher | 16.000 ÷ 32.768 × 100 | 48,828125 % |
| Multiplikator | 10^(-6,0205999 ÷ 20) | 0,5 |
| Ausgabebeispiele | jeder Quellcode × 0,5 | 0, 8000, -8000, 4000, -4000 |
| Höhepunkt danach | 8.000 ÷ 32.768 × 100 | 24,414063 % |
| Begrenzte Proben | Jedes Ergebnis passt zu 16-Bit-PCM | 0 |
| Dauer | 5 Bilder ÷ 5 Hz | 1 Sekunde |
Der Test bestätigt jedes Ausgabebeispiel und jedes angezeigte Ergebnis. Außerdem werden die ursprünglichen Datenbytes im heruntergeladenen Artefakt wiederhergestellt und die gesamte Datei mit der Quelle verglichen, um zu beweisen, dass alle Bytes außerhalb der Beispielnutzlast unverändert geblieben sind.
Was Clipping-Prävention versprechen kann und was nicht
Dies ist ein Sample-Peak-Schutz. Es hält die gespeicherten Ausgabeproben innerhalb ihres Ganzzahlbereichs oder des nominalen Gleitkommabereichs. Eine rekonstruierte analoge Wellenform kann zwischen den Samples Spitzenwerte aufweisen, sodass eine Sample-sichere Datei für die Übertragung im Rundfunk nicht automatisch True-Peak-kompatibel ist. Für Messungen sind ein Oversampling-True-Peak-Algorithmus und ein spezifizierter Standard erforderlich.
Das Tool verwendet außerdem eine Verstärkung für die gesamte Datei. Ein Begrenzer oder Kompressor ändert die Verstärkung im Laufe der Zeit, und die Lautstärkenormalisierung misst die Programmenergie und die Frequenzgewichtung. Dabei handelt es sich um unterschiedliche Operationen mit unterschiedlicher Qualität und unterschiedlichen politischen Entscheidungen. Sie sind nicht hinter dieser Steuerung verborgen.
Was Byte für Byte erhalten bleibt
Die heruntergeladene Datei ist eine Kopie des vollständigen RIFF- oder RF64-Containers. Das Kanallayout, die Abtastrate, die Bittiefe, die fmt -Erweiterung, die Cue-Positionen, Kommentare und unbekannten privaten Chunks bleiben bei den gleichen Byte-Offsets. Es werden nur Beispielbytes innerhalb der einzigen data-Nutzlast der obersten Ebene ersetzt.
Diese Treue hat eine bewusste Einschränkung. Metadaten können Fakten über die Wellenform statt Fakten über ihre Zeitachse enthalten: Ein gespeicherter Spitzenwert, eine integrierte Lautstärke, eine Prüfsumme oder ein Analyseergebnis werden nach Änderungen an der Probe veraltet. Das Tool kann nicht jeden privaten Block sicher erkennen, daher behält es diese Bytes bei und weist auf die Einschränkung hin, anstatt Metadaten ohne Erlaubnis zu löschen oder so zu tun, als hätte es sie neu berechnet.
So wird es gemacht
- Überprüfen Sie, ob es sich bei der Datei um einen Little-Endian-RIFF- oder RF64-WAVE-Container handelt, und durchsuchen Sie dann die Liste der aufgefüllten Blöcke, um genau einen FMT-Block und einen Datenblock zu finden. Lesen Sie bei Bedarf die 64-Bit-Datenlänge von RF64 aus ds64.
- Lesen Sie die Kanalanzahl, die Abtastrate, die Blockausrichtung, die Bittiefe und das Format-Tag. Entpacken Sie WAVE_FORMAT_EXTENSIBLE nur, wenn seine gültige Genauigkeit den Probenbehälter füllt. Verzichten Sie auf komprimierte Codecs, Big-Endian-RIFX und inkonsistente Bildbreiten.
- Dekodieren Sie jede 8-, 16-, 24- oder 32-Bit-PCM-Probe oder jede 32- oder 64-Bit-IEEE-Float-Probe und messen Sie die größte positive und negative Amplitude. Nicht endliche Float-Werte ablehnen, anstatt NaN oder Unendlich weiterzugeben.
- Wandeln Sie die angeforderte Dezibeländerung in einen Amplitudenmultiplikator um, wobei der Multiplikator = 10 erhöht wird, um dB dividiert durch 20 zu erhöhen. Wenn die Clipping-Verhinderung für eine Verstärkung aktiviert ist, reduzieren Sie diesen Multiplikator auf die kleinere vorzeichenbehaftete Headroom-Grenze.
- Kopieren Sie die vollständige Quelldatei in begrenzten Teilen. Multiplizieren Sie im Datenblock der Kopie jeden Kanalabtastwert mit demselben Faktor, runden Sie die Ganzzahl-PCM symmetrisch auf den nächsten Code und begrenzen Sie alle Ergebnisse, die den Bereich überschreiten, auf den digitalen Vollausschlag.
- Geben Sie die tatsächliche Verstärkung, die gemessenen Spitzenwerte, die Anzahl der Proben, die eine Begrenzung erforderten, und die unveränderte Dauer an. Bieten Sie den kopierten Container als separaten WAV-Download an; Die Quelldatei bleibt unberührt.
Wovon es ausgeht
- Unterstütztes Audio ist Little-Endian-Integer-PCM mit 8, 16, 24 oder 32 Bit oder IEEE-Float mit 32 oder 64 Bit. Komprimierte WAV-Codecs und Big-Endian-RIFX erfordern einen Decoder oder eine Byte-Reihenfolge-Konvertierung und werden abgelehnt.
- WAVE_FORMAT_EXTENSIBLE wird unterstützt, wenn die Anzahl der gültigen Bits Null ist oder der Containerbreite entspricht. Proben mit reduzierter Genauigkeit, wie z. B. 24 gültige Bits linksbündig in 32-Bit-Containern, werden abgelehnt und nicht durch Vermutungen interpretiert.
- Auf jedes Sample in jedem Kanal wird derselbe konstante Faktor angewendet, wodurch die Kanalbalance und die relative Dynamik erhalten bleiben. Hierbei handelt es sich um eine Spitzenverstärkungsanpassung, nicht um eine LUFS-Lautheitsnormalisierung, Komprimierung, zeitliche Begrenzung, Resampling oder Dithering.
- Die Spitzenprävention begrenzt nur einen gewünschten positiven Gewinn. Wenn eine IEEE-Float-Quelle bereits außerhalb des nominalen Bereichs von -1 bis +1 liegt, beträgt die angewendete Verstärkung 0 dB und die vorhandenen Abtastwerte außerhalb des Bereichs werden weiterhin geklemmt und gezählt; Das Tool wandelt eine Verstärkung nicht stillschweigend in eine Dämpfung um.
- Ganzzahliges PCM wird nach der Multiplikation auf den nächsten darstellbaren Beispielcode gerundet. In Fällen auf halber Strecke werden bei gleichen positiven und negativen Beträgen von Null weg gerundet, sodass die Operation keine vorzeichenabhängige Rundung einführt.
- RIFF-Blöcke und ihre Positionen bleiben außerhalb der Datennutzlast Byte für Byte unverändert. Dadurch bleiben Cues und Kanalmetadaten erhalten, eingebettete Peak-, Lautstärke-, Prüfsummen- oder Analysemetadaten können jedoch die alten Samples beschreiben und werden nicht neu berechnet.
- Die Eingabe ist auf 100 MB begrenzt. Der Browser speichert die Quelle und die kopierte Ausgabe gleichzeitig, während die Schleifen zum Scannen, Kopieren und Umschreiben in begrenzten Teilen ausgegeben werden, sodass Fortschritt und Abbrechen weiterhin reagieren.
Fragen
Lässt sich die Aufnahme durch Ändern der WAV-Lautstärke hochladen oder komprimieren?
Nein. Der Browser liest und schreibt unkomprimierte Beispielwerte lokal um und bietet dann einen separaten WAV-Download an. Es wird kein verlustbehafteter Codec verwendet, das Audio wird nicht neu abgetastet und die Datei wird nicht an einen Server gesendet.
Was machen minus 6 dB mit einer WAV-Wellenform?
Eine Änderung von -6,0206 dB multipliziert jede Sample-Amplitude mit genau der Hälfte. Die wahrgenommene Lautstärke klingt nicht unbedingt genau halb so laut; Dieses Tool ändert die Sample-Amplitude, nicht die psychoakustische Lautstärke in LUFS.
Wie verhindert das Tool Clipping, wenn ich eine WAV-Datei lauter mache?
Es misst zunächst die größte positive und negative Stichprobe, berechnet den konstanten Multiplikator, den jede Seite vor dem Vollausschlag akzeptieren kann, und begrenzt den angeforderten Boost auf den kleineren Grenzwert. Es wird kein zeitveränderlicher Begrenzer verwendet und die relative Dynamik der Wellenform wird nicht verändert.
Warum unterscheidet sich der angewandte Gewinn von dem von mir angeforderten Gewinn?
Der Spitzenwert der Quelle ließ weniger digitalen Spielraum übrig, als für die erforderliche Verstärkung erforderlich war, und die Clipping-Verhinderung wurde aktiviert. Das Ergebnis zeigt die tatsächliche konstante Verstärkung, während die Deaktivierung des Schutzes die Anforderung anwendet und Proben zählt, die geklemmt werden mussten.
Ändert die WAV-Verstärkungsanpassung die Stereobalance oder -dauer?
Nein. Für jeden Kanal wird derselbe Multiplikator verwendet und die Sample-Anzahl, die Sample-Rate und das Kanallayout ändern sich nicht. Die Dauer und Positionen vorhandener Cue-Marker bleiben daher unverändert.
Sind alle WAV-Metadaten nach der Lautstärkeänderung noch korrekt?
Jedes Nicht-Audio-Byte bleibt erhalten, wodurch strukturelle und positionelle Metadaten erhalten bleiben. Gespeicherte Peak-, Lautstärke-, Prüfsummen- oder Analysewerte können jedoch die alte Wellenform beschreiben; Berechnen Sie diese in einem metadatenfähigen Audioeditor neu, wenn sie Teil einer Lieferspezifikation sind.