freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計-基于java的mp3播放器的設(shè)計與實現(xiàn)(編輯修改稿)

2025-02-09 02:25 本頁面
 

【文章內(nèi)容簡介】 播放列表中是否有媒體文件,如果沒有則調(diào)用ListController 添加歌曲過程進行添加,然后再次執(zhí)行本過程進行播放;如果播放列表中有文件則執(zhí)行第 3 步; 3:查播放列表索引,判斷是否選中了播放列表的一首歌曲來進行播放,如果沒有選擇,則選擇播放列表中的第一首后執(zhí)行第 4步,如果已經(jīng)選擇了要播放的歌曲則直接執(zhí)行第 4步; 4:斷要播放的歌曲在播放列表中的位置,如果是第一首則將上一首按鈕置為無效,否則置為有效;如果是最后一首,則將下一首按鈕置為無效,否則置為有效; 5:查播放模式中是否是單曲循環(huán), 如果是則將上一首和下一首都置為無效,否則置為有效, 6:取選擇的歌曲的播放地址,使用 Player 控件進行播放,并調(diào)用歌詞顯示函數(shù)顯示歌詞; 建播放器核心代碼如下 : player = (new MediaLocator( file:+().getCurrentsonginfo().getAbsolutepath()))。 用播放狀態(tài)的當(dāng)前播放文件創(chuàng)建一個分配好資源處于就緒狀態(tài)的播放器 ().getCurrentsonginfo().setTotalTime((().getSeconds() / 10E6) / )。 用 Player獲取播放時間后賦值給播放狀態(tài)中的當(dāng)前列表的當(dāng)前播放文件節(jié)點的總時間屬性 ()。//播放器開始播放 播放信息模塊詳細(xì)設(shè)計與實現(xiàn) ( 1)播放信息模塊: 播放信息模塊主要負(fù)責(zé)記錄播放器的各種狀態(tài),并提供 get/set函數(shù)進讀取、設(shè)置,由于播放信息模塊包含著播放 列表模塊,因此播放信息模塊中包含著對播放列表的操作,當(dāng) ListController 播放列表控制模塊要對播放列表進行操作時,需要間接調(diào)用播放信息模塊的函數(shù)。 主要變量如下: private JPanel contentPanel = null。 private JSlider volumnSlider = null。 private JCheckBox muteCheckBox = null。 private JPanel headPanel = null。 private JLabel nameLabel = null。 private JLabel playLabel = null。 private JLabel totalTimeLabel = null。 private JPanel visualPanel = null。 private JSlider processSlider = null。 private JButton playlistButton = null。 private JButton stopButton = null。 private JButton playButton = null。 private JButton previousButton = null。 private JButton nextButton = null。 private JButton cutButton = null。 private JButton mergeButton = null。 private JButton aboutButton = null。 private JFrame playListFrame = null。 private JPanel jContentPane = null。 private List playList = null。 private JButton addButton = null。 private JButton removeButton = null。 private JButton exitButton = null。 private JFrame cutFrame = null。 private JPanel jContentPane1 = null。 private JFrame mergeFrame = null。 private JPanel jContentPane2 = null。 private HashMap songMap = new HashMap()。 private Mp3TVShow mp3TVShow = new Mp3TVShow()。 private PlayerCTL playerCTL = new PlayerCTL()。 private boolean progressSliderDrag = false。 private int plstate = 。 private int playBtnState = 。 private int cutFrameState = 。 private int mergeFrameState = 。 private JSlider startSlider = null。 private JSlider endSlider = null。 private JLabel jLabel = null。 private JLabel jLabel1 = null。 private JTextField cutFilePath = null。 private JButton cutPathButton = null。 private JButton cutExecButton = null。 private JButton addMergeButton = null。 private JButton removeMergeButton = null。 private List mergeList = null。 private JTextField mergedFilePath = null。 private JButton mergePathButton = null。 private JButton mergeExecButton = null。 private JDialog warningDialog = null。 private JPanel jContentPane3 = null。 private JLabel jLabel2 = null。 private JButton sureButton = null。 private ScrollThread scrollThread = null。 private WindowDragControl windowDragControl = new WindowDragControl(this)。 private JCheckBox circleCheckBox = null。 private JCheckBox shuffleCheckBox = null。 于播放信 息中包含播放列表,播放列表中又包含歌曲節(jié)點,層層嵌套所以下面介紹播放列表和歌曲節(jié)點的內(nèi)容及操作 ( 2)播放列表模塊: 列表可以看作是一個容器,每一個播放列表的對象都存放著許多歌曲節(jié)點,它主要負(fù)責(zé)對歌曲及誒單的操作,如添加文件,刪除列表項,清空列表等 ( 3)歌曲信息節(jié)點模塊: 構(gòu)造中讀取 3 字節(jié)的標(biāo)簽“ TAG”, 30 字節(jié)的 MP3 標(biāo)題信息, 30字節(jié)的演唱者信息, 30 字節(jié)的專輯信息, 4 字節(jié)的年代信息, 30 字節(jié)的備注信息和 1個字節(jié)的音樂風(fēng)格序列,共 128 字節(jié)的 MP3 歌曲信 息 歌曲節(jié)點的核心代碼主要是構(gòu)造函數(shù)的 代碼,如下 SongInfo(File f) {//獲取文件對象以構(gòu)造歌曲節(jié)點 // TODO 自動生成構(gòu)造函數(shù)存根 filename=()。//文件名 absolutepath=()。//文件路徑 Date d = new Date(())。//日期 lastmodifiedy=()+1900。//年 lastmodifiedm=()+1。//月 lastmodifiedd=()。//日 try { format=(f)。//格式 tempplayer=(new MediaLocator(file:+()))。 totaltime=().getSeconds()。 //創(chuàng)建一個未分配系統(tǒng)資源的播放器以便獲取播放總時間 ()。 formatinfo=()。 } catch{? ..} if(().endsWith(.mp3)||().endsWith(.MP3)) { //若為 mp3文件,則讀取 TAG獲取信息 try { FileInputStream fin = new FileInputStream(f)。 byte[] data=new byte[128]。 (data)。 getmp3info(data)。//通過讀取的 128個字節(jié)信息獲取歌曲信息 } catch {? ..} }} 播放列表控制模塊詳細(xì)設(shè)計與實現(xiàn) 播放列表主要負(fù)責(zé)對列表的操作,如新建列表,刪除列表,載入列表,保存列表 ( 1) 打開函數(shù)文件 打開文件時,要調(diào)用系統(tǒng)的文件選擇器,新建一個 JFileChooser的對象并進行一定的過濾,只能打開 .wav 和 .mp3 格式的文件,若用戶沒有取消選擇,則將文件或文件組添加到當(dāng)前列表 ( 2) 保存 /裝載列表函數(shù) 當(dāng)一對象創(chuàng)建之后,只要需要,他會一直存在下去,擔(dān)當(dāng)應(yīng)用程序結(jié)束,所有的對象都會走向消亡。有些應(yīng)用場 景下,如果能夠?qū)ο蟮臓顟B(tài)保存下來,并在下一次應(yīng)用程序啟動是重新啟動被保存的信息是非常有必要的,利用 Java 的 I/O操作可以實現(xiàn)。 序列化(即將播放列表保存) 1:要一個輸出目的,因此需要創(chuàng)建一個 OutputStream 對象。 2: OutputStream 封裝到一個 ObjectOutputStream 對象內(nèi)。ObjectOutputStream 是一個專門用于對象序列化的類 3:用 ObjectOutputStream 提供的 writeObject()方法即可將對象序列化,轉(zhuǎn)換成字節(jié)序列,并將其發(fā)送到 OutputStream 所指代的媒介中。 代碼如下 private static File file=new File(save\\” +filename)。 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))。 (())。 ()。 同樣,反序列化代碼原理相同,在此不再一一贅述。 歌詞控制模塊詳細(xì)設(shè)計與實現(xiàn) 歌詞控制模塊主要負(fù)責(zé)歌詞的加載,撤銷,歌詞的識別,以及重新繪制歌詞面板等 讀取 LRC文件成功后翻譯為兩個鏈表,一個是時間鏈表
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1