首页 > 编程笔记 > C#笔记 阅读:3

C# SoundPlayer类的用法(附带实例)

SoundPlayer 类可以很方便地播放 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();          // 暂停播放
        }
    }
}
执行结果为:

相关文章