トップページ > 記事閲覧
ループ位置指定したサウンド再生中にサウンドデバイスがなくなるとアクセス違反
名前:SmokingWOLF 日時: 2024/06/19 21:12

いつもDXライブラリにお世話になっております。 ループ設定をしたBGM再生中、サウンドデバイスを1つもない状態にすると まれにアクセス違反が発生する現象を確認しましたのでご報告いたします。 [再現ソースコード] #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); // ウィンドウモードに if (DxLib_Init() == -1) { return -1; } // DXライブラリ初期化処理 DxLib::SetAlwaysRunFlag(TRUE); // 非アクティブで処理を実行 // Windows内のメディアファイルを指定、もしなければ適当なものを再生してください const char* FileName = "C:\\Windows\\Media\\Ring01.wav"; int handle; if((handle = LoadSoundMem(FileName)) != -1){ SetLoopTimePosSoundMem(200, handle);//★適当にループ位置を入力(この行を抜いた場合はアクセス違反が起きなくなります) PlaySoundMem(handle, DX_PLAYTYPE_LOOP); // ループ再生 DrawString(30, 230, "サウンドループ再生中。この状態で「再生」用のサウンドデバイスを\r\n「0個」にするとアクセス違反が発生します\r\n(キーを押すと終了)", GetColor(255, 255, 255));//表示 WaitKey(); // キーの入力待ち } DxLib_End(); return 0; // ソフトの終了 } [状況] 「サウンドデバイスが1つ以上ある状態」で上記ソースコードを実行中、 Windowsの「サウンド」プロパティで「サウンドデバイスを全て無効化」(Win11の場合)すると 以下の関数呼び出し先でアクセス違反が発生します。 (以下はVisual Studioの呼び出し履歴をコピーしたもの、上であるほど奥深くの関数です。行数は不明です) > DxLib::_MEMCPY(void *,void const *,unsigned int) DxLib::RunSoundConvert(struct DxLib::SOUNDCONV *,void *,unsigned int) DxLib::SoundDataCopy(struct DxLib::SOUNDBUFFERLOCKDATA *,struct DxLib::SOUNDCONV *,unsigned long) DxLib::ProcessStreamSoundMem_UseGParam(int,int) DxLib::ProcessStreamSoundMemAll(void) DxLib::StopMusicMem_PF(struct DxLib::MIDIHANDLEDATA *) ただときどき再現しなくなることもあり、完全な再現条件が分かっていません。 コンパイル環境はVisual Studio Community 2022の「x86」でした。 環境依存の問題かもしれませんが、よければ一度ご確認いただけますと幸いです。
メンテ

Page: 1 |

Re: ループ位置指定したサウンド再生中にサウンドデバイスがなくなるとアクセス違反 ( No.1 )
名前:管理人 日時:2024/06/19 23:48

ご情報ありがとうございます 手元の環境は Windows10 ですが、再生中にサウンドデバイスを全て無効にすることで 本件の現象を再現できました サウンドデータをサウンドバッファにコピーする際に全てのサウンドデバイスが無効になっていると サウンドバッファのロックに失敗するのですが、関数 SoundDataCopy の中でサウンドバッファの ロックが成功したかどうかを判定していない箇所があり、それが原因で不正なメモリアクセスが 発生してしまっていました ロックに失敗した場合は何もせず関数から抜けることで手元ではアクセス違反が発生しないようになりましたので よろしければこちらの修正版をお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用
メンテ
Re: ループ位置指定したサウンド再生中にサウンドデバイスがなくなるとアクセス違反 ( No.2 )
名前:SmokingWOLF(解決済み) 日時:2024/06/20 14:34

早々のご対応ありがとうございます! 導入させていただいたところ、こちらでも同現象が発生しなくなることを確認いたしました。 詳しい問題箇所についてのご説明もありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存