百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

【C#学习记录】Winform音频播放器的制作

bigegpt 2024-09-08 11:27 11 浏览

Hello大家好,我是雷工!

本篇记录Winform音频播放器的制作过程。

一、开发运行环境

1、系统开发平台:Visual Studio 2022。

2、系统开发语言:C#。

二、功能说明及效果演示

1、该音频播放器可以通过音频列表,显示可播放的音频名称,通过列表框下的添加、删除按钮可以向列表中增添和移除音频;

2、通过选中列表中的单个音频名称,点击【播放】按钮,可以播放选中的音频,点击【暂停】按钮,可以暂停播放的音频;通过【继续】按钮可以继续播放音频,通过【上一首】【下一首】可以按列表顺序上下切换播放的音频;

3、具备简单的模式选择功能,通过点击【日间模式】按钮可以将界面主颜色改为浅色调,点击【夜间模式】可将主界面调为黑色;

4、具备进度条显示功能,可以显示视频播放的进度;

5、【播放】按钮功能效果演示

6、【暂停】【继续】按钮功能演示

7、【上一首】【下一首】按钮功能演示

8、模式切换功能演示

三、界面设计

1、添加Button控件:布置功能按钮,【播放】【暂停】【继续】【上一首】【下一首】【添加】【删除】【日间模式】【夜间模式】。

2、添加Label控件:显示文本标签:“音乐列表”

3、添加listBox控件:

用于显示音乐名称列表

4、添加Windows Media Player控件:

在使用Windows Media Player控件进行程序开发前,需要先将其添加到工具箱中,以下为添加步骤。

4.1、选择工具箱,在工具箱的任意位置单击鼠标右键,在弹出的快捷菜单中选择“选择项”。

4.2、在弹出的“选择工具箱项”对话框中选择“COM组件”选项卡,在COM组件列表中找到名称为“Windows Media Player”的组件,然后单击【确定】按钮。

在添加Windows Media Player控件时遇到个小插曲,点完【确定】按钮,在工具箱中依然找不到Windows Media Player控件,有同样问题的小伙伴可以参考上篇《添加控件后工具箱不显示是什么原因》。

4.3、想实现自定义按钮进度条,可以在WindowsMediaPlayer上右击,选择【属性】,在弹出的界面中的控件布局选择模式【None】。

4.4、不显示工具栏,需要增加一句代码

axWindowsMediaPlayer1.uiMode="none";

5、添加timer控件:在【工具箱】—>【timer】控件拖到设计界面上。

6、添加Panel控件:在【容器】选择【Panel】控件添加到设计界面,通过复制粘贴添加两个,用于实现进度条功能。

四、添加本地资源

1、在项目上右击—>【添加】—>【新建文件夹】—>命名为【leigong音频】。

2、在新建的文件夹上右击—>选择【在文件资源管理器中打开文件夹】。

3、将要播放的音频复制到新建的文件夹下。

4、点击【显示所有文件】按钮,可以看到添加到文件夹内的音频文件。

5、选中添加的音频,然后右击选择【包在项目中】。

6、此时在添加音频的属性会有一个【复制到输出目录】

【不复制】表示不会复制输出到bin文件夹。

【始终复制】表示始终会复制输出到bin文件夹。此处选择该项。

五、代码实现与分析

1、加载本地文件夹中的音频

主要代码如下:

/// <summary>
/// 当前的播放列表
/// </summary>
public static List<string> list = new List<string>();
/// <summary>
/// 当前的文件路径
/// </summary>
public static string path = Application.StartupPath + "/Leigong音频/";
public void LoadLocalHostMusic()
 {
	//每次加载之前清空原来的值
 	list = new List<string>();
	this.listBox1.Items.Clear();
	//判断文件路径是否存在
if(!Directory.Exists(path))
 {
	//不存在则创建文件夹
 	Directory.CreateDirectory(path);
 }
//读取该文件夹下的所有文件
foreach(var item in Directory.GetFiles(path))
 {
	var temp = item.Split('/');
 	list.Add(temp[temp.Length-1]);
 }
this.listBox1.Items.AddRange(list.ToArray());
 }
private void Form1_Load(object sender, EventArgs e)
 {
	 LoadLocalHostMusic();
 }

2、播放按钮功能

主要代码:

private void button1_Click(object sender, EventArgs e)
 {
//获取当前音乐列表中选中的歌曲
	if(this.listBox1.SelectedIndex==-1)
 	{
	 MessageBox.Show("请选择要播放的音频!");
 	}
	else
	 {
 	axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
	 }
 }

