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

时间:2011-04-25 09:11:10

标签: c# .net audio .net-4.0

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

前段时间我发现了ASIO for .NET,这只适用于.NET 3.5,是否适用于.NET 4.0?非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

ASIO for .NET无法帮助您破解mp3或wav文件。 Windows中最现代的API是Microsoft Media Foundation。这些都是COM API,所以你要么在.NET上做(也许是痛苦的)COM互操作,或者(更容易)编写C ++ / CLI包装器。如果您使用C ++ / CLI包装器,则需要了解性能问题(特别是对于音频编程的延迟有多重要)。

我怀疑你在.NET中编程时会得到所需的音频延迟。一个好的音频驱动程序(如ASIO)可以降低到<3ms的延迟。因此,如果您要定位“实时音频”,则需要更快地生成音频缓冲区(除非您的延迟时间更长)。换句话说,Windows API处理的“时间间隔”是100纳秒的间隔:)。

您可能不希望自己破解文件。它变得单调乏味,因为它不仅仅是mp3和wav。您还必须了解wav的格式化方式(考虑不同的比特率,通道数等)。使用Media Foundation,它会自动为您加载写解码器,您只需给它文件路径。 Check out this tutorial显示打开现有WAV文件并编写新的WAV文件。我刚刚走下这条路,寻找我正在创建的鼓音序器,它根本不是很痛苦(如果你熟悉COM编程)。

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

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

我认为媒体基金会还没有.NET包装器(虽然如果有人已经完成了这项工作,请随时发布,因为它很棒)。