vc如何播放和暂停音乐(mp3格式) 求助:vc如何实现简单的播放和暂停音乐(mp3格式)? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.wei2008.com/Code/Down/33888.html MCI可以支持所有格式的音频? 如果你说的是.mp3的格式 MCI完全可以支持 可以使用开源mpg123库解码mp3, 然后使用wave API播放, 整个过程都由自己控制, 暂停自然非常容易实现了. VC++ API 播放MP3 用DirectShow实现.可以播放很多种格式的声音文件. 给你个Sample.先打开后播放E_AUDIO_RESULT XXX::Open(LPCTSTR lpszFileName){ try { HRESULT hr = S_OK; StopAudio(); ReleaseHandle(); bool bNeedDecode = false; if (IsValidAudioFile(lpszFileName, bNeedDecode)) { if (bNeedDecode) { ::DeleteFile(m_tszTempFileName); E_AUDIO_RESULT eAudioResult= DecodeAudioFile(lpszFileName, m_tszTempFileName); if( eAudioResult == eOK) lpszFileName = m_tszTempFileName; else return eAudioResult; } } else return eNotSupportFormat; //create the interface if (FAILED(hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pIGraphBuilder))) { return eError; } // Get the media event interface before building the graph if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaEventEx, (void **)&m_pIMediaEventEx))) { return eError; } if (m_pIGraphBuilder == NULL) { assert(0); return eError; } // Have the graph builder construct the appropriate graph automatically if (FAILED(hr = m_pIGraphBuilder->RenderFile((LPCWSTR)lpszFileName, NULL))) { return eError; } if (SUCCEEDED(hr)) { if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pIMediaControl))) { return eError; } if (m_pIMediaControl == NULL) { return eError; } if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaSeeking, (void **)&m_pIMediaSeeking))) { return eError; } if (m_pIMediaSeeking == NULL) { return eError; } if (FAILED(hr = m_pIMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME))) { return eError; } if (FAILED(hr = m_pIMediaSeeking->GetDuration(&m_i64TimeCount))) { return eError; } /*if (FAILED(hr = m_pIMediaEventEx->SetNotifyWindow((OAHWND)m_lParam,0,0))) { return eError; }*/ /*hr = CoCreateInstance(__uuidof(IMMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&m_pIEnumerator); if (SUCCEEDED(hr)) { hr = m_pIEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pIEndpoint); if (FAILED(hr)) { return eError; } hr = m_pIEndpoint->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&m_pIAudioEndVol); if (FAILED(hr)) { return eError; } }*/ return eOK; } } catch(...) { return eError; } return eOK;}bool XXX::PlayAudio(){ HRESULT hr = S_OK; if (m_ePlayStatus == ePlayStatus_Paused && m_pIMediaControl != NULL) { hr = m_pIMediaControl->Run(); if (FAILED(hr)) { return false; } m_ePlayStatus = ePlayStatus_Running; if (m_pfnCallBack) { m_pfnCallBack(m_ePlayStatus,m_lParam); } return true; } if (m_pIMediaControl) { if (FAILED(hr = m_pIMediaControl->Run())) { return false; } m_ePlayStatus = ePlayStatus_Running; if (m_pfnCallBack) { m_pfnCallBack(m_ePlayStatus,m_lParam); } } return true;} NewWindow2 新链接如何在原窗口打开 学习VC遇到的一点小问题,求高手指教 膜拜!!!!!! 关于NOTIFY_HANDLER的一些疑问 一个关于CHtmlView的加载顺序的问题 请教 BCG 的基本问题 关于ATL中如何加入无模式对话框 关于windows下原始socket接收tcp数据的问题 VC7 下,怎么关闭强制类型转换 以后 的警告 如何生成1000内的随机数? 求助,我想把VC工程做成中英文版本的?在运行后可以切换语言,怎么做? 如何获取主机名? Vc中如何绘图
MCI可以支持所有格式的音频?
E_AUDIO_RESULT XXX::Open(LPCTSTR lpszFileName)
{
try
{
HRESULT hr = S_OK;
StopAudio();
ReleaseHandle();
bool bNeedDecode = false;
if (IsValidAudioFile(lpszFileName, bNeedDecode))
{
if (bNeedDecode)
{
::DeleteFile(m_tszTempFileName);
E_AUDIO_RESULT eAudioResult= DecodeAudioFile(lpszFileName, m_tszTempFileName);
if( eAudioResult == eOK)
lpszFileName = m_tszTempFileName;
else
return eAudioResult;
}
}
else
return eNotSupportFormat;
//create the interface
if (FAILED(hr = CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pIGraphBuilder)))
{
return eError;
}
// Get the media event interface before building the graph
if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaEventEx, (void **)&m_pIMediaEventEx)))
{
return eError;
} if (m_pIGraphBuilder == NULL)
{
assert(0);
return eError;
} // Have the graph builder construct the appropriate graph automatically
if (FAILED(hr = m_pIGraphBuilder->RenderFile((LPCWSTR)lpszFileName, NULL)))
{
return eError;
}
if (SUCCEEDED(hr))
{
if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&m_pIMediaControl)))
{
return eError;
}
if (m_pIMediaControl == NULL)
{
return eError;
}
if (FAILED(hr = m_pIGraphBuilder->QueryInterface(IID_IMediaSeeking, (void **)&m_pIMediaSeeking)))
{
return eError;
}
if (m_pIMediaSeeking == NULL)
{
return eError;
}
if (FAILED(hr = m_pIMediaSeeking->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME)))
{
return eError;
}
if (FAILED(hr = m_pIMediaSeeking->GetDuration(&m_i64TimeCount)))
{
return eError;
}
/*if (FAILED(hr = m_pIMediaEventEx->SetNotifyWindow((OAHWND)m_lParam,0,0)))
{
return eError;
}*/
/*hr = CoCreateInstance(__uuidof(IMMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),
(void**)&m_pIEnumerator);
if (SUCCEEDED(hr))
{
hr = m_pIEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pIEndpoint);
if (FAILED(hr))
{
return eError;
} hr = m_pIEndpoint->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&m_pIAudioEndVol);
if (FAILED(hr))
{
return eError;
}
}*/ return eOK;
}
}
catch(...)
{
return eError;
}
return eOK;
}bool XXX::PlayAudio()
{
HRESULT hr = S_OK;
if (m_ePlayStatus == ePlayStatus_Paused &&
m_pIMediaControl != NULL)
{
hr = m_pIMediaControl->Run();
if (FAILED(hr))
{
return false;
}
m_ePlayStatus = ePlayStatus_Running;
if (m_pfnCallBack)
{
m_pfnCallBack(m_ePlayStatus,m_lParam);
}
return true;
}
if (m_pIMediaControl)
{
if (FAILED(hr = m_pIMediaControl->Run()))
{
return false;
}
m_ePlayStatus = ePlayStatus_Running;
if (m_pfnCallBack)
{
m_pfnCallBack(m_ePlayStatus,m_lParam);
}
}
return true;
}