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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
coc

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

#1

投稿記事 by coc » 12年前

だいぶ前から分からず手を焼いているのですが、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サウンドフラグをたてていない時にバックグラウンド再生を試しましたが、正常に聞こえます。

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 12年前

本家の掲示板で聞いたほうが早いと思います。

coc

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

#3

投稿記事 by coc » 12年前

ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi
本家で質問致しました

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

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

#4

投稿記事 by みけCAT » 12年前

該当のスレッドに直接リンクするとわかりやすいと思います。
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3232
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 12年前

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 ;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

coc

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

#6

投稿記事 by coc » 12年前

有り難う御座います。

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る