目的:
利用NAudio中提供的WaveProvider编写出自定义的声音播放器,能够播放自己想要的声音数据。
一、自定义的WaveProvider
1 | class SelfPlayer: WaveProvider16 //继承自WaveProvider16 |
在主函数中使用如下方式播放测试音频:
1 | public partial class MainWindow : Window |
二、独立线程的播放
通常声音数据的获取和播放会使用独立的线程,这是如果采用下面的方式,则不能获得连续的声音:
1 | public partial class MainWindow : Window |
只听到首次较短时间的声音,之后就没有声音播出了。暂时还不清楚原因,可能的原因之一是不能用Player自身的Waveout来播放自身,于是编写如下测试:
1 | public partial class MainWindow : Window |
结果发现依然只能播出短暂的声音。可能的原因:Waveout在Init之后需要一定的延迟,但经测试仍然不对。最后将初始化的语句放到线程之外,就可以了:
1 | public partial class MainWindow : Window |
类似地,下面的代码也是可行的:
1 | public partial class MainWindow : Window |
这样在调用函数中就可以比较简洁:
1 | public partial class MainWindow : Window |
总结
使用NAudio时应注意,Waveout的初始化(Init
)和播放(Play
)不能在同一个进程中。