当前位置:  开发笔记 > 编程语言 > 正文

如何以便携方式在C#中播放压缩声音文件?

如何解决《如何以便携方式在C#中播放压缩声音文件?》经验,为你挑选了1个好方法。

是否有一种可移植的,而非专利限制的方式来播放C#/ .Net中的压缩声音文件?我想在节目中发生的各种事件上播放短暂的"叮当"声.

System.Media.SoundPlayer只能处理WAV,但这些通常很大,可嵌入到可下载的应用程序中.MP3受专利保护,因此即使有完全管理的解码器/播放器,它也不能自由重新分配.可用的最佳格式似乎是OGG Vorbis,但我没有运气让任何C#Vorbis库工作(我设法用csvorbis提取原始PCM,但我不知道如何在之后播放它).

我既不想用我的应用程序分发任何二进制文件,也不想依赖于P/Invoke,因为该项目至少应该在Windows和Linux上运行.只要它们与GPL许可兼容,我就可以捆绑.Net程序集.

[这个问题是对一年前mono-dev邮件列表上的邮件列表讨论的跟进]



1> skolima..:

我终于重新审视了这个主题,并使用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包装器.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有