WPF中播放音频文件

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来播放。

posted @   wzwyc  阅读(244)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示