トップページ > 過去ログ > 記事閲覧
音声ファイルについて
名前:oau 日時: 2008/12/08 10:50

LoadSoundMemを使用しmp3の音声ファイルをメモリに読み込みPlaySoundMemで再生したところ いくつか再生されないmp3がありました これには再生される基準値のようなものがあるのでしょうか?

Page: 1 |

Re: 音声ファイルについて ( No.1 )
名前:Will 日時:2008/12/08 13:59

2点確認してください。 再生されないmp3ファイルはメディアプレイヤー等では再生されますか? 再生されないmp3ファイルをLoadSoundMemしたときに-1が返ってきていませんか?
Re: 音声ファイルについて ( No.2 )
名前:Sura 日時:2008/12/09 13:14

>Will様 横レス失礼いたします。 oau様が仰るような現象が再現されました。 "KeyInputString()について"のトピックス ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=1109 にて管理人様から頂いたファイルで 再構築すると不具合が出ました。 >再生されないmp3ファイルはメディアプレイヤー等では再生されますか? に関しては再生できました。 >再生されないmp3ファイルをLoadSoundMemしたときに-1が返ってきていませんか? については以下のコードで確認したところ SetCreateSoundDataType()で、 DX_SOUNDDATATYPE_MEMPRESSを指定した後 mp3(実はoggも)を再生しようとすると再生できませんが、戻り値は0を返します。 最悪の時にはPlaySoundMem()のところで強制終了してしまいました。 //テストコード #include"Dxlib.h" //サウンドハンドル用変数の宣言 int iMusicHandle; //関数のプロトタイプ宣言 int LoadAndPlayMusicMemPress(TCHAR*); int LoadAndPlayMusicMemNoPress(TCHAR*); //メイン関数 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { int ReturnValue(0); if(DxLib_Init() == -1) return -1; SetDrawScreen(DX_SCREEN_BACK); while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { if(CheckHitKey(KEY_INPUT_Z)) ReturnValue = LoadAndPlayMusicMemPress("Sample.wav"); if(CheckHitKey(KEY_INPUT_X)) ReturnValue = LoadAndPlayMusicMemNoPress("Sample.wav"); if(CheckHitKey(KEY_INPUT_C)) ReturnValue = LoadAndPlayMusicMemPress("Sample.mp3"); if(CheckHitKey(KEY_INPUT_V)) ReturnValue = LoadAndPlayMusicMemNoPress("Sample.mp3"); if(CheckHitKey(KEY_INPUT_B)) ReturnValue = LoadAndPlayMusicMemPress("Sample.ogg"); if(CheckHitKey(KEY_INPUT_N)) ReturnValue = LoadAndPlayMusicMemNoPress("Sample.ogg"); // KEYの対応 WAV MP3 OGG // Press "Z" "C" "B" // NoPress "X" "V" "N" ClearDrawScreen(); DrawFormatString(0, 0, GetColor(255, 255, 255), "Sound handle value : %d, Return value of the PlaySoundMem : %d",iMusicHandle , ReturnValue); ScreenFlip(); } DxLib_End(); return 0; } //DX_SOUNDDATATYPE_MEMPRESS用サウンド再生関数 int LoadAndPlayMusicMemPress(TCHAR *str) { DeleteSoundMem(iMusicHandle); SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMPRESS); iMusicHandle = LoadSoundMem(str); return PlaySoundMem(iMusicHandle, DX_PLAYTYPE_BACK); } //DX_SOUNDDATATYPE_MEMNOPRESS用サウンド再生関数 int LoadAndPlayMusicMemNoPress(TCHAR *str) { DeleteSoundMem(iMusicHandle); SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS); iMusicHandle = LoadSoundMem(str); return PlaySoundMem(iMusicHandle, DX_PLAYTYPE_BACK); }
Re: 音声ファイルについて ( No.3 )
名前: 日時:2008/12/09 14:20

上記のコードではLoadSoundMemの戻り値を チェックしているように見えませんが、 > 戻り値は0を返します。 とはデバッガで確認したということでしょうか? 上記コードのReturnValue はPlaySoundMem関数の 戻り値であって、LoadSoundMemの戻り値では ありません。
Re: 音声ファイルについて ( No.4 )
名前:Sura 日時:2008/12/09 16:27

>通さま Will様に対する返答ミスです。 申し訳ありません。 ただ、LoadSoundMem()の戻り値はiMusicHandleで 確認できて、-1以外の任意の数が帰ります。 戻り値が0と返答したのはPlaySoundMem()についてです。
Re: 音声ファイルについて ( No.5 )
名前:Will 日時:2008/12/10 10:20

以下のものがあると原因の追及に役立ちそうです。 1.再生されないMP3ファイル 2.正常に再生できないときのLog.txtの中身 あと、DXライブラリのバージョンは?
Re: 音声ファイルについて ( No.6 )
名前:oau 日時:2008/12/10 10:41

