以下是基于C# WinForms实现音频播放的代码示例,包含详细注释说明:
方法一:使用SoundPlayer
播放WAV格式音频
csharp
// 引入System.Media命名空间
using System.Media;
public partial class Form1 : Form
{
// 声明SoundPlayer对象
private SoundPlayer player = new SoundPlayer();
public Form1()
{
InitializeComponent();
}
// 加载音频文件按钮点击事件
private void btnLoad_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "WAV文件|*.wav"; // 仅支持WAV格式
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
player.SoundLocation = openFileDialog.FileName; // 设置音频文件路径
player.Load(); // 同步加载音频文件
MessageBox.Show("音频加载完成!");
}
}
// 播放按钮点击事件
private void btnPlay_Click(object sender, EventArgs e)
{
if (player.IsLoadCompleted)
{
player.Play(); // 异步播放(后台线程)
// player.PlaySync(); // 同步播放(阻塞当前线程)
}
else
{
MessageBox.Show("请先加载音频文件!");
}
}
// 停止按钮点击事件
private void btnStop_Click(object sender, EventArgs e)
{
player.Stop(); // 停止播放
}
// 释放资源(窗体关闭时)
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
player.Dispose();
}
}
注释说明
2
:
SoundPlayer
仅支持WAV格式音频,适合播放简短提示音。Play()
方法为异步播放,不会阻塞主线程;PlaySync()
为同步播放,会阻塞线程直至播放完成。- 需通过
Dispose()
释放资源,避免内存泄漏。
方法二:使用Windows Media Player控件(支持MP3等格式)
csharp
// 引入Windows Media Player COM组件
using WMPLib;
public partial class Form1 : Form
{
// 声明Windows Media Player控件对象
private AxWMPLib.AxWindowsMediaPlayer axWindowsMediaPlayer1;
public Form1()
{
InitializeComponent();
InitializeMediaPlayer(); // 初始化控件
}
// 初始化媒体播放器控件
private void InitializeMediaPlayer()
{
// 动态创建控件并添加到窗体
axWindowsMediaPlayer1 = new AxWMPLib.AxWindowsMediaPlayer();
axWindowsMediaPlayer1.CreateControl();
axWindowsMediaPlayer1.Visible = false; // 隐藏播放器界面
this.Controls.Add(axWindowsMediaPlayer1);
}
// 加载音频文件按钮点击事件
private void btnLoad_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "音频文件|*.mp3;*.wav;*.wma";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
axWindowsMediaPlayer1.URL = openFileDialog.FileName; // 设置文件路径
}
}
// 播放/暂停按钮点击事件
private void btnPlayPause_Click(object sender, EventArgs e)
{
if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
axWindowsMediaPlayer1.Ctlcontrols.pause(); // 暂停
btnPlayPause.Text = "播放";
}
else
{
axWindowsMediaPlayer1.Ctlcontrols.play(); // 播放
btnPlayPause.Text = "暂停";
}
}
// 停止按钮点击事件
private void btnStop_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop(); // 停止
}
// 显示播放进度(通过Timer控件更新)
private void timer1_Tick(object sender, EventArgs e)
{
if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
lblPosition.Text = axWindowsMediaPlayer1.Ctlcontrols.currentPosition.ToString("0.0");
lblDuration.Text = axWindowsMediaPlayer1.currentMedia.duration.ToString("0.0");
progressBar1.Value = (int)(axWindowsMediaPlayer1.Ctlcontrols.currentPosition * 100 / axWindowsMediaPlayer1.currentMedia.duration);
}
}
}
注释说明
2
3
4
:
- 控件初始化:需通过COM组件添加
AxWindowsMediaPlayer
到工具箱(右键工具箱 → 选择项 → COM组件 → 勾选Windows Media Player)。 - 格式支持:支持MP3、WAV、WMA等常见格式。
- 播放控制:通过
Ctlcontrols
属性调用play()
、pause()
、stop()
方法。 - 状态检测:
playState
属性可判断当前播放状态(如播放中、暂停、停止)。 - 进度同步:结合
Timer
控件实时更新播放进度条。