Ich versuche, die Komprimierung des Audio-Dynamikbereichs in JavaScript zu implementieren (ohne Verwendung der Web-Audio-API).
Es gibt viele Artikel für Tontechniker und einige hochrangige Dokumentationen, aber ich konnte keine hilfreiche Referenz für die tatsächliche Implementierung der Komprimierung des digitalen Dynamikbereichs finden.
Soweit ich weiß, gibt es mindestens drei Schritte zur Berechnung des gleichgerichteten Signals.
- Berechnung des Eingangspegels
- Berechnen der Verstärkung, die auf das Signal angewendet werden soll
- Anwenden der Verstärkung
Ich verarbeite das Audio in Blöcken, also dachte ich für 1) daran, den Effektivwert eines Blocks zu berechnen
Irgendwelche Hinweise auf eine gute Referenz? Oder jemand, der bereit ist, mir die Schritte zu erklären, die erforderlich sind, um dies umzusetzen?
audio
dynamic-range-compression
sebpiq
quelle
quelle
Antworten:
Hier sind ein paar Vorschläge:
Das Prinzip besteht darin, eine Hüllkurve des Signals zu erstellen (gesteuert durch Angriff und Freigabe), diese Hüllkurve mithilfe einer Übertragungsfunktion (gesteuert durch Verhältnis, Schwelle und Knie) zu formen und dieses Ergebnis dann wieder auf das ursprüngliche Signal anzuwenden. Oft folgt eine Make-up-Gain-Phase.
Die Antwort von @ Deve schlägt einige mögliche Übertragungsfunktionen vor.
quelle
Für einen einfachen Start würde ich eine nichtlineare Kennlinie , die Ihr Eingangssignal komprimiert:G( x )
Attack und Release wirken sich auf verschiedene Sounds wie Kicks, Snares und Vocal aus. Sie legen fest, wie lange vor Erreichen des Schwellenwerts der Kompressor arbeiten soll und wie lange er noch arbeiten soll, nachdem das Signal den Schwellenwert unterschritten hat. Um dies zu implementieren, müssen Sie eine Art Vorausschau verwenden.
quelle