我想将大量音频从源格式转码为 PCM,而不需要重新采样或弄乱样本大小。我想如果 Windows Media Player 可以播放该文件并且它不使用旧版 ACM 编解码器,那么它必须使用 DirectSound 来播放(这是在 Windows XP 和 Windows Server 2k3 上)。那么是否可以从 C# 访问 DirectSound 并这样做?我试过在网上搜索,但所有的例子都是关于播放的,我没有兴趣做。
3 回答
DirectSound 是一个音频播放 API,你的意思是DirectShow。Windows Media player 确实使用 DirectShow 来播放音频文件。理论上,您需要做的就是构建与媒体播放器相同的播放图,但将最后的音频驱动程序替换为 .WAV 编写器过滤器。
这在 C++ 代码中更容易做到,因为 DirectShow 图形对象实际上是为从 C++ 调用而设计的,但是通过一组良好的互操作定义,您可以在 C# 中做到这一点。
有http://directshownet.sourceforge.net/用于在 .NET 中使用 DirectShow 进行严重黑客攻击,但这对于您的问题来说可能是矫枉过正。
如果您还没有GraphEdit ,我建议您获取一份副本。您可以使用它以交互方式“原型化”直接显示图形。将文件放入graphedit。然后删除最后的过滤器并将其替换为文件写入器过滤器。
您将遇到的一个问题是在默认的一组 DirectShow 过滤器中没有 .WAV 文件编写器过滤器,您必须找到或编写一个。
如果您只是想转换文件,而不关心学习如何使用 DirectShow 编写代码,我建议您获取一份Sound Forge(甚至可能是演示版)。它有一种脚本语言(C#,vb),可用于轻松批处理大多数音频文件格式。
可以使用 SoX(Sound eXchange,http: //sox.sourceforge.net/ )从 Windows 命令行转换为 WAV。您可以编写一个批处理文件或一个调用具有适当属性的 SoX 的 C# 应用程序。我不确定 WinAMP 的功能是如何具体工作的,但它也内置了一个文件写入器输出选项。您可以将整个播放列表流式传输到波形文件。
在此处和此处查看CodeProject上有关音频转换的这篇文章。