トップページ > 過去ログ > 記事閲覧
音楽再生について
名前: 日時: 2007/03/07 04:50

また質問です、その節はどうも有り難う御座います 同じ音楽データ(私は「mp3」使用しています) なのに再生できないデータがあるのです LoadSoundMem関数(メモリ読み込み用) PlaySoundMem関数(メモリ読み込み用を再生) を使用したのですが・・・・ 全然再生してくれません (PlaySound関数でも同じく駄目でした) ファイル名も間違っていないのですが・・・・ 因みにファイル名は極力 半角英数字 の方が良いのでしょうか? 自分はすべてのファイルを 全角英数字+全角ひらがな で書いてます

Page: 1 |

Re: 音楽再生について ( No.1 )
名前:管理人 日時:2007/03/08 12:06

 Dさんどうも、DXライブラリの管理人です。  申し訳ありません、最近再生できない mp3 ファイルがある という不具合を修正したのですが、まだ正式バージョンとして アップしていませんでした。m(_ _;m  宜しければこちらの最新バージョンをお試しになってみて下さい。 http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) > 因みにファイル名は極力 > 半角英数字 > の方が良いのでしょうか?  いえ、特にそういうことはありません。
Re: 音楽再生について ( No.2 )
名前: 日時:2007/03/09 01:29

やっぱり駄目でした 今度は「強制終了」させられてしまいます。 (「強制終了」でいいのかな?) ><ノ
Re: 音楽再生について ( No.3 )
名前:犀肥 日時:2007/03/09 10:41

Dさんはじめまして。犀肥と申します。 私も以前、そのような現象が発生し、こちらの掲示板に書き込みをさせて頂きました。 管理人さんの御助力により正常に再生されましたので、そのときのソースを掲載します。 参考にしてください。 正常に読み込まれていれば"OK"、読み込まれていなければ"ERROR"と表示されます。 二つ上の管理人さんのスレッドの最新バージョンを使ってください。 #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 = LoadSoundMem( "/*パス*/" ); 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 ; }
Re: 音楽再生について ( No.4 )
名前:wiz 日時:2007/03/09 12:02

>ファイル名も間違っていないのですが・・・・ ファイル名が間違っていなくても、 パスがあっていなければ読み込みできません。 差し支えなければ、フォルダ構成とソースコードを載せてください。 例えば) ファイル位置 C:\Test\Music.mp3 コード LoadSoundMem( "C:\Test\Music.mp3" ); >因みにファイル名は極力 >半角英数字 >の方が良いのでしょうか? ソースコード内に直接書くならば、 ファイル名に問わず、全角文字は 極力使わないことをお勧めします。 でも、使っちゃだめって事はないです。 (コメントとかわざわざ英語で書く必要ないですから。。。)
Re: 音楽再生について ( No.5 )
名前: 日時:2007/03/16 02:52

