C#音乐播放器(可播放wav &mp3格式)_c# wav 音频 文件 工具-程序员宅基地

技术标签: c#  winform  Winform小项目  

C#音乐播放器

大二写的一个小项目(未联网),基本功能都实现了,基本功能主要包括添加本地歌曲、歌曲切换、歌词展示、用户登录注册(登录进去进行收藏)等等一些功能,项目比较简单,下面总结一下各项功能的一些实现思路。
源码地址

一、音乐控件
visual studio 2017 系统自带控件
Windows Media player
这个控件要添加,默认控件中没有
1.控件添加:工具-----选择工具箱项-----COM组件 然后往下翻添加就可以了。
2.控件属性与方法(此项目主要用到的):
1.URL:播放音频或视频的路径
2.播放与暂停 :(MusicPlay为音乐播放控件的名字) 。
MusicPlay.Ctlcontrols.play();播放
MusicPlay.Ctlcontrols.pause();暂停
MusicPlay.Ctlcontrols.currentPosition;歌曲当前播放时间
MusicPlay.Ctlcontrols.duration;歌曲总时长
if(MusicPlay.playState == WMPLib.WMPPlayState.wmppsPlaying)
判断歌曲是否在播放状态

二、本地歌曲的添加
实现思路:创建一个泛型集合(用来保存路径)创建一个打开文本对话框对象,设置它的一些属性。
InitialDirectory 初始目录
Filter 文件类型筛选
title 标题
Multiselect (bool) 是否允许多选
ShowDialog(); 显示对话框
展示图
在这里插入图片描述

最后使用for循环将路径保存到泛型集合中,以及将歌曲名添加到ListBox中,将歌曲的信息添加到数据库中,代码如下
在这里插入图片描述
三、歌曲切换(上一首、暂停、下一首)
此项目歌曲列表用了datagridview以及ListBox控件来显示歌曲的列表
1.ListBox:为ListBox控件添加“DoubleClick”事件,双击以后获得选中行的索引值,因为之前创建了一个泛型集合用来保存歌曲路径的,ListBox中选中行的索引相当于泛型集合中的索引值,代码如下
在这里插入图片描述
歌曲切换就是将播放列表路径的索引++或–就行了,这个就不细讲了,可以参考一下上面的源码。

四、&&其实我觉得当前这个简单项目里面最有难点的还是歌词的展示,因为没有接触过这种类型的项目,所以当时做的时候还是比较迷茫的,最后去小破站(b站)找了一下学习资源,才学会。
现在我们来讲一下实现思路
1.先从网上下载好lrc的歌词,前面名字和歌曲名字一样,后缀改成.lrc就可以了,放到和歌曲同一个文件夹,如下图
在这里插入图片描述

在这里插入图片描述
2.判断歌词文件是否存在,写一个方法,如果存在,则将歌词文件读取所以行再保存到数组中,调用格式化歌词的方法,如下
在这里插入图片描述
3.格式化歌词(将歌词与时间分离存入两个泛型集合中),这里也是写一个方法
在这里插入图片描述
使用split分割,最后保存到泛型集合中
时间是 分*60+秒。
4.最后我们显示歌词,使用timer控件tick事件
用循环遍历泛型集合,我这里是用了6个lalbe控件
在这里插入图片描述

好了,就写了这些,还有一些功能码字不好表达,这个项目以后还会改进,学习一下可以联网的大家可以 参考源码,第一次写博客,如果有不好的地方请见谅!!

源码

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_48863007/article/details/108805683

智能推荐

4.6.6类和对象-继承-同名静态成员处理_c#类中有与类同名的静态成员-程序员宅基地

文章浏览阅读79次。类和对象_c#类中有与类同名的静态成员

常见的 JavaScript 内存泄露-程序员宅基地

文章浏览阅读147次。内存泄漏:由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。1、意外的全局变量js对未声明变量会在全局最高对象上创建它的引用,(是以属性存在的,而不是变量),如果在游览器上就是window对象,如果在node环境下就是global;如果未声明的变..._javascript内存泄露

Python学习笔记——removebg库之抠图-程序员宅基地

文章浏览阅读2.8k次。1.搜索remove.bghttps://www.remove.bg/2.翻译(网站翻译或者谷歌翻译)首页底端3.登陆账号(没注册注册)4.获取密钥4.14.24.34.44.55、查看API5.15.2跳转到GitHubhttps://github.com/brilam/remove-..._removebg

如何在获取全部数据后通过js纯前端实现分页效果_纯js前端实现分页代码-程序员宅基地

