是否有一种可移植的,而非专利限制的方式来播放C#/ .Net中的压缩声音文件?我想在节目中发生的各种事件上播放短暂的"叮当"声.
System.Media.SoundPlayer只能处理WAV,但这些通常很大,可嵌入到可下载的应用程序中.MP3受专利保护,因此即使有完全管理的解码器/播放器,它也不能自由重新分配.可用的最佳格式似乎是OGG Vorbis,但我没有运气让任何C#Vorbis库工作(我设法用csvorbis提取原始PCM,但我不知道如何在之后播放它).
我既不想用我的应用程序分发任何二进制文件,也不想依赖于P/Invoke,因为该项目至少应该在Windows和Linux上运行.只要它们与GPL许可兼容,我就可以捆绑.Net程序集.
[这个问题是对一年前mono-dev邮件列表上的邮件列表讨论的跟进]
我终于重新审视了这个主题,并使用BrokenGlass的帮助编写WAVE标题,更新了csvorbis.我添加了一个OggDecodeStream,可以传递给System.Media.SoundPlayer
任何(兼容的)Ogg Vorbis流.用法示例:
using (var file = new FileStream(oggFilename, FileMode.Open, FileAccess.Read)) { var player = new SoundPlayer(new OggDecodeStream(file)); player.PlaySync(); }
在这种情况下,"兼容"意味着"当我试用它时它起作用了".解码器是完全托管的,在Microsoft .Net上工作正常 - 目前,Mono中似乎存在SoundPlayer
导致失真的回归.
已过期:
System.Diagnostics.Process.Start("fullPath.mp3");
我很惊讶,但Dinah提到的方法确实有效.然而,我正在考虑在节目中发生的各种事件中播放短暂的"叮当"声音,我不希望每次我需要进行"ping"时启动用户的媒体播放器!声音.
至于代码项目链接 - 遗憾的是这只是一个P/Invoke包装器.