Re: SetPanSoundMem関数について ( No.1 ) |
- 名前:管理人 日時:2013/09/13 01:23
DXライブラリでは現在 XAudio2 が使用できる環境では XAudio2 を使用して、
XAudio2 が使用できない環境では DirectSound を使用しています
XAudio2 では左右別々に音量設定をすることが出来ますが、DirectSound では
左右別々に音量を設定することが出来ません
DirectSound で実行したときと XAudio2 で実行したときで挙動が異なってしまうのは
よろしくないので、今のところDXライブラリでパンの処理を変更する予定はありません
すみません・・・
ただ、現状のライブラリの機能でも顔芸さんのお考えの方法を実現できるかもしれない方法があります
左用のサウンドハンドルと右用のサウンドハンドルを別々に持つという方法です
int SoundHandleL ;
int SoundHandleR ;
// 普通に読み込む
SoundHandleL = LoadSoundMem( "Sound.wav" ) ;
// 派生させてもう一つサウンドハンドルを作成する
SoundHandleR = DuplicateSoundMem( SoundHandleL ) ;
// パンで左側の出力だけにする
SetPanSoundMem( -10000, SoundHandleL ) ;
// パンで右側の出力だけにする
SetPanSoundMem( 10000, SoundHandleR ) ;
// 左側の音量を設定する
ChangeVolumeSoundMem( 24, SoundHandleL ) ;
// 右側の音量を設定する
ChangeVolumeSoundMem( 64, SoundHandleR ) ;
上記のようにすることで一つの音の音量を左右別々に設定することが出来ます
ただ、一つ問題として再生は
PlaySoundMem( SoundHandleL, DX_PLAYTYPE_BACK ) ;
PlaySoundMem( SoundHandleR, DX_PLAYTYPE_BACK ) ;
と、二つ同時に行うわけですが、若干ながらも再生開始時間に誤差が発生します
これが許容できる範囲なのかどうかは確認してみないとわかりません・・・
|
Re: SetPanSoundMem関数について ( No.2 ) |
- 名前:稲塚 日時:2013/09/13 03:16
横から失礼します。
適当な方法ですが、パンの偏りに合わせて音量を大きくするという方法でも、
擬似的に音量を上げることは出来ると思います。
// pos=左右の偏り。-1.0f〜1.0f
ChangeVolumeSoundMem( 100+abs(pos)*50, sh ) ; //偏り分だけ音量をプラス
SetPanSoundMem( pos*7500+pos*2500, sh ) ; //適当にバランスを考慮してパン適用
ただし、上記の式はおそらく数字的に正しくないうえ、
左右で音量に差があるステレオの音声ファイルでは違和感が出たりすると思うので、
あくまで擬似的な方法ですが……
|
Re: SetPanSoundMem関数について ( No.3 ) |
- 名前:管理人 日時:2013/09/14 20:12
> 稲塚さん
稲塚さんのお書き込みからパンと音量を組み合わせれば左右の音量を自由に設定できる
ということに気が付けました、ありがとうございます
> 顔芸さん
左右の音量を別々に設定する関数を実装しましたので、よろしければこれで正確なパンを
実装してみてください( DXライブラリのパンはとりあえず現状の仕様のままにします )
// サウンドハンドルの指定のチャンネルのボリュームを設定する( 0 〜 255 )
// Channel : 音量を変更するチャンネル 0:左 1:右
// VolumePal : 音量 0 〜 255
int ChangeChannelVolumeSoundMem( int Channel, int VolumePal, int SoundHandle ) ;
上記関数を追加したバージョンをこちらにアップしましたので、よろしければお使いください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
ところで何故「正確なパン」を実現されたいと思ったのでしょうか?
現状の仕様でもあまり不都合は発生しないような気がするのですが・・・
|