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