トップページ > 記事閲覧
PlayMusic関数でメモリ大量消費
名前:KEIZO 日時: 2013/07/28 15:09

いつもお世話になっております。 PlayMusic関数を使用すると、メモリ使用率が増えますが、(タスクマネージャで確認) その後、他の曲を再生すると、さらに追加でメモリを使用しているように見えます。 以下のコードをボタン押下時に実行すると、 押す度にメモリ使用量が増え続けて大変なことになります。 -------------- StopMusic() ; static int A=0; A++; if(A%2==0){ PlayMusic( "***1.mp3" , DX_PLAYTYPE_LOOP ) ; }else{ PlayMusic( "***2.mp3" , DX_PLAYTYPE_LOOP ) ; } ------------ なんとか解決する方法は無いでしょうか? よろしくお願いします。
メンテ

Page: 1 |

Re: PlayMusic関数でメモリ大量消費 ( No.1 )
名前:管理人 日時:2013/08/03 17:13

ご報告ありがとうございます 手元で試してみましたが、メモリ使用量が増え続けることはありませんでした もしかしたら最新版では不具合が解消されているのかもしれませんので、 よろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) あと、KEIZOさんのテストで確認できるメモリ使用量の1回辺りの増加量はどのくらいでしょうか?
メンテ
Re: PlayMusic関数でメモリ大量消費 ( No.2 )
名前:KEIZO 日時:2013/08/09 22:56

お返事ありがとうございます。 最新版にて試してみたのですが症状は変わりませんでした。 上昇していくメモリ使用量は、対象の音楽ファイルによって変わります。 5MBの場合は約5MB、600KBの曲は約600KBです。 (約というのは、複数回の実行で結果に約30KB程の誤差が生じる為です。) まことに申し訳ないのですが、追加で質問してもよろしいでしょうか? 実は、巨大なプログラムの中でテストしていましたので、 シンプルな状態でテストを行おうとして、新規プロジェクトにて以下のコードを実行しましたところ、 ----------------------------------------------------------------- #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // ノーマル演奏 PlayMusic( "****.mp3" , DX_PLAYTYPE_NORMAL ) ; DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } ----------------------------------------------------------------- 音楽が再生されませんでした。(パス間違いではありません) ログの方を確認したところ、 ----------------------------------------------------------------- 359:XAudio2 の初期化を行います 360: XAudio2 インターフェースの取得を行います.... XAudio2インターフェースの取得に失敗しました ----------------------------------------------------------------- という部分が問題のように思えたのですが、 現在正常に動作中の巨大なプログラムの方ですと、ログの中にこの部分(XAudio2 の初期化を行います)は無く、 音楽も正常に再生されます。 また、上記コードでも、PlayMusicでは無く、PlaySoundMemを用いた場合は、再生されました。 2回プロジェクトを新規に作り直し、DXライブラリの設定を最初から行いましたが、 結果は同じでした。 自分のPC環境が原因のような気がしますが、 正常に動作中のプログラムと、上記コードとの違いが見つけられませんでした。 それでどうしてもわかりません。 申し訳ありませんが、これについてもお教え願えますでしょうか? その時のログはこちらになります。 h t t p s : / / w w w .dropbox.com/s/vu4ny5ee0nke6k2/Log.txt
メンテ
Re: PlayMusic関数でメモリ大量消費 ( No.3 )
名前:管理人 日時:2013/08/11 15:07

うーんやはり私の環境では使用メモリが増え続ける現象も、 PlayMusic で mp3 ファイルが再生されない現象も発生しません・・・ 申し訳ありませんが、PlayMusic ではなく LoadSoundMem と PlaySoundMem、DeleteSoundMem を 使用して mp3 ファイルの再生を行うようにしてください あと、XAudio2インターフェースの取得に失敗していることに関しては本件には関係は 無いと思います( XAudio2 が使用できない場合は DirectSound で再生を行います、 私の手元でも意図的に XAudio2 を使用しないようにしてみましたが、再現はしませんでした ) 原因は不明ですが、推測としては PlayMusic はもともと midiファイルを再生するための機能で、 midiファイルを再生するための OS の機能を使用してファイルの再生をしようとするのですが、 この機能の挙動が環境に依存しているので、もしかしたら私の環境と KEIZOさんの環境で その機能の挙動が違い、それが本件の原因になっているのでは、と考えています
メンテ
Re: PlayMusic関数でメモリ大量消費 ( No.4 )
名前:KEIZO(解決) 日時:2013/08/11 17:56

お返事ありがとうございます。 了解いたしました。 PlaySoundMemの方を使うようにします。 (実はすでにそうしていましたスミマセン_(_ _゚)_ ) PlayMusicを使用していた時にリリースした実行ファイルのゲームをプレイしてくださった方のPCでも 使用メモリ増大の報告があり、PlaySoundMemに変更した後、その問題も無くなったようです。 自分の環境でコンパイルしたものは 他の環境へ行っても同じ症状を出すというのは 環境依存なのかどうか謎です。 以前、Gimp Ver2.8で圧縮率を変更し保存したjpgだけが、 デバッグ時は表示されるが、実行ファイルからだと表示されないというものもありました。 (pngは表示され、IrfanViewで保存したjpgも表示される) 他人のPC環境や読込対象のファイルの状態まで 原因が色々考えられる不具合報告は本当に大変そうですね… 色々調べてくださってありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存