Wenn ich die Amplitude einer WAV-Datei um 25% reduzieren wollte, würde ich so etwas schreiben:
%Vor%Viele der Artikel, die ich zu Audiotechniken gelesen habe, diskutieren die Amplitude in Dezibel. Ich verstehe die logarithmische Natur von Dezibel-Einheiten im Prinzip, aber nicht so sehr in Bezug auf den tatsächlichen Code.
Meine Frage ist: Wenn ich die Lautstärke einer WAV-Datei um beispielsweise 20 Dezibel abschwächen möchte, wie würde ich das im Code tun, wie in meinem obigen Beispiel?
Aktualisieren : Formel (basierend auf der Antwort von Nils Pipenbrinck) zum Dämpfen um eine gegebene Anzahl von Dezibel (eingegeben als eine positive Zahl, z. B. 10, 20 usw.):
%Vor%Wenn ich also um 20 Dezibel dämpfen möchte, ist der Verstärkungsfaktor .1 .
Ich denke, du willst von Dezibel in Verstärkung umwandeln.
Die Gleichungen für Audio sind:
Dezibel zu gewinnen:
%Vor%oder in C:
%Vor%Die Gleichungen zur Umwandlung von Gain in db lauten:
%Vor% Wenn Sie nur etwas Audio adden möchten, hatte ich gute Ergebnisse mit dem normalisieren Paket von nongnu.org
. Wenn Sie wissen möchten, wie es gemacht wird, ist der Quellcode frei verfügbar. Ich habe auch wavnorm
verwendet, dessen Homepage momentan nicht verfügbar ist.
Eine Sache zu beachten: .WAV-Dateien haben viele verschiedene Formate. Der obige Code funktioniert nur für WAVE_FORMAT_FLOAT. Wenn Sie mit PCM-Dateien arbeiten, werden Ihre Samples 8, 16, 24 oder 32 Bit Integer sein (8 Bit PCM verwendet vorzeichenlose Integer von 0..255, 24 Bit PCM kann gepackt oder entpackt werden (gepackt == 3 Byte Werte nebeneinander gepackt, entpackt == 3 Byte Werte in einem 4 Byte Paket).
Und dann gibt es das Problem der alternativen Kodierungen - Zum Beispiel in Win7, alle Windows-Sounds sind eigentlich MP3-Dateien in einem WAV-Container.
Es ist leider nicht so einfach wie es klingt: (.
Hoppla! Ich habe die Frage falsch verstanden ... Sie können meine Python-Implementierungen der Konvertierung von dB in einen Float (den Sie als Multiplikator für die Amplitude verwenden können, wie Sie oben zeigen) und umgekehrt sehen
Kurz gesagt, es ist:
%Vor%Um die Lautstärke um 6 dB zu reduzieren, multiplizieren Sie die Amplitude jedes Samples mit:
%Vor%