首页 > 其他分享 >WPF播放音频使用的SoundPlayer和MediaPlayer

WPF播放音频使用的SoundPlayer和MediaPlayer

时间:2022-09-23 10:45:41浏览次数:55  
标签:SoundPlayer Play MediaPlayer player 使用 WPF 播放

WPF中,最简单最容易播放音频的方式是使用SoundPlayer类。它是.NET Framework 2.0的一部分,是对Win32 PlaySound API的封装。

         它具有以下限制:

1)仅支持.wav音频文件;

2)不支持同时播放多个音频(任何新播放的操作将终止当前正在播放的);

3)无法控制声音的音量;

下面的代码展示了如何使用SoundPlayer播放声音:

    SoundPlayer player = new SoundPlayer("BLOW.WAV");

    player.Play();

传递给SoundPlayer构造函数的字符串可以是本地的一个文件名,也可以是网络上的文件。调用Play方法将异步播放声音。如果想同步播放声音,可以使用PlaySync方法。当然,想异步循环播放,可以使用PlayLooping方法,直到你调用Stop或重新播放一个新的声音为止。

         需要说明的是,声音文件直到第一次播放时才会被加载。如果声音文件的加载需要很长的时间,例如从网络来,使用同步播放,会导致UI死掉。出于这个原因考虑,SoundPlayer类也定义了Load和LoadAsync方法以便在第一次播放之前提前加载声音文件。

         如果你想播放系统声音,但记不住他们的文件名,可以用System.Media.SystemSounds类中的一些静态属性:Asterisk,Beep,Exclamation,Hand,Question。每个类型都有自己的Play方法,用来异步播放系统声音。

 

    二、使用WPF专用的MediaPlayer类。它是基于Windows Media Player构建起来的,因此,只要是Windows Media Player支持的格式,它都能播放(包括视频)。

         MediaPlayer具有以下特性供你使用:

1)可以同时播放多个声音(创建多个MediaPlayer对象);

2)可以调整音量(Volume属性);

3)可以使用Play,Pause,Stop等方法进行控制;

4)可以设置IsMuted属性为True来实现静音;

5)可以用Balance属性来调整左右扬声器的平衡;

6)可以通过SpeedRatio属性控制音频播放的速度;

7)可以通过NaturalDuration属性得到音频的长度,通过Position属性得到当前播放进度;

8)可以通过Position属性进行Seek;

使用MediaPlayer播放音频文件如下:

    MediaPlayer player = new MediaPlayer ();

    player.Open(new Uri("BLOW.WAV", UriKind.Relative));

    player.Play();

一个MediaPlayer对象一次只能播放一个文件。而且该文件是异步播放的,你也可以调用Close来释放文件。

(提一下,MediaPlayer在XP下需要window media player比较高版本的支持,不然没有声音。SoundPlayer就不需要),这个有点略坑

 

三、使用COM组建的window media player。

看到调用的com组建足足有十几MB大小,果断放弃了,看网上其他人做的,效果应该还不错。 

 

出处:https://www.cnblogs.com/chuhaida/p/4261516.html

 

=======================================================================================

c#使用SoundPlayer播放wav格式音频

使用

System.Media名称空间下的类SoundPlayer 可以让我们很方便的播放wav波形声音文件。SoundPlayer类其实就是对winmm.dll文件中API函数的封装。

SoundPlayer类的使用很简单。如下:

SoundPlayer player = new SoundPlayer();
player.SoundLocation = "音乐文件名";
player.Load();
player.Play();
 

其中Play方法是异步方法,会在另一个线程中播放。如果我们有时候需要等声音播放完毕之后再进行下一步操作。即声音播放需要阻塞当前线程。就可以使用PlaySync()

方法

  • SoundPlayer类的缺点:只能播放wav文件;在winxp下播放文件比较大或位率比较高的情况,PlaySync同步播放会有播放不完全的问题。

  • 这个问题的产生是由于winmm.dll的版本问题引起的。在xp下winmm.dll的版本是5。在win7下是6。win7下就没有问题。如果要解决在

  • xp下播放不完全的问题。可以使用xp下的录音机打开声音文件,把声音文件另存为7kbit/s的位率格式,但这样声音效果就很差了。

