トップページ > 記事閲覧
【バグ?】ソフトウェアサウンドで過去に読み込んだデータが入ってくる?
名前:was-blue.0793 日時: 2020/05/31 18:59

バグと思われる挙動を発見したので報告させていただきます。 まず、空のソフトウェアサウンドハンドルと1つ目の音源ファイルからソフトウェアサウンドハンドルを生成し、 空のソフトウェアサウンドハンドルに1つ目の音源から生成したソフトウェアサウンドハンドルの内容をコピーして、 コピーした先のソフトウェアサウンドハンドルから通常のサウンドハンドルを生成します。 この時、ソフトウェアサウンドハンドルは2つとも破棄し、通常のサウンドハンドルも使用後は破棄します。 次に、新たに空のソフトウェアサウンドハンドルと2つ目の音源ファイル(1つ目の音源ファイルより長さが短い)からソフトウェアサウンドハンドルを生成し、 空のソフトウェアサウンドハンドルに2つ目の音源から生成したソフトウェアサウンドハンドルの内容をコピーして、 コピーした先のソフトウェアサウンドハンドルから通常のサウンドハンドルを生成します。破棄タイミングは1つ目のものと同じです。 この時、ここでの空のソフトウェアサウンドハンドルの長さは1つ目の音源ファイルの長さ以上の長さにします。 この時、2つ目のコピーした先のソフトウェアサウンドハンドルの後ろに1つ目の音源から生成したソフトウェアサウンドハンドルの内容が混入します。 このバグは以上の操作をしても確実に再現できるとは限らないのですが、1つ目・2つ目の音源のどちらかが24bitWAVの音源だと再現するように思います。
メンテ

Page: 1 |

Re: 【バグ?】ソフトウェアサウンドで過去に読み込んだデータが入ってくる? ( No.1 )
名前:管理人 日時:2020/05/31 22:25

ご報告の処理を以下のようなプログラムで再現してみたのですが、2つ目のサウンドハンドルを再生した際に 1つめのサウンドの内容が混入することはありませんでした was-blue.0793さんが試されたプログラムとの差異はありますでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int SoftSound1 ; int SoftSound2 ; int SoundHandle1 ; int SoundHandle2 ; LONGLONG SampleNum ; int Ch1, Ch2 ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // 一つ目のサウンドデータの読み込み SoftSound1 = LoadSoftSound( "24bitTestSound1.wav" ) ; // 空のサウンドデータにコピー SampleNum = GetSoftSoundSampleNum( SoftSound1 ) ; SoftSound2 = MakeSoftSound( SoftSound1, GetSoftSoundSampleNum( SoftSound1 ) ) ; for( int i = 0 ; i < SampleNum; i++ ) { ReadSoftSoundData( SoftSound1, i, &Ch1, &Ch2 ) ; WriteSoftSoundData( SoftSound2, i, Ch1, Ch2 ) ; } // 一つ目のサウンドハンドルの作成 SoundHandle1 = LoadSoundMemFromSoftSound( SoftSound2 ) ; // 一つ目のサウンドデータを破棄 DeleteSoftSound( SoftSound1 ) ; DeleteSoftSound( SoftSound2 ) ; // 二つ目のサウンドデータの読み込み SoftSound1 = LoadSoftSound( "24bitTestSound2.wav" ) ; // 空のサウンドデータにコピー SampleNum = GetSoftSoundSampleNum( SoftSound1 ) ; SoftSound2 = MakeSoftSound( SoftSound1, GetSoftSoundSampleNum( SoftSound1 ) ) ; for( int i = 0 ; i < SampleNum; i++ ) { ReadSoftSoundData( SoftSound1, i, &Ch1, &Ch2 ) ; WriteSoftSoundData( SoftSound2, i, Ch1, Ch2 ) ; } // 二つ目のサウンドハンドルの作成 SoundHandle2 = LoadSoundMemFromSoftSound( SoftSound2 ) ; // 二つ目のサウンドデータを破棄 DeleteSoftSound( SoftSound1 ) ; DeleteSoftSound( SoftSound2 ) ; // 二つ目のサウンドハンドルを再生 PlaySoundMem( SoundHandle2, DX_PLAYTYPE_LOOP ) ; // キー入力待ち WaitKey() ; // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }
メンテ

Page: 1 |

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

   クッキー保存