文章浏览阅读9.3k次,点赞4次,收藏36次。之前一直使用前后端配合的方式实现分页效果,即在后台将数据进行分页处理,前端向后端发送页数参数,单独的请求某一页的数据。目前在数据量不是很大的基础上要实现js纯前端分页,找了几个插件没有很好的解决方案,最后参照网络博客使用js实现。说明:在调研过程中参考了一位大神的博客,但是忘记了博客链接,部分代码直接来自于该博客。_纯js前端实现分页代码

win10 C语言qt调试,如何在Windows中调试Qt(MSVC)应用程序-程序员宅基地

文章浏览阅读2.4k次。在Windows环境下,使用Qt Creator开发Qt过程中一定会遇到调试问题。如何在Qt Creator里面单步调试呢?一般来说,我们开发Qt应用程序,都会使用QtCreator,QtCreator默认为Qt和C++的开发提供了很多帮助,尤其是集成的帮助、提示,和代码跳转。但是,当进行代码调试的时候,就不如VisualStudio方便了。(我会告诉你们,当博主精神状态不好的时候,写代码,单..._qt 调试器 debugger for windows 10

JavaFX的WebView中通过JavaScript回调Java的程序_javafx html script不加载-程序员宅基地

文章浏览阅读1w次。根据官网给出的例子,自己写了个总是调用不成功。以下是官网例子代码:http://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/js-javafx.htmimport javafx.application.Application;import javafx.application.Platform;import j_javafx html script不加载

随便推点

原因的原因不是原因,结果的结果不是结果-程序员宅基地

文章浏览阅读1.4k次。点击“技术领导力”关注∆每天早上8:30推送来源:孤独大脑一人生难料,世事无常,大多是“原因”和“结果”之间的纠缠。故事A某地空气极好,但是当地死于呼吸系统疾病的患者数量,却名列全国..._原因的原因不是原因

mysql openrowset_SQL的OPENROWSET开启和使用方法-程序员宅基地

文章浏览阅读470次。1、开始—>所有程序—>MicrosoftSQLServer2005—>配置工具—>SQLServer外围应用配置器—>功能的外围应用配置器—>实例名—>DatabaseEngine—>即席远程查询—>启用OpenRowset和OpenDatasource支持。2.代码启用启用:execsp_con..._mysql openrowset

css3的attr函数使用,加载unicode矢量图标_svg图片的unicode-程序员宅基地

文章浏览阅读824次。加载阿里矢量图标除了使用class与svg,我们也可以使用attr加载使用unicodecss3函数var,calc,attr的使用使用css的attr特性简单实现计数器的效果本文示例code example[4]最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。_svg图片的unicode

ESP32 Arduino 怎么上传烧录程序_esp32每次烧录都要按boot-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏18次。今天买了块esp32版,买回来后,按着官方提供的视频去安装好 arduino,结果烧录上去,一直提示connecting中,第一反应,是不是版子坏了?去联系了某宝客服,由于时间太晚,客服爱回不回的样子。那只能去官方交流群问问了,结果也是好久才有人回答。群友的回答是:用g0口接地,后来下载成功了。高兴的在群里发了一个红包。这个就和node mcu,stm32版子有所不同了,这些版子boot都默认用跳线帮接地了。接着我百度了一下,有三种方法下载1、用g0口接地。2、下载时,一直按_esp32每次烧录都要按boot

小程序路由传参报错:SyntaxError: Unexpected end of JSON input_unterminated string in json at position 10-程序员宅基地

文章浏览阅读494次。小程序路由传参,参数转换报错:SyntaxError: Unexpected end of JSON input原因:小程序路由传参对参数长度有限制,当传递的参数超出限制时,会被截取。//item为要传递的对象wx.navigateTo({ url: '/XX?item=' + JSON.stringify(item) })onLoad(options){ //options是接收的item参数 ,此时的item参数由于长度超出限度,已经被截取 console.log_unterminated string in json at position 10

zookeeper+kafka集群部署+storm集群-程序员宅基地

文章浏览阅读125次。zookeeper+kafka集群部署+storm集群一、环境安装前准备:准备三台机器操作系统:centos6.8jdk:jdk-8u111-linux-x64.gzzookeeper:zookeeper-3.4.11.tar.gzkafka: kafka_2.11-1.0.1.tgzstorm:apache-storm-1.2.2.tar.gz配置/etc/hosts(三台..._大数据 集群 hadoop strom集群zookeeper配置

推荐文章

热门文章

相关标签