实现

引用System.Media名称空间下的类SoundPlayer

  SoundPlayer player = new SoundPlayer();
 

方法调用Play();

public void Play() 
{
	**player.SoundLocation** = @".x0pbk-swz4q.wav";
	//读取音频文件
	**player.Load();
	**//同步模式
	**player.Play();
	**
	 if (MessageBox.Show("播放音樂中,通过旋转耳机上的旋钮测试音量,若聲音播放正常则选是,反之否", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==  DialogResult.No) 
	{
		DisplaylistboxMSG("Headset測試結果為異常");
	} else 
	{
		DisplaylistboxMSG("Headset測試結果為正常");
	}
	player.Stop();
	//停止播放
	player.Dispose();
}

 

出处:https://blog.csdn.net/qq_35624605/article/details/120971055

标签:SoundPlayer,Play,MediaPlayer,player,使用,WPF,播放
From: https://www.cnblogs.com/mq0036/p/16721880.html

相关文章

  • WPF DevExpress怎么绑定ViewModel事件
    XAML代码<dxg:GridControl.View><dxg:TableViewx:Name="ProductGridView"ShowGroupPanel="False"AllowColumnFilterin......
  • 【WPF】WPF ListView GridView 操作
    wpf这方面首先就是界面代码直接上代码GridView样式分为表格头样式和表格Item样式。表格头类:GridViewColumnHeader表格Item类:ListViewItem,GridViewRowPresenter<!--......
  • dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承
    从设计上,用户控件UserControl就不是一个合适用来多次继承的类型,更不要说进行跨程序集继承自定义的UserControl用户控件。对于大部分的用户控件来说,都是采用组合现有的......
  • WPF 从 RGB 字符串转纯色颜色画刷的方法
    本文告诉大家几个方法用来从RGB字符串转纯色的SolidColorBrush画刷在Windows下,约定的编程规范里,颜色的RGB的字符串表示方法是#[A]RGB的格式,一定是R红色,接着是......
  • WPF 使用 Win10 的 WinRT 自带 Windows.Media.Ocr 实现图片转文本
    世界上有很多OCR识别技术,本文来和大家介绍如果在WPF里,在运行到win10的设备上,通过WindowsRuntime自带的Windows.Media.Ocr实现在给定的图片里面识别文本的功能......
  • WPF 用户控件,无法使用中文
    一、打开VS的高级保存选项1、工具——自定义——命令——菜单栏,下拉,选择文件。2、点击添加命令,左边类别,选择文件;右边命令,选择高级保存选项;确定。3、可以点击上移,下......
  • 深入浅出WPF变换(Transform)之矩阵(Matrix)
    背景知识Matrix是一个用于在二维坐标系中进行坐标转换的3*3仿射变换矩阵。什么是仿射变换?为什么是3*3,不是2*2?好的,让我们来复习一下(以下内容来自百度百科):仿射变换,又称仿......
  • 49. Android 多媒体技术——MediaPlayer播放视频
    49.Android多媒体技术——MediaPlayer播放视频49.1MediaPlayer播放视频MediaPlayer类简介:媒体框架最重要的组成部分之一,此类的对象能够获取、解码以及播放音频和视频,而......
  • WPF正确处理屏幕位置
    WPF可通过引用System.Windows.Forms来使用Screen.AllScreens获取屏幕信息,但是Screen.AllScreens获取的屏幕信息和物理屏幕有关,在Windows系统设置多屏幕之后会获取意想不到......
  • How To Bind a Combobox to a Dictionary in WPF C#
    HowToBindaComboboxtoaDictionaryinWPFC# 回答1UseaDictionary<Answer,string>(noneedforanotherclass)AnswerDisplay=newDictionary<Answer,s......