2009-06-23 6 views
2

Vor ein paar Tagen war das meine Frage, und ich fand die Antwort. Vielleicht hilft das jemand anderem.Wie verstärke ich Sounds mit einer bestimmten Anzahl von Dezibel in AS3?

A. Der erste Teil des Problems: Können Sie Ton mit Flash verstärken? Die AS3 Dokumentation für Transform sagt dies über das Volumen Attribut.

„Das Volumen, von 0 (stumm) bis hin zu 1 (volle Lautstärke)

Auf den ersten Blick bedeutet dies, können Sie nur leiser machen klingt. In der Tat, wenn Sie einen Wert größer als eins (1,0) liefern, werden die Klänge verstärkt.Sie ​​riskieren, den Klang zu sättigen und schlechte Qualität zu bekommen, aber Sie können es tun, und für die Stimme können Sie viel durchkommen der zweite Teil des Problems ist weniger nachsichtig, so Experiment Diese Methode dynamische Kompression nicht tun, die Musik besser geeignet ist)

B.:... die Reihenfolge, in der Sie Dinge tun

RECHTS:

soundTransform = new SoundTransform(); 
soundTransform.volume = volume * volumeAdjustment; 
audioChannel.soundTransform = soundTransform; 

FALSCH:

soundTransform = new SoundTransform(); 
audioChannel.soundTransform = soundTransform; 
soundTransform.volume = volume * volumeAdjustment; 

Ich habe einige Tests in CS3 und CS4 und unterschiedliche Ergebnisse bekommen. In CS3 konnte ich die Lautstärke für die Transformation AFTER "audioChannel.soundTransform = soundTransform;" und alles war gut. Aber in CS4 hatte es keinen Effekt. Ich vermute, dass CS3 per Verweis verwendet wird, um die SoundTransform festzulegen, während CS4 eine Semantik für die Übergabe als Wert verwendet und das übergebene Objekt kopiert. Der CS4-Ansatz ist besser gestaltet, hat aber meinen Code, der in CS3 funktioniert, gebrochen.

C. Die letzte Frage ist, wie man einen Dezibelwert in einen Faktor umwandelt, der mit der Lautstärke multipliziert werden kann, um den Klang um den gewünschten Betrag zu verstärken (oder zu leiser).

var multiplier:Number = Math.pow(10, decibels/20); // Power vs. amplitude 

Beachten Sie, dass „Dezibel“ kann eine positive Zahl sein (zu verstärken) oder eine negative Zahl (um leiser). Wenn Dezibel Null ist, tritt keine Änderung auf.

Ein Wert für Dezibel von 3 wird (in enger Annäherung) die doppelte Amplitude haben. Ein Wert von 10 Dezibel erhöht das Volumen um das Zehnfache (genau).

+0

Sie sollten den Antwortteil dieser Frage in eine tatsächliche Antwort unten verschieben, damit sie nicht als unbeantwortete Frage angezeigt wird. – endolith

Antwort

4

Ihre Dezibel Berechnung sollte eigentlich 20 verwenden, nicht 10:

var multiplier:Number = Math.pow(10, decibels/20); 

Digital audio is amplitude, not power (es ist eine Darstellung des Schalldrucks, nicht Macht klingen).

+0

Sie haben Recht. Danke, dass du darauf hingewiesen hast. Ich werde meinen Beitrag bearbeiten. –

Verwandte Themen