トップページ > 記事閲覧
LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう
名前:Nさん 日時: 2021/06/30 02:15

すみません、仕様か不具合かわからないので質問させていただきます。 LoadSoundMemでmp3ファイルを何度もロードしていると初回と比べ異様に時間がかかりピッチが本来よりかなり高くなってしまいます。 想定していた動作では無いと思っていますが、こちらどのようにして対応すればよろしいでしょうか?必要なファイルが足りない場合は追加で送ります 使用している音声のコードは下記で、外部クラスからPlayBGM()を呼んで再生しています。 クラスファイル: ttps://ux.getuploader.com/dialogues_txt/download/499 ヘッダファイル: ttps://ux.getuploader.com/dialogues_txt/download/500 使用BGM(期限7日):ttps://9.gigafile.nu/0707-cb81a264c46e6194c517f1a995feae9db
メンテ

Page: 1 |

Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.1 )
名前:Nさん 日時:2021/06/30 02:18

送付漏れがありました、ヘッダファイルに下記を追加していただけると幸いです //BGMの種類 typedef enum tagBGM { BGM_TITLE, BGM_DUNGEON_1, BGM_DUNGEON_2, BGM_DUNGEON_3, BGM_DUNGEON_4, BGM_DUNGEON_5, BGM_DUNGEON_6, BGM_COUNT, }BGM_TYPE;
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.2 )
名前:管理人 日時:2021/06/30 03:19

手元で以下のような1〜5キーを押すと BGM_DUNGEON_1 〜 BGM_DUNGEON_5 のBGMが 再生されるプログラムを組んで何回も再生してみたのですが、特にロードに異様に 時間が掛かるようになったり、ピッチが高くなったりといったことはありませんでした #include "DxLib.h" #include <string> #include "BGMManager.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { BGMManager BGMMan ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // 1〜5 のキーが押されたら BGM_DUNGEON_1 〜 BGM_DUNGEON_5 のBGMを再生する switch( GetInputChar( TRUE ) ) { case '1': BGMMan.StopBGM(); BGMMan.PlayBGM( BGM_DUNGEON_1 ); break; case '2': BGMMan.StopBGM(); BGMMan.PlayBGM( BGM_DUNGEON_2 ); break; case '3': BGMMan.StopBGM(); BGMMan.PlayBGM( BGM_DUNGEON_3 ); break; case '4': BGMMan.StopBGM(); BGMMan.PlayBGM( BGM_DUNGEON_4 ); break; case '5': BGMMan.StopBGM(); BGMMan.PlayBGM( BGM_DUNGEON_5 ); break; } // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } よろしければ上記のプログラムでも Nさんの環境ではロードが異様に長くなったり ピッチが高くなったりしてしまうか試してみて頂けないでしょうか? m(_ _)m
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.3 )
名前:Nさん 日時:2021/06/30 10:18

全然発生しませんでした…もう少しこちら側で原因調査してみます
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.4 )
名前:Nさん 日時:2021/06/30 23:29

少し調査してみたのですが、上記のコードで呼び出した時は再現せず…といったところです、 ブレークポイントを置いて調査したのですが時間がかかる箇所はLoadSoundMemのところした。 説明漏れましたが上記以外にも効果音や画像も読み込んだりしているのですが読み込んだ回数でアウトになったり 何処かで領域外アクセスしていてロードに不良が起きているといった可能性があったりしますでしょうか?
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.5 )
名前:Nさん 日時:2021/07/01 00:25

自分のミスで申し訳ございません、一旦のところは自己解決しました。 BGMをロードする前にSetCreateSoundPitchRate(100.0f); というコードが入っておりそのせいでピッチが本来よりかなり高くなってしまっていました。 また、同じ木内で申し訳ないですが追加で質問させてください。 上記のSetCreateSoundPitchRateは重たい処理でしょうか?もしくは100.0fが高すぎる値なせいで重いのでしょうか?
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.6 )
名前:管理人 日時:2021/07/02 00:57

> 上記のSetCreateSoundPitchRateは重たい処理でしょうか?もしくは100.0fが高すぎる値なせいで重いのでしょうか? はい、SetCreateSoundPitchRate は重い処理となります BGMのような長いサウンドの場合は LoadSoundMem を実行された時点では全てのデータをメモリに読み込まず 再生しながら少しづつメモリに読み込む( 又は少しづつmp3等の圧縮されたデータをPCMにデコードする )のですが、 ピッチの変更を行う場合は最初にすべてのデータをファイルからメモリに読み込み、ピッチの変更を行ってから 漸く LoadSoundMem の関数から処理が戻ってくるので、SetCreateSoundPitchRate を使用していない場合の LoadSoundMem に比べて非常に時間が掛かるようになっています
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.7 )
名前:nさん 日時:2021/07/03 23:20

ありがとうございます
メンテ
Re: LoadSoundMemでmp3をロードした際異様に時間がかかりプロセスメモリが爆増しピッチが高くなってしまう ( No.8 )
名前:Nさん (解決済み) 日時:2021/07/03 23:31

途中送信してしまいました、なるほど…そういった処理になっていたのですね。 ありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存