再生されないmp3は2つあるのですが、 両方ともメディアプレイヤーで再生できます。 Suraさんのコードをお借りしたところ Aのmp3ファイルでは-1が戻り値として返ってきました。 Bのmp3ファイルでは任意の返ってきて再生されました。 Aのmp3はDXでは対応していないと言うことでよろしいのでしょうか? また、Bのmp3ファイルを下記のコードで試したところなぜか再生されませんでした。 他のmp3ファイルでは再生されるのですが… こちらはコードの方が間違っているのでしょうか? #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int TestA, TestB; char Key[256]; ChangeWindowMode( TRUE ); if( DxLib_Init() == -1 ) return -1; DrawString( 0, 0, "読み込み中", GetColor(255,255,255) ); TestA = LoadSoundMem( "SampleB.mp3" ); // 再生× TestB = LoadSoundMem( "SampleC.mp3" ); // 再生○ DrawString( 0, 20, "読み込み完了", GetColor(255,255,255) ); while( ProcessMessage() == 0 && GetHitKeyStateAll( Key ) == 0 ){ // SampleB if( Key[KEY_INPUT_Z] == 1 ) PlaySoundMem( TestA, DX_PLAYTYPE_BACK ); if( Key[KEY_INPUT_X] == 1 ) StopSoundMem( TestA ); // SampleC if( Key[KEY_INPUT_C] == 1 ) PlaySoundMem( TestB, DX_PLAYTYPE_BACK ); if( Key[KEY_INPUT_V] == 1 ) StopSoundMem( TestB ); if( Key[KEY_INPUT_ESCAPE] == 1 ) break; // Escapeが押されたら終了 } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
Re: 音声ファイルについて ( No.7 )
名前:oau 日時:2008/12/10 11:17

