【正文】
InputStream fin = new FileInputStream(f)。ObjectOutputStream 是一個(gè)專門用于對(duì)象序列化的類 3:用 ObjectOutputStream 提供的 writeObject()方法即可將對(duì)象序列化,轉(zhuǎn)換成字節(jié)序列,并將其發(fā)送到 OutputStream 所指代的媒介中。//讀取 LRC標(biāo)示時(shí)間 while (true) { try { s = ()。 當(dāng)然,由于這是我第一次進(jìn)行多媒體系統(tǒng)的開發(fā)工作,所開發(fā)出來的系統(tǒng)不可避免地存在著一些不足,我會(huì)在今后的學(xué)習(xí)工作中逐步加以改進(jìn)。s antiracism taskforce, is in London for the Football Association39。 May be back in the past, to oneself the paranoid weird belief disillusionment, these days, my mind has been very messy, in my mind constantly. Always feel oneself should go to do something, or write something. Twenty years of life trajectory deeply shallow, suddenly feel something, do it. 一字開頭的年齡已經(jīng)到了尾聲。t want to give vent to out your inner voice can be in the high school children of the feelings in a period, but was eventually infarction when graduation party in the throat, later again stood on the pitch he has sweat profusely, looked at his thrown a basketball hoops, suddenly found himself has already can39。那些曾經(jīng)所謂的非做不可,只是青蔥年華里自己給自己注射的一支強(qiáng)心劑,或者說,是自以為是的精神寄托罷了。ll be traveling fast, so despite the distance, it will not be like diving into the deep end of a pool. It will be like he is diving into the shallow end. Skydiver preps for the big jump When he jumps, he is expected to reach the speed of sound 690 mph (1,110 kph) in less than 40 seconds. Like hitting the top of the water, he will begin to slow as he approaches the more dense air closer to Earth. But this will not be enough to stop him pletely. If he goes too fast or spins out of control, he has a stabilization parachute that can be deployed to slow him down. His team hopes it39。突然想到那件藍(lán)格子襯衫;那些被折成各種各樣形狀的信紙;那段從街角深巷伊始的友誼;還有那場(chǎng)還沒有開始就宣告了終結(jié)的邂逅計(jì)劃 …… 那些年那些天的非做不可,終于和青春一樣,都將在我們的人生中謝幕。也曾經(jīng)好像已經(jīng)下定了決心去做某 件事,但更多的時(shí)候是最后又打起了退堂鼓。t really grow up, it seems is not so important。s actions. CSKA said they were surprised and disappointed by Toure39。t charge you more than 35% of your pensation if you win the case. If you are thinking about signing up for a damagesbased agreement, you should make sure you39。 首先,通過此播放器系統(tǒng)的設(shè)計(jì),我對(duì)于設(shè)計(jì)開發(fā)一個(gè)軟件系統(tǒng)的工作流程有了進(jìn)一步的認(rèn)識(shí),明白了軟件開發(fā)過程中各個(gè)階段的基本任務(wù),以及各個(gè)階段之間的聯(lián)系,明確了軟件開發(fā)中形成的文檔資料的重要性。 歌詞控制模塊詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 歌詞控制模塊主要負(fù)責(zé)歌詞的加載,撤銷,歌詞的識(shí)別,以及重新繪制歌詞面板等 讀取 LRC文件成功后翻譯為兩個(gè)鏈表,一個(gè)是時(shí)間鏈表,一個(gè)是歌詞鏈表,二者一一對(duì)應(yīng),在后面的時(shí)間線程中每隔一秒檢查一次歌詞時(shí)間匹配 代碼如下: double ct = ().getSeconds()。 序列化(即將播放列表保存) 1:要一個(gè)輸出目的,因此需要?jiǎng)?chuàng)建一個(gè) OutputStream 對(duì)象。 //創(chuàng)建一個(gè)未分配系統(tǒng)資源的播放器以便獲取播放總時(shí)間 ()。//文件名 absolutepath=()。 private JPanel jContentPane3 = null。 private JButton cutExecButton = null。 private int cutFrameState = 。 private JFrame mergeFrame = null。 private JFrame playListFrame = null。 private JButton playlistButton = null。 private JSlider volumnSlider = null。 播放控制模塊詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 放功能是媒體播放器所有控制功能中最重要的 一個(gè)功能,沒有了它,播放器不能播放,也就不能稱之為播放器了。 播放控制流程 器 Player 從建立之初到消亡,各有一系列已經(jīng)在 JMF 中編寫好的方法可以調(diào)用。各 面板關(guān)系如圖 33: 播放信息模塊 用戶界面模塊 播放控制模塊 播放列表控制模塊 歌詞控制模塊 播放列表 歌曲信息 圖 33 面板關(guān)系圖 播放信息模塊 放信息模塊由播放信息,播放列表,歌曲信息節(jié)點(diǎn)三個(gè)層次嵌套而成,如 34 所示: 圖 34 信息模塊關(guān)系圖 音頻文件播放邏輯 對(duì)音頻文件的傳遞 音頻文件的傳送主要是用在播放列表處理的過程中,當(dāng)播放器的用戶想利用本播放器來播放一個(gè)音頻文件時(shí),首先要做的就是將該音頻文件所在磁盤上的地址傳到播放列表模塊中,由 播放列表將信息傳遞給播放信息模塊進(jìn)行數(shù)據(jù)更新。 播放控制模塊 在這樣的情況下,對(duì)播放器的設(shè)計(jì)目標(biāo)要求有如下功能的實(shí)現(xiàn): 三、系統(tǒng)架構(gòu)和功能模塊分析 MVC 架構(gòu)是“ ModelViewController”的縮寫, 即將“模型 視圖 控制”作為應(yīng)用程序構(gòu)成的三要素。 MediaEvent 的子類包括 ControllerEvern, DataSinkEvent, GainChangeEvent, RTPEvent。 只是描述了該格式的編碼名稱和數(shù)據(jù)類別。在該狀態(tài)下處理器對(duì)象連接到數(shù)據(jù)源并獲取輸入數(shù)據(jù)的格式信息。 媒體定位器( MediaLocator) DataSource 通常用兩種方式來定義,媒體定位器( MediaLocator)或 URL( Universal Resource Locator)。 媒體定位器( MediaLocator) 本身支持相對(duì)較少的音頻格式( AIFF、 WAV 和 AU) Java Media Framework( JMF) 是構(gòu)建在 Java Sound 之上的一層 。簡(jiǎn)單與面向?qū)ο蟮? Java 的源程序經(jīng)過編譯產(chǎn)生類文件,類文件結(jié)構(gòu)不同于傳統(tǒng)的編譯器生成的二進(jìn)制文件,必須經(jīng)過虛擬機(jī)的解釋才能運(yùn)行,因此 Java 被認(rèn)為是一種解釋性語言。面 對(duì) 繁多的操作系 統(tǒng) 平臺(tái),一款具有通用性的音 頻 播放軟件 則 是必不可少的。如今 , 軟件市場(chǎng)上的媒體播放器 百花齊放,如: MediaPlayer,酷我音樂盒 和 千千靜聽等。 Java的多態(tài)主要是建立在后期綁定( Late Bingding)或叫動(dòng)態(tài)綁定( Dynamic Binding)基礎(chǔ)之上的,這樣 Java 先天就具備了對(duì)對(duì)象類型的自動(dòng)判斷能力。 此外,在內(nèi)存管理方面, Java 在其虛擬機(jī)內(nèi)部實(shí)現(xiàn)了垃圾內(nèi)存自動(dòng)回收功能,能夠自動(dòng)判斷那些內(nèi)存不再被用戶使用,這樣就讓用戶在系統(tǒng)設(shè)計(jì)時(shí)從繁雜的內(nèi)存管理工作中解脫出來。多線程與動(dòng)態(tài)執(zhí)行的 二、相關(guān)技術(shù)簡(jiǎn)介 關(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)。另外,標(biāo)準(zhǔn) JDK 發(fā)行版不包括 JMF而包括 Java Sound。 提供多種媒體格式的同步和控制功能 數(shù)據(jù)池( DataSink) 播放器( Player) 如 圖 21 所 示,播放器( Player) 對(duì)象將音頻、視頻數(shù)據(jù)流作為輸入,然后將數(shù)據(jù)流輸出到音箱或屏幕上,就像播放器讀取 DV 帶中的數(shù)據(jù),然后將音頻信號(hào)送到音箱上,視頻數(shù)據(jù)送到屏幕上一樣。 圖 22 處理器的狀態(tài)轉(zhuǎn)換圖 數(shù)據(jù)池( DataSink) 數(shù)據(jù)池( DataSink) 用來讀取數(shù)據(jù)源( DataSource)的媒體數(shù)據(jù)和輸出到特定的目的地 —— 這里的目的地不同于以上所說的如音箱或屏幕。在 VideoFormat 中則描述了視頻數(shù)據(jù)的類型如 等。 CaptureDeviceManager:該管理器中保存了截取設(shè)備的注冊(cè)信息。 JMF 中的 Controller 對(duì)象,例如播放器( Player)和處理器( Processor),以及 Control 對(duì)象,例如 GainControl 都可以發(fā)出 MediaEvent 事件。類似的,只要 Controller 改變了 View, View 會(huì)從潛在的 Model中獲取數(shù)據(jù)來刷新自己。 媒體文件的管