java音频播放器代码_java程序设计 音乐播放器

本文介绍了由陈玲清、张瑀鑫和苏楚雯组成的团队开发的Java音频播放器101Player,详细阐述了其功能和设计。项目包括GUI设计、音频处理、歌词滚动、播放模式切换等功能。GUI部分涉及PlayPanel、HubFrame等组件的实现,音频处理涵盖了音频格式转换、音量控制和歌曲播放线程管理。歌词滚动和进度条通过AFilter和LrcInfos类实现,同时支持多种播放模式。此外,还包含了用户登录注册模块。
摘要由CSDN通过智能技术生成

101Player

1.团队名称、团队成员介绍

团队名称:

陈玲清(组长)

BasicPlayer HigherPlayer

SongListPanel

SongNode

实现对音频的处理和播放

张瑀鑫(组员)

HubFrame,PlayListPannel,PlayPanel,SearchPannel,ShowPannel

ButtonToolBar,IconButton

主要负责GUI设计,面板之间的交互

苏楚雯(组员)

AFliter,LrcInfos,TimeProgressBar

对歌词滚动,lrc歌词文件处理,计时器

2.项目git地址

3.项目git提交记录截图

6b3fa98a5b55feea5b7d82449ce58540.png

002c57f40004b84ce4caf396612d6516.png

4.前期调查

1b979ed781d1909f085f691481da7330.png

歌词面板

3b36790f435b8ef88e9b0d4891b0fdc2.png

播放列表:歌曲播放记录

进度条:歌曲播放进度

暂停/播放键:暂停歌曲、播放歌曲

音量进度条:调节音量

歌曲播放模式按钮:切换循环播放、顺序播放等

左右键:播放上一首/下一首

歌词面板:歌词滚动

5.项目功能架构图、主要功能流程图

程序主要结构

ddc5ae142742d77b96af9041269fa837.png

6.面向对象设计包图,类图

2cfdb1970c174faa90014f4f4f2efff7.png

7.项目运行截图或屏幕录制。

b9a023dd5c5429604699a06f0555d1cc.png

8.项目关键代码:模块名称-文字说明-关键代码(注意:不得直接复制所有源代码,仅粘贴最关键代码)。

GUI设计部分

PlayPanel

65b782781b48c2be02e53ca081e14c77.png

面板包含:3个标签,7个按钮,1个进度条,1个组合框和1个滑块条

主要代码

c9d0055cbb3535ceff640e4a322f2d1c.png

Button的监听器,这里主要展示play button

a72bf411089ee20077ef72d2a7136179.png

HubFrame

整合四个panel

面板包括:playPanel,playLisyPanel,searchListPanel,showPanel;

采用Boxlayout+Box

导入了Substance.jar包设计观感,水印,渲染使swing界面更美观

HubFrame包括一些panel之间的交互,例如PlayPanel和PlayListPanel之间,在PlayListPanel里选歌,PlayPanel中要有当前播放的歌名的体现,以及,ShowPanel中歌词的滚动也与PlayPanel中的歌曲播放当前时间对应。

这里主要展示一个界面缩放的代码

604f7945ac4b00b1fdc801d67c78cdbb.png

实现三种形式的界面

除了之前展示的界面,还包括以下两种

a39c35cccf27c424fb45096de81efd92.png

5e830de777f33ee4d3ca49d7f43dd8b0.png

音乐播放与列表部分

1. 对音源进行处理并尝试播放

音源处理主要实现过程如下:

获取URL:1.获取音频输入流AudioSystem.getAudioInputStream(audio)。再通过getFormat方法获取编码格式

播放MP3:将MP3的编码格式转换成PCM_SIGNED用到第三方支持库JZoom——其中的三个jar包:jl1.0.1 jar (播放音乐)MP3spi1.9.5 (支持mp3格式 )tritonus.jar(进行GSM编解码)

(Java当中正常只能播放wav格式音乐)

获取设备信息:根据音频格式获取设备信息

打开管道进行IO流操作

e7390819cf6f7bae309280ca054b041d.png

转换编码格式

2.音源线程的管理

正在播放中的歌曲则为新建的线程。如果暂停,则wait。继续播放则notify。

如果切歌,则终止当前线程,并等待新建一个新的音乐播放线程。

0568e456e3735bd20529e35d8f24c096.png

3.音量控制

输出设备对象sourceDataLine获取控制方法

通过floatVoiceControl.setValue()设置音量

d8802a4637a3dd7919da15ea918be5c0.png

4. 获取信息

76870dd0871b9268bd26a430f2343e00.png

5.歌曲列表的实现

SongListPanel :利用JTree(树状元件)实现多级目录。节点则利用DefaultMutableTreeNode类

三级列表:根节点(隐藏),列表,文件

JTree 以节点的toString方法返回字符串显示节点,用String来构建歌曲目录节点

加入歌曲:歌曲文件的toString方法,返回该文件的路径。构造SongNode类(继承自DefaultMutableTreeNode),toString返回歌名

移除歌曲列表:

先判断为第几级目录。根目录不移除(root.getIndex(aList))

有子节点,则提示是否移除

删除播放中的歌曲,暂停播放

移除

清空歌曲列表:

aList.removeAllChildren();

添加歌曲文件:

通过JFileChooser打开对话框,获得外部文件,过滤(mp3,wav,mid)

定义文件File [] ,将files加入目录节点

f5dd6ee4c2490895a1393ea3f1228cf1.png

fdb996f9419f923a4910df4f53caa670.png

e703d97e7468a1fac09cc931e90db7b0.png

c943e9243d979a158ff87f10a3ad4127.png

6.实现不同模式的播放(这里展示前后切歌)

392c66e75cf4686f8b5f23749b19b13d.png

过滤文件,进度条、歌词滚动同步模块

Afilter

添加歌曲文件时,过滤掉文件类型不是.mid .mp3 .wav的文件。

主要代码

7ce72ebdfab5f0f51b5314445a8e2d14.png

LrcInfors

解析歌词文件lrc。歌手、标题、专辑解析分别是判断该行字符串头部是否对应[ar: 、[ti: 、[al: 。

歌词解析则通过正则表达式匹配时间,对应时间格式的正则表达式为\[\d{2}:\d{2}\.\d{2}\] 。\d为0-9,{2}匹配两次。timeList(List)存放每句歌词对应的时间转成的秒制,Infos(HashMap)存放歌词对应的秒制时间和歌词。

e58dabbd0aebfdebec95c4da135adedb.png

主要代码

66608847d206a739e1b4e11d56e81d1c.png

TimeProgressBar

绑定计时器Timer,播放歌曲前,初始化进度条的信息(setMinimum、setMaximum、timelength)重置Timer,启动Timer。暂停歌曲,Timer阻塞。继续播放,Timer唤醒。

歌词滚动:(歌词焦点在第一行)

当计时器到一定秒数,要显示歌词时,将第一行歌词剪去,整体上移,第一行歌词就是当前时间对应的歌词,再显示最后一行歌词的下一句歌词。

b7efce0a428ba71e84f7c6cc82d35738.png

9186d18af055dca67f6c741be7b93f83.png

主要代码

23ba9230416abea17299a85b15839e2c.png

7aff75a4182b8ae87071ce4256eef3ee.png

用户登录、注册

用户创建账号注册、登录

a818045fd0e43bec63cd2b24f141d79a.png

主要代码

9d187bce3f12d374a6a5624260e9b401.png

fb3efe11f4d2a3d6db0643b0de55afa8.png

项目总结

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值