这是一个使用 C# 和 Windows Forms 开发的简易音乐播放器,具有基本的播放、暂停、停止、音量调节和音乐列表功能。此外,在上次发布的播放器功能中,还添加了从网络下载音乐文件并显示下载进度的功能。
功能特点:
- 本地音乐播放:支持播放本地的 MP3、FLAC、WAV 等格式的音乐文件。
- 音乐列表管理:可以选择多个本地音乐文件,添加到播放列表中进行播放。
- 音量调节:通过滑动条可以调节音乐的音量。
- 网络音乐下载:支持从网络下载音乐文件,并显示下载进度条。
- Ogg 文件播放:支持播放 Ogg 格式的音乐文件。
使用方法:
- 添加本地音乐:点击“选择音频”按钮,选择本地的音乐文件,即可添加到播放列表中。
- 播放音乐:在列表中选择要播放的音乐,点击“播放”按钮即可开始播放。
- 调节音量:通过滑动条可以调节音量大小。
- 停止播放:点击“停止”按钮可以停止当前正在播放的音乐。
- 网络下载音乐:点击“下载音乐”按钮,输入音乐文件的 URL,即可开始下载音乐文件。
winform窗体控件设计
通过button控件我们设计“播放ogg文件”“选择歌曲”“停止播放”和“下一首”这四个功能模块,listbox模块的右侧由一个竖着的进度条来控制音量,listbox用于显示我们的音乐播放列表,open file dialog1用于获取音乐文件,同时利用Windows自带的控件axWindowsMediaPlayer控件来实现音乐的播放功能,同时它也具有音乐播放器基本的暂停播放音量调节的作用,点击下载歌曲按钮可以再提前设置好的网站里下载音乐。
实现细节:
- 使用 NAudio 库实现音乐播放功能。
- 使用 HttpClient 实现网络请求,支持从网络下载音乐文件。
- 使用 ProgressBar 显示下载进度。
- 使用 OpenFileDialog 实现选择本地音乐文件功能。
链接网络下载音乐
在这个音乐播放器应用程序中,我们实现了从网络下载音乐文件的功能,让用户可以通过输入音乐文件的 URL 地址,将音乐文件下载到本地进行播放。这一功能主要涉及使用 HttpClient 和 WebClient 进行网络请求和文件下载的操作。
介绍 DownloadFile
函数
在我的音乐播放应用程序中,DownloadFile
函数用于从指定的 URL 下载音乐文件并保存到本地存储。这个函数通过 HttpClient
类进行网络请求,并使用异步编程以确保程序的响应性。下面是对该函数的简要说明:
功能概述
DownloadFile
函数的主要任务是从给定的 URL 下载文件并保存到指定路径。它利用了 HttpClient
进行 HTTP GET 请求,并将响应内容写入本地文件。
代码解析
-
创建
HttpClient
实例:using (HttpClient client = new HttpClient())
创建一个
HttpClient
对象用于发送 HTTP 请求。 -
发送 GET 请求:
using (HttpResponseMessage response = await client.GetAsync(url))
异步发送 GET 请求并获取响应。
-
读取响应内容:
using (Stream stream = await response.Content.ReadAsStreamAsync())
异步读取响应内容为流。
-
创建文件流:
using (FileStream fileStream = new FileStream(destinationPath, FileMode.Create, FileAccess.Write, FileShare.None))
创建一个文件流以写入下载内容。
-
复制流:
await stream.CopyToAsync(fileStream);
-
将响应流复制到文件流中进行保存。
-
使用方法
在用户点击下载按钮时调用该函数:
private async void button5_Click(object sender, EventArgs e) { // 音乐文件的 URL 地址 string url = "your url"; // 从 URL 中提取文件名 string fileName = Path.GetFileName(url); // 设置保存路径 string savePath = Path.Combine("your path", fileName); // 显示下载进度条 progressBar1.Visible = true; // 使用 WebClient 发起文件下载请求 using (WebClient client = new WebClient()) { // 下载进度改变事件 client.DownloadProgressChanged += (s, args) => { // 更新进度条 progressBar1.Value = args.ProgressPercentage; }; // 下载完成事件 client.DownloadFileCompleted += (s, args) => { // 隐藏进度条 progressBar1.Visible = false; // 提示下载完成 MessageBox.Show("下载完成!"); // 打开文件夹并选中下载的文件 Process.Start("explorer.exe", "/select," + savePath); }; // 发起文件下载请求 await client.DownloadFileTaskAsync(new Uri(url), savePath); } }
优点
- 异步操作:确保用户界面在下载过程中保持响应。
- 简洁明了:代码结构简单易懂。
- 可靠性高:使用
HttpClient
提供的异步方法提高了可靠性。
实现步骤
- 获取音乐文件的 URL 地址:用户在应用程序中输入要下载的音乐文件的 URL 地址。
- 下载音乐文件:应用程序使用 HttpClient 或 WebClient 发起网络请求,获取音乐文件的数据流。
- 保存音乐文件:将从网络获取的音乐文件数据流保存到本地文件中,以便后续播放。
代码示例
以下是实现链接网络下载音乐的部分代码示例:
private async void button5_Click(object sender, EventArgs e)
{
// 音乐文件的 URL 地址
string url = "your url";
// 从 URL 中提取文件名
string fileName = Path.GetFileName(url);
// 设置保存路径
string savePath = Path.Combine("your path", fileName);
// 显示下载进度条
progressBar1.Visible = true;
// 使用 WebClient 发起文件下载请求
using (WebClient client = new WebClient())
{
// 下载进度改变事件
client.DownloadProgressChanged += (s, args) =>
{
// 更新进度条
progressBar1.Value = args.ProgressPercentage;
};
// 下载完成事件
client.DownloadFileCompleted += (s, args) =>
{
// 隐藏进度条
progressBar1.Visible = false;
// 提示下载完成
MessageBox.Show("下载完成!");
// 打开文件夹并选中下载的文件
Process.Start("explorer.exe", "/select," + savePath);
};
// 发起文件下载请求
await client.DownloadFileTaskAsync(new Uri(url), savePath);
}
}
注意事项
- 在下载文件时,应该确保用户输入的 URL 地址有效,并且网络连接正常。
- 下载过程中应该显示下载进度,以便用户了解下载状态。
- 下载完成后应该提示用户,并且可以打开文件夹并选中下载的文件,方便用户查看和管理。
通过以上步骤,我们实现了从网络下载音乐文件的功能,为用户提供了更多选择和方便,让他们可以自由选择音乐,并将其保存到本地进行欣赏。