是否有一种可移植的、不受专利限制的方式来在 C#/.Net 中播放压缩的声音文件?我想对程序中发生的各种事件播放简短的“ clang ”。
System.Media.SoundPlayer只能处理 WAV,但这些通常太大而无法嵌入可下载的应用程序中。 MP3 受专利保护,因此即使有完全托管的解码器/播放器,也不能免费重新分发。可用的最佳格式似乎是 OGG Vorbis,但我没有运气让任何 C# Vorbis 库工作(我设法用 csvorbis 提取原始 PCM,但我不知道之后如何播放它)。
我既不想随我的应用程序分发任何二进制文件,也不想依赖 P/Invoke,因为该项目至少应该在 Windows 和 Linux 上运行。我同意捆绑 .Net 程序集,只要它们与 GPL 的许可证兼容即可。
[此问题是对 mailing list discussion on mono-dev 的跟进一年前的邮件列表]
最佳答案
我终于重新审视了这个主题,并且使用了来自 BrokenGlass on writing WAVE header 的帮助, 更新了 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");
我很惊讶,但是method Dinah mentioned确实有效。但是,我正在考虑在程序中发生的各种事件中播放短的“ clang ”声音,我不想每次需要“ping!”时都启动用户的媒体播放器。声音。
至于代码项目链接 - 不幸的是,这只是一个 P/Invoke 包装器。
关于c# - 如何以可移植的方式在 C# 中播放压缩的声音文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35896/