資源簡介
通過Core Audio中的API函數來實現采集聲卡輸出,采集到的音頻流保存與內存,并直接播放.支持 window Vista 以上系統.
代碼片段和文件信息
#include?“stdafx.h“
#include?“AudioManager.h“
#ifndef?_min
#define?_min(ab)????????????(((a)?(b))???(a)?:?(b))
#endif?//_min
CAudioManager::CAudioManager(IPlaybackEvent*?pEvent)
:m_pPlaybackEventHandler(pEvent)
{
m_pFormat?=?NULL;
m_nOffset?=?0;
}
CAudioManager::~CAudioManager()
{
ClearData();
}
BOOL?CAudioManager::StartCapture()
{
BOOL?bRet?=?m_capture.IsCapturing();
if(!bRet)
{
if(m_capture.Initialize(this))
{
bRet?=?m_capture.Start();
}
}
return?bRet;
}
VOID?CAudioManager::StopCapture()
{
if(m_capture.IsCapturing())
{
m_capture.Stop();
m_capture.Destroy();
}
}
BOOL?CAudioManager::IsCapturing()?const
{
return?m_capture.IsCapturing();
}
BOOL?CAudioManager::StartPlayback()
{
BOOL?bRet?=?m_render.IsRendering();
if(!bRet)
{
if(m_render.Initialize(this))
{
bRet?=?m_render.Start();
}
}
return?bRet;
}
VOID?CAudioManager::StopPlayback()
{
if(m_render.IsRendering())
{
m_render.Stop();
m_render.Destroy();
}
}
BOOL?CAudioManager::IsPlaybacking()?const
{
return?m_render.IsRendering();
}
BOOL?CAudioManager::CanPlay()?const
{
return?!m_dataList.empty();
}
VOID?CAudioManager::ClearData()
{
LPBYTE?p?=?(LPBYTE)m_pFormat;
delete?[]p;
m_pFormat?=?NULL;
std::list::iterator?itr?=?m_dataList.begin();
while(itr?!=?m_dataList.end())
{
Audio_Data&?item?=?*itr;
delete?[]item.pData;
++itr;
}
m_dataList.clear();
}
VOID?CAudioManager::OnCatpureStart(DWORD?dwInterval)
{
}
VOID?CAudioManager::OnCaptureStop()
{
}
VOID?CAudioManager::OnAdjustCaptureFormat(WAVEFORMATEX*?pFormat)
{
ClearData();
INT?nDataLen?=?sizeof(WAVEFORMATEX)?+?pFormat->cbSize;
LPBYTE?pData?=?new?BYTE[nDataLen];
if(pData?!=?NULL)
{
memcpy_s(pData?nDataLen?pFormat?nDataLen);
m_pFormat?=?(WAVEFORMATEX*)pData;
}
}
VOID?CAudioManager::OnCatpureData(LPBYTE?pData?INT?nDataLen)
{
Audio_Data?item;
item.nDataLen?=?nDataLen;
item.pData?=?new?BYTE[nDataLen];
if(item.pData?!=?NULL)
{
memcpy_s(item.pData?nDataLen?pData?nDataLen);
m_dataList.push_back(item);
}
}
VOID?CAudioManager::OnRenderStart()
{
m_nOffset?=?0;
m_itrCurrent?=?m_dataList.begin();
}
VOID?CAudioManager::OnRenderStop()
{
}
VOID?CAudioManager::OnAdjustRenderFormat(WAVEFORMATEX*?pFormat)
{
if(pFormat?==?NULL)?return;
INT?nDataLen1?=?sizeof(WAVEFORMATEX)?+?pFormat->cbSize;
INT?nDataLen2?=?sizeof(WAVEFORMATEX)?+?m_pFormat->cbSize;
if(nDataLen1?==?nDataLen2)
{
memcpy_s(pFormatnDataLen1??m_pFormat?nDataLen2);
}
else
{
memcpy_s(pFormatnDataLen1??m_pFormat?sizeof(WAVEFORMATEX));
}
}
VOID?CAudioManager::OnGetRenderData(LPBYTE?pData?INT?nDataLen)
{
INT?nCopyed?=?0;
INT?nNeedCopy?=?nDataLen;
BOOL?bEnd(FALSE);
if(m_itrCurrent?==?m_dataList.end())?
{
m_itrCurrent?=?m_dataList.begin();
m_nOffset?=?0;
}
while(nCopyed? {
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????95232??2017-12-05?18:57??.vs\AudioRecord\v15\.suo
?????文件???39071744??2017-12-05?18:57??.vs\AudioRecord\v15\Browse.VC.db
?????文件???23920640??2017-12-05?15:11??.vs\AudioRecord\v15\ipch\58a55fade2db6b66.ipch
?????文件?????327680??2017-12-04?14:40??.vs\AudioRecord\v15\ipch\AutoPCH\247167ad114ce9c7\AUDIOCLIENT.ipch
?????文件???23920640??2017-12-05?14:08??.vs\AudioRecord\v15\ipch\fbb1ebda711883a6.ipch
?????文件???????3620??2017-12-04?11:17??AudioRecord\AudioManager.cpp
?????文件???????1391??2017-12-04?14:19??AudioRecord\AudioManager.h
?????文件???????9732??2017-12-04?11:19??AudioRecord\AudioRecord.aps
?????文件???????7185??2014-08-29?09:36??AudioRecord\AudioRecord.cpp
?????文件?????????39??2014-08-25?16:14??AudioRecord\AudioRecord.h
?????文件???????2998??2012-06-05?22:11??AudioRecord\AudioRecord.ico
?????文件???????6598??2014-08-25?16:14??AudioRecord\AudioRecord.rc
?????文件???????5415??2017-12-04?10:59??AudioRecord\AudioRecord.vcxproj
?????文件???????2714??2014-08-29?09:56??AudioRecord\AudioRecord.vcxproj.filters
?????文件??????10339??2014-08-29?10:24??AudioRecord\AudioRender.cpp
?????文件????????793??2014-08-27?17:26??AudioRecord\AudioRender.h
?????文件???????1102??2017-12-05?14:07??AudioRecord\ClassRegister.h
?????文件?????159681??2017-12-05?15:10??AudioRecord\Debug\AudioManager.obj
?????文件????????252??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.log
?????文件??????62833??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.obj
?????文件????8454144??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.pch
?????文件???????6816??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.res
?????文件????????230??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\AudioRecord.lastbuildstate
?????文件???????5406??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\CL.command.1.tlog
?????文件??????87634??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\CL.read.1.tlog
?????文件???????4680??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\CL.write.1.tlog
?????文件???????2724??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\li
?????文件???????6174??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\li
?????文件???????1734??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\li
?????文件????????478??2017-12-05?15:10??AudioRecord\Debug\AudioRecord.tlog\rc.command.1.tlog
............此處省略65個文件信息
- 上一篇:第二代小波變換的信號處理
- 下一篇:R語言實戰第2版
評論
共有 條評論