c# - 在 C# (.NET 4.0) 中填充和播放音频缓冲区

标签 c# .net audio .net-4.0

我可以在哪里找到适合.NET 4.0(C#)的东西(库),具有以下功能: + 读取 mp3/wav 样本并直接访问加载样本的样本缓冲区? (例如,我想加载 mp3 样本并以编程方式添加混响、合唱和我实现的更多自定义效果) + 直接播放音频缓冲区( float 组) + 将音频缓冲区保存到磁盘作为 mp3 或 wav

不久前我发现了 ASIO for .NET,它只适用于 .NET 3.5,有适用于 .NET 4.0 的东西吗?非常感谢您的帮助。

最佳答案

ASIO for .NET 无法帮助您破解 mp3 或 wav 文件。 Windows 中用于执行此操作的最现代的 API 是 Microsoft Media Foundation 。不过,这些都是 COM API,因此您要么从 .NET 进行(也许很痛苦)COM 互操作,要么(更容易)编写 C++/CLI 包装器。如果您使用 C++/CLI 包装器,则需要注意性能问题(尤其是延迟对于音频编程的重要性)。

我怀疑您在 .NET 中编程时能否获得所需的音频延迟。一个好的音频驱动程序(如 ASIO)将使您的延迟降至 <3 毫秒。因此,如果您的目标是“现场音频”,则需要比这更快地生成音频缓冲区(除非您可以接受更长的延迟)。换句话说,Windows API 处理的“时间间隔”以 100 纳秒为单位:)。

您可能不想自己破解这些文件。它变得乏味,因为它不仅仅是 mp3 和 wav。您还必须了解 wav 的格式(以考虑不同的比特率、 channel 数量等)。使用 Media Foundation,它会自动为您加载写入解码器,您只需为其提供文件路径即可。 Check out this tutorial显示打开现有的 WAV 文件并写入新的 WAV 文件。我最近刚刚为我正在创建的鼓音序器走上了这条道路,而且它一点也不痛苦(如果您熟悉 COM 编程)。

MF 中的核心组件使这成为可能 is the MFSourceReader

如果您想在修改后播放音频,您可以查看 Windows SDK 中的示例“RenderExclusiveEventDriven”(我相信在“音频”下)。这也是我为鼓音序器所做的。延迟不会成为问题,而且您只需处理字节数组,因此操作原始数据变得非常容易。不过此时,您可能可以坚持使用 ASIO .NET 路线,并仅使用它来播放从 MFSourceReader 获得的原始数据。

我认为 Media Foundation 还没有 .NET 包装器(尽管如果有人已经完成了这项工作,请随时在此处发帖,因为如果知道的话那就太棒了)。

关于c# - 在 C# (.NET 4.0) 中填充和播放音频缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776900/

相关文章:

c# - 如何在 C++ 中构建动态数组并将其返回给 C#/.NET

.net - 在 Linq To SQL 中更新的最佳方式

c++ - 为什么 SDL_Mixer 不能播放某些 mp3 的音乐?

c# - 如何在 C# 中将参数传递给 Windows 服务?

c# - 在 C# 中链接 3 个值/类型

c# - LINQ 聚合特别注意列表的最后一个元素

android - 是否通过采样率记录音频循环?

c# - 女士访问数据库

c# - 用数组名称包装序列化数组元素

javascript - 使用naudio捕获音频并使用javascript播放