【问题标题】:Record directshow audio device to file将 directshow 音频设备录制到文件
【发布时间】:2012-10-12 19:14:51
【问题描述】:

我偶然发现了一些代码来枚举我的麦克风设备 (with some help),并且能够从每个设备中获取“友好名称”和“clsid”信息。

我已经对 GraphEd.exe 进行了一些修改,试图弄清楚如何从 directshow 获取音频并将其写入文件(我目前不关心格式,wav 应该没问题),并且可以似乎没有找到合适的组合。

我读过的一篇文章链接到this Windows SDK sample,但是当我检查代码时,我最终对如何使用该代码感到非常困惑,即。设置输出文件,或指定要使用的音频捕获设备。

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

我想我最感兴趣的是弄清楚如何使用 Windows SDK 示例,但是对这两种方法中的任何一种的任何解释都很棒。

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

【问题讨论】:

    标签: c++ visual-c++ directshow audio-recording


    【解决方案1】:

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

    1. 您通过名字对象(不是 CLSID!)实例化的设备本身,它通常是 PCM 格式
    2. 将流转换为容器格式的多路复用器组件
    3. 接受文件兼容流并写入文件的文件写入器过滤器

    棘手的时刻是 #2,因为没有可用的标准组件。但是,Windows SDK 示例包含缺少的部分 - WavDest Filter Sample。构建它并使其可供使用,您可以构建一个图表,将设备记录到 .WAV 文件中。

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

    我注意到我在 Google 地球上安装了 WavDest 的一个变体 - 以防您自己构建它时遇到麻烦,您将寻找预构建的二进制文件。

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多