如何使用DirectShow正确捕获音频
How to properly Capture Audio with DirectShow
基本上,我只想捕获音频并将其保存到磁盘上的文件中。我得出结论,使用AVI格式将是最好的,也是最不烦人的。在艰难地通过DirectShow API之后,这就是我想到的。
//I find the mic in previous code
hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);
//Initialize the Capture Graph Builder
hr = pBuild->SetFiltergraph(pGraph);
IBaseFilter *pMux;
//IFileSinkFilter *pSink;
hr = pBuild->SetOutputFileName(
&MEDIASUBTYPE_Avi, // Specifies AVI for the target file.
L"C:\Example.avi", // File name.
&pMux, // Receives a pointer to the mux.
NULL); // (Optional) Receives a pointer to the file sink.
hr = pBuild->RenderStream(
&PIN_CATEGORY_CAPTURE, // Pin category.
&MEDIATYPE_Audio, // Media type.
pSrc, // Capture filter.
NULL, // Intermediate filter (optional).
pMux); // Mux or file sink filter.
现在,我认为这足以做我想做的事情,但磁盘上没有创建任何文件,RenderStream给了我E_INVALDARGS。如果我将函数调用更改为:
hr = pBuild->RenderStream(
NULL, // Pin category.
NULL, // Media type.
pSrc, // Capture filter.
NULL, // Intermediate filter (optional).
pMux); // Mux or file sink filter.
我得到的是VFW_E_NOT_IN_GRAPH错误。
我在这里做错了什么?如果有任何帮助,我将不胜感激,提前感谢!
VFW_E_NOT_IN_GRAPH
意味着您需要使用IGraphBuilder::AddFilter
调用将创建的pSrc
过滤器添加到过滤器图中。
要将纯音频流保存到文件中,您可能更喜欢.WAV格式,Windows SDK附带WavDest
项目/示例,它可以接受来自音频过滤器的音频,并输出与File Writer Filter
兼容的.WAV文件流以保存到文件。
相关文章:
- 如何在音频处理中使用超能力时间拉伸类
- C++新手,想知道如何使用VS code 2019播放音频文件
- 使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输
- 使用avformat_Open_input打开原始音频
- 如何使用通过 MMDevice API 访问音频设备?
- 如何使用C++生成音频波形
- 如何在 Linux 上使用带有 ffmpeg 的C++从 USB 音频设备录制音频?
- 使用超强音频套件在音轨之间正确过渡
- 使用gstreamer在安卓上录制音频(使用Qt5)
- 如何使用Microsoft::D irectX::AudioVideoPlayback 来播放音频
- 如何在Raspberry Pi上使用C /libao/alsa通过USB声卡播放音频
- 在 C++/CLR 中使用 ffmpeg 库流式传输音频,avcodec_fill_audio_frame返回 -22
- 使用音频设备播放WebRTC C++应用程序的音频流
- 是否可以使用带有random_shuffle的矢量随机播放音频文件
- 音频编程 SDL - 如何使用 wav 文件在命令行中指定频率切割
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- NAS(使用 qt/linux)- 无法建立简单的音频服务器连接测试
- 使用超强 SDK 从缓冲区播放音频
- 如何使用QT或Linux上的任何其他CPP框架播放WMA音频文件
- 静音左/右音频效果使用Superpowered sdk