トップページ > 記事閲覧
SetLoopPosSoundMemと3Dサウンドについて
名前:ゆうたおる 日時: 2019/04/01 11:13

初めまして。 DxLibを使用してゲームを作っていた時に気になったことなのですが、 3Dサウンドの関数を使用した際に、SetLoopPosSoundMemを呼ぶと、2Dサウンドになってしまいます。 おかしいと思い、リファレンスに載っていた手順にSetLoopPosSoundMemを付け加えてやってみても、結果は同く2Dサウンドになってしまいました。 ↓リファレンスの手順にSetLoopPosSoundMemを加えたやつ↓ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoundHandle ; VECTOR EmitterPos ; VECTOR ListenerPos ; VECTOR ListenerDir ; float xadd ; // 1メートルに相当する値を設定する Set3DSoundOneMetre( 16.0f ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // リスナーの位置を初期化 ListenerPos = VGet( 320.0f, 0.0f, 240.0f ) ; // リスナーの向きを初期化 ListenerDir.x = 0.0f ; ListenerDir.y = 0.0f ; ListenerDir.z = 1.0f ; // リスナーの位置と向きを設定 Set3DSoundListenerPosAndFrontPos_UpVecY( ListenerPos, VAdd( ListenerPos, ListenerDir ) ) ; // 音を3Dサウンドとして読み込む SetCreate3DSoundFlag( TRUE ) ; SoundHandle = LoadSoundMem( "Test.wav" ) ; SetCreate3DSoundFlag( FALSE ) ; // 音が聞こえる距離を設定する Set3DRadiusSoundMem( 256.0f, SoundHandle ) ; // 音の再生位置を初期化 EmitterPos = VGet( 320.0f, 0.0f, 300.0f ) ; // 音の再生位置を設定 Set3DPositionSoundMem( EmitterPos, SoundHandle ) ;          SetLoopPosSoundMem(restart_time, soundHandle);     /* ここで呼ぶと、2Dサウンドになってしまう */ // 音の再生を開始 PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ; // メインループ xadd = 4.0f ; while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen(); // 音の再生位置をX軸方向に移動 EmitterPos.x += xadd ; if( EmitterPos.x > 640.0f || EmitterPos.x < 0.0f ) { xadd = -xadd ; EmitterPos.x += xadd ; } Set3DPositionSoundMem( EmitterPos, SoundHandle ) ; // リスナーの位置を描画 DrawBox( ( int )( ListenerPos.x - 8 ), ( int )( 480.0f - ( ListenerPos.z + 8 ) ), ( int )( ListenerPos.x + 8 ), ( int )( 480.0f - ( ListenerPos.z - 8 ) ), GetColor( 255,0,0 ), TRUE ) ; // 音の再生位置を描画 DrawBox( ( int )( EmitterPos.x - 8 ), ( int )( 480.0f - ( EmitterPos.z + 8 ) ), ( int )( EmitterPos.x + 8 ), ( int )( 480.0f - ( EmitterPos.z - 8 ) ), GetColor( 255,0,255 ), TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // サウンドハンドルの削除 DeleteSoundMem( SoundHandle ) ; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } バグなのか仕様なのか分からないので、ご教授願いたいです。 下記に環境等を記しておきます。 OS : Window10 Education (バージョン 1809) 64ビット CPU : Intel(R) Xeon(R) CPU E3-1226 v3 @ 3.30GHz RAM : 16.0GB GPU : NVIDIA Quadro K620 IDE : VisualStudio Community 2017 15.9.28307.481 DxLib : 3.20a XAudio2は使えます
メンテ

Page: 1 |

Re: SetLoopPosSoundMemと3Dサウンドについて ( No.1 )
名前:管理人 日時:2019/04/02 01:41

すみません、仕様となります 3Dサウンドは SetLoopPosSoundMem を使用した『途中ループ』の音の再生には対応していません m(_ _;m
メンテ
Re: SetLoopPosSoundMemと3Dサウンドについて ( No.2 )
名前:ゆうたおる 日時:2019/04/02 22:58

管理人さん、夜遅い中のご回答ありがとうございます。 なるほど、仕様でしたか。  無理を言って申し訳ないのですが、ループにも対応できるでしょうか。 もし、実装が難しい場合は、その理由をお聞きしたいです。
メンテ
Re: SetLoopPosSoundMemと3Dサウンドについて ( No.3 )
名前:管理人 日時:2019/04/03 00:58

> 無理を言って申し訳ないのですが、ループにも対応できるでしょうか。 はい、対応できましたので、よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.2 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) というか、すみません、仕様ではなくただのバグでした orz SetLoopPosSoundMem を使用すると『通常再生タイプ』のサウンドハンドルも 『ストリーム再生タイプ』のサウンドハンドルに変更される(『ストリーム再生タイプ』ではないと 途中ループできないため )のですが、何故か自分の中で『ストリーム再生タイプのサウンドハンドルは 3D再生に対応していない』という勘違いがありました なのでこれまで SetLoopPosSoundMem を使用すると2Dサウンドになってしまうのは 「『通常再生タイプのサウンドハンドル』を『ストリーム再生タイプのサウンドハンドル』に 変更する際に『3D再生タイプのサウンドハンドルかどうか』の情報が引き継がれていない」ことが 原因のバグでした、失礼いたしました m(_ _;m
メンテ
Re: SetLoopPosSoundMemと3Dサウンドについて ( No.4 )
名前:ゆうたおる(解決) 日時:2019/04/03 11:39

ちゃんとループに対応できていました! ありがとうございます m( _ _)m
メンテ

Page: 1 |

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

   クッキー保存