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

正文內(nèi)容

音頻播放器軟件的設(shè)計與實現(xiàn)畢業(yè)論文-資料下載頁

2025-06-19 05:32本頁面
  

【正文】 量拖動條添加拖動事件監(jiān)聽器第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)24名稱為VolumeSlider音量控制滑動桿控件與播放信息“聲音”相關(guān)聯(lián),當(dāng)音量滑動桿的滑塊位置改變以后,音量大小顯示屏所顯示的數(shù)字也會隨著變化。音量顯示屏顯示的最小值為0,最大值為100,為最大音量的百分比。(new () {public void stateChanged( e) {(VolumeSlider.getValue() / )。//設(shè)置當(dāng)前音量數(shù)值if (() != null) {().getGainControl().setLevel(())。 //若當(dāng)期播放器不為空,重新設(shè)置播放器音量}}})。 對鼠標(biāo)點擊放開事件添加監(jiān)聽器MainFrame 用戶界面中按鈕眾多,每點擊一個按鈕都要觸發(fā)一個事件,因此每個按鈕都要添加一個事件監(jiān)聽器未免太過麻煩,于是我們尋找到一種新的解決辦法,那就是為 MainFrame 類實現(xiàn) MouseListener,ActionListener 的接口,public class MainFrame extends JFrame implements ActionListener, MouseListener這樣一來只需要在 MainFrame 實現(xiàn)接口的方法,就可以及時對時間作出反應(yīng)我們主要對 MouseReleasedEvent 做出反應(yīng),代碼如下public void mouseReleased(MouseEvent e) {// TODO 自動生成方法存根if (() == SoundButton) {//聲音打開if (()) {(false)。//將開聲音關(guān)聲音按鈕顯示互換(false)。(true)。(true)。(false)。//播放信息更新if (() != null) {().getGainControl().setLevel()。}}第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)25}if (() == SoundCloseButton) {//聲音關(guān)閉(false)。 //將開聲音關(guān)聲音按鈕顯示互換(false)。(true)。(true)。(true)。if (() != null) {().getGainControl().setLevel(())。}}if (() == PlayButton) { //播放按鈕if (() == null) {OpenFile()。} else {play()。}}if (() == StopButton) { //停止按鈕stop()。}if (() == PauseButton) { //暫停按鈕if (() != null) {if (() == false) {pause()。}}}if (() == TimeSlider) { isDrag = false。 //鼠標(biāo)松開時,拖動狀態(tài)設(shè)置為否}} 時間線程MainFrame 內(nèi)新建一個時間線程 Timer,每隔 1 秒進行一次 TimeLabel 和TimeSlider 的更新,并且更新 LRC,Timer 只有在 isPaused 為 False 且沒有拖動事件發(fā)生的時候才會運行 run()clock = new Timer()。(new TimerTask() {double pt = 。 // 當(dāng)前播放百分比第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)26public void run() {// TODO 自動生成方法存根if (!isDrag amp。amp。 !()) {//當(dāng)不為托動態(tài)且不為暫停態(tài) //時,時間線程運行pt = ().getMediaTime().getSeconds()/ ().getCurrentsonginfo().getTotalTime()。((float)pt)。//設(shè)置百分比((int) pt)。//更新時間條(1)。//歌詞時間加1并更新TimeAdd(1)。//更新TimeLabelrepaint()。}}}, 10, 1000)。repaint()。//重繪用戶界面} 最小化托盤系統(tǒng)托盤圖標(biāo)的設(shè)置可以使播放器在后臺運行,當(dāng)需要喚醒至前臺時,只需雙擊右下角小圖標(biāo)即可,右鍵單擊小圖標(biāo)可推出播放器,這樣可以使操作界面更加友好,代碼如下:private void initSystemTray() {(正在生成托盤...)。SystemTray tray = ()。//創(chuàng)建最小化圖標(biāo)Image image = ().getImage(resource/)。 // 創(chuàng)建圖表的圖像(new WindowAdapter() {public void windowIconified(WindowEvent e) {dispose()。}})。PopupMenu popupMenu = new PopupMenu()。MenuItem exitItem_exit = new MenuItem(退出)。(new ActionListener() {public void actionPerformed(ActionEvent e) {第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)27// TODO Autogenerated method stubtry {()。//退出前保存播放列表(0)。} catch (Exception ex) {()。}}})。(exitItem_exit)。 //對最小化圖標(biāo)添加右鍵彈出菜單TrayIcon trayIcon = new TrayIcon(image, 追風(fēng)播放器, popupMenu)。(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (() == 2) {//鼠標(biāo)雙擊兩次事件setExtendedState()。setVisible(true)。}}})。try {(trayIcon)。} catch (AWTException e) {(e)。}} 更新 TimeLabel 的小算法當(dāng)前時間進行換算然后更新 TimeLabel,整型變量 i 為時間增量,本方法要將時間總量 labeltime 轉(zhuǎn)化為用戶更加直觀可見的 00:00:00 格式private void TimeAdd(int i) {// TODO 自動生成方法存根labeltime += i。//labeltime為當(dāng)前播放時間int h = 0。int m = 0。int s = 0。if (labeltime 3599) {h = (labeltime labeltime % 3600) / 3600。labeltime = labeltime h * 3600。}if (labeltime 59) {m = (labeltime labeltime % 60) / 60。第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)28labeltime = labeltime m * 60。}s = labeltime。SetLabelTime(h, m, s)。} 播放控制模塊詳細設(shè)計與實現(xiàn)大綱視圖如圖 42: 播放函數(shù)播放功能是媒體播放器所有控制功能中最重要的一個功能,沒有了它,播放器不能播放,也就不能稱之為播放器了。在本播放器系統(tǒng)中,當(dāng)點擊播放會有兩種狀態(tài)轉(zhuǎn)換:第一種是從停止?fàn)顟B(tài)轉(zhuǎn)換到播放狀態(tài);第二種是從暫停狀態(tài)轉(zhuǎn)換到播放狀態(tài)。播放命令由播放按鈕點擊產(chǎn)生單機事件形成播放命令當(dāng)播放器接收到播放命令后,會依次執(zhí)行下面的過程:(1)檢查播放器的當(dāng)前狀態(tài)是否是暫停狀態(tài),即判斷暫停狀態(tài)布爾型變量isPaused 的值。如果是暫停狀態(tài),那么讓 Player 繼續(xù)播放,計時器 Timer 開始計時,并置 isPaused 值為 False 后,退出播放控制過程;如果不是暫停狀態(tài),則執(zhí)行第 2 步;(2)檢查播放列表中是否有媒體文件,如果沒有則調(diào)用 ListController添加歌曲過程進行添加,然后再次執(zhí)行本過程進行播放;如果播放列表中有文第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)29件則執(zhí)行第 3 步;(3)檢查播放列表索引,判斷是否選中了播放列表的一首歌曲來進行播放,如果沒有選擇,則選擇播放列表中的第一首后執(zhí)行第 4 步,如果已經(jīng)選擇了要播放的歌曲則直接執(zhí)行第 4 步;(4)判斷要播放的歌曲在播放列表中的位置,如果是第一首則將上一首按鈕置為無效,否則置為有效;如果是最后一首,則將下一首按鈕置為無效,否則置為有效;(5)檢查播放模式中是否是單曲循環(huán),如果是則將上一首和下一首都置為無效,否則置為有效,(6)獲取選擇的歌曲的播放地址,使用 Player 控件進行播放,并調(diào)用歌詞顯示函數(shù)顯示歌詞;創(chuàng)建播放器核心代碼如下: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é)點的總時間屬性()。//播放器開始播放 停止函數(shù)停止當(dāng)前 MP3 文件的播放有兩種方式,第一種是當(dāng)播放器播放到當(dāng)前文件的最后,系統(tǒng)會自動停止播放;第二種是用戶可以點擊停止播放按鈕來停止當(dāng)前媒體文件的播放。進入停止?fàn)顟B(tài)的初始狀態(tài)也有兩種:第一種是播放狀態(tài);第二種是暫停狀態(tài),當(dāng)播放器轉(zhuǎn)換為停止?fàn)顟B(tài)后,暫停功能和停止功能都變?yōu)闊o效功能,不能使用,直到轉(zhuǎn)換到播放狀態(tài)。()。()。//釋放player所占有的系統(tǒng)資源()。//關(guān)閉Player(false)。//設(shè)置開始狀態(tài)為否第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)30(0)。//設(shè)置當(dāng)前播放百分比為 0 下一首/上一首函數(shù)兩個函數(shù)類似,在此只舉例下一首函數(shù)再點擊上一首/下一首按鈕后,需要先判斷播放列表的索引狀態(tài),若索引在頭部,則上一首功能失效,若索引在尾部,則下一首功能將索引設(shè)置為頭部。核心代碼如下:public void Next() {if (() || ()) {()。//若播放狀態(tài)為開始或暫停,則先停止播放器}if (().getCurrentIndex() (mp3state.getCurrentlist().getV().size() 1)) {().setCurrentIndex((().getCurrentIndex() + 1))。()。//若當(dāng)前播放曲目的索引小于列表長度,則索引加1,否則回到列表頭} else {().setCurrentIndex(0)。}} 暫停函數(shù)當(dāng)播放器接收到暫停命令時,就會使 Player 暫停播放,并讓計時器 Timer停止計時,設(shè)置暫停狀態(tài)變量 isPaused 為 True,并隱藏暫停按鈕,顯示播放按鈕后結(jié)束暫停功能過程。代碼如下:public boolean Pause() {if (()) {(())。//設(shè)置暫停時間()。//播放器停止(false)。//設(shè)置開始狀態(tài)和暫停狀態(tài)的值(true)。return true。} else {return false。}}第 4 章 系統(tǒng)詳細設(shè)計實現(xiàn)31 對播放至文件播放至末尾結(jié)束事件的處理為 Player 添加 ControllerListener 后,當(dāng)音頻文件播放至末尾時會產(chǎn)生EndOfMediaEvent 可以被 ControllerListener 捕獲,此時先判斷播放模式的狀態(tài),如果為單曲播放則停止,如果為單曲循環(huán)則 Player 再次播放,如果為順序播放則先將現(xiàn)有 Player 銷毀,然后將播放列表索引加 1 獲得下一首歌曲信息,新建 Player 播放。由于 JMF 類實現(xiàn)了 ControllerLister 接口,因此需要實現(xiàn)該接口中的 controllerUpdate()方法,該方法在 Controller 對象產(chǎn)生一個事件時被調(diào)用。代碼如下:public synchronized void controllerUpdate(ControllerEvent event) { if (event instanceof RealizeCompleteEvent) { 。 }} 總體流程圖如圖 44開始設(shè)置按鈕狀態(tài)是否自然停止?單曲循環(huán)?單曲播放?順序播放且是最后一首?播放下一首重復(fù)播放播放第一首停止播放計時器停止計時播放進度置 0結(jié)束是是是是否否否否第 4 章 系統(tǒng)詳細設(shè)計
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1