トップページ > 過去ログ > 記事閲覧
再生できる音声ファイルの最大長について
名前:DG 日時: 2010/03/28 17:55

再生時間が最大10分のwavまたはmp3ファイルをBGMとして流すことを考えています。 LoadSoundMemしてから、PlaySoundMemして再生したところ、 音が全く再生されませんでした(ハンドラは正常に取得できていました)。 そこで、再生時間が違う音声ファイルで色々試したところ、 再生できなくなる長さの閾値が380秒と381秒の間にあるということが確認できました。 現在、SetCreateSoundDataType(DX_SOUNDDATATYPE_MEMPRESS)をし、 ストリーミング再生で10分の長さでも問題なく再生できています。 DX_SOUNDDATATYPE_MEMNOPRESSの場合は 正常に再生できる長さに限界(だいたい380秒、環境依存?)があるという事でよろしいでしょうか? (メモリは有限なので上限があるのは当たり前ですが・・・) あとSetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS_PLUS)とすると -1の返り値が来て、アプリケーションが異常終了してしまいます。 メモリが確保できなくてエラー吐いてるのかな?と思い 短い音声ファイルなどで試してみましたが、変わりませんでした。 DX_SOUNDDATATYPE_MEMNOPRESS(こちらは正常に終了する)との違いは、 一気に読み込むか、再生しながら順次読み込むかだけで最終的に同じ状態になるとの認識でしたので なぜ片方だけエラーになるのかがよくわかりません。 どなたか情報をご存知でしたら 是非教えてください

Page: 1 | 2 |

Re: 再生できる音声ファイルの最大長について ( No.1 )
名前:いっち 日時:2010/03/28 20:08

私の環境でもほぼ同様の結果となりました。 6m17sのmp3と6m27sのmp3のファイルで、後者の再生は行われませんでした。 その際、PlaySoundMemの戻り値は"成功"でしたが、その後のCheckSoundMemでは"停止中"となっていました。 > あとSetCreateSoundDataType(DX_SOUNDDATATYPE_MEMNOPRESS_PLUS)とすると > -1の返り値が来て、アプリケーションが異常終了してしまいます。 この事象についても再現しました。 ※追記 念のためDxLib Ver 2.25bでも確認を行いましたが、同様の結果でした。 //-- テストソース (test.wavを仮に使用) --// #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if ( DxLib_Init( ) == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ); int StrColor = GetColor( 255, 255, 255 ); SetCreateSoundDataType( DX_SOUNDDATATYPE_MEMNOPRESS ); int sh = LoadSoundMem( "test.wav" ); int result = PlaySoundMem( sh, DX_PLAYTYPE_LOOP ); while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); DrawFormatString( 0, 0, StrColor, "Handle = %d Result = %d Check = %d", sh, result, CheckSoundMem( sh ) ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: 再生できる音声ファイルの最大長について ( No.2 )
名前:管理人 日時:2010/03/29 06:49

試しに私の環境で再生時間が30分のサウンドファイルを DX_SOUNDDATATYPE_MEMNOPRESS で 再生しようとしましたが、再生できませんでした 調べきってはいませんが、DGさんやいっちさんの仰られている辺りの時間( 380秒前後 ) 以上の長さのサウンドデータを格納するための DirectSoundBuffer を作成すると、DirectSoundBuffer の 作成自体は成功しますが再生時にエラーが発生して、更に私が試した30分等の巨大なメモリ領域を必要とする サウンドデータの場合は DirectSoundBuffer の作成自体が失敗するようです なので、3分以上のサウンドデータの場合は自動的に DX_SOUNDDATATYPE_MEMPRESS の設定で 読み込むように処理を変更することにしました > 正常に再生できる長さに限界(だいたい380秒、環境依存?)があるという事でよろしいでしょうか? > (メモリは有限なので上限があるのは当たり前ですが・・・) 限界を知るための手段があるのかもしれませんが、私はその資料を見つけることができませんでしたので 「380秒くらいが限界かどうか?又、環境によっては更に限界の秒数が上下することはあるのか?」 というご質問にはお応えできません DX_SOUNDDATATYPE_MEMNOPRESS_PLUS は定義はされていますが、現在は未実装の状態で、その設定を 指定すると正常に動作しません( 放置状態でした・・・ ) なので、応急処置として DX_SOUNDDATATYPE_MEMNOPRESS_PLUS が指定された場合は DX_SOUNDDATATYPE_MEMNOPRESS が 指定されたものとして処理するように処理を変更しました、ご迷惑お掛けして申し訳ありません もし上記の対応を施したバージョンがご必要でしたら、こちらにアップしましたのでお使い下さい http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: 再生できる音声ファイルの最大長について ( No.3 )
名前:DG 日時:2010/03/29 19:14

いっちさん、管理人様 早速の情報ありがとうございますm(_ _)m 疑問が解けて、すっきりしました。

Page: 1 | 2 |