C++ 将directshow音频设备录制到文件

C++ 将directshow音频设备录制到文件,c++,visual-c++,directshow,audio-recording,C++,Visual C++,Directshow,Audio Recording,我已经通过一些代码列举了我的麦克风设备(),并且能够从每个设备中获取“友好名称”和“clsid”信息 我对GraphEd.exe做了一些修补,试图找出如何从directshow获取音频并将其写入文件(我目前不关心格式,wav应该可以),但似乎找不到正确的组合 我读过的其中一篇文章有链接,但当我检查代码时,我对如何使用该代码感到非常困惑,例如设置输出文件,或者指定要使用的音频捕获设备 我还遇到了一个功能很好的录音机,但它没有选择音频设备的界面,而且我似乎找不到它在哪里静态地选择要使用的录音设备 我

我已经通过一些代码列举了我的麦克风设备(),并且能够从每个设备中获取“友好名称”和“clsid”信息

我对GraphEd.exe做了一些修补,试图找出如何从directshow获取音频并将其写入文件(我目前不关心格式,wav应该可以),但似乎找不到正确的组合

我读过的其中一篇文章有链接,但当我检查代码时,我对如何使用该代码感到非常困惑,例如设置输出文件,或者指定要使用的音频捕获设备

我还遇到了一个功能很好的录音机,但它没有选择音频设备的界面,而且我似乎找不到它在哪里静态地选择要使用的录音设备

我想我最感兴趣的是弄清楚如何使用WindowsSDK示例,但是对这两种方法中的任何一种进行解释都会非常棒


编辑:我应该提到我作为win32 COM程序员的知识和能力非常低,所以如果这很简单,请像我五岁一样向我解释。

用DirectShow将音频录制到文件中需要你构建正确的过滤图,你应该已经知道了。这些部分包括:

  • 通过名字对象(不是CLSID!)实例化的设备本身通常是PCM格式
  • 将流转换为容器格式的多路复用器组件
  • 采用文件兼容流并写入文件的文件编写器筛选器
  • 棘手的时刻是#2,因为没有可用的标准组件。但是,Windows SDK示例包含缺少的部分-。构建它并准备好使用,您可以构建一个图形,将设备中的数据记录到.WAV文件中

    您的图形将如下所示,并且可以通过编程轻松构建:


    我注意到我在Google Earth上安装了一个WavDest的变体-如果您自己构建它时遇到问题,您将寻找预构建的二进制文件。

    使用DirectShow将音频录制到文件中需要您构建正确的过滤图,这一点您应该已经知道了。这些部分包括:

  • 通过名字对象(不是CLSID!)实例化的设备本身通常是PCM格式
  • 将流转换为容器格式的多路复用器组件
  • 采用文件兼容流并写入文件的文件编写器筛选器
  • 棘手的时刻是#2,因为没有可用的标准组件。但是,Windows SDK示例包含缺少的部分-。构建它并准备好使用,您可以构建一个图形,将设备中的数据记录到.WAV文件中

    您的图形将如下所示,并且可以通过编程轻松构建:


    我注意到我在Google Earth上安装了一个WavDest的变体-如果您自己构建它有困难,您将寻找预构建的二进制文件。

    您可以指示ffmpeg从directshow设备录制,并输出到文件。

    您可以指示ffmpeg从directshow设备录制,并输出到一个文件。

    我如何在构建它之后“使用它”?
    1
    您可以在GraphEdt中以交互方式构建它,就像任何其他过滤器(它将出现在列表上)一样
    2
    您可以像任何其他过滤器
    3
    一样以编程方式将它添加到拓扑中您可以使用GrapherEdit应用程序(类似于GrapherEdit)它允许交互式地建立图形,然后它可以为你生成C++代码的骨架。可以不注册吗?我的意思是直接在代码中添加directshow过滤器,或者在代码中指定DLL?我将在一个已知的位置分发应用程序和过滤器,我不能保证最终用户将拥有安装direct show过滤器的管理员权限(据我所知,这需要某种更高的权限)。是的,你可以做到,先生,再见,真是太棒了!谢谢你的帮助!如何在构建之后“使用它”
    1
    您可以在GraphEdt中以交互方式构建它,就像任何其他过滤器一样(它将出现在列表中)
    2
    您可以以编程方式将其添加到拓扑中,就像任何其他过滤器
    3
    您可以使用GrapherEdit应用程序一样(类似于GrapherEdit)它允许交互式地建立图形,然后它可以为你生成C++代码的骨架。可以不注册吗?我的意思是直接在代码中添加directshow过滤器,或者在代码中指定DLL?我将在一个已知的位置分发应用程序和过滤器,我不能保证最终用户将拥有安装direct show过滤器的管理员权限(据我所知,这需要某种更高的权限)。是的,你可以做到,先生,再见,真是太棒了!谢谢你的帮助!