2010-02-03 45 views
2

我想将很多音频从其源格式转码为PCM,而无需重新采样或调整样本大小。我想如果Windows Media Player可以播放该文件,并且它不使用传统的ACM编解码器,则必须使用DirectSound才能这样做(这是在Windows XP和Windows Server 2k3上)。那么是否有可能从C#访问DirectSound并执行此操作?我试过在网上搜索,但所有的例子都是关于播放的,我没有兴趣去做。是否有可能使用DirectSound在C#中转码音频?

回答

1

DirectSound是一个音频播放API,您的意思是DirectShow。 Windows Media Player确实使用DirectShow播放音频文件。从理论上讲,您需要做的只是构建与媒体播放器使用的播放图形相同的播放图形,但使用.WAV写入器过滤器替换音频驱动程序。

由于DirectShow图形对象实际上是从C++调用的,但是有一组好的interop定义,您可以在C#中执行此操作,这在C++代码中更容易实现。

因为在.NET中对DirectShow进行了严重的黑客攻击,所以有http://directshownet.sourceforge.net/,但这可能是针对您的问题的矫枉过正。

如果您还没有,我会建议您获取GraphEdit的副本。您可以使用它以交互方式“直接”显示直接显示图形。将文件放入图片。然后删除最后的过滤器并将其替换为文件写入器过滤器。

您将遇到的一个问题是,默认的DirectShow过滤器组中没有.WAV文件写入器过滤器,您将不得不查找或写入一个。

如果你只是想转换文件,并且不太关心如何使用DirectShow编写代码,我建议你只需要获得Sound Forge(甚至可能是演示版本)的副本。它有一种脚本语言(C#,vb),可用于批量处理大多数音频文件格式。

1

转换为WAV可以使用SoX(Sound eXchange,http://sox.sourceforge.net/)从Windows命令行完成。您可以编写一个批处理文件或一个C#应用程序,该应用程序使用正确的属性调用SoX。我不确定WinAMP的功能是如何工作的,但它也有内置的文件写入器输出选项。您可以将整个播放列表串流成波形文件。

相关问题