- 締切済み
waveOut関数での音量・音の強さ(db)の目安が判りません
http://www13.plala.or.jp/kymats/study/MULTIMEDIA/waveOut_func.htmlでは、 >サンプルでは128段階の音量調節を行えるように、512(=0xFFFF/128)ずつ値を上下させています。 と書かれています。 サンプルでは、1回音量を上げるたびに値が512ずつ上がり、1回音量を下げるたびに値が512ずつ下がるように設定されてあります。 この512が基準になる理由がよくわかりません。 これをdb単位で変更するように設定したいのですが、もともとの512の基準の意味がよくわからないため、この512をどのくらいの値に変えればよいのかわからずにいます。 1回音量を上げるたびに1db上がり、1回音量を下げるたびに1db下がるように設定するには、この512をどの値に変更すれば良いでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
あ, 音圧の場合はそっちでしたっけ>#2. ああ, 1次の FIR で 6 dB/oct だから 20倍しないといけないのか.
- php504
- ベストアンサー率42% (926/2160)
最大値の32767を仮に0dBとします。これを1.122で割っていきます 0dB=32767 -1dB=29204 -2dB=26028 -3dB=23198 -4dB=20675 -5dB=18428 -6dB=16424 -6dBでほぼ半分になります -7dB=14638 -8dB=13064 -9dB=11628 -10dB=10363 -11dB=9237 -12dB=8232 -12dBで半分の半分(最初の1/4) -13dB=7337 -14dB=6539 -15dB=5828 -16dB=5194 -17dB=4630 -18dB=4126 -18dBで最初の1/8 このように1dBがいくらという決め方は出来ません。 現在の音量に1.122をかけると1dBアップ1.122で割ると1dBダウンとしてください
- KoHal
- ベストアンサー率60% (110/181)
引用先の解説をもう一度良く読んでください。 ボリュームの大きさは1チャンネルあたりを2バイトで表し最小値0最大値が0xffffとありますね。 0xffff=65535ですから、ボリュームは0~65535で全65536通りの値で表されることになります。 これを128段階に分解するので、65536÷128=512、つまり512ずつ上下させればよいとなります。 10進数で見るとずいぶん半端な数値ですが、念のため同じ計算を16進数で表せば 65535=0xffff, 65536=0x10000, 128=0x80, 512=0x200ですから 65536÷128=512 → 0x10000÷0x80=0x200 となり非常に切りのいい計算になります。 つぎ。 音圧デシベルは 20log(増幅比)ですから、1dBで10^(1/20)=1.12201845430196… 音量を1dB増加させるたびにこの値をかけて行けばよいことになります。累乗になりますのでご注意。
- Tacosan
- ベストアンサー率23% (3656/15482)
1 B = 10 dB が「10倍」だから, 1 dB は「10^0.1倍」です. ちなみに「512 が基準になっている」のはもともと「128段階の音量調節ができるようにする」ため.
補足
質問したのは1dbの定義や意味ではなく、512をどう変更すれば良いのかです。 「512が基準になっている」のが「128段階の音量調節ができるようにする」ためであることについては、既にURL先からこちらが引用した一文の通りです。 >>サンプルでは128段階の音量調節を行えるように、512(=0xFFFF/128)ずつ値を上下させています。 最初に取り上げたこの引用文と、「ちなみに」から始まっている >「512 が基準になっている」のはもともと「128段階の音量調節ができるようにする」ため. というご指摘は、ほとんど単に言い換えただけのものに過ぎないと思えてなりません。 なぜ「512が基準になっている」場合に「128段階の音量調節ができる」のかを理解するためには、何らかの知識が必要なのだと思います。ですが最初に取り上げた引用文やその他URL先の説明を読んでもそれがわからず、その結果dbごとの音量調節を配備するための方向性が掴めなかったので、ここで質問させていただきました。