音频采集 via Waveform API

Waveform API 采集音频

Waveform API 从 Windows 3.0 时代就登上历史舞台了,至今依然可以运行在最新的 OS 上,不得不佩服 Windows 的兼容性。不过新的 waveform API 是基于 Core Audio 架构之上的,其实就是一个 wrapper。

Waveform API 的优势就是非常简单,兼容性好,不依赖于任何框架,虽然通常我们都使用它录制成 Wav 格式的文件(缺点是非常占用空间),但实际上也可以和其他框架(如 FFmpeg,DShow,MF 等)配合使用编码成压缩的音频格式(如 mp3,aac 等)。

采集流程

waveform api

采集代码

以下是整个 Waveform API 采集过程的概要代码,略去各个函数的具体实现和错误处理:

m_wavInHelper.enumDevices(this, _fillDevices);
m_wavInHelper.selectDevice(nSel);
hr = m_wavInHelper.getSupportedFormats(supportedFormats);
if (SUCCEEDED(hr)) {
   
    // add supported formats to a combobox
    if (WAVE_FORMAT_1M08 == (supportedFormats & WAVE_FORMAT_1M08))
        pFormats->SetItemData(pFormats->AddString(_T("11.025 kHz, mono, 8-bit")), WAVE_FORMAT_1M08);
    … …
}
m_wavInHelper.selectDevice(nSel); 
m_wavInHelper.openDevice(samplesPerSec, channels, bitsPerSample);
m_wavInHelper.startRecording(szRecFile);
… … // capturing 
m_wavInHelper.stopRecording();
m_wavInHelper.closeDevice();

CWaveInHelper::enumDevices 函数

枚举到的每一个设备经由回调函数返回设备名称,然后填充到界面上的列表控件中(下图中的 Input ComboBox),每个设备支持的格式也可以通过 API waveInGetDevCaps 枚举出来。
Wav cap

HRESULT CWaveInHelper::enumDevices(void* pContext, PFENUM_DEV_CALLBACK pCallback)
{
   
   
    RETURN_IF_NULL(pCallback);

    UINT nDevices = 
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值