• java程序设计 音乐播放器


    101Player

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

    团队名称:

    陈玲清(组长)

    • BasicPlayer HigherPlayer
    • SongListPanel
    • SongNode
    • 实现对音频的处理和播放

    张瑀鑫(组员)

    • HubFrame,PlayListPannel,PlayPanel,SearchPannel,ShowPannel
    • ButtonToolBar,IconButton
      • 主要负责GUI设计,面板之间的交互

    苏楚雯(组员)

    • AFliter,LrcInfos,TimeProgressBar
    • 对歌词滚动,lrc歌词文件处理,计时器

    参考代码:https://blog.csdn.net/huahuaxingjing/article/details/49047725

    2.项目git地址

    https://github.com/Salcious/101music

    3.项目git提交记录截图


    4.前期调查

    • 歌词面板

      播放列表:歌曲播放记录
      进度条:歌曲播放进度
      暂停/播放键:暂停歌曲、播放歌曲
      音量进度条:调节音量
      歌曲播放模式按钮:切换循环播放、顺序播放等
      左右键:播放上一首/下一首
      歌词面板:歌词滚动

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

    • 程序主要结构

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

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

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

    GUI设计部分

    PlayPanel

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

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

    HubFrame

    整合四个panel
    面板包括:playPanel,playLisyPanel,searchListPanel,showPanel;
    采用Boxlayout+Box
    导入了Substance.jar包设计观感,水印,渲染使swing界面更美观
    HubFrame包括一些panel之间的交互,例如PlayPanel和PlayListPanel之间,在PlayListPanel里选歌,PlayPanel中要有当前播放的歌名的体现,以及,ShowPanel中歌词的滚动也与PlayPanel中的歌曲播放当前时间对应。
    这里主要展示一个界面缩放的代码

    实现三种形式的界面
    除了之前展示的界面,还包括以下两种

    音乐播放与列表部分

    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流操作

    转换编码格式

    2.音源线程的管理

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

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

    3.音量控制

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

    通过floatVoiceControl.setValue()设置音量

    4. 获取信息

    5.歌曲列表的实现

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

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

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

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

    移除歌曲列表:

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

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

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

    • 移除

    清空歌曲列表:

    aList.removeAllChildren();

    添加歌曲文件:

    通过JFileChooser打开对话框,获得外部文件,过滤(mp3,wav,mid)
    定义文件File [] ,将files加入目录节点


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

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

    Afilter

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

    主要代码

    LrcInfors

    解析歌词文件lrc。歌手、标题、专辑解析分别是判断该行字符串头部是否对应[ar: 、[ti: 、[al: 。
    歌词解析则通过正则表达式匹配时间,对应时间格式的正则表达式为[d{2}:d{2}.d{2}] 。d为0-9,{2}匹配两次。timeList(List)存放每句歌词对应的时间转成的秒制,Infos(HashMap)存放歌词对应的秒制时间和歌词。

    主要代码

    TimeProgressBar

    绑定计时器Timer,播放歌曲前,初始化进度条的信息(setMinimum、setMaximum、timelength)重置Timer,启动Timer。暂停歌曲,Timer阻塞。继续播放,Timer唤醒。
    歌词滚动:(歌词焦点在第一行)
    当计时器到一定秒数,要显示歌词时,将第一行歌词剪去,整体上移,第一行歌词就是当前时间对应的歌词,再显示最后一行歌词的下一句歌词。


    主要代码

    用户登录、注册

    用户创建账号注册、登录

    主要代码

    项目总结

  • 相关阅读:
    getter 和 setter方法
    了解coredata 数据库的博客
    iOS 本地缓存简述
    iOS 9.0 xcode7
    iOS 直播推流SDK -- PLCameraStreamingKit
    时间充裕的时候看看技术总结
    技术分享7
    学习笔记-音频编解码
    学习笔记-weak strong ARC mrc
    飘雪效果的swf
  • 原文地址:https://www.cnblogs.com/zyxaa/p/12174044.html
Copyright © 2020-2023  润新知