トップページ > 記事閲覧
SetPanSoundMem関数について
名前:顔芸 日時: 2013/09/10 12:13

本関数のリファレンスの説明に >下がったぶん反対側の音量が上がることはありません。 ので 正確な意味でのパンではありません とありますが,これを実現する方法は無いのでしょうか・・・ 例えば左右(正負)別々に比率を指定できれば SetPanSoundMem((int)((Rate + 1.0f) * 5000.0f), SoundHandle); SetPanSoundMem((int)((Rate - 1.0f) * 5000.0f), SoundHandle); とすれば実現可能に思えたのですが,残念ながら現状では実現できませんでした. 何か方法があればご教授お願いいたしますm(_ _)m
メンテ

Page: 1 |

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)」をして下さい) ところで何故「正確なパン」を実現されたいと思ったのでしょうか? 現状の仕様でもあまり不都合は発生しないような気がするのですが・・・
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存