トップページ > 過去ログ > 記事閲覧
3Dサウンド機能について
名前:なご 日時: 2013/05/03 21:24

すみません、3Dサウンド機能についてお聞きしたいのですが、 リファレンスを見ても3Dサウンド機能の関数が載っておらず、使い方がいまいちわかりません。 もし、よろしければ、どなたか簡単なサンプルコード等を教えて頂けないでしょうか? よろしくお願いします。

Page: 1 |

Re: 3Dサウンド機能について ( No.1 )
名前:管理人 日時:2013/05/04 18:06

実装テストに使用したプログラムでよろしければどうぞ 上下左右キーでリスナーの位置を移動、Z/Xキーでリスナーの向きを変更します 緑の四角形が音の位置で、赤い四角はリスナーの位置、赤い四角から伸びる白い線は リスナーの向きを示しています #include "DxLib.h" #include <math.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoundHandle ; VECTOR SoundPos ; VECTOR ListenerBackPos ; VECTOR ListenerPos ; float ListenerAngle ; VECTOR Temp ; // ウインドウモードで起動 ChangeWindowMode( TRUE ); // 64.0f で1メートルとする Set3DSoundOneMetre( 64.0f ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // サウンドの読み込みとループ再生開始 SetCreate3DSoundFlag( TRUE ) ; SoundHandle = LoadSoundMem( "Test.wav" ) ; SetCreate3DSoundFlag( FALSE ) ; PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // リスナーの位置と向きを初期化 ListenerPos = VGet( 220.0f, 0.0f, 240.0f ) ; ListenerAngle = 0.0f ; // サウンドの座標を設定 SoundPos = VGet( 320.0f, 0.0f, 240.0f ) ; Set3DPositionSoundMem( SoundPos, SoundHandle ) ; // サウンドが届く( 音が聞こえる )範囲を設定 Set3DRadiusSoundMem( 256.0f, SoundHandle ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen(); // 動く前の位置を保存 ListenerBackPos = ListenerPos ; // キー操作 if( CheckHitKey( KEY_INPUT_LEFT ) ) ListenerPos.x -= 4.0f ; if( CheckHitKey( KEY_INPUT_RIGHT ) ) ListenerPos.x += 4.0f ; if( CheckHitKey( KEY_INPUT_UP ) ) ListenerPos.z += 4.0f ; if( CheckHitKey( KEY_INPUT_DOWN ) ) ListenerPos.z -= 4.0f ; if( CheckHitKey( KEY_INPUT_Z ) ) ListenerAngle -= DX_PI / 30.0f ; if( CheckHitKey( KEY_INPUT_X ) ) ListenerAngle += DX_PI / 30.0f ; // 向きを計算 Temp.x = sin( ListenerAngle ) ; Temp.y = 0.0f ; Temp.z = cos( ListenerAngle ) ; // 向きを画面に描画 DrawLine( ListenerPos.x, 480.0f - ListenerPos.z, ListenerPos.x + Temp.x * 40.0f, 480.0f - ( ListenerPos.z + Temp.z * 40.0f ), GetColor( 255,255,255 ) ) ; // リスナーの位置を向きを設定 Set3DSoundListenerPosAndFrontPos_UpVecY( ListenerPos, VAdd( ListenerPos, Temp ) ) ; // リスナーの速度を設定( 60倍しているのは、指定の単位が秒速なので、60fpsで動作する場合は // 1フレーム分の移動距離=60分の1秒分の距離であるため ) Set3DSoundListenerVelocity( VScale( VSub( ListenerPos, ListenerBackPos ), 60.0f ) ) ; // リスナーの位置とサウンドの位置を画面に描画 DrawBox( ListenerPos.x - 8, 480.0f - ( ListenerPos.z + 8 ), ListenerPos.x + 8, 480.0f - ( ListenerPos.z - 8 ), GetColor( 255,0,0 ), TRUE ) ; DrawBox( SoundPos.x - 8, 480.0f - ( SoundPos.z + 8 ), SoundPos.x + 8, 480.0f - ( SoundPos.z - 8 ), GetColor( 0,255,0 ), TRUE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
Re: 3Dサウンド機能について ( No.2 )
名前:なご(解決) 日時:2013/05/07 21:34

助かりました。ありがとうございます! お手数おかけしました〜

Page: 1 |