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

问题描述:

在哪里可以找到适合.NET 4.0(C#)的下列功能的适合(库): +读取可直接访问加载的samplebuffer的mp3/wav示例样品? (例如我要加载MP3采样和编程添加混响,合唱,和我实现更多自定义效果) +播放音频直接缓冲区(浮点阵列) +保存音频缓冲区写入磁盘为MP3或WAV在C#中填充和播放音频缓冲区(NET 4.0)

前段时间我发现了ASIO for .NET,并且这只适用于.NET 3.5,对于.NET 4.0有一些东西吗?非常感谢你的帮助。

+0

什么让你感觉.NET 3.5下编写的库在.NET 4中不起作用? – ChrisWue 2011-04-25 09:34:36

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”(我相信“audio”下)。这也是我为鼓音序器所做的。延迟不会成为问题,您只需要处理字节数组,因此处理原始数据变得非常容易。虽然在这一点上,你可以坚持使用ASIO .NET路由,并使用它来播放从MFSourceReader获得的原始数据。

我不认为Media Foundation有.NET包装器(尽管如果有人已经完成了这项工作,随时可以在这里发布,因为这将是非常棒的知道)。