3、暂停按钮功能

主要代码:

private void button2_Click(object sender, EventArgs e)
 {
 	axWindowsMediaPlayer1.Ctlcontrols.pause();
 }

4、继续按钮功能

主要代码:

private void button3_Click(object sender, EventArgs e)
 {
 	axWindowsMediaPlayer1.Ctlcontrols.play();
 }

5、上一首按钮功能

主要代码:

private void button4_Click(object sender, EventArgs e)
 {
		if(this.listBox1.SelectedIndex==-1)
	 {
 	MessageBox.Show("请选择一首歌!");
 	}
	else
	 {
		//try...catch异常捕捉机制
			try
		 {
			this.listBox1.SelectedIndex--;
			//如果减减运算符得出了-1,那么-1传入List则报异常,因为下标从0开始
			 axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
		 }
		catch
 		{
 		MessageBox.Show("这已经是第一首了");
		this.listBox1.SelectedIndex = 0;
		 }
	 }
 }

6、下一首按钮功能

主要代码:

private void button5_Click(object sender, EventArgs e)
 {
		if(this.listBox1.SelectedIndex==-1)
	 {
 		MessageBox.Show("请选择一个音频!");
	 }
	else
	 {
	try
	 {
	this.listBox1.SelectedIndex++;
	 }
	catch(Exception)
	 {
	this.listBox1.SelectedIndex = 0;
 	}
 axWindowsMediaPlayer1.URL = path + list[this.listBox1.SelectedIndex];
 }

7、通过计时器实现进度条功能

主要代码:

private void timer1_Tick(object sender, EventArgs e)
 {
		//只有是播放状态时,才更新进度
		if((int)axWindowsMediaPlayer1.playState==3)
		 {
				this.panel2.BackColor = Color.LightGreen;
				//当前进度
				double current = axWindowsMediaPlayer1.Ctlcontrols.currentPosition;
				//总长度
				double All = axWindowsMediaPlayer1.currentMedia.duration;
				//播放百分比
				double flag = current / All;
				int widths = (int)(flag * 438);
				 panel2.Size = new Size(widths, 27);
		 }
 }

8、添加音乐到播放列表功能

主要代码:

private void button6_Click(object sender, EventArgs e)
 {
		 OpenFileDialog ofd = new OpenFileDialog();
		//设置打开对话框的初始目录,默认目录为exe运行文件所在的路径
 		ofd.InitialDirectory = Application.StartupPath;
		//设置打开对话框的标题
	 ofd.Title = "[请选择要打开的文件]";
		//设置打开对话框只能单选
 		ofd.Multiselect = false;
		//设置对话框打开的文件类型
	 ofd.Filter = "图片文件|*.jpg|所有文件|*.*";
		//设置文件对话框当前选定的筛选器的索引
 		ofd.FilterIndex = 2;
		//设置对话框是否记忆之前打开的目录
 		ofd.RestoreDirectory = true;
		if(ofd.ShowDialog()==DialogResult.OK)
		 {
				//获取用户选择的文件的完整路径,然后copy文件
 				File.Copy(ofd.FileName, path + ofd.SafeFileName, true);
				//copy完成之后重新加载列表
 				LoadLocalHostMusic();
		 }
 }

9、从列表中删除选中的音频

主要代码:

private void button7_Click(object sender, EventArgs e)
 {
		if(this.listBox1.SelectedIndex==-1)
		 {
 		MessageBox.Show("请选择要删除的音频!");
 		}
		else
 		{
		string currpath = path + list[this.listBox1.SelectedIndex];
		//删除文件
 		File.Delete(currpath);
		//重新加载列表
 		LoadLocalHostMusic();
 		}
 }

10、模式切换

模式切换是通过改变窗体的背景色实现的。

主要代码:

#region 模式切换
private void button8_Click(object sender, EventArgs e)
 {
		this.BackColor = Color.SkyBlue;
 }
private void button9_Click(object sender, EventArgs e)
 {
		this.BackColor = Color.Black;
 }
#endregion

后记

以上为学习Winform音频播放器的制作的记录,有兴趣的同学可以参考练习。

相关推荐

恢复软件6款汇总推荐,帮你减轻数据恢复压力!

在当今数字化生活中,数据丢失的风险如影随形。无论是误删文件、硬盘故障,还是遭遇病毒攻击,丢失的数据都可能给我们带来不小的麻烦。此时,一款优秀的数据恢复软件就成为了挽救数据的关键。今天,为大家汇总推荐...

中兴星星一号刷回官方原版recovery的教程

【搞科技教程】中兴星星一号的官方recovery也来说一下了,因为之前给大家分享过了第三方的recovery了,之前给大家分享的第三方recovery也是采用一键刷入的方式,如果细心的朋友会发现,之前...

新玩机工具箱,Uotan柚坛工具箱软件体验

以前的手机系统功能比较单调,各厂商的重视程度不一样,所以喜欢玩机的朋友会解锁手机系统的读写权限,来进行刷机或者ROOT之类的操作,让使用体验更好。随着现在的手机系统越来越保守,以及自身功能的增强,...

三星g906k刷recovery教程_三星g906k中文recovery下载

【搞科技教程】看到有一些机友在找三星g906k的第三方recovery,下面就来说一下详细的recovery的刷入方法了,因为手机只有有了第三方的recovery之后才可以刷第三方的root包和系统包...

中兴星星2号刷recovery教程_星星二号中文recovery下载

【搞科技教程】咱们的中兴星星2手机也就是中兴星星二号手机的第三方recovery已经出来了,并且是中文版的,有了这个recovery之后,咱们的手机就可以轻松的刷第三方的系统包了,如果没有第三方的re...

数据恢复软件有哪些值得推荐?这 6 款亲测好用的工具汇总请收好!

在数字生活中,数据丢失的阴霾常常突如其来。无论是误删工作文档、格式化重要磁盘,还是遭遇系统崩溃,都可能让我们陷入焦虑。关键时刻,一款得力的数据恢复软件便是那根“救命稻草”。今天,为大家精心汇总6...

中兴u956刷入recovery的教程(中兴e5900刷机)

【搞科技教程】这次主要来给大家说说中兴u956手机如何刷入第三方的recovery,因为第三方的recovery工具是咱们刷第三方rom包的基础,可是很我欠却不会刷,所以太这里来给大家整理了一下详细的...

联想A850+刷recovery教程 联想A850+第三方recovery下载

【搞科技教程】联想A850+的第三方recovery出来了,这个第三方的recovery是非常的重要的,比如咱们的手机要刷第三方的系统包的时候,都是需要用到这个第三方的recovery的,在网上也是有...

工具侠重大更新 智能机上刷机一条龙完成

工具侠是针对玩机的机油开发的一款工具,不管是发烧级别的粉丝,还是普通小白用户,都可以在工具侠上找到你喜欢的工具应用。这不,最新的工具侠2.0.16版本,更新了专门为小白准备的刷机助手工具,以及MTK超...

shift+delete删除的文件找回6种硬盘数据恢复工具

硬盘作为电脑的重要存储设备,如同一个巨大的数字仓库,承载着我们日常工作、学习和生活中的各种文件,从珍贵的照片、重要的工作文档到喜爱的视频、音乐等,都依赖硬盘来安全存放。但有时,我们可能会不小心用sh...

使用vscode+Deepseek 实现AI编程 基于Cline和continue

尊敬的诸位!我是一名专注于嵌入式开发的物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与AI的无尽可能。这两天deepseek3.0上线,据说编程能力比肩Cl...

详解如何使用VSCode搭建TypeScript环境(适合小白)

搭建Javascript环境因为TypeScript不能直接在浏览器上运行。它需要编译器来编译并生成JavaScript文件。所以需要首先安装好javascript环境,可以参考文章:https://...

使用VSCode来书写你的Jupyter Notebooks

现在你可以在VScode里面来书写你的notebook了,使用起来十分的方便。下面来给大家演示一下环境的搭建。首先需要安装一个jupyter的包,使用下面的命令安装:pip3install-ih...

使用VSCode模板提高Vue开发效率(vscode开发vue插件)

安装VSCode安装Vetur和VueHelper插件,安装完成后需要重启VScode。在扩展插件搜索框中找到如下Vetur和VueHelper两个插件,注意看图标。添加Vue模板打...

干货!VsCode接入DeepSeek实现AI编程的5种主流插件详解

AI大模型对编程的影响非常之大,可以说首当其冲,Cursor等对话式编程工具渐渐渗透到开发者的工作中,作为AI编程的明星产品,Cursor虽然好用,但是贵啊,所以咱们得找平替,最好免费那种。俗话说,不...