2

数日前、これが私の質問で、答えを見つけました。多分これは他の誰かを助けるでしょう。

A. 問題の最初の部分: Flash を使用して音を増幅できますか? SoundTransform の AS3 ドキュメントには、音量属性について次のように記載されています。

"音量。0 (無音) から 1 (最大音量) までの範囲。

額面どおり、これは音を小さくすることしかできないことを意味します。実際、1 (1.0) より大きい値を指定すると、サウンドが増幅されます。サウンドが飽和して品質が低下するリスクがありますが、それは可能です。音声については、多くのことを回避できます。(音楽はそれほど寛容ではないので、実験してみてください。この方法は動的圧縮を行わないため、音楽により適しています。)

B. 問題の 2 番目の部分: 物事を行う順序。

右:

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

違う:

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

CS3 と CS4 でテストを行ったところ、異なる結果が得られました。CS3 では、「audioChannel.soundTransform = soundTransform;」の後に変換の音量を設定できました。そしてすべてが大丈夫でした。しかし、CS4 では効果がありませんでした。CS3 は参照渡しを使用して soundTransform を設定したのに対し、CS4 は値渡しセマンティクスを使用し、渡されたオブジェクトをコピーしたと思われます。CS4 のアプローチはより適切に設計されていますが、CS3 で正常に機能していたコードが壊れてしまいました。

C. 最後の質問は、デシベル値を音量で乗算できる係数に変換して、必要な量だけ音を増幅する (または静かにする) 方法です。

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

「デシベル」は正の数 (増幅するため) または負の数 (静かにするため) であることに注意してください。デシベルがゼロの場合、変更は発生しません。

デシベルの値が 3 の場合、振幅は (近似的に) 2 倍になります。値を 10 デシベルにすると、音量が 10 倍になります (正確に)。

4

1 に答える 1

4

デシベルの計算では、実際には10ではなく20を使用する必要があります。

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

デジタルオーディオは振幅であり、パワーではありません(これは音圧の表現であり、音響パワーではありません)。

于 2009-07-23T16:10:58.977 に答える