XAudio2を利用したサウンド再生クラスを作っている時に、如何しても理解できないバグが発生してしまったので質問させて頂きます。
XAudio2オブジェクトとマスターボイスのオブジェクトを持ち、機能として初期化と開放のみをするクラスを作りました。
これを継承して、使いまわすことにしたのですが…。
どうしてもマスターボイスを破棄するところでエラーが発生してしまいます。
サウンドの再生自体は出来るので、XAudio2オブジェクト、マスターボイス、ソースボイスの作成は上手くいっていると思います。
エラーの原因が自分には分かりません、どうかご教授願います。
ソース内のライブラリのサイズの関係で他のアップローダーを利用してソースをアップしました。
http://down11.ddo.jp/uploader/download/1262652933.zip
パスワードは「xad」です。
また一部抜粋した物もこちらに記載させて頂きます。
//MyXAudio.h class XAudio{ protected: //static DWORD ReferenceCnt; //参照カウンタ(使用予定) static IXAudio2* pXAudio2; static IXAudio2MasteringVoice* pMasterVoice; HRESULT InitXA(void); public: static void Release(void); }; //MyXAudio.cpp #define XA_SAFE_RELEASE(p){ if(p) { (p)->Release(); (p)=NULL; } } IXAudio2* XAudio::pXAudio2 = NULL; IXAudio2MasteringVoice* XAudio::pMasterVoice = NULL; HRESULT XAudio::InitXA(void){ HRESULT hr = S_OK; if(pXAudio2 == NULL){ CoInitializeEx(NULL, COINIT_MULTITHREADED); UINT32 flg = 0; #ifdef _DEBUG flg |= XAUDIO2_DEBUG_ENGINE; #endif if(FAILED(hr = XAudio2Create(&pXAudio2, flg))){ MessageBox(NULL, "IXAudio2オブジェクトの作成に失敗。", "ERROR", MB_OK); CoUninitialize(); return hr; } if(FAILED(hr = pXAudio2->CreateMasteringVoice(&pMasterVoice))){ MessageBox(NULL, "マスターボイスの作成に失敗。", "ERROR", MB_OK); XA_SAFE_RELEASE(pXAudio2); CoUninitialize(); return hr; } } return hr; } void XAudio::Release(void){ if(pXAudio2 != NULL){ if(pMasterVoice != NULL) { pMasterVoice->DestroyVoice(); //ここでエラー pMasterVoice = NULL; } XA_SAFE_RELEASE(pXAudio2); CoUninitialize(); } }