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
途中送信してしまいました、なるほど…そういった処理になっていたのですね。
ありがとうございます。
|