流媒体之DirectShow——音频采集


 

一:介绍

音频采集通过Audio Capture Filter,它支持数字和模拟音频信号。一般Audio Capture Filter是个线性器件,Input表示输入源,例如麦克风等,具体行为还要看厂家手册。
 
 

二:设备枚举

设备枚举通过《Basic Tasks》#设备枚举的系统枚举方法。详情参照相关部分。

ICreateDevEnum::CreateClassEnumerator 时候的枚举类型为CLSID_AudioInputDeviceCategory,表示音频采集设备。

 
 

三:Audio Capture Graph

3.1 类型

Audio Capture Graph有以下几种类型:

  • Audio-only AVI file:Audio Capture Filter -> AVI Mux Filter -> File Writer Filter;
  • WAV file:Audio Capture Filter -> WavDest Filter Sample -> File Writer Filter;
  • Windows Media Audio (.wma) file:Audio Capture Filter -> WM ASF Writer Filter.
    Audio Capture Graph 必须包含Multiplexer(多路复用器)和File Writer(文件写入)!因为音频包必须被封装成相应格式,所以需要Multiplexer。

3.2 建立

建立Audio Capture Graph可以通过:

  • Capture Graph Builder
  • 手动创建。
    通过Capture Graph Builder的方法和Video Capture类似,这里主要介绍手动创建的方法。
枚举设备

选择设备,并创建Audio Capture Filter

// 确定输入类型
查询Audio Capture Filter的IAMAudioInputMixer接口
调用put_Enable确定输入类型(输入类型字符串不同,可通过waveOutOpen,mixerOpen and mixerGetLineInfo等方法查询)

创建Multiplexer和File Writer Filter,并添加到Graph

设置File Wirter Filter的文件名称

Example:

IBaseFilter *pSrc = NULL, *pWaveDest = NULL, *pWriter = NULL;
IFileSinkFilter *pSink= NULL;
IGraphBuilder *pGraph;

// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
    IID_IGraphBuilder, (void**)&pGraph);

// This example omits error handling.

// Not shown: Use the System Device Enumerator to create the 
// audio capture filter.

// Add the audio capture filter to the filter graph. 
hr = pGraph->AddFilter(pSrc, L"Capture");

// Add the WavDest and the File Writer.
hr = AddFilterByCLSID(pGraph, CLSID_WavDest, L"WavDest", &pWaveDest);
hr = AddFilterByCLSID(pGraph, CLSID_FileWriter, L"File Writer", &pWriter);

// Set the file name.
hr = pWriter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink);
hr = pSink->SetFileName(L"C:\\MyWavFile.wav", NULL);

// Connect the filters.
hr = ConnectFilters(pGraph, pSrc, pWaveDest);
hr = ConnectFilters(pGraph, pWaveDest, pWriter);

// Not shown: Release interface pointers.

3.3 添加预览

有些Audio Capture Filter并没有提供预览Pin,因此可以在它后边加入Infinite Pin Tee来提供多个输出Pin:
在这里插入图片描述
DirectSound Renderer是默认的Renderer,所以也不需要显式连接。
 
 

四:配置Audio Capture Filter属性

Audio Capture Filter的Input Pin暴露IAMAudioInputMixer接口,如上所属,可以通过接口的put_Enable 方法设置输入源,同样也可以设置高低音和音量值。
采样率和音频格式由驱动决定,可以通过Output Pin的 IAMStreamConfig接口枚举和设置。IAMBufferNegotiation 接口可以设置音频预览的缓存,缓存越小预览延时越小。默认设置为半秒缓存。
 
 
参考:
Audio Capture

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值