编写一个C#程序,实现音乐文件的播放功能
要求1: 1. 程序应能够读取MP3和ogg文件,并播放其中的音频。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
界面设计
- 在设计器中添加以下控件:
- 一个
TextBox
控件,用于输入文件路径或在线音乐文件的URL。设置其Name
属性为txtFilePathOrUrl
。 - 一个
Button
控件,用于选择本地文件(btnBrowse
),另一个用于播放音乐(btnPlay
)。将按钮的Text
属性分别设置为“浏览”和“播放”。 - 一个
OpenFileDialog
控件,用于选择本地文件。安装NuGet包
NAudio
安装以下NuGet包:
NVorbis完整代码
Form1.cs中编写以下代码:
using System; using System.IO; using System.Windows.Forms; using WMPLib; using NAudio.Wave; using NVorbis.NAudioSupport; namespace MusicPlayer { public partial class Form1 : Form { private WindowsMediaPlayer mp3Player; private WaveOutEvent waveOut; private VorbisWaveReader vorbisReader; public Form1() { InitializeComponent(); mp3Player = new WindowsMediaPlayer(); waveOut = new WaveOutEvent(); } private void btnBrowse_Click(object sender, EventArgs e) { using (OpenFileDialog ofd = new OpenFileDialog()) { ofd.Filter = "音频文件 (*.mp3;*.ogg)|*.mp3;*.ogg|所有文件 (*.*)|*.*"; if (ofd.ShowDialog() == DialogResult.OK) { txtFilePathOrUrl.Text = ofd.FileName; } } } private void btnPlay_Click(object sender, EventArgs e) { string filePathOrUrl = txtFilePathOrUrl.Text; if (string.IsNullOrEmpty(filePathOrUrl)) { MessageBox.Show("请输入有效的文件路径或URL。"); return; } try { if (filePathOrUrl.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase)) { PlayMp3(filePathOrUrl); } else if (filePathOrUrl.EndsWith(".ogg", StringComparison.OrdinalIgnoreCase)) { PlayOgg(filePathOrUrl); } else { MessageBox.Show("不支持的文件格式。"); } } catch (Exception ex) { MessageBox.Show("播放文件时出错: " + ex.Message); } } private void PlayMp3(string filePath) { try { if (mp3Player.playState == WMPPlayState.wmppsPlaying) { mp3Player.controls.stop(); } mp3Player.URL = filePath; mp3Player.controls.play(); } catch (Exception ex) { MessageBox.Show("播放MP3文件时出错: " + ex.Message); } } private void PlayOgg(string filePath) { try { if (waveOut.PlaybackState == PlaybackState.Playing) { waveOut.Stop(); } vorbisReader = new VorbisWaveReader(filePath); waveOut.Init(vorbisReader); waveOut.Play(); } catch (Exception ex) { MessageBox.Show("播放OGG文件时出错: " + ex.Message); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (mp3Player != null) { mp3Player.controls.stop(); } if (waveOut != null) { waveOut.Stop(); waveOut.Dispose(); } if (vorbisReader != null) { vorbisReader.Dispose(); } } } }
初始化组件
在Form1.Designer.cs中确保控件已正确初始化,并添加了事件处理程序:
private void InitializeComponent() { this.txtFilePathOrUrl = new System.Windows.Forms.TextBox(); this.btnBrowse = new System.Windows.Forms.Button(); this.btnPlay = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // txtFilePathOrUrl // this.txtFilePathOrUrl.Location = new System.Drawing.Point(12, 25); this.txtFilePathOrUrl.Name = "txtFilePathOrUrl"; this.txtFilePathOrUrl.Size = new System.Drawing.Size(656, 20); this.txtFilePathOrUrl.TabIndex = 0; // // btnBrowse // this.btnBrowse.Location = new System.Drawing.Point(674, 23); this.btnBrowse.Name = "btnBrowse"; this.btnBrowse.Size = new System.Drawing.Size(75, 23); this.btnBrowse.TabIndex = 1; this.btnBrowse.Text = "浏览"; this.btnBrowse.UseVisualStyleBackColor = true; this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); // // btnPlay // this.btnPlay.Location = new System.Drawing.Point(755, 23); this.btnPlay.Name = "btnPlay"; this.btnPlay.Size = new System.Drawing.Size(75, 23); this.btnPlay.TabIndex = 2; this.btnPlay.Text = "播放"; this.btnPlay.UseVisualStyleBackColor = true; this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click); // // label1 // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(12, 9); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(163, 13); this.label1.TabIndex = 3; this.label1.Text = "请输入文件路径或在线音乐URL:"; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(842, 61); this.Controls.Add(this.label1); this.Controls.Add(this.btnPlay); this.Controls.Add(this.btnBrowse); this.Controls.Add(this.txtFilePathOrUrl); this.Name = "Form1"; this.Text = "音乐播放器"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.ResumeLayout(false); this.PerformLayout(); } private System.Windows.Forms.TextBox txtFilePathOrUrl; private System.Windows.Forms.Button btnBrowse; private System.Windows.Forms.Button btnPlay; private System.Windows.Forms.Label label1;
程序说明
1. Form1类的构造函数:
- 初始化`WindowsMediaPlayer`实例和`WaveOutEvent`实例。2. btnBrowse_Click事件处理方法:
- 打开文件选择对话框,让用户选择本地音乐文件。选中的文件路径将显示在`txtFilePathOrUrl`文本框中。3. btnPlay_Click事件处理方法:
- 获取用户输入的文件路径或URL,检查其是否为空。
- 根据文件扩展名,选择适当的方法播放MP3或OGG文件。
- 捕获播放过程中可能出现的异常,并显示错误消息。4. PlayMp3方法:
- 使用Windows Media Player控件播放MP3文件。
- 如果文件正在播放,先停止播放,再加载新文件并播放。5. PlayOgg方法:
- 使用NAudio和NVorbis库播放OGG文件。
- 如果文件正在播放,先停止播放,再加载新文件并播放。6. Form1_FormClosing事件处理方法:
- 确保在窗体关闭时停止播放音乐,并释放相关资源。
通过上述设计和实现,程序能够实现MP3和OGG文件的播放功能,用户只需输入文件路径或有效的URL即可播放音乐。该程序使用Windows Media Player控件、NAudio和NVorbis库,具有简单明了的用户界面,易于操作,并处理了常见的异常情况。
- 一个