首页 > 其他分享 >WPF中播放音频文件

WPF中播放音频文件

时间:2024-09-29 11:05:21浏览次数:6  
标签:NAudio private 音频文件 waveOut new WPF 播放 public

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

标签:NAudio,private,音频文件,waveOut,new,WPF,播放,public
From: https://www.cnblogs.com/wzwyc/p/18439182

相关文章

  • WPF 基础 2D 图形学知识 判断点是否在线段上
    在知道一个使用两个点表示的线段,和另一个点,求另一个点是否在线段上本文算法属于通用的算法,可以在WPF和UWP和Xamarin等上运行,基本上所有的.NET平台都能执行如下图,如果点在线段上,那么修改线段颜色假定有线段的定义如下publicrecordLine{publicPo......
  • Wpf使用NLog将日志输出到LogViewer
    Wpf使用NLog将日志输出到LogViewer 1LogViewerLogViewer是通过UDP传输的高性能实时log查看器。具有一下特性:通过UDP读取日志通过文件导入日志导出日志到一个文件中排序、过滤(日志树,日志等级)和查找突出显示搜索文本从UPD接收日志时忽略IP地址列表多接收器支持多种......
  • WPF ProgressBar show value
    //xaml<Windowx:Class="WpfApp424.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • BLE Audio显示连接成功,但没有音乐播放问题解决方案
    背景最近一直在搞这个问题,和原厂一起分析,背景可以参考前面的文章https://blog.csdn.net/Jzj1234555/article/details/142518444?spm=1001.2014.3001.5501https://blog.csdn.net/Jzj1234555/article/details/142595444?spm=1001.2014.3001.5501解决方案今天原厂承认了他......
  • WPF FlowDocument List ListItem Paragraph BlockUIContainer Table TableRowGr
    <Windowx:Class="WpfApp419.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • WPF FlowDocument Paragraph
    <Windowx:Class="WpfApp418.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • python基于Django音乐交流分享平台的设计-音乐播放网站(源码+vue+部署文档+讲解等)
    收藏关注不迷路!!......
  • 为什么越来越多的开发者选择了EasyPlayer播放器?
    在当今快速发展的多媒体和数字化时代,视频和音频的播放与处理已成为众多应用的核心功能之一。随着物联网(IoT)、嵌入式系统、智能硬件以及移动应用的普及,寻找一个高效、灵活且易于集成的多媒体播放解决方案成为了开发者们的重要需求。而EasyPlayer播放器凭借其卓越的性能和广泛的......
  • 海康大华等4G布控球摄像头通过GB28181注册到LiveGBS后,如果获取摄像头经纬度坐标值,并在
    @目录1、背景2、位置订阅2.1、国标设备编辑2.2、选择设备开启位置订阅2.3、全局开启位置订阅2.4、通过目录订阅获取位置(少数情况)3、经纬度信息查询3.1、访问接口获取3.1.1、查询设备列表3.1.2、查询单条设备信息3.1.3、查询设备通道列表3.1.4、查询单条通道信息3.1.5、查询级联......
  • PYTHON钢琴简谱播放器代码QZQ
    importtkinterastkimportpygame.midiimporttimeimportthreadingimportrandom初始化pygame.midipygame.midi.init()获取MIDI输出设备midi_out=pygame.midi.Output(0)乐器名称映射instrument_names={0:“大钢琴(声学钢琴)”,1:“明亮的钢琴”,2:......