1、前言
在WPF应用程序开发中,音频播放是一个常见需求,无论是用于提示音、背景音乐,还是多媒体应用中的音频功能,选择合适的播放方式至关重要。不同的场景对音频格式、播放控制、资源管理等方面有不同的要求。本文将介绍三种在WPF中常用的音频播放方案:SoundPlayer、NAudio 和 MediaElement,分析它们的优缺点,并结合代码示例帮助开发者根据实际需求做出合适的选择。
2、正文
在实际开发中,我们常常需要为应用添加声音反馈或背景音乐。WPF提供了多种实现方式,每种方式都有其适用场景和技术特点。下面将逐一介绍这三种主流的音频播放方法。
3、内容
SoundPlayer
第一种方式是使用 .NET 平台自带的 SoundPlayer 类。
优点:无需引入第三方库,使用非常简单,适合播放简短的WAV格式音效。
缺点:仅支持WAV格式,不支持MP3等常见音频格式,功能较为基础。
示例代码:
SoundPlayer player = new SoundPlayer("BLOW.WAV");
player.Play();
NAudio
NAudio 是 .NET 平台上广泛使用的音频处理库,功能强大且灵活。
优点:支持多种音频格式(如MP3、WAV等),可以精细控制播放流程。
缺点:需要手动管理播放状态,例如播放、暂停、停止等逻辑需自行维护。
安装方式:
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控件,虽然可以通过设置 Visibility="Collapsed" 隐藏界面,但仍需在XAML中声明。
前台代码:
<MediaElement
x:Name="mediaPlayer"
LoadedBehavior="Manual"
Visibility="Collapsed"
Volume="1" />
后台代码:
// 播放
_mediaPlayer.Source = new Uri(fileName);
_mediaPlayer.Play();
// 停止播放
_mediaPlayer.Stop();
4、总结
对于简单的短音频播放(如系统提示音),若仅使用WAV格式,SoundPlayer 是最轻量、最直接的选择。
若需要支持MP3等格式,并希望有更多控制能力,NAudio 是一个强大且灵活的第三方库,适合需要自定义播放逻辑的场景。
而对于需要长时间播放、涉及播放状态管理(如暂停、继续)或与UI生命周期联动的应用,推荐使用 MediaElement,它由WPF框架统一管理,稳定性高,开发效率也更高。
根据项目需求选择合适的播放方式,既能保证功能实现,也能提升开发体验和应用性能。
关键词:WPF、音频播放、SoundPlayer、NAudio、MediaElement、MP3播放、WAV、播放控制、后台播放、多媒体
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
优秀是一种习惯,欢迎大家留言学习!
作者:wzwyc
出处:cnblogs.com/wzwyc/p/18439182
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!