C# SoundPlayer类的用法(附带实例)
SoundPlayer 类可以很方便地播放 wav 波形声音文件,这个类的使用很容易,可以分成下列步骤来播放音效:
加载大型程序时,可以使用 LoadAsync() 方法,其是异步方法加载 .wav 文件,可以让调用线程在不中断情况下继续。
注意,如果执行此 Play() 前未指定 .wav 文件或是加载失败,Play() 会播放默认的哔声音效。
PlaySync() 使用目前的线程播放 .wav 文件,也就是同步播放。如果执行此 PlaySync() 前未指定 .wav 文件或是加载失败,PlaySync() 会播放默认的哔声音效。
【实例】设计英文听力练习程序,请选择单词,单击“播放”按钮可以播放该单词的发音。
上述程序第 10 行声明 SoundPlayer 类的 player 对象,然后单击“播放”按钮时,会执行第 21~26 行的 btnPlay_Click() 方法,第 23 行是声音文件,第 24 行是在下载此声音文件,第 25 行是在播放声音文件。
这个程序在 ch.exe 同一文件夹有 apple.wav、orange.wav 和 grape.wav 声音文件。
【实例】循环播放音乐的应用。
SoundPlayer player = new SoundPlayer(); // 创建实体对象 player.SoundLocation = "声音文件"; // 实体文件或是网址文件链接 player.Load(); // 同步载入 .wav 文件 player.Play(); // 异步播放WAV 文件是 Microsoft 和 IBM 共同开发的用在个人计算机音频流的编码格式,目前主要应用在 Windows 操作系统中。这类音频因为没有压缩,所以不会有失真的问题,不过也会导致此类音频占用的内存空间较大。
C# Load()和LoadAsync()
用 Load() 方法加载 .wav 文件时,会使用目前的线程加载文件,直到完全加载文件为止。使用 Load() 在加载大型 .wav 文件时,会产生延迟,或是因其他事件遭到封锁,直到加载完成。加载大型程序时,可以使用 LoadAsync() 方法,其是异步方法加载 .wav 文件,可以让调用线程在不中断情况下继续。
C# Play()和PlaySync()
Play() 方法会使用新的线程播放音效,也就是非同步播放音效,如果 .wav 文件尚未加载则会将其加载。不过建议使用 Play() 前先用 Load() 或 LoadAsync() 先将 .wav 文件加载。注意,如果执行此 Play() 前未指定 .wav 文件或是加载失败,Play() 会播放默认的哔声音效。
PlaySync() 使用目前的线程播放 .wav 文件,也就是同步播放。如果执行此 PlaySync() 前未指定 .wav 文件或是加载失败,PlaySync() 会播放默认的哔声音效。
【实例】设计英文听力练习程序,请选择单词,单击“播放”按钮可以播放该单词的发音。
using System.Media; namespace ch { public partial class Form1 : Form { SoundPlayer player = new SoundPlayer(); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string[] fruits = { "Apple", "Orange", "Grape" }; cboFruits.Items.AddRange(fruits); // 创建水果项目 cboFruits.DropDownStyle = ComboBoxStyle.DropDownList; // 水果品项无法更改 cboFruits.SelectedIndex = 0; // 显示索引 0 } private void btnPlay_Click(object sender, EventArgs e) { player.SoundLocation = cboFruits.Text + ".wav"; player.Load(); player.Play(); } } }执行结果为:

上述程序第 10 行声明 SoundPlayer 类的 player 对象,然后单击“播放”按钮时,会执行第 21~26 行的 btnPlay_Click() 方法,第 23 行是声音文件,第 24 行是在下载此声音文件,第 25 行是在播放声音文件。
这个程序在 ch.exe 同一文件夹有 apple.wav、orange.wav 和 grape.wav 声音文件。
C#循环播放PlayLooping()和停止播放Stop()
方法 PlayLooping() 用新的循环播放所选的 .wav 文件,如果要停止播放,则需执行 Stop() 方法。如果读者喜欢一首音乐想要循环享受,或是练习听一段英文的听力,可以使用此循环播放功能。【实例】循环播放音乐的应用。
using System.Media; namespace ch { public partial class Form1 : Form { SoundPlayer player = new SoundPlayer(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { player.SoundLocation = "pianomusic1.wav"; player.Load(); player.PlayLooping(); // 循环播放 } private void button2_Click(object sender, EventArgs e) { player.Stop(); // 暂停播放 } } }执行结果为:
