资源简介
通过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\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版
相关资源
- FINEMOTOR扬声器仿真软件
- 音频降噪录音去噪语音降噪
- qt 基于QAudioRecorder实现的录音以及基于
- 汇编实现的电子琴图形界面,带录音
- PMBOK第六版itto录音去广告版本
- 录音啦5.9一款出色的会议录音转文字
- Qt5 Wav波形文件录音及分析
- 实时录音并显示波形.zip
- STM32的录音机程序,亲测可用
- Qt+SDL录音并实时放音
- LabVIEW双声道语音录制系统
- 使用AudioRecord进行录音 获取录音字节
- unity的Microphone录音
- h5 web录音并上传后端
- 使用Wave系列API开发录音机和播放器
- 领域电脑话务员录音文件制作说明书
- iOS声音采集与播放
- 易语言 声卡控制.ec
- js调用麦克风 进行录音
- Qt之实现录音播放及rawpcm转wav格式
- 基于LABVIEW的录音机
- 一个简单QT5编写的录音机代码
- qt实现音频采集
- iPhone手机录音证据提取研究
- 录音程序(带有端点检测的语音录音
- 微机内部8255和8253控制扬声器发声汇编
- Qt录音机QAudioInput
- h5 录音功能的综合实现
- h5 录音功能的实现
- 录音机.doc安卓课程设计论文报告,运
评论
共有 条评论