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喚醒。
歌詞滾動:(歌詞焦點在第一行)
當計時器到一定秒數,要顯示歌詞時,將第一行歌詞剪去,整體上移,第一行歌詞就是當前時間對應的歌詞,再顯示最后一行歌詞的下一句歌詞。


主要代碼

用戶登錄、注冊

用戶創建賬號注冊、登錄

主要代碼

項目總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM