トップページ > 過去ログ > 記事閲覧
PlaySoundMemで不正に終了する
名前:minato 日時: 2010/03/23 20:48

管理人様、いつもお世話になっております。 新しく公開されましたDXライブラリの3.02に更新し、リビルドを行いましたところ、今までにない不具合が発生してしまいました。 (ソースコードには一切の変更を行わず、ライブラリの更新を行ったのみです。) それは、BGMが一定のところまでくると必ず(再現度100%で)同じ箇所でプログラムが test.exe の 0x00f32de8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x09003000 に書き込み中にアクセス違反が発生しました。 のようなエラーを吐いて落ちてしまうというものです。 VisualStudio2008 StandardEditionのデバッガで追ってみると、 ScreenFlip(); // バックバッファの内容をプライマリバッファに転送 if( ProcessMessage() == -1 ) { // メッセージループに代わる処理をする exit(-1); } この辺りが原因のようなのです。(次に実行されるステートメントでは if( ProcessMessage() == -1 ) { のところに矢印マークがついていました。 そこでループ内の他の処理を全て排除し、 PlaySoundMem( BGM_Handle, DX_PLAYTYPE_LOOP ); // BGMを再生 これを行った後、 while( 1 ) { InputState = GetJoypadInputState( DX_INPUT_KEY_PAD1 ); // パッド&キー取得 if( ( InputState & PAD_INPUT_START ) != 0 ) { exit( 0 ); } // ESCキーが押されていれば終了処理へ ScreenFlip(); // バックバッファの内容をプライマリバッファに転送 if( ProcessMessage() == -1 ) { // メッセージループに代わる処理をする exit(-1); } } 以下のみにして原因を絞り込もうとしたところ、やはり同様のエラーを起こしたことからPlaySoundMemに何らかの問題があるように思われます。 更新履歴を確認しましたところ、 >3.02  SetCurrentPositionSoundMem と GetCurrentPositionSoundMem を追加。 とあり、やはりこの関数周りに何らかの手が加えられているであろうことからこれが原因である予測し報告いたしました。 お手数ですが、ご確認の方をよろしくお願いいたします。 なお、再生しようとしていたファイルはOGGファイルです。今まで問題なく再生できていましたのでこれが問題とは考えにくいですが、一応ご報告しておきます。

Page: 1 |

Re: PlaySoundMemで不正に終了する ( No.1 )
名前:minato 日時:2010/03/23 21:38

※情報追記 なぜかReleaseビルドでは正常に動作、Debugビルドでのみ発生する問題ということになってしまいました。 あまり良い情報提供ができず申し訳ございません・・・
Re: PlaySoundMemで不正に終了する ( No.2 )
名前:いっち 日時:2010/03/23 21:53

問題が発生するデータは特定のファイルのみでしょうか? それとも、複数のファイルで発生するのでしょうか? 事象の発生するプロジェクトとデータファイルを丸ごと一式圧縮して、 メールで管理人さん宛てに送っておくと調査して頂きやすいと思います。 (たぶん怒ったりはなさらないと思います・・・)
Re: PlaySoundMemで不正に終了する ( No.3 )
名前:minato 日時:2010/03/23 22:40

色んなファイルに差し替えて試してみましたが、どうやら特定ファイルのみみたいです。 丸ごと送りたいのですが、他人の著作物なのでちょっとできないです…… SetLoopSamplePosSoundMem と SetLoopStartSamplePosSoundMem でループ位置を指定していたので、これを外してみましたが関係なかったようでした。 もう一つ出せる情報がありましたので追記しておきます。 SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); を指定しております。 そこで、ここを変更してみることにしました。 ・DX_SOUNDDATATYPE_MEMPRESS 同様に、特定の再生箇所で落ちる ・DX_SOUNDDATATYPE_MEMNOPRESS_PLUS ログに「ストリーム風サウンドバッファの作成に失敗しました」と表示され 「ウインドウを閉じようとしています ウインドウが破棄されようとしています ソフトを終了する準備が整いました」と表示され終了する ・DX_SOUNDDATATYPE_MEMNOPRESS 読み込みの時点で test.exe の 0x00cf2fe8 で初回の例外が発生しました: 0xC0000005: 場所 0x005a4000 を読み込み中にアクセス違反が発生しました。 test.exe の 0x00cf2fe8 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x005a4000 を読み込み中にアクセス違反が発生しました。 となり落ちる となりました。以上のことから、解凍の部分に問題がある可能性があります。 また、Releaseビルドではどの形式にSetCreateSoundDataTypeした場合でも正常に動作しました。
Re: PlaySoundMemで不正に終了する ( No.4 )
名前:いっち 日時:2010/03/23 23:31

下記のサイトにてOGGのフリー素材が配布されています。 事象の発生するデータを共有できると調査しやすいので、お手数とは思いますが、宜しければお試し下さい。 Pianos DauGe様 > ttp://pianosdauge.org/ > ttp://pianosdauge.org/BGM/list.html
Re: PlaySoundMemで不正に終了する ( No.5 )
名前:minato 日時:2010/03/24 00:33

上から順に10つほどダウンロードして試してみましたが、全て正常に再生できました。 やはりこちらのファイルに問題があるようですね。しかし、一般的なプレイヤーソフトでは再生できますし、DXライブラリでもReleaseビルドなら問題ないというのも気になります。 ビルド方法を変えるだけで正常に動作していますので大きな問題はないですが、やはりこちらで解決方法を探るのは難しそうですね。管理人さんの見解を待たせていただくことにします。
Re: PlaySoundMemで不正に終了する ( No.6 )
名前:Masao 日時:2010/03/25 03:54

一時しのぎにしかなりませんが、何かのソフトを使ってOGGにまた変換してみると直ってたりしてそうですね。
Re: PlaySoundMemで不正に終了する ( No.7 )
名前:minato 日時:2010/03/26 02:35

ソースを色々変えてビルドし直していたら、いつの間にか症状が改善していました。……どういうことなのかさっぱりです。 ご迷惑をおかけしました。
Re: PlaySoundMemで不正に終了する ( No.8 )
名前:sy(サイ) 日時:2010/03/29 10:08

上記ソースとの違いを示して下されば、今後このような事が起こった時の手助けになるかもしれません。

Page: 1 |