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

正文內(nèi)容

音頻播放器軟件的設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)論文(完整版)

  

【正文】 () == StopButton) { //停止按鈕 stop()。 ((float)pt)。 SystemTray tray = ()。 } catch (Exception ex) { ()。 } catch (AWTException e) { (e)。 labeltime = labeltime m * 60。 int s = 0。 (new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (() == 2) {//鼠標(biāo)雙擊兩次事件 setExtendedState()。 PopupMenu popupMenu = new PopupMenu()。//更新 TimeLabel repaint()。 (new TimerTask() { double pt = 。 (true)。 (true)。 } //重新設(shè)置播放器時(shí)間 } } })。接受被改變的信息,顯示 /更新界面信息 第 4章 系統(tǒng)詳細(xì)設(shè)計(jì)實(shí)現(xiàn) 23 圖 35 打開(kāi)按鈕事件觸發(fā) 調(diào)用系統(tǒng)的文件選擇器讀取磁盤(pán)音頻文件地址信息 將文件地址傳送到播放列表窗口 播放列表更新,同時(shí)將地址傳遞至播放信息模塊進(jìn)行數(shù)據(jù)更新 播放按鈕事件觸發(fā) 播放控制模塊從播放信息模塊獲取當(dāng)前需要播放的文件信息 由 Manager 根據(jù)音頻文件信息創(chuàng)建播放器對(duì) 象Player 響應(yīng)控制事件對(duì) Player 進(jìn)行實(shí)時(shí)控制 播放,暫停,音量,進(jìn)度等事件 第 3章 系統(tǒng)架構(gòu)和功能模塊設(shè)計(jì) 20 對(duì)歌詞文件的傳遞 歌詞的實(shí)時(shí)顯示作為本播放器的重要功能, LRC 歌詞文件的處理流程也就顯得至關(guān)重要,因?yàn)?LRC 歌詞可能處于不同位置,所以其地址和數(shù)據(jù)處理流程要比音頻文件的處理流程要復(fù)雜得多,其具體處理過(guò)程如圖 32所示。 組件名稱(chēng) 組成控件 功能 控制按鈕 播放 /暫??刂瓢粹o 點(diǎn)擊此按鈕可以播放媒體文件或暫停 音頻文件播放 停止功能按鈕 點(diǎn)擊此按鈕可以停止當(dāng)前正在播放的 音頻 文件 上一首功能按鈕 點(diǎn)擊此按鈕播放播放列表中當(dāng)前歌曲的上一首歌曲 下一首功能按鈕 點(diǎn)擊此按鈕播放播放列表中當(dāng)前歌曲的下一首歌曲 靜音功能按鈕 點(diǎn)擊此按鈕可以關(guān)閉或打開(kāi)聲音 控制條 音量控制條 可以通過(guò)此控制條改變音量的大小 進(jìn)度控制條 可以通過(guò)此控 制條改變播放的進(jìn)度 播放列表菜單欄 添加 列表 項(xiàng) 添加 音頻 文件到播放列表 刪除 列表 項(xiàng) 從播放列表刪除選中的一個(gè)媒體文件 清空列表按鈕 刪除播放列表中的所有媒體文件 新建列表按鈕 彈出對(duì)話框新建一個(gè)用戶(hù)命名播放列表 刪除列表按鈕 彈出對(duì)話框是否確認(rèn)刪除當(dāng)前選擇播放列表 保存列表按鈕 將播放列表中的內(nèi)容 序列化 成 .dat 格式的播放列表文件 載入列表按鈕 從 .dat 格式的文件中讀取媒體文件的信息到播放列表中 系統(tǒng)菜單欄 打開(kāi)文件菜單項(xiàng) 選擇此項(xiàng)彈出文件選擇窗口選擇要播放的音頻文件 退出 菜單項(xiàng) 選擇此項(xiàng)退出系統(tǒng) 第 3章 系統(tǒng)架構(gòu)和功能模塊設(shè)計(jì) 14 播放模式菜單 單選框用于選擇播放模式:?jiǎn)吻h(huán),順序播放 版本菜單項(xiàng) 選擇此項(xiàng)彈出當(dāng)前軟件版本對(duì)話框顯示當(dāng)前版本信息 標(biāo)簽 時(shí)間標(biāo)簽 顯示當(dāng)前播放 音頻文件 的 總體進(jìn)度 正在播放標(biāo)簽 顯示播放器當(dāng)前所 播放的文件的絕對(duì)路徑 歌曲名標(biāo)簽 顯示 當(dāng)前播放音頻文件的 TAG 中的歌曲名 藝術(shù)家標(biāo)簽 顯示 當(dāng)前播放音頻文件的作者 總時(shí)間標(biāo)簽 顯示當(dāng)前播放 音頻文件的總時(shí)長(zhǎng) 格式標(biāo)簽 顯示當(dāng)前播放 的音頻文件的格式,采樣頻率和取樣位數(shù) 星級(jí)標(biāo)簽 顯示當(dāng)前播放的音頻文件的用戶(hù) 評(píng)價(jià)星級(jí) 上次修改標(biāo)簽 電視當(dāng)前播放的音頻文件的最后一次修改時(shí)間 對(duì)于一個(gè)小小的窗口,要擺放這么多的控件,如果隨便地放在窗口上的話,將會(huì)使窗口十分混亂,影響使用,所以要對(duì)其擺放位置進(jìn)行合理的規(guī)劃。 系統(tǒng)功能模塊 概要 設(shè)計(jì) 本軟件同樣采用 MVC 的設(shè)計(jì)模式,做到控制,信息與視圖的相互分離,同時(shí)相互間有聯(lián)系緊密,互相調(diào)用,互為條件與依賴(lài)。 Event(事件)導(dǎo)致 Controller 改變 Model 或 View,或者同時(shí)改變兩者。 對(duì)于任何一個(gè)能發(fā)送 MediaEvent 的 JMF 對(duì)象而言, JMF 都定義了一個(gè)相應(yīng)的偵聽(tīng)接口 (listener interface)。例如當(dāng)你需要播放一個(gè)DataSource 對(duì)象,你可以通過(guò)使用 Manager 對(duì)象 createPlayer( )方法創(chuàng)建一個(gè) Player 對(duì)象來(lái)播放它。像 Player 一樣, DataSink 對(duì)象以 DataSource 作為參數(shù),通過(guò)管理器( Manager)來(lái)構(gòu)造。 如 圖 23 所示, 除了將媒體數(shù)據(jù)傳送至播放終端外,處理器可以將媒體數(shù)據(jù)輸出至一個(gè)數(shù)據(jù)源( DataSource),使用 Processor 的 getDataOutput( )方法實(shí)現(xiàn),此數(shù)據(jù)源可以作為其它的播放器的數(shù)據(jù)源,或是通過(guò)其它的處理器對(duì)其進(jìn)行進(jìn)一步操作控制,或?qū)⑵渥鳛閿?shù)據(jù)池( DataSink)的參數(shù),利用數(shù)據(jù)池或存儲(chǔ)到一個(gè)文件,或傳送到網(wǎng)絡(luò)中去。使用這種 事件 報(bào)告機(jī)制,你可以在調(diào)用播放器的方法前確定播放器是否在其適當(dāng)?shù)臓顟B(tài)。 ● Realized:在這種狀態(tài)下 Player 對(duì)象已經(jīng)確定了它需要哪些資源,并且也知道需要播放的多媒體的類(lèi)型。 MediaLocator 用來(lái)定位采集設(shè)備、本機(jī)的媒體文件、網(wǎng)絡(luò)上的媒體文件以及 網(wǎng)絡(luò) RTP 流。 提供多種媒體格式的同步和控制功能 另外,標(biāo)準(zhǔn) JDK 發(fā)行版不包括 JMF 而包括 Java Sound。 多線程與動(dòng)態(tài)執(zhí)行的 Java 應(yīng)用程序的編譯 運(yùn)行 過(guò)程如圖 11所示 圖 11 運(yùn)行時(shí) 編譯時(shí) Java source code Java Bytecodes Java Complier Network Class Loader bytecode verifier Interpreter Runtime Code generator Hardware 第 2 章 關(guān)于 JMF 技術(shù) 3 第 2 章 關(guān)于 JMF 技術(shù) 關(guān)于 JMF 技術(shù) JMF( Java Media Framework) , Java 媒體架構(gòu),是對(duì)應(yīng) Java 2 平臺(tái)標(biāo)準(zhǔn)版(J2SE)的一種可選用的應(yīng)用編程接口 ( API) 軟件包,它為音頻和視頻等媒體內(nèi)容的捕獲、回放、傳輸和編碼轉(zhuǎn)換等提供了一個(gè)統(tǒng)一的架構(gòu)。 第一章 緒論 2 此外,在內(nèi)存管理方面, Java 在其虛擬機(jī)內(nèi)部實(shí)現(xiàn)了垃圾內(nèi)存自動(dòng)回收功能,能夠自動(dòng)判斷那些內(nèi)存不再被用戶(hù)使用,這樣就讓用戶(hù)在系統(tǒng)設(shè)計(jì)時(shí)從繁雜的內(nèi)存管理工作中解脫出來(lái)。 Java的多態(tài)主要是建立在后期綁定( Late Bingding)或叫動(dòng)態(tài)綁定( Dynamic Binding)基礎(chǔ)之上的,這樣 Java 先天就具備了對(duì)對(duì)象類(lèi)型的自動(dòng)判斷能力。接著,論文 介紹了本播放器的開(kāi)發(fā)平臺(tái) , 闡述了系統(tǒng)各功能的 詳細(xì)設(shè)計(jì)與 實(shí)現(xiàn) 。如今 , 軟件市場(chǎng)上的媒體播放器 百花齊放 ,如: MediaPlayer,酷我音樂(lè)盒 和 千千靜聽(tīng)等。除此之外,本論文不包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)過(guò)的作品成果。利用 java開(kāi)發(fā)的應(yīng)用程序具有平臺(tái)可移植性,可以做到 Once write,run everywhere, 同時(shí)有著比較完善的功能。 面 對(duì) 繁多 的操作系 統(tǒng) 平臺(tái) , 一款具有通用性的音 頻 播放 軟件 則 是必不可少的。 Java 的源程序經(jīng)過(guò)編譯產(chǎn)生類(lèi)文件,類(lèi)文件結(jié)構(gòu)不同于傳統(tǒng)的編譯器生成的二進(jìn)制文件,必須經(jīng)過(guò)虛擬機(jī)的解釋才能運(yùn)行,因此 Java 被認(rèn)為是一種解釋性語(yǔ)言。 簡(jiǎn)單與面向?qū)ο蟮? Java Media Framework( JMF) 是構(gòu)建在 Java Sound 之上的一層 。 本身支持相對(duì)較少的音頻格式 ( AIFF、 WAV和 AU) 當(dāng)創(chuàng)建了 DataSource 對(duì)象后,可以將它送入 Player對(duì)象中,而 Player 對(duì)象不需要關(guān)心 DataSource 中的多媒體是如何獲得的,以及格式是什么 。 圖 22 播放器的狀態(tài)轉(zhuǎn)換圖 ● Unrealized:在這種狀態(tài)下, Player 對(duì)象已經(jīng)被實(shí)例化,但是并不知道它需要播放的多媒體的任何信息。 ● Started:當(dāng)調(diào)用 start( )方法后, Player 對(duì)象就進(jìn)入了該狀態(tài)并播放多媒體。 Processor 同樣可以用來(lái)播放媒體數(shù)據(jù)。 第 2 章 關(guān)于 JMF 技術(shù) 7 ● Configured:當(dāng)完成數(shù)據(jù)源連接,獲得輸入數(shù)據(jù)格式的信息后,處理器對(duì)象就處于 Configured 狀態(tài)。在 AudioFormat 中,描述了音頻格式的屬性,如采樣頻率、每次采樣的數(shù)據(jù)位數(shù)等等。 事件模型 JMF 利用事件報(bào)告機(jī)制來(lái)使基于 JMF 的程序獲知媒體系統(tǒng)當(dāng)前的狀態(tài),從而使程序能夠?qū)ο鄳?yīng)狀態(tài)的改變作出相應(yīng)的操作。Player 當(dāng)從一個(gè)狀態(tài)轉(zhuǎn)為另一狀態(tài)時(shí)都會(huì)產(chǎn)生 transition events。至少應(yīng)該能夠?qū)?音頻文件 進(jìn)行播放、暫停、停止、 音量和進(jìn)度 拖放操作等。播放列表 控制 模塊 歌曲信息節(jié)點(diǎn) 1 歌曲信息節(jié)點(diǎn) 2 歌曲信息節(jié)點(diǎn)。如果上述 3 處都沒(méi)有歌詞,則可以使用歌詞 右鍵菜單 中的關(guān)聯(lián)歌詞功能按鈕手動(dòng)關(guān)聯(lián) LRC 歌詞文件。 同時(shí),在 Timer 線程中,在播放時(shí)每隔一秒都要對(duì) TimeSlider的值進(jìn)行設(shè)定,數(shù)值為 currentpercent*100,即當(dāng)前歌曲播放比例 x100,代碼實(shí)現(xiàn)如下: (new () { public void stateChanged( e) { if (() == null) {//若播放器為空,則時(shí)間拖動(dòng)條失效 (false)。 (new () { public void stateChanged( e) { (VolumeSlider .getValue() / )。//播放信息更新 if (() != null) { ().getGainControl().setLevel()。 } else { play()。 !()) {//當(dāng)不為托動(dòng)態(tài)且不為暫停態(tài) //時(shí),時(shí)間線程運(yùn)行 pt = ().getMediaTime().getSeconds() / ().getCurrentsonginfo() .getTotalTime()。//重繪 用戶(hù)界面 } 最小化托盤(pán) 系統(tǒng)托盤(pán)圖標(biāo) 的設(shè)置可以使播放器在后臺(tái)運(yùn)行,當(dāng)需要喚醒至前臺(tái)時(shí),只需雙擊右下角小圖標(biāo)即可,右鍵單擊小圖標(biāo)可推出播放器,這樣可以使操作界面更加友好,代碼如下: private void initSystemTray() { (正在生成托盤(pán) ...)。//退出前保存播放列表 (0)。 try { (trayIcon)。 } if (labeltime 59) { m = (labeltime labeltime % 60) / 60。 } 第 4章 系統(tǒng)詳細(xì)設(shè)計(jì)實(shí)現(xiàn) 28 s = labeltime。 } } 更新 TimeLabel 的小算法 當(dāng)前時(shí)間進(jìn)行換算然后更新 TimeLabel,整型變量 i為時(shí)間增量 ,本方法要將時(shí)間總量 labeltime 轉(zhuǎn)化為用戶(hù)更加直觀可見(jiàn)的 00:00:00 格式 private void TimeAdd(int i) { // TODO 自動(dòng)生成方法存根 labeltime += i。 } } })。//創(chuàng)建最小化圖標(biāo) Image image = () .getImage(resource/)。//設(shè)置百分比 ((int) pt)。 } if (() == PauseButton) { //暫停按鈕 if (() != null) {
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1