トップページ > 過去ログ > 記事閲覧
LoadSoundMemについて
名前:犀肥 日時: 2007/02/07 16:36

はじめまして。犀肥 ( "さいでぶ"と読んでください ) と申します。 DXライブラリ、使わせて頂いてます。 質問ですが、BGM の再生に int BGM = LoadSoundMem( "Resource/Music/BGM/Battle_01.mp3");// @ if( CheckSoundMem( BGM ) == 0 )// A PlaySoundMem( BGM , DX_PLAYTYPE_LOOP );// B という記述をするとビルドは通るのですが、実行すると 画面が真っ黒、無音の状態でフリーズしてしまいます。 この後、Aのみを削除してみると同じくフリーズ、 A、Bを削除してみても同じくフリーズしました。 @、A、Bを削除すると問題なく動作しました。 メモリに取り込む時点で何か問題があるのでしょうか。 パスは間違っていません。 Battle_01.mp3 は Windows Media Player にて再生できることを確認しました。 128kbps 、6.18MB 、6:45 です。 何方かご教授ください。

Page: 1 |

Re: LoadSoundMemについて ( No.1 )
名前:けいし 日時:2007/02/07 22:38

フリーズ、というのは、フルスクリーンモードでですか? ウインドウモードでもフリーズしますか? それとも、エラーメッセージが発生していますか?
Re: LoadSoundMemについて ( No.2 )
名前:お父さん 日時:2007/02/07 23:56

"Resource/Music/BGM/Battle_01.mp3" のところですが、パスは"Resource\\Music\\BGM\\Battle_01.mp3" とするべきじゃないでしょうか?
Re: LoadSoundMemについて ( No.3 )
名前:犀肥 日時:2007/02/08 10:52

フリーズは1024×768のウィンドウモードです。 エラーメッセージなどは特に表示されません。 パスは / でも大丈夫のはすですが…
Re: LoadSoundMemについて ( No.4 )
名前:wiz 日時:2007/02/08 10:53

とるあえず、LoadSoundMem関数が失敗してたら再生ができるわけもないので成功していることを確めては? printDX("LoadSoundMem Ret:%d", BGM ); if( BGM == -1 ){  return 1;//戻り値は適当 }
Re: LoadSoundMemについて ( No.5 )
名前:犀肥 日時:2007/02/08 13:45

そうですね、やってみます。
Re: LoadSoundMemについて ( No.6 )
名前:管理人 日時:2007/02/08 13:57

 犀肥さん始めまして、DXライブラリの管理人です。  LoadSoundMem は初期設定ではサウンドファイルがmp3等の圧縮された データ形式だった場合、読み込み時に全てPCM形式に変換するように なっていますので、恐らくフリーズしているのではなくmp3→PCM変換に 時間が掛かっているのだと思います。  SetCreateSoundDataType という関数で設定を変更することで 再生時にmp3→PCM変換をするようにして、LoadSoundMem 自体は 直ぐ終了するようにすることが出来ますので(その分再生時の負荷は高く なりますが)、宜しければ SetCreateSoundDataType 関数の解説を ご覧になってみてください。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html#R15N25
Re: LoadSoundMemについて ( No.7 )
名前:犀肥 日時:2007/02/08 14:04

そうなんですか、やってみます。
Re: LoadSoundMemについて ( No.8 )
名前:犀肥 日時:2007/02/08 14:21

管理人さんの仰る通り、SetCreateSoundDataType関数を 使ってみましたが、再生できません。 やはり真っ黒無音状態になってしまいます。 処理に時間が掛かっているのかと思い、5分ほど待ってみましたが、 相変わらずの状態です。 ソースを載せておきます。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode( 640 , 480 , 16 ); if( DxLib_Init() == -1 ) return -1 ; int BGM ; SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); BGM = LoadSoundMem( "Battle_01.mp3" ); PlaySoundMem( BGM , DX_PLAYTYPE_LOOP ); WaitKey(); DxLib_End(); return 0 ; }
Re: LoadSoundMemについて ( No.9 )
名前:管理人 日時:2007/02/10 16:33

 犀肥さんどうも、DXライブラリの管理人です。  宜しければ BGM = LoadSoundMem( "Battle_01.mp3" );  の後に if( BGM < 0 ) { DrawString( 0, 0, "ERROR", GetColor( 255,255,255 ) ); }  という記述を追加して、正常に読み込まれているかどうかをご確認 になってみて下さい。  あと、犀肥さんがお使いの環境は BorlandC++ と VisualC++ のどちらでしょうか?
Re: LoadSoundMemについて ( No.10 )
名前:犀肥 日時:2007/02/11 10:46

お手数をおかけしています。犀肥です。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); SetGraphMode( 640 , 480 , 16 ); if( DxLib_Init() == -1 ) return -1 ; int BGM ; SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE ); BGM = LoadSoundMem( "Battle_01.mp3" ); if( BGM < 0 ) { DrawString( 0, 0, "ERROR", GetColor( 255,255,255 ) ); } else DrawString( 0, 0, "OK", GetColor( 255,255,255 ) ); PlaySoundMem( BGM , DX_PLAYTYPE_LOOP ); WaitKey(); DxLib_End(); return 0 ; } でやってみました。結果は OK でした。別の音楽ファイルに変えてやってみたところ、 正常に再生されました。 Battle_01.mp3 になにか原因があるのでしょうか。 開発環境は Visual C++ です。
Re: LoadSoundMemについて ( No.11 )
名前:管理人 日時:2007/02/13 14:15

 犀肥さんどうも、DXライブラリの管理人です。  犀肥さんの仰るとおり、Battle_01.mp3 に何か原因がありそうです。 ただ、直接調べてみないと何が原因で正常に再生できないのかが 分かりませんので、もし差し支え無ければ Battle_01.mp3 をメールで BQE00322(アットマーク)nifty.com まで送って頂けないでしょうか?m(_ _)m
Re: LoadSoundMemについて ( No.12 )
名前:管理人 日時:2007/02/14 15:28

 犀肥さんどうも、DXライブラリの管理人です。  メールをお送り頂き有難うございます、Battle_01.mp3 が再生されない 原因が分かりました。  正常に再生されるように修正したバージョンをアップしましたので 宜しければお試し下さい。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)  原因は二つあり、片方はMP3ファイルのサイズ計算ミスだったので 修正出来たのですが、もう片方は使用メモリの容量に関するエラーで 現状では対応出来ていませんので、申し訳ありませんが再生時間の長い サウンドデータは SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMPRESS );  又は SetCreateSoundDataType( DX_SOUNDDATATYPE_FILE );  の設定に変更した上で LoadSoundMem で読み込んでください。m(_ _)m
Re: LoadSoundMemについて ( No.13 )
名前:犀肥 日時:2007/02/15 15:13

お手数をおかけしております。犀肥です。 管理人さん、ありがとうございます。 無事に再生できました。 これでゲーム作りが再開できそうです。 本当にありがとうございました。

Page: 1 |