スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【コード】Xaudio2 で音量変更

XAudio2 にて、音量変更に成功しました。
と言ってもそんな難しい事はありません。

IXAudio2SourceVoice(IXAudio2Voice) のメンバメソッド SetVolume を使うだけです。
ソースボイスに対しての音量を変更できます。


HRESULT SetVolume(
float Volume,
UINT32 OperationSet = XAUDIO2_COMMIT_NOW
);

[ MSDN ] : http://bit.ly/wTT5I4
中身はこんな感じで、第一引数にボリュームを設定してあげればいいだけです。
めっっちゃ簡単です。

戻り値はこんな風に書いてます。

Returns S_OK if successful, an error code otherwise.
See XAudio2 Error Codes for descriptions of error codes


関数が成功すれば S_OK 、失敗すればエラーコードが返ってきます。
エラーコードは XAudio2 のエラーコード を見てねらしいです。



扱い自体は簡単なんですけど意味不明な単語が多すぎてさっぱりなのも事実。
ゲインってなんじゃらほい?って感じです。
とりあえず重要そうな所?だと思います。

XAUDIO2_MAX_VOLUME_LEVEL (-2^24 to 2^24), with a maximum gain of 144.5 dB


XAUDIO2_MAX_VOLUME_LEVEL(多分扱える範囲)は、-2^24 ~ 2^24 の間だそうです。
最大ゲインは 144.5db らしいですが良く解らない;;

また、こんな事も書かれてます。

A volume level of 1.0 means there is no attenuation or gain and 0 means silence.


ボリュームレベル 1.0 は、衰弱ないし、ゲインがないと言う意味です。
また、0 は無音です。

と言う事は、1.0f が 100%、0.0f が 0% と言う意味なのではないでしょうか。
しかし、ゲインがないという事はどういう事なのか…。


例えばこんな風に使ってみる。

IXAudio2SourceVoice *pBGMSVoice; (pBGMSVoice は随時初期化して下さい)

pBGMSVoice->SetVolume(0.5f);
これで BGM の音量を半分(のはず)に出来る!
オプションとかで音量変更したいならこれを使えばいい訳ですね。
SetVolume があるんだから勿論 GetVolume もある。

ただこの GetVolume … 戻り値がないのです。

void GetVolume(
float *pVolume
)


[ MSDN ] : http://bit.ly/zAKwgx

float volume = IXAudio2Voice::GetVolume();

直感的にはこんなイメージなんですけどねw
ちゃんとボリューム入れる用の変数を用意してあげて下さい;

ゲッターで戻り値がないのもなんか気持ち悪いので、
私は、XAudio2 のクラス内に、float 型の m_Volume というメンバ変数を持たせてます。
XAudio2 クラスのメンバメソッドである GetVolume メソッドでこの m_Volume を戻り値で取得します。
float CXAUDIO2::GetVolume()const
{
return m_Volume;
}


また、SetVolume メンバメソッドでは m_Volume に設定するボリュームを代入してます。
(実際はのメンバには、BGM/SE用のソースボイスだったり、ボリューム変数を持ってます)


と言う訳で、今回は XAudio2 でボリューム設定でした。
これでオプションでの BGM/SE の音量調節が出来るってもんです。

この記事へのコメント

トラックバック

URL :

検索フォーム
プロフィール

DVDM

Author:DVDM
自作ゲームの開発過程ブログ。
赤髪愛なら誰にも負けない。

 
Pixiv バナー


ブロとも申請フォーム
最新記事
カテゴリ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
ブロとも一覧
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。