トップページ > 過去ログ > 記事閲覧
音量調整関数について
名前:Dixq 日時: 2009/11/23 16:48

お世話になっています。今回は音量調整関連の関数についての質問です。よろしくお願いします。 動画の音量調整を行おうと、 動画を読み込んだ直後にSetMovieVolumeToGraphをしているのですが、 動画が再生される最初の一瞬だけ音が大きいのです。 一瞬大きな音(通常の音量)がなってから0,1秒後位にセットした音量になります。 また、この関数や、SetVolumeSoundFileの音量指定用の値0〜10000は変化量が均一ではないと思うのですが (5000以下はほとんど聞こえないとか、同じ数ずつ値を上げても急に大きく、小さく聞こえるようになる等) どうすれば一次直線的に音量を上げ下げすることができるでしょうか? よろしくお願いいたします。

Page: 1 |

Re: 音量調整関数について ( No.1 )
名前:バトーキン 日時:2009/11/25 02:11

>音量の変化 PCのプログラムで同じ事が言えるのか分かりませんが、 楽器的には、ボリュームの抵抗値は、 直線的に変化させるのではなく、対数的(?)に変化させるものらしいです。 でないと聴感的に、音量の変化が不自然になるとか。 www.ikebe-gakki.com/realshop/wsr/wsrlove/wsr-love16.html okwave.jp/qa2656752.html もし関係の無い話だったら、ごめんなさいです。
Re: 音量調整関数について ( No.2 )
名前:IW 日時:2009/11/28 03:15

多分バトーキンさんのおっしゃっている通り、対数ベースの数値で、10000が 0db、0が -100dbになっているのだと思います。
Re: 音量調整関数について ( No.3 )
名前:御津凪 日時:2009/11/28 14:16

(DXライブラリ内部で使用している)DirectSound でも対数ベースの数値で指定して行えるので、 下記のような計算式で線形的に補完出来るかと思います。 // % 単位の値を渡し、 dB 単位に変換する static inline long Calc_dB( int par ){ return (par == 0) ? -10000 : ((int)(log10f((float)par) * 5000.0f) - 10000); } 上記の式は私が DirectSound を直接扱っていたときに使用していた計算関数です。 しかし、範囲が違う(0 〜 -10000 を返す)し、%より細かい単位を指定できないのでそのままでは使えませんが。
Re: 音量調整関数について ( No.4 )
名前:Dixq 日時:2009/11/28 23:47

>>バトーキンさん >>IWさん ありがとうございます。 なるほど、そういうことでしたか。 ということは自分で一次関数的に使えるような関数を自作した方が扱いやすそうですね。 ChangeVolumeSoundMemと仕様が違うのはどうしてだろうと思っていましたが、 そういう理由がありそうですね。非公開関数ですし。 >>みつなぎさん ・・と思っていたら早速有用な情報をありがとうございます^^; なるほど、早速使ってみますね。

Page: 1 |