首页 > 学院 > 开发设计 > 正文

C#开源音频处理类库 NAudio

2019-11-11 05:15:18
字体:
来源:转载
供稿:网友

  最近在尝试C#播放声音,C#中System.Media命名空间下的SoundPlayer类可以简单播放wav声音,但是有个问题就是同一时间内只能有一个声音在播放,如果有一个背景声音在播放,然后播放另一个声音,则背景声音会停止,创建多个实例,使用多线程都没用,无奈只能想其他办法。

  查看了资料,System.Media命名空间下的SoundPlayer类是基于winmm.dll的封装,本来想重新封装一个,但是一想,应该有现成的类库吧,何必造轮子。百度搜索果然有一个开源的音频类库:NAudio,看了更新历史记录,从2007年开始一直到现在作者都在更新,可见作者持之以恒的精神,免费开源的软件能够坚持下来的并不多。

NAudio官方地址:http://naudio.codeplex.com/

GitHub地址:https://github.com/naudio/NAudio

NAudio主要的功能:

1、支持多种API播放音频,WaveOut、DirectSound、ASIO、WASAPI (Windows Vista及以上)

2、支持多种音频格式解压缩,MP3(ACM或者DMO解码)、AIFF、G.711(mu-law或者a-law)、ADPCM、G.722、Speex、SF2

3、可以解码任意ACM编码的音频

4、支持WaveIn、WASAPI、ASIO录音

5、支持读写标准WAV格式的文件

6、使用32位混音引擎

6、提供MIDI文件多种读写方式

作者还提供了很多教程和示例程序,有时间再慢慢消化吧一、简单的音频播放示例程序:http://pan.baidu.com/s/1pLAVi11

我参考官方示例简单封装了一个BSoundPlayer类,这个WAV播放类的特点:

1、简单易用,声明一个对象,指定文件路径,Play(),Stop()就可以了,支持调整音量,同时可以输出音频文件总时间,当前播放时间

2、同一个对象在播放完毕(或者手动停止)之前无法再次播放

3、不同对象可以同时播放

4、每次播放完毕,自动释放资源

这个类最大的缺点就是在播放结束之前不能再次播放,对于按钮快速点击声音这样的需求不能满足,但是可以用来播放时间比较长的背景音乐,与System.Media命名空间下的SoundPlayer类可以同时播放,配合System.Media命名空间下的SoundPlayer类用来做快速短暂的播放,基本可以满足游戏声音播放的需求了。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表