最近在尝试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类用来做快速短暂的播放,基本可以满足游戏声音播放的需求了。
新闻热点
疑难解答