返信ありがとうございます えぇ〜っと今度はすべて再生しようとした すべてのMP3の曲が 「ERROR」 になりました ;; ん〜〜こうなりゃ自分のソースを掲載します (なんか自分のやり方が間違ってきた気がする ^^;) ソース内容: 画像データ・音声データをメモリに転送した後 「音声再生しながら画像を上下左右スクロール (表示制限あり)をする、 あと画面左上に座標の表示」 終了条件 ・ESC・リターンキーで終了 ・曲が終わるまで この二つのどちらか int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char *MUSIC_FileName[]={"/*パス*/”}; char *GRAPH_FileName[]={"/*パス*/”}; int MYGraphBOX[11]; //画像データメモリ保管用 int MYMusicBOX[11]; //音楽データメモリ保管用 int x = 0, y = 0,a,i, StringCr; char StrBuf[ 128 ], StrBuf2[ 32 ]; SetGraphMode( 800,600, 16 ) ; ChangeWindowMode( TRUE ) ; SetMainWindowText( "test" ) ; SetWindowSizeChangeEnableFlag( TRUE ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1; for(a=0;a</*任意の枚数*/10;a++){ MYGraphBOX[a]= LoadGraph( GRAPH_FileName[a] );//画像データをメモリ保管する } //音声データをメモリ保管する MYMusicBOX[1]=LoadSoundMem(MUSIC_FileName[1]) ; PlaySoundMem(MYMusicBOX[1],DX_PLAYTYPE_BACK); // 描画先画面を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; //曲が終了するまでループ while( CheckSoundMem(MYMusicBOX[1] ) == 1 ) { lstrcpy( StrBuf , "座標 X" ); // 文字列"座標 X"をStrBufにコピー itoa( x , StrBuf2 , 10 ); // Xの値を文字列にしてStrBuf2に格納 lstrcat( StrBuf , StrBuf2 ); // StrBufの内容にStrBuf2の内容を付け足す lstrcat( StrBuf , "座標 Y " );// StrBufの内容に文字列" Y "を付け足す itoa( y , StrBuf2 , 10 ) ; // Yの値を文字列にしてStrBuf2に格納 lstrcat( StrBuf , StrBuf2 ) ; // StrBufの内容にStrBuf2の内容を付け足す // 上下左右のキー入力に対応して x, y の座標値を変更する if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) x-=10; if( CheckHitKey( KEY_INPUT_RIGHT )== 1 ) x+=10; if( CheckHitKey( KEY_INPUT_UP ) == 1 ) y-=10; if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ) y+=10; StringCr = GetColor( 25 , 125 , 125 ) ;//文字・文字列のカラーリング // 画面に描かれているものをすべて消す ClearDrawScreen() ; //メモリに入っている画像データを表示 DrawGraph( x,y,MYGraphBOX[0] , FALSE ) ; DrawGraph( 1024*1+x,y,MYGraphBOX[1] , FALSE ) ; DrawGraph( 1024*2+x,y,MYGraphBOX[2] , FALSE ) ; DrawGraph( 1024*3+x,y,MYGraphBOX[3] , FALSE ) ; DrawGraph( 1024*4+x,y,MYGraphBOX[4] , FALSE ) ; DrawGraph( 1024*5+x,y,MYGraphBOX[5] , FALSE ) ; DrawGraph( 1024*6+x,y,MYGraphBOX[6] , FALSE ) ; DrawGraph( 1024*7+x,y,MYGraphBOX[7] , FALSE ) ; DrawGraph( 1024*8+x,y,MYGraphBOX[8] , FALSE ) ; // 座標文字列を描く DrawString( 0 , 0 , StrBuf , StringCr ) ; // 裏画面の内容を表画面に反映させる ScreenFlip() ; // 待たないと処理が早すぎるのでここで20ミリ秒待つ WaitTimer( 0 ) ; // Windows システムからくる情報を処理する if( ProcessMessage() == -1 ) break ; // ESCキー・リターンキーが押されたらループから抜ける if( CheckHitKey(KEY_INPUT_RETURN) == 1 || CheckHitKey(KEY_INPUT_ESCAPE) == 1 ) break ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } >犀肥さん・管理人さん
Re: 音楽再生について ( No.6 )
名前:wiz 日時:2007/03/09 13:11

>MYMusicBOX[1]=LoadSoundMem(MUSIC_FileName[1]) ; 提示されたコードではMUSIC_FileNameには パスが1つ(MUSIC_FileName[0])にしか格納されていませんがMUSIC_FileName[1]を渡しています。 #一応補足ですがC言語での配列の要素番号は #int Array[10];とすると要素番号は0〜9までです #1からではありません。 上に書いたように >char *MUSIC_FileName[]={"/*パス*/”}; のパスも正しいかどうか不明です。 読み込みに失敗しているのなら、 パスの指定が間違っている可能性があります。 犀肥さんの過去ログ ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=368
Re: 音楽再生について ( No.7 )
名前:犀肥 日時:2007/03/09 13:19

どうも、犀肥です。 Dさんのソースを拝見させて頂きました。 char *MUSIC_FileName[]={"/*パス*/”}; char *GRAPH_FileName[]={"/*パス*/”}; という記述ですが、パスを char 型に収めると、 ( 私は説明が下手くそなので省略しますが ) メモリへのロードがややこしくなると思います。 ですので for(a=0;a</*任意の枚数*/10;a++){ MYGraphBOX[a]= LoadGraph( GRAPH_FileName[a] );//画像データをメモリ保管する } や MYMusicBOX[1]=LoadSoundMem(MUSIC_FileName[1]); という記述をせずに、素直に MYGraphBOX[ a ] = LoadGraph( "/*パス*/" );//画像データをメモリ保管する や MYMusicBOX[ 1 ] = LoadSoundMem( "/*パス*/" ); としてみてはいかがでしょう。 見づらくて申し訳ありません。
Re: 音楽再生について ( No.8 )
名前: 日時:2007/03/09 17:36

SetCreateSoundDataType関数 を上記の自分と犀肥さんのソースに組み込んで見ました LoadSoundMem関数 PlaySoundMem関数 だけで再生されなかったMP3データが見事に再生しました。 因みに再生されなかった曲はいずれも 6分以上 (あ、これを行っておけば良かったですね すんませんm__ヾ) だったので。 返信ありがとうございました ってか、 お騒がせしてすいませんでした m__m; >管理人さん・犀肥さん・wizさん

Page: 1 |