書いてる間にもレスが >Willさん >1.再生されないMP3ファイル こちらの方は事情によりお渡しすることができません。 申し訳ありません。 >2.正常に再生できないときのLog.txtの中身 先ほど書いたコードのものです。 1:システムの情報を出力します 4: DXライブラリ Ver2.25 6: OS WindowsXP ( Build 2600 Service Pack 2 ) 117: CPU動作速度:大体3.00GHz 120: MMX命令を使用します 123: SSE命令が使用可能です 125: SSE2命令が使用可能です 127: CPUベンダ:GenuineIntel 141: CPU名: Intel(R) Pentium(R) 4 CPU 3.00GHz 144:COMの初期化... 成功しました 156:メモリ総量:2045.96MB 空きメモリ領域:1431.00MB 159:タイマーの精度を検査します 162:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 165: パフォーマンスカウンターを使用します タイマー分解能 : 3000150.000000 KHz 170: ソフトの二重起動検査... 二重起動はされていませんでした 178:ウインドウクラスを登録します... 登録に成功しました 184:ウインドウモード起動用のウインドウを作成します 217:IMEを無効にしました 423:ウインドウスタイルをウインドウモード用に変更します... 完了 435:DirectInput関係初期化処理 437: DirectInput7 の取得中... 成功 470: 引き続き初期化処理... 初期化成功 482: ジョイパッドの初期化... 492: 入力装置を見つけました 497: デバイスの登録名:4Axes 16Key GamePad 500: デバイスの製品登録名:4Axes 16Key GamePad 510: 周期的エフェクトの作成に失敗しました。 515: ジョイパッドの追加は正常に終了しました 520: 入力装置を見つけました 525: デバイスの登録名:4Axes 16Key GamePad 528: デバイスの製品登録名:4Axes 16Key GamePad 530: 周期的エフェクトの作成に失敗しました。 533: ジョイパッドの追加は正常に終了しました 536: ジョイパッドの初期化は正常に終了しました 543: マウスデバイスの初期化... 初期化成功 549: キーボードデバイスの初期化... 初期化成功 557:DirectInput 関連の初期化は正常に終了しました 562:DirectSound の初期化を行います 565:DirectSound インターフェースの取得を行います.... 成功 574:引き続きインターフェースの初期化処理... 成功 730: DirectSound デバイスを列挙します 736: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 738: モジュール名: RtkHDAud.sys ドライバ記述:Realtek HD Audio rear output 741: 最大サンプリングレート:192.00KHz 最小サンプリングレート:0.10KHz 744: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 747: 利用可能サンプリング精度 750: プライマリ 16bit = OK 8bit = OK 753: セカンダリ 16bit = OK 8bit = OK 756: 利用可能チャンネル 760: プライマリ MONO = OK STEREO = OK 763: セカンダリ MONO = OK STEREO = OK 766:DirectSound の初期化は正常に終了しました 769:DirectDraw 関連の初期化を行います 772: DirectDraw オブジェクトの取得を行います.... 成功 783: 引き続き初期化処理... 初期化に成功しました 794: ビデオカードの情報 797: 画面モード変更処理を開始します 860: 画面モードの変更処理を開始します 640 x 480 16 bit 863: ウインドウモードにします 866: 画面モードの変更は正常に終了しました 870: カラー情報 873: A:00000000 B:00ff0000 G:0000ff00 B:000000ff 876: ウインドウスタイルをウインドウモード用に変更します... 完了 885: 出力画面用の DirectDrawSurface を作成します 890: 各スクリーンメモリの配置位置 894: PrimaryBuffer : VIDEOMEMORY 897: BaskBuffer : VIDEOMEMORY 901: 出力画面用の DirectDrawSurface の作成は正常に終了しました 904: Direct3D 関連の初期化を行います 907: Direct3Dオブジェクトを取得します 912: Direct3Dオブジェクトを取得しました 916: HALデバイスを発見しました 919: ハードウエアT&Lデバイスを発見しました 923: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 942: テクスチャ最大幅:2048 最小幅:1 946: 描画制限: D_D3DPTEXTURECAPS_POW2 = 1 D_D3DPTEXTURECAPS_SQUAREONLY = 0 949: 最大テクスチャステージ数 = 8 最大テクスチャブレンド数 = 8 951: テクスチャピクセルフォーマット 954: 通常グラフィック用 956: BIT:16 RED:5 GREEN:5 BLUE:5 959: RED:007c00 GREEN:0003e0 BLUE:00001f 961: BIT:32 RED:8 GREEN:8 BLUE:8 964: RED:ff0000 GREEN:00ff00 BLUE:0000ff 966: アルファチャンネル付きグラフィック用 969: BIT:16 ALPHA:4 RED:4 GREEN:4 BLUE:4 971: ALPHA:0000f000 RED:00000f00 GREEN:000000f0 BLUE:0000000f 974: BIT:32 ALPHA:8 RED:8 GREEN:8 BLUE:8 976: ALPHA:ff000000 RED:00ff0000 GREEN:0000ff00 BLUE:000000ff 979: Direct3D 関連の初期化は正常に終了しました 982: グラフィック管理系の初期化を行います 985: 3Dグラフィック描画機能を使用します 987: フォントの初期化を行います 992: フォントの初期化は正常に終了しました 996: グラフィック管理系の初期化は正常に終了しました 1039: サーフェス間転送には BitBlt を使用します 1043: BitBlt:15773μs BltFast:19750μs 1046: スキャンラインの数:1024 1175: 1フレーム当たりの時間は 16 msecです 1178: Tri00:16 msec 1182: Tri01:17 msec 1186: Tri02:16 msec 1189: Tri03:17 msec 1193: 画面モード変更処理は正常に終了しました 1196: オーバーレイサーフェスを使用します    UYVY 1199: DirectDraw 関連の初期化は正常に終了しました 1204: 文字コードバッファの初期化を行います... 完了しました 17238: ウインドウを閉じようとしています 17247: ウインドウが破棄されようとしています 17251: ソフトを終了する準備が整いました 17260: DirectDraw 関連の終了処理をおこないます 17268: フォントの初期化を行います 17275: フォントの初期化は正常に終了しました 17279: グラフィック管理系の終了処理は正常に終了しました 17284: Direct3D 関連の終了処理を行います 17291: 3Dデバイスの削除は正常に終了しました 17295: Direct3D 関連の終了処理は正常に終了しました 17298: メインサーフェスを破棄をします... 完了しました 17302: DirectDrawオブジェクトを解放します 17305: DirectDrawオブジェクトを解放しました 17308: DirectDraw 関連の終了処理は正常に終了しました 17310: DirectInput 関連の終了処理... 完了 17356: DirectSound の終了処理は正常に終了しました 17361: 17364: Alloc memory dump Total size:0(0.000kb) Alloc num:0 17372: >DXライブラリのバージョンは? Ver2.25を使用しております。
Re: 音声ファイルについて ( No.8 )
名前:Will 日時:2008/12/10 18:53

ログを見る限り何もないようですね。 再現できるものがないと検証も出来ないのでこれ以上はわかりません。 管理人さんであれば何かわかるかもしれませんが・・・
Re: 音声ファイルについて ( No.9 )
名前:管理人 日時:2008/12/15 02:56

mp3 は内部仕様が色々あるので、DXライブラリの mp3 読み込みコードで対応できていない可能性があります 宜しければ件の mp3 ファイルを作成する際に使用したソフトを教えて頂けないでしょうか? ( もし容易に手が出せるソフトでしたら私の方でも確認できますので・・・ ) また、別のソフトで mp3 ファイルに出力してみると読み込めるようになるかもしれません > こちらはコードの方が間違っているのでしょうか? 間違っていないと思います > Suraさん 申し訳ありません、先日お渡ししたバージョンには Ver2.25 にはないバグがありました こちらのバージョンでは Suraさんが確認された不具合は発生しないと思いますので、 宜しければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |