c# - 是否可以使用 DirectSound 在 C# 中对音频进行转码?

标签 c# .net audio directsound

我想将大量音频从其源格式转码为 PCM,而无需重新采样或弄乱样本大小。我想如果 Windows Media Player 可以播放该文件并且它不使用遗留的 ACM 编解码器它必须使用 DirectSound 来播放(这是在 Windows XP 和 Windows Server 2k3 上)。那么是否可以从 C# 访问 DirectSound 并这样做呢?我试过在网上搜索,但所有示例都是关于播放的,我对此没有兴趣。

最佳答案

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

这在 C++ 代码中更容易做到,因为 DirectShow 图形对象实际上是为从 C++ 调用而设计的,但是有了一组很好的互操作定义,您可以在 C# 中做到这一点。

http://directshownet.sourceforge.net/用于在 .NET 中使用 DirectShow 进行严重的黑客攻击,但这可能对您的问题来说太过分了。

我建议获取 GraphEdit 的副本如果你还没有。您可以使用它以交互方式“原型(prototype)化”直接显示图形。将文件拖放到 graphedit 中。然后删除最后的过滤器并将其替换为文件编写器过滤器。

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

如果您只想转换文件,而不关心学习如何使用 DirectShow 编写代码,我建议您只获取 Sound Forge 的副本。 (甚至可能是演示版)。它有一种脚本语言(C#,vb),可用于轻松地批处理大多数音频文件格式。

关于c# - 是否可以使用 DirectSound 在 C# 中对音频进行转码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2195271/

相关文章:

c# - LINQ 表达式未正确评估

c# - 当字符串以方向不可知字符(例如括号)结尾时解析 rtl 语言的问题

c# - 在换行面板中设置最大行数

java - 如何在java代码中使用.dll文件?

python - 将声音文件作为 NumPy 数组导入 Python(audiolab 的替代品)

c# - 绑定(bind)到依赖属性魔法

.net - 当 T 直到运行时才知道时,将 IEnumerable 转换为 IEnumerable<T>

c# - 如何等到任务在 C# 中完成?

c++ - 如何在 Windows 10 上使用 C++ 将连续的原始音频数据记录到循环缓冲区中?

javascript - 音频未在移动浏览器上加载(Plyr 播放器)