• 大小: 24.56MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-04
  • 语言: 其他
  • 标签: 扬声器  录音  

资源简介

通过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 < nDataLen )
{

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..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\link.command.1.tlog

     文件       6174  2017-12-05 15:10  AudioRecord\Debug\AudioRecord.tlog\link.read.1.tlog

     文件       1734  2017-12-05 15:10  AudioRecord\Debug\AudioRecord.tlog\link.write.1.tlog

     文件        478  2017-12-05 15:10  AudioRecord\Debug\AudioRecord.tlog\rc.command.1.tlog

............此处省略65个文件信息

评论

共有 条评论