ボタンのクリック、エラー、通知など、UI で複数のサウンドを再生する必要があります。この目的のために、次のコードを作成しました (Windows で mp3 を再生したことはありません)。
bool ClientHandler::InitSoundAndMusic()
{
m_pSoundGraph = NULL;
m_pSoundControl = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
(void**) &m_pSoundGraph);
if (!SUCCEEDED(hr) || !m_pSoundGraph)
return false;
hr = m_pSoundGraph->QueryInterface(IID_IMediaControl, (void**) &m_pSoundControl);
if (!SUCCEEDED(hr) || !m_pSoundControl)
return false;
return true;
}
void ClientHandler::PlayFile(LPCTSTR file)
{
if (!m_pSoundGraph)
return;
m_pSoundControl->Stop();
HRESULT hr = m_pSoundGraph->RenderFile(file, NULL);
if (SUCCEEDED(hr))
m_pSoundControl->Run();
}
bool ClientHandler::OnEvent(const String& message)
{
if (message == _T("button"))
{
PlayFile(_T(".\\sound\\button.mp3"));
return true;
}
return false;
}
とても遅いようです。ボタンを毎秒 5 回クリックすると、UI がフリーズします。毎回 Stop/Render/Run を呼び出すべきではないと思いますが、回避する方法がわかりません。コードをどのように書き直せばよいですか?
よろしく、