ページ 11

3Dサウンドの再生について

Posted: 2014年2月15日(土) 23:26
by coc
だいぶ前から分からず手を焼いているのですが、3Dサウンドの再生について質問させて下さい。
症状としては上手くファイルが再生されず、高い変な音に変換されてしまうというものです。
以下再現コードになります

コード:

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE); 
	
	if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;	//初期化と裏画面化

	// サウンドの読み込みとループ再生開始
	SetCreate3DSoundFlag( TRUE ) ;
	int SoundHandle = LoadSoundMem( "dat/sound/se/test.ogg" ) ;
	SetCreate3DSoundFlag( FALSE ) ;
	

    // 何かキーが押されるかウインドウが閉じられるまでループ
    while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){
		PlaySoundMem( SoundHandle, DX_PLAYTYPE_BACK ) ;
    }

    // DXライブラリの後始末
    DxLib_End() ;

    // ソフトの終了
    return 0 ;
}
因みに

コード:

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE); 
	
	if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;	//初期化と裏画面化

	// サウンドの読み込みとループ再生開始
	SetCreate3DSoundFlag( TRUE ) ;
	int SoundHandle = LoadSoundMem( "dat/sound/se/test.ogg" ) ;
	SetCreate3DSoundFlag( FALSE ) ;
    PlaySoundMem( SoundHandle, DX_PLAYTYPE_LOOP ) ;
	

    // 何かキーが押されるかウインドウが閉じられるまでループ
    while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){
		
    }

    // DXライブラリの後始末
    DxLib_End() ;

    // ソフトの終了
    return 0 ;
}
これだと正常に聞こえます。
もしかして3Dサウンドではバックグラウンド再生が出来ないのでしょうか?

また3Dサウンドフラグをたてていない時にバックグラウンド再生を試しましたが、正常に聞こえます。

原因が皆目検討付かず質問させて頂きました。
宜しくお願い致します。

Re: 3Dサウンドの再生について

Posted: 2014年2月15日(土) 23:31
by h2so5
本家の掲示板で聞いたほうが早いと思います。

Re: 3Dサウンドの再生について

Posted: 2014年2月15日(土) 23:34
by coc
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi
本家で質問致しました

Re: 3Dサウンドの再生について

Posted: 2014年2月15日(土) 23:35
by みけCAT
該当のスレッドに直接リンクするとわかりやすいと思います。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3232

Re: 3Dサウンドの再生について

Posted: 2014年2月15日(土) 23:46
by softya(ソフト屋)
PlaySoundMem( SoundHandle,DX_PLAYTYPE_BACK ) ;
で毎フレーム再生したらマズイのでは?
続きから再生されるとはいえ、毎フレーム再生を指示されるとスレッドとの間でタイミングのズレが起きそうです。

【補足】
ちなみに、外に追い出したら正常に再生されました。

コード:

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE); 
    
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1; //初期化と裏画面化
 
    // サウンドの読み込みとループ再生開始
    SetCreate3DSoundFlag( TRUE ) ;
    int SoundHandle = LoadSoundMem( "dat/sound/se/test.ogg" ) ;
    SetCreate3DSoundFlag( FALSE ) ;
    PlaySoundMem( SoundHandle, DX_PLAYTYPE_BACK ) ;
 	
    // 何かキーが押されるかウインドウが閉じられるまでループ
    while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() ){
        
    }
 
    // DXライブラリの後始末
    DxLib_End() ;
 
    // ソフトの終了
    return 0 ;
}

Re: 3Dサウンドの再生について

Posted: 2014年2月16日(日) 01:13
by coc
有り難う御座います。

恐らく自分のプログラムが原因かと思いますので、今一度全部見直してみます

ご返答感謝致しますm(_ _)m