SoundPlayer
第一种方式,就是使用SoundPlayer。
优点:平台自带,使用非常简单。
缺点:只支持WAV音频格式,不支持MP3格式。
示例代码:
SoundPlayer player = new SoundPlayer("BLOW.WAV");
player.Play();
NAudio
.NET平台,音频相关的开发,经常会用到NAudio这个库。
优点:用起来相对也比较简单。
缺点:一些状态的处理需要自己维护,什么时候播放,什么时候停止之类的。
安装:
Install-Package NAudio
示例代码:
using NAudio.Wave;
namespace CodeKeeper.Controllers;
public class SoundController
{
private FileStream ms;
private Mp3FileReader rdr;
private WaveStream wavStream;
private BlockAlignReductionStream baStream;
private WaveOut waveOut;
private bool _isStop;
public event EventHandler Stopped;
public void Play(string fileName)
{
ms = File.OpenRead(fileName);
rdr = new Mp3FileReader(ms);
wavStream = WaveFormatConversionStream.CreatePcmStream(rdr);
baStream = new BlockAlignReductionStream(wavStream);
waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback());
waveOut.PlaybackStopped += (s, e) =>
{
if (_isStop)
return;
Stopped?.Invoke(s, e);
};
waveOut.Init(baStream);
waveOut.Play();
_isStop = false;
}
public void Stop()
{
if (waveOut == null)
return;
_isStop = true;
waveOut.Stop();
}
public void Pause()
{
if (waveOut == null)
return;
if (waveOut.PlaybackState == PlaybackState.Playing)
{
waveOut.Pause();
}
}
public void Restart()
{
if (waveOut == null)
return;
if (waveOut.PlaybackState == PlaybackState.Paused)
{
waveOut.Resume();
}
}
}
MediaElement
WPF本身带了一个多媒体的播放控件MediaElement,可以用来播放一些音频和视频。
音频的话WAV,MP3,WMA这些格式都支持。视频的话常用的AVI,MP4的格式都能播放,复杂格式需要安装一些视频解码插件。
优点:功能成熟,可以帮我们去维护状态,类似切换界面,或者关闭窗体的时候,帮我们去停止播放等。
缺点:跟上面的两个纯后台比,这个有UI界面。音频播放时,如果不需要显示播放器界面,可以自己把它隐藏掉。
前台代码:
<MediaElement
x:Name="mediaPlayer"
LoadedBehavior="Manual"
Visibility="Collapsed"
Volume="1" />
后台代码:
// 播放
_mediaPlayer.Source = new Uri(fileName);
_mediaPlayer.Play();
// 停止播放
_mediaPlayer.Stop();
总结
如果一些简单,简短的音效播放,可以直接使用SoundPlayer和NAudio来播放。
如果是长时间的播放,并且可能会涉及到各种状态维护的,更推荐用MediaElement来播放。