2012-10-12 83 views
0

我已经无意中通过一些代码来枚举我的麦克风设备(with some help),并能够从每个设备获取“友好名称”和“clsid”信息。记录directshow音频设备到文件

我已经做了一些与GraphEd.exe修补试图找出我如何可以从directshow采取音频,并将其写入文件(我目前不关心的格式,wav应该是罚款),和似乎无法找到合适的组合。

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

我也遇到了一个codeguru article,它有一个很好的功能录音机,但它没有用于选择音频设备的接口,我似乎无法找到它静态选择要使用哪个录音设备的位置。

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

编辑:我应该提到我的知识和能力,作为一个Win32 COM编程器上的刻度非常低,因此,如果这很容易,只要解释给我,就像我五,请。

回答

3

使用DirectShow将音频录制到文件中需要您构建正确的过滤器图形,因为您应该已经发现了这一点。该部分主要包括:

  1. 设备本身,你通过名字实例化(!不CLSID),它通常是PCM格式
  2. 该转换
  3. 多路复用器组件流进容器格式
  4. 文件写入过滤器是采用文件兼容的流并写入文件

由于没有标准组件可用,棘手的时刻是#2。但是,Windows SDK样本包含缺少的部分 - WavDest Filter Sample。构建它并使其可以使用,您可以构建一个从设备记录到.WAV文件的图形。

你的图形看起来就像这样,它的建成方便地编程,以及:

enter image description here

我注意到,我有WavDest与谷歌地球安装的变化 - 你有麻烦构建它的情况下你自己,你会寻找预编译的二进制文件。

+0

我如何在构建它之后“使用它”? – OzBarry

+0

'1'您可以在GraphEdt中以交互方式构建它,就像任何其他过滤器(它将出现在列表中)'2'一样,您可以像编写任何其他过滤器'3'一样以编程方式将其添加到拓扑中,您​​可以使用GraphEditPlus应用程序(类似于GraphEdit),它允许以交互方式构建图形,然后它可以为您生成C++代码的框架。 –

+0

通过使用它,我想我其实意味着安装它。有没有可能不注册?我的意思是要么直接在我的代码中添加directshow过滤器,要么在我的代码中指定DLL?我将在一个已知的位置分发应用程序和过滤器,并且我不能保证最终用户将拥有管理权限来安装直接显示过滤器(根据我的理解,这需要某种高级权限)。 – OzBarry

0

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