音樂播放器畢業(yè)設(shè)計_第1頁
音樂播放器畢業(yè)設(shè)計_第2頁
音樂播放器畢業(yè)設(shè)計_第3頁
音樂播放器畢業(yè)設(shè)計_第4頁
音樂播放器畢業(yè)設(shè)計_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

音樂播放器畢業(yè)設(shè)計摘要在信息,技術(shù)高速發(fā)展的今天,多媒體技術(shù)也越來越受到人們的重視。文章對當前使用較多的音樂播放器作出較詳細的比較。經(jīng)過閱讀多張文獻,分析了一些音樂播放器的功能并考慮了怎樣能實現(xiàn)支持更多格式的音樂文件,怎樣能滿足使用者對播放器的需求。本文主要介紹了一個基于JavaApplet來實現(xiàn)的音樂播放器的設(shè)計。并對系統(tǒng)開發(fā)中涉及到的關(guān)鍵技術(shù)作了探討,簡要分析介紹了Java技術(shù)和Applet的工作原理,最后說明系統(tǒng)需要實現(xiàn)的功能。音樂是一種聲音符號,表示人的思想感情。是人們思想的載體之一。音樂是有目的和內(nèi)涵的,其中隱含了作者的生活體驗,思想情懷。一款好的pc音樂播放器不但能夠提供好的音樂播放效果,更能夠為用戶提供方便的操作。

本設(shè)計利用java語言和eclipse

編輯工具對播放器進行編寫。同時給出了詳細的系統(tǒng)設(shè)計過程、部分界面圖及主要功能運行流程圖,本文還對開發(fā)過程中遇到的問題和解決方法進行了詳細的討論,該音樂播放器集播放、暫停、停止、快進、快退、下一曲、上一曲、音量調(diào)節(jié)等功能與一體,性能良好。該播放器支持MP3、WAV、MP3和AIFF等音頻格式。在開發(fā)的過程中采用瀑布模型。第一階段首先對項目進行全面、仔細的需求分析,并準確做出項目進度安排,明確每個階段的任務;第二階段是進行項目分模塊編碼;第三階段對項目進行全面的測試和系統(tǒng)集成測試。 關(guān)鍵詞:JAVA;Eclipse;模塊化;Applet;

Abstract Intheinformation,

therapiddevelopmentoftechnology

today,themultimediatechnology

isbecomingmoreandmoreattention.

Thispaper

makescomparisonof

thedetailto

thecurrentuseofmore

musicplayer.

Byreading

apluralityofliterature,

analysisofsome

functionofmusicplayer

andconsider

how

toachievethe

supportmore

formatmusic

files,howto

meettheneedsofusers

ofthe

player.

Thispapermainlyintroducesthe

designof

aJavabased

Applettoachieve

musicplayer.

Andthekey

technologiesinvolved

inthesystemdevelopment

arediscussedand

analyzedbrieflyintroducestheworkprincipleofJava

technologyandApplet,finally

indicatedthatthesystem

needstorealizethefunction. The

music

is

a

sound

symbolic

expressing

the

mood

and

thinking.

It

is

the

carrier

of

people's

thinking.

Music

is

the

purpose

and

content,

which

implied

the

author's

life

experiences

and

feelings.

A

good

pc

music

player

can

not

only

provide

good

music

playing

effect,

but

also

provide

users

with

convenient

operation.

The

player

is

using

java

language

and

eclipse

editing

tools.

Giving

a

detailed

system

design

process,

part

of

the

interface

map

and

run

flow

chart

of

the

main

function,

this

article

discussed

in

detail

on

problems

and

solution

method

in

the

development

process.

The

music

player

set

to

play,

pause,

stop,

fast

forward,

rewind,

and

the

next

one,

on

a

volume

adjustment

functions

with

one

good

performance.

The

player

supports

MP3,

WAV,

MP3,

AIFF,

etc.

audio

formats.

The

model

in

the

development

process

is

Waterfall

model.

The

first

phase

is

the

project

of

comprehensive

and

careful

needs

analysis,

accurately

making

the

project

schedule

and

clearing

each

stage

of

the

task.

The

second

phase

of

the

project

is

sub-module

coding.

The

third

stage,

the

project

testing

and

system

integration

testing.

keywords:JAVA;Eclipse;Modularization;Applet;目錄畢業(yè)論文(設(shè)計)誠信承諾書 I四川科技職業(yè)學院畢業(yè)論文評審表 II四川科技職業(yè)學院畢業(yè)論文評審表 III四川科技職業(yè)學院畢業(yè)設(shè)計(論文)任務書 IV第一章 緒論 11.1音樂播放器的定義 11.2軟件開發(fā)背景及意義 11.3發(fā)展現(xiàn)狀及趨勢 2第二章

相關(guān)技術(shù)簡介 42.1

Java技術(shù)簡介 42.2JMF媒體框架技術(shù) 42.3JDK技術(shù) 5第三章系統(tǒng)分析 73.1功能需求 73.1.1播放器的基本控制需求 73.1.2功能需求分析 73.2運行及其它需求分析 83.3可行性分析 83.3.1

經(jīng)濟及技術(shù)可行性 83.3.2

運行及法律可行性 94.1軟件結(jié)構(gòu)設(shè)計 104.2界面功能模塊設(shè)計 11第五章播放器詳細設(shè)計 155.1文件菜單詳細設(shè)計 155.1.1添加音樂文件主要實現(xiàn)方法: 155.1.2添加音樂文件夾的功能實現(xiàn) 165.1.3退出功能實現(xiàn) 185.2播放菜單詳細設(shè)計 185.2.1播放/暫停功能實現(xiàn) 195.2.2停止功能實現(xiàn) 215.2.3音樂魔方實現(xiàn) 225.2.4播放模式功能實現(xiàn) 275.2.5歌詞背景功能實現(xiàn) 275.3皮膚功能詳細設(shè)計 315.4播放按鈕詳細設(shè)計 355.5歌詞同步詳細設(shè)計 39結(jié)論 41致謝 42參考文獻 43緒論隨著計算機和多媒體技術(shù)的不斷發(fā)展以及個人計算機的普及,各種各樣的媒體文件,媒體播放器層出不窮,而MP3(MPEGAudioLayer3)格式化以及體積小、音質(zhì)也有保證的特點成為使用最為廣泛的音頻格式,得到了絕大多數(shù)軟件和硬件媒體播放器的支持,同時WAV格式作為無損的音頻格式也獨樹一幟。如今,軟件市場上的媒體播放器百花齊放,如:Mediaplayer,酷我音樂盒,千千靜聽等。高音質(zhì)播放器和低內(nèi)存消耗是各種媒體播放器所最求的目標。1.1音樂播放器的定義隨著個人電腦的普及,及多媒體信息的傳播和應用已經(jīng)深入我們的生活中的各個方面,其中數(shù)字音頻憑借著其中占用存儲空間小,聲音質(zhì)量高的特點風靡全球,傳統(tǒng)磁帶盒CD所統(tǒng)治的半壁江山已經(jīng)成為了數(shù)字音頻的天下。本音頻播放軟件采用JAVA語言編寫,旨在利用JAVA的平臺無關(guān)性特點做出一款通用性強,占用空間少卻五臟六腑俱全的音頻播放器。1.2軟件開發(fā)背景及意義欣賞美妙的音樂是我們每個人在學習工作之余都會做的事,面對市場上和網(wǎng)絡(luò)上各種花樣繁多的播放器,她們不但用起來感到得心應手,而且各種功能操作非常方便。我們都用過“千千靜聽”,“酷狗音樂盒”,“WindowsMediaplayer”等非常優(yōu)秀的播放器,可是在其使用的過程中總有些瑕疵。而且這些公司沒有開放它們的源代碼。我設(shè)計的這個“基于java的音樂播放器”除了能夠播放一些常見的音頻格式外更加易于操作和使用。此軟件具有一般播放器的常見功能,界面沿用了標準的Windows窗口,主窗口的功能有對要播放文件的各種控制,所播放曲目的名稱,經(jīng)過主窗口能有選擇的播放單個文件,單次播放和循環(huán)播放目錄表中的文件。程序的開發(fā)環(huán)境是JDK,操作系統(tǒng)是WindowsXP,用到的主要技術(shù)為java語言,eclipse編輯軟件。本次畢業(yè)設(shè)計的意義在于結(jié)合Java語言提供的先進的思想和多樣的媒體控制手段,結(jié)合用戶使用音樂播放器的習慣和對媒體播放器的要求,設(shè)計了一款界面清楚明了,操作簡單實效,能夠?qū)崿F(xiàn)在播放列表中能夠加載一個或者多個多媒體文件;自動連續(xù)播放多個多媒體文件;用戶能隨意改變播放順序;在下次打開播放器時,能夠自動加載上次的播放列表;在播放列表的多媒體文件播放完后能夠選擇自動關(guān)閉播放器或者循環(huán)播放等功能的媒體播放器。1.3發(fā)展現(xiàn)狀及趨勢音樂播放器的設(shè)計是一門集計算機技術(shù)和數(shù)字多媒體技術(shù)于一體的綜合設(shè)計。隨著中國計算機技術(shù)、寬帶網(wǎng)絡(luò)技術(shù)的發(fā)展,越來越多的人開始重視多媒體播放器的發(fā)展與應用。在當今信息社會以多媒體為特征的信息技術(shù)和信息產(chǎn)業(yè)的發(fā)展及應用對人類社會產(chǎn)生的影響和作用愈來愈明顯,愈來愈重要。而音樂作為多媒體中的一個重要組成部分能改變信息的包裝,實現(xiàn)知識信息數(shù)字化,為人們獲得知識信息提供極大的方便和無窮的樂趣。友善的人機界面、多種多樣的多媒體教學軟件、誘人的電子游藝節(jié)目、身臨其境的多媒體導購系統(tǒng)、五花八門的信息家電和高效方便的網(wǎng)上查詢等等,無不滲透著多媒體的作用,它引導人們進入了一個有聲有色的世界。同時,多媒體的發(fā)展和應用,極大地推動了各行各業(yè)的相互滲透和飛速發(fā)展,大大改變了人類社會的工作環(huán)境和生活方式。可毫不夸張地說,多媒體產(chǎn)業(yè)的形成和發(fā)展,不但引起了計算機工業(yè)的一次革命,也正在深刻地影響人類社會發(fā)生巨大的變革。多媒體技術(shù)的發(fā)展在很大程度上依靠于多媒體軟件開發(fā)的水平。

多媒體技術(shù)是當今信息技術(shù)領(lǐng)域發(fā)展最快、最活躍的技術(shù),是新一代電子技術(shù)發(fā)展和競爭的焦點。多媒體技術(shù)融計算機、聲音、文本、圖像、動畫、視頻和通信等多種功能于一體,借助日益普及的高速信息網(wǎng),可實現(xiàn)計算機的全球聯(lián)網(wǎng)和信息資源共享,因此被廣泛應用在咨詢服務、圖書、教育、通信、軍事、金融、醫(yī)療等諸多行業(yè),并正潛移默化地改變著我們生活的面貌。人類社會逐漸進入信息化時代,社會分工越來越細,人際交往越來越頻繁,群體性、交互性、分布性和協(xié)同性將成為人們生活方式和勞動方式的基本特征,其間大多數(shù)工作都需要群體的努力才能完成。但在現(xiàn)實生活中影響和阻礙上述工作方式的因素太多,如打電話時對方卻不在。即使電話交流也只能經(jīng)過聲音,而很難看見一些重要的圖紙資料,要面對面的交流討論,又需要費時的長途旅行和昂貴的差旅費用,這種方式造成了效率低、費時長、開銷大的缺點。今天,隨著多媒體計算機技術(shù)和通信技術(shù)的發(fā)展,兩者相結(jié)合形成的多媒體通信和分布式多媒體信息系統(tǒng)較好地解決上述問題。隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和Internet的逐漸普及,人們對網(wǎng)絡(luò)產(chǎn)品需求也不斷增長。如今流行的網(wǎng)絡(luò)音樂播放器雖然很多,但都或多或少存在一些缺陷,比如:沒有記憶的功能;下次播放的時候不能從上次離開的曲目開始;沒有身份認證功能;不能有效的保護媒體播放器里面的歌曲專有性;功能組合與用戶的習慣相違背;界面太復雜以及操作太難等。隨著人們對娛樂要求的提高,一款別致的、貼近用戶操作習慣的音樂播放器非常值得去研究和開發(fā)。第二章

相關(guān)技術(shù)簡介2.1

Java技術(shù)簡介Java

語言具有許多特點,當然也是它的優(yōu)點,即簡單性、分布性、高安全性、面向?qū)ο?、與結(jié)構(gòu)的無關(guān)性、可移植性、多線程及動態(tài)性等等。簡單性:Java

語言是一種面向?qū)ο蟮恼Z言,

如果你對面向?qū)ο蟮木幊痰幕靖拍钣辛艘欢ǖ牧私?就能夠比較快地學會Java

語言編程。Java

力圖在功能齊備的基礎(chǔ)上不增加所謂的超級特點,

它毫不客氣地取消了指針、運算符重載和多重繼承的概念,以一種明晰的面向?qū)ο蟮姆椒◣椭脩舯硎舅齻兊南敕āava是一種簡單的語言。Java取消了其它的許多編程語言中十分繁瑣的和難以理解的內(nèi)容,例如C/C++中的指針,C++中類的多重繼承等。Java語言在外觀上讓大多數(shù)程序員都感到很熟悉,這樣程序員不需要經(jīng)過長時間訓練就能夠?qū)W會使用這種新型的程序開發(fā)工具。Java要求的基本解釋器約為40KB

,若加上基本的程序庫,約為215KB。由于Java程序很小,因此在小型機上Java程序也能夠很好地執(zhí)行。Java是一種面向?qū)ο蟮恼Z言。這里的“對象”是指應用程序的數(shù)據(jù)及其操作方法。Java程序的設(shè)計思想不同于C語言基于過程的程序設(shè)計思想。設(shè)計面向?qū)ο蟮某绦蛐枰獙⒕幊讨攸c放在資料和接口上。Java是一種分布式的語言。Java有一個很周全的程序庫,且很容易與HTTP和TCP/IP通信協(xié)議相配合。Java應用程序能在網(wǎng)絡(luò)上開啟并連結(jié)使用對象,就如同透過URL鏈接使用一個本地文件系統(tǒng)。利用Java來開發(fā)分布式的網(wǎng)絡(luò)程序是Java的一個重要應用。2.2JMF媒體框架技術(shù)JMF意為Java媒體框架(JMF)。該核心框架支持不同媒體(如:音頻輸出和視頻輸出)間的時鐘同步。它是一個標準的擴展框架,允許用戶制作純音頻流和視頻流。JMF實際上是Java的一個類包。JMF2.1.1技術(shù)提供了先進的媒體處理能力,從而擴展了Java平臺的功能。這些功能包括:媒體捕獲、壓縮、流轉(zhuǎn)、回放,以及對各種主要媒體形式和編碼的支持,如M-JPEG、H.263、MP3、RTP/RTSP(實時傳送協(xié)議和實時流轉(zhuǎn)協(xié)議)、MacromediasFlash、IBM的HotMedia和Beatniks的RichMediaFormat(RMF)等。JMF2.1.1還支持廣受歡迎的媒體類型,如Quicktime、MicrosoftsAVI和MPEG-1等。另外,JMF2.1.1軟件中包括了一個開放的媒體架構(gòu),可使開發(fā)人員靈活采用各種媒體回放、捕獲組件,或采用她們自己的定制的內(nèi)插組件。Sun以四種不同的專用版本提供JMF2.1.1技術(shù),滿足專業(yè)開發(fā)人員的各類需求,第一個是一個輕便型版本,它完全采用Java語言編寫,適用于任何Java兼容系統(tǒng)。另外,開發(fā)人員還可選擇分別適用于Solaris、Windows或Linux等操作系統(tǒng)的性能最優(yōu)化軟件包,以提高性能和能力。JMF2.1.1軟件也是JavaMedia系列軟件的一部分。JavaMedia系列軟件包括Java3D、Java2D、JavaSound和JavaAdvancedImaging等API。采用各種JavaMediaAPI,軟件開發(fā)商人員就能容易、快速地為她們已有的各種應用程序和客戶端Java小程序增添豐富的媒體功能,如流式視頻、3D圖像和影像處理等。就是說,各種JavaMediaAPI發(fā)揮了Java平臺的固有優(yōu)勢,將"編寫一次,到處運行"的能力擴展到了圖像、影像和數(shù)字媒體等各種應用領(lǐng)域,從而大大縮減了開發(fā)時間和降低了開發(fā)成本。2.3JDK技術(shù) Java編譯器將Java源代碼文件編譯成可執(zhí)行的Java字節(jié)碼。Java源代碼文件的擴展名為.java,Java編譯器把這種擴展名的文件編譯成擴展名為.class的文件。源文件中的每個類在編譯后都將產(chǎn)生一個class文件,這意味一個Java源代碼文件可能編譯生成多個class文件。Java解釋器對編譯生成的字節(jié)碼格式的可執(zhí)行程序的運行提供支持,它是運行非圖形Java程序的命令行工具。它是Java

Applet的簡單測試工具,可使用它來測試Java

Applet程序,而不需要WWW瀏覽器的支持。JDK(Java

Development

Kit)是Sun

Microsystems針對Java程序員開發(fā)的產(chǎn)品。自從Java推出以來,JDK已經(jīng)成為使用最廣泛的Java

SDK(Software

development

kit)。JDK是整個Java的核心,包括了Java運行環(huán)境(Java

Runtime

Environment),一堆Java工具和Java基礎(chǔ)的類庫(rt.jar)。不論什么Java應用服務器實質(zhì)都是內(nèi)置了某個版本的JDK。因此掌握

JDK是學好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JDK等等。其中IBM的JDK包含的JVM(Java

Virtual

Machine)運行效率要比Sun

JDK包含的JVM高出許多。而專門運行在x86平臺的Jrocket在服務端運行效率也要比Sun

JDK好很多。但不論怎么說,我們還是需要先把Sun

JDK掌握好。從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其版本信息也不再延續(xù)以前的1.2,1.3,1.4,而是變成了5.0,6.0了。從6.0開始,其運行效率得到了非常大的提高,特別是在桌面應用方面。JDK本身使用了Java語言編寫,在我們下載的安裝包里,有一個src.zip,里面就是JDK的源代碼。第三章系統(tǒng)分析3.1功能需求3.1.1播放器的基本控制需求根據(jù)項目的目標,我們可獲得項目系統(tǒng)的基本需求,以下從不同的角度來描述系統(tǒng)的需求,而且使用用例圖來描述,系統(tǒng)的功能需求,我們分成以下幾部分來概括,即播放器的基本控制需要。在播放器正在運行時,用戶選擇一首歌曲后單擊“播放”按鈕,播放器將播放選中的播放列表中的音樂,并同時顯示當前進度;當歌曲未暫?;蛲V箷r,用戶單擊“暫?!卑粹o,播放器將進入暫停狀態(tài);播放器正在播放或暫停時,用戶單擊“停止”按鈕,播放器將停止播放或暫停時,用戶點擊“上一首”或者“下一首”按鈕,播放器將播放上一首或下一首歌曲。3.1.2功能需求分析從時序圖3-2中能夠看出播放器運行原理和調(diào)用過程。主界面主界面打開文件/文件夾播放列表選擇播放歌曲播放界面播放方法播放歌曲播放方法添加單首歌曲添加曲歌文件夾播放界面調(diào)用方法返回播放 圖3-23.2運行及其它需求分析硬件條件:賽揚CPU、

1G

內(nèi)存、10G硬盤以上的PC機。

軟件條件:Windows

XP

、

eclipse

3.7.2

、

jdk1.6.0。

本軟件對其它軟件幾乎沒有依賴性,程序健壯性較好有較好的可維護性、可靠性、可理解性、效率。易于用戶理解和操作??删S護性包括了可讀性、可測試性等含義??煽啃砸话惆ㄕ_性和健壯性。開發(fā)過程中,在各種矛盾的目標之間作權(quán)衡,并在一定的限制的條件下(經(jīng)費、時間、可用的軟、硬件資源等),使上述各方面最大限度的得到滿足。3.3可行性分析 3.3.1

經(jīng)濟及技術(shù)可行性 經(jīng)濟可行性研究是對組織的經(jīng)濟現(xiàn)狀和投資能力進行分析,對系統(tǒng)建設(shè)運行和維護費用進行估算,對系統(tǒng)建成后可能取得的社會和經(jīng)濟效益進行估計。由于本系統(tǒng)是作為畢業(yè)設(shè)計由我自己開發(fā)的,在經(jīng)濟上的投入甚微,系統(tǒng)建成之后將為今后播放音樂提供很大的方便,估算新系統(tǒng)的開發(fā)費用和今后的運行、維護費用,估計新系統(tǒng)將獲得的效益,并將費用與效益進行比較,看是否有利。

開發(fā)、運行和維護費用主要包括:購買和安裝設(shè)備的費用:計算機硬件、系統(tǒng)軟件、電源、空調(diào)等;軟件開發(fā)費用:若由實習單位的技術(shù)人員開發(fā),則該項費用能夠計入下面的人員費用一項;人員費用:系統(tǒng)開發(fā)人員、操作人員和維護人員的工資、培訓費用等;消耗品費用:系統(tǒng)開發(fā)所用材料、系統(tǒng)正常運行所用消耗品,例如水、電費、打印紙、軟盤、色帶等開支。結(jié)合該畢業(yè)設(shè)計的整個過程所有開支都不大,因此經(jīng)濟上是可行的。

技術(shù)可行性要考慮現(xiàn)有的技術(shù)條件是否能夠順利完成開發(fā)工作,軟硬件配置是否滿足開發(fā)的需求等。該音樂播放器用的是java語言開發(fā)的,調(diào)試相對簡單,當前的計算機硬件配置也完全能滿足開發(fā)的需求,因此在技術(shù)上是絕對可行的。軟件方面:用的是eclipse,它的速度快、可靠性能高、價格低,完全能滿足系統(tǒng)的需求。3.3.2

運行及法律可行性對新軟件運行后給現(xiàn)行系統(tǒng)帶來的影響(包括組織機構(gòu)、管理方式、工作環(huán)境等)和后果進行估計和評價。同時還應考慮現(xiàn)有管理人員的培訓、補充,分析在給定時間里能否完成預定的系統(tǒng)開發(fā)任務等。運行可行性是對組織結(jié)構(gòu)的影響,現(xiàn)有人員和機構(gòu)和環(huán)境對系統(tǒng)的適應性及人員培訓補充計劃的可行性。當前中國信息化技術(shù)已經(jīng)相當普及,各類操作人員水平都有相當?shù)母叨龋虼嗽谶\行上是可行性的。從時間上看,時間上是有點緊,但經(jīng)過一個多月的努力基本功能現(xiàn)在已經(jīng)基本實現(xiàn)。在法律可行性上從以下幾點考慮:①所有技術(shù)資料都為合法。②開發(fā)過程中不存在知識產(chǎn)權(quán)問題。③未抄襲任何已存在的課程信息管理系統(tǒng),不存在侵犯版權(quán)問題。④開發(fā)過程中未涉及任何法律責任。綜上所述,本系統(tǒng)的開發(fā)從技術(shù)上、從經(jīng)濟上、從法律上都是完全可靠的。

第四章軟件結(jié)構(gòu)及界面設(shè)計4.1軟件結(jié)構(gòu)設(shè)計本軟件不但要求功能完善,而且還要界面友好,因此,對于一個成功的軟件設(shè)計,功能模塊的設(shè)計是關(guān)鍵。在需求分析階段,搞清楚了軟件“做什么”的問題,形成了目標軟件的邏輯模型。現(xiàn)在我們所要做的就是要把軟件“做什么”的邏輯模型變換為“怎么做”的物理模型,即著手實現(xiàn)軟件的需求。我們需要描述的是系統(tǒng)的總的體系結(jié)構(gòu)。軟件的設(shè)計中最重要的就是軟件的模塊化。模塊化是指解決一個復雜問題時自頂向下逐層把軟件系統(tǒng)劃分成若干個模塊的過程。每個模塊完成一個特定的功能,所有的模塊按某種方法組織起來,成為一個整體,完成整個系統(tǒng)所要求的功能。將系統(tǒng)劃分為多個模塊是為了降低軟件系統(tǒng)的復雜性,提高可讀性、可維護性,但模塊的劃分不能是任意的,應盡量保持其獨立性。也就是說,每個模塊只完成系統(tǒng)要求的獨立子功能,而且與其它模塊的聯(lián)系最少且接口簡單,即盡量做到高內(nèi)聚低耦合,提高模塊的獨立性,為設(shè)計高質(zhì)量的軟件結(jié)構(gòu)奠定基礎(chǔ)。主界面主界面添加?播放列表播放?播放音樂程序結(jié)束圖4-1音樂播放器系統(tǒng)流程圖4.2界面功能模塊設(shè)計 主界面功能如圖4.2.1: 主界面主界面上一曲播放/暫停下一曲停止靜音/聲音播放狀態(tài) 圖4.2.1音樂播放器的界面有“文件”、“播放”、2個主菜單,其中“文件”菜單包含“打開文件”、”添加音樂文件夾”“退出系統(tǒng)”三個菜單項,“播放”菜單里包含“播放/暫?!薄巴V埂保耙魳纺Х健?,”播放模式”,“播放背景”。菜單項如圖4-2所示。菜單主要功能模塊如圖4.2.2菜單菜單文件播放列表菜單添加音樂添加音樂文件夾退出播放/暫停播放/暫停音樂魔方播放模式歌詞背景單曲循環(huán)全部循環(huán)隨機播放 列表菜單列表菜單播放刪除清空列表添加音樂添加音樂 圖4.2.2下圖是播放器主界面如圖3.4: 圖3.4第五章播放器詳細設(shè)計播放器采用JAVA為開發(fā)語言,下面詳細介紹了系統(tǒng)各個模塊與功能的實現(xiàn)。5.1文件菜單詳細設(shè)計文件菜單只要包括:添加音樂文件,添加音樂文件夾,退出功能:如圖5.1。 圖5.1 5.1.1添加音樂文件主要實現(xiàn)方法:/***打開音樂文件*/publicvoidopenMusicFile(){intselectState=0;FilechooserFile=null;JFileChooserchooser=newJFileChooser();MP3FileFiltermp3FileFilter=newMP3FileFilter();WAVFileFilterwavFileFilter=newWAVFileFilter();chooser.setCurrentDirectory(newFile("."));chooser.setDialogTitle("選擇音樂文件");chooser.setApproveButtonText("確定");chooser.setApproveButtonToolTipText("選擇音樂文件");chooser.addChoosableFileFilter(wavFileFilter);chooser.addChoosableFileFilter(mp3FileFilter);chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//只選擇文件selectState=chooser.showOpenDialog(this);if(selectState==JFileChooser.APPROVE_OPTION){chooserFile=chooser.getSelectedFile();if(chooserFile.toString().toLowerCase().endsWith(".mp3")||chooserFile.toString().toLowerCase().endsWith(".wav")){SongInfonewSong=newSongInfo(chooserFile.toString());RightPanel.getInstance().addSongFiletoList(newSong);}}}//監(jiān)聽事件,經(jīng)過判斷語句判斷是否點擊了添加音樂文件的菜單,然后調(diào)用openMusicFile();方法publicvoidactionPerformed(ActionEvente){Stringaction=e.getActionCommand();if("添加音樂文件".equals(action)){mini.openMusicFile();}5.1.2添加音樂文件夾的功能實現(xiàn) /***打開音樂文件夾*/publicvoidopenMusicFolder(){intselectState=0;FilechooserFolder=null;JFileChooserchooser=newJFileChooser();chooser.setCurrentDirectory(newFile("."));chooser.setDialogTitle("選擇音樂文件夾");chooser.setApproveButtonText("確定");chooser.setApproveButtonToolTipText("選擇音樂文件夾");chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//只選擇文件夾selectState=chooser.showOpenDialog(this);if(selectState==JFileChooser.APPROVE_OPTION){chooserFolder=chooser.getSelectedFile();StringsongPath[]=chooserFolder.list();intlength=songPath.length;for(inti=0;i<length;i++){if(songPath[i].toLowerCase().endsWith(".mp3")||songPath[i].toLowerCase().endsWith(".wav")){SongInfonewSong=newSongInfo(chooserFolder+File.separator+songPath[i]);RightPanel.getInstance().addSongFiletoList(newSong);}}}}//判斷是否點擊了添加音樂文件夾,成立就調(diào)用openMusicFolder的方法publicvoidactionPerformed(ActionEvente){Stringaction=e.getActionCommand();if("添加音樂文件".equals(action)){mini.openMusicFile();}elseif("添加音樂文件夾".equals(action)){mini.openMusicFolder();}5.1.3退出功能實現(xiàn)//在點擊時間監(jiān)聽中判斷是否點擊的退出菜單,然后判斷歌曲是否關(guān)閉,沒有關(guān)閉則先關(guān)閉歌曲再銷毀界面退出程序。 publicvoidactionPerformed(ActionEvente){Stringaction=e.getActionCommand();if("添加音樂文件".equals(action)){mini.openMusicFile();}elseif("添加音樂文件夾".equals(action)){mini.openMusicFolder();}elseif("退出".equals(action)){if(player!=null){player.close();player=null;}mini.dispose();Config.getInstance().saveConfig();RightPanel.getInstance().savePlayList();System.exit(0);}5.2播放菜單詳細設(shè)計播放菜單主要包括:播放/暫停,停止,音樂魔方,播放模式,歌詞背景功能:如圖5.2 圖5.2 5.2.1播放/暫停功能實現(xiàn)/***開始播放音樂*/publicstaticvoidstart(){if(player!=null&&!noCanPlaySong()){player.getGainControl().setLevel(soundSlider.getValue()/100.0F);setSoundState(getSoundState());player.start();//進度條更新SliderUpdateThread.initThread();SliderUpdateThread.getThread().start();SliderUpdateThread.resume();player.addControllerListener(SongControlListener.getInstance());playerState=PlayerState.PLAY;psButton.setIcon(newIconTool("images/pause.png").getIcon());psButton.setIconPath("images/pause.png");songNameLabel.setText(currentSong.getSongName());intindex=defaultSongInfo.indexOf(currentSong);defaultSongList.setSelectedIndex(index);LRCParse.getInstance().LoadLRC();LRCLabel.getInstance().refresh();PlayerInfoLabel.getInstance().refresh();}} /***暫停音樂函數(shù)*/publicstaticvoidpause(){if(player!=null){player.stop();playerState=PlayerState.PAUSE;psButton.setIcon(newIconTool("images/play.png").getIcon());psButton.setIconPath("images/play.png");PlayerInfoLabel.getInstance().refresh();}}//在時間監(jiān)聽中判斷是否點擊播放/暫停按鈕,并調(diào)用相應方法播放,如果當前狀態(tài)為播放就暫停音樂,如果狀態(tài)為暫?;蛲V咕筒シ乓魳?。publicvoidactionPerformed(ActionEvente){Stringaction=e.getActionCommand();if("添加音樂文件".equals(action)){mini.openMusicFile();}elseif("添加音樂文件夾".equals(action)){mini.openMusicFolder();}elseif("退出".equals(action)){if(player!=null){player.close();player=null;}mini.dispose();Config.getInstance().saveConfig();RightPanel.getInstance().savePlayList();System.exit(0);}elseif("播放/暫停".equals(action)&&MusicPlayer.getPlayerState()==PlayerState.PLAY){MusicPlayer.pause();}elseif("播放/暫停".equals(action)&&MusicPlayer.getPlayerState()==PlayerState.PAUSE){MusicPlayer.start();}elseif("播放/暫停".equals(action)&&MusicPlayer.getPlayerState()==PlayerState.UNREALIZED){MusicPlayer.initPlayer(null);MusicPlayer.start();}5.2.2停止功能實現(xiàn)/***停止播放*/publicstaticvoidstop(){if(player!=null){playerState=PlayerState.UNREALIZED;psButton.setIcon(newIconTool("images/play.png").getIcon());psButton.setIconPath("images/play.png");SliderUpdateThread.pause();timeSlider.setValue(0);timeLabel.setText("00:00|"+FormatUtils.formatTime(player.getDuration().getSeconds()));player.close();PlayerInfoLabel.getInstance().refresh();}}//判斷是否點擊停止菜單,并調(diào)用stop();方法publicvoidactionPerformed(ActionEvente){Stringaction=e.getActionCommand();if("添加音樂文件".equals(action)){mini.openMusicFile();}elseif("停止".equals(action)){MusicPlayer.stop();}}5.2.3音樂魔方實現(xiàn)音樂魔方只要是主界面的一個迷你模式,能夠?qū)崿F(xiàn)播放/暫停,快進/快退,退出功能如圖:5.2.3。 圖5.2.3/***將Image圖像轉(zhuǎn)換為Shape圖形**@paramimg*@paramisFiltrate*@returnImage圖像的Shape圖形表示*@authorHexen*/publicShapegetImageShape(Imageimg){ArrayList<Integer>x=newArrayList<Integer>();ArrayList<Integer>y=newArrayList<Integer>();intwidth=img.getWidth(null);//圖像寬度intheight=img.getHeight(null);//圖像高度//篩選像素//首先獲取圖像所有的像素信息PixelGrabberpgr=newPixelGrabber(img,0,0,-1,-1,true);try{pgr.grabPixels();}catch(InterruptedExceptionex){ex.getStackTrace();}intpixels[]=(int[])pgr.getPixels();//循環(huán)像素for(inti=0;i<pixels.length;i++){//篩選,將不透明的像素的坐標加入到坐標ArrayListx和y中intalpha=getAlpha(pixels[i]);if(alpha==0){continue;}else{x.add(i%width>0?i%width-1:0);y.add(i%width==0?(i==0?0:i/width-1):i/width);}}//建立圖像矩陣并初始化(0為透明,1為不透明)int[][]matrix=newint[height][width];for(inti=0;i<height;i++){for(intj=0;j<width;j++){matrix[i][j]=0;}}//導入坐標ArrayList中的不透明坐標信息for(intc=0;c<x.size();c++){matrix[y.get(c)][x.get(c)]=1;}/**逐一水平"掃描"圖像矩陣的每一行,將不透明的像素生成為Rectangle,再將每一行的Rectangle經(jīng)過Area類的rec對象進行合并,*最后形成一個完整的Shape圖形*/Arearec=newArea();inttemp=0;for(inti=0;i<height;i++){for(intj=0;j<width;j++){if(matrix[i][j]==1){if(temp==0)temp=j;elseif(j==width){if(temp==0){Rectanglerectemp=newRectangle(j,i,1,1);rec.add(newArea(rectemp));}else{Rectanglerectemp=newRectangle(temp,i,j-temp,1);rec.add(newArea(rectemp));temp=0;}}}else{if(temp!=0){Rectanglerectemp=newRectangle(temp,i,j-temp,1);rec.add(newArea(rectemp));temp=0;}}}temp=0;}returnrec;}/***獲取像素的Alpha值**@parampixel*@return像素的Alpha值*/privateintgetAlpha(intpixel){return(pixel>>24)&0xff;}@Overridepublicvoidpaint(Graphicsg){//super.paint(g);//運行此行會導致鼠標進入窗體時窗口閃爍g.drawImage(img,0,0,null);bf.repaint();kj.repaint();kt.repaint();zt.repaint();fh.repaint();tj.repaint();}//publicstaticvoidmain(String[]args){//repanlsample=newrepanl();//sample.setVisible(true);//}5.2.4播放模式功能實現(xiàn)/***隨機播放*/publicstaticvoidrandomSong(){intrandNumber=(int)(Math.random()*(defaultSongInfo.size()-1));initPlayer(defaultSongInfo.elementAt(randNumber));start();defaultSongList.setSelectedIndex(randNumber);}5.2.5歌詞背景功能實現(xiàn)歌詞背景菜單包含風車,傾聽,蒲公英,許愿,無背景,5個子菜單。如圖5.2.5: 圖:5.2.5/***加載指定歌詞背景的屬性*@paramfile是屬性文件*/privatevoidloadProperties(Stringpath){try{pp.load(FileUtils.getInputStream(path));//讀取屬性文件}catch(FileNotFoundExceptione){System.out.println("FileNotFound");}catch(IOExceptione){System.out.println("IOException");}}/***設(shè)置歌詞背景的屬性*@parami是屬性的下標*/publicvoidsetProperties(inti){if(i>=0&&i<ComVariable.TOTAL_LRC_PROPERTIES){Stringpath="minimusic/syj/properties/lrc/lrc"+i+".properties";loadProperties(path);Config.getInstance().setLrcbg(i);}}/***得到前景色*@return前景色*/publicColorgetForegroundColor(){Stringdecode=pp.getProperty("fgColor");if(decode==null){returnnewColor(0,255,0);}returnColor.decode(decode);}/***得到背景色*@return背景色*/publicColorgetBackgroundColor(){Stringdecode=pp.getProperty("bgColor");returnColor.decode(decode);}/***得到背景圖片Image*@return背景圖片*/publicImagegetBackgroundImage(){StringimgPath=pp.getProperty("bgImage");returnnewIconTool(imgPath).getImage();}publicstaticLRCPropertiesgetInstance(){returnlrcp;}/***設(shè)置歌詞背景*@paramindex為歌詞背景的下標*/publicvoidsetLRCBackImage(intindex){if(index<0||index>=bgImageMenuItem.length||index==bgImageNum){return;}bgImageMenuItem[index].setIcon(newIconTool("images/select.png").getIcon());if(bgImageNum!=-1){bgImageMenuItem[bgImageNum].setIcon(null);}lrcp.setProperties(index);lrcLabel.repaint();bgImageNum=index;}5.3皮膚功能詳細設(shè)計此功能主要采用對話框形式顯示皮膚縮略圖,然后根據(jù)自己喜好選擇設(shè)置皮膚,也能夠點擊下面的更換顏色選擇器自己配色。如圖5.3 圖5.3主要功能實現(xiàn)代碼:/***皮膚類*@authorjys1109*/publicclassMySkin{privatestaticMySkinmySkin=newMySkin();privateConfigconfig=Config.getInstance();privatePropertiespp=newProperties();privateintthemeNumer=config.getTheme();privateMySkin(){setTheme(config.getTheme());}/***加載主題*@parampath*/privatevoidloadTheme(Stringpath){try{pp.load(FileUtils.getInputStream(path));//讀取屬性文件}catch(FileNotFoundExceptione){System.out.println("FileNotFound");}catch(IOExceptione){System.out.println("IOException");}}/***設(shè)置主題*@parami*/publicvoidsetTheme(inti){Stringpath="minimusic/syj/properties/theme/theme"+i+".properties";loadTheme(path);config.setTheme(i);this.themeNumer=i;refreshSystem();}/***系統(tǒng)UI進行更新*/privatevoidrefreshSystem(){TitlePanel.getInstance().setTheme(themeNumer);MyMenuBar.getInstance().setMenuBackgroundColor(getBackgroundColor());MyPopupMenu.getInstance().setBackgroundColor(getBackgroundColor());BottomPanelbpnl=BottomPanel.getInstance();bpnl.setBackgroundColor(getForegroundColor());MySliderUI.setSliderColor(getForegroundColor());bpnl.getTimeSlider().setUI(newMySliderUI(bpnl.getTimeSlider()));bpnl.getSoundSlider().setUI(newMySliderUI(bpnl.getSoundSlider()));bpnl.getSongNameLabel().setForeground(getListTextColor());bpnl.getTimeLabel().setForeground(getListTextColor());MyTabbedPaneUI.setDefaultColor(getForegroundColor());RightPanel.getInstance().getListTabPnl().setUI(newMyTabbedPaneUI());RightPanel.getInstance().getListTabPnl().setForeground(getListTextColor());MyCellRenderer.setForegroundColor(getListTextColor());MyCellRenderer.setBackgroundColor(getForegroundColor());MiniMusic.getInstance().setBorderColor(getListTextColor());MiniMusic.getInstance().repaint();}publicColorgetBackgroundColor(){returnColor.decode(pp.getProperty("bgColor"));}publicColorgetForegroundColor(){returnColor.decode(pp.getProperty("fgColor"));}publicColorgetListTextColor(){returnColor.decode(pp.getProperty("ltColor"));}publicstaticMySkingetCurrentSkin(){returnmySkin;}}當點擊更換按鈕時彈出系統(tǒng)顏色選擇器,如圖5.3.1 圖5.3.1主要功能實現(xiàn)代碼:publicvoidactionPerformed(ActionEvente){Objectobj=e.getSource();if(obj==ccButton){ColornewColor=JColorChooser.showDialog(this,"更換顏色",null);if(newColor!=null){titlePanel.setSkinColor(newColor);MiniMusic.getInstance().repaint();}}5.4播放按鈕詳細設(shè)計播放按鈕主要包括:上一曲/下一曲,播放/暫停,停止,聲音:開/關(guān)。如圖5.4主要功能實現(xiàn)代碼:/***開始播放音樂*/publicstaticvoidstart(){if(player!=null&&!noCanPlaySong()){player.getGainControl().setLevel(soundSlider.getValue()/100.0F);setSoundState(getSoundState());player.start();//進度條更新SliderUpdateThread.initThread();SliderUpdateThread.getThread().start();SliderUpdateThread.resume();player.addControllerListener(SongControlListener.getInstance());playerState=PlayerState.PLAY;psButton.setIcon(newIconTool("images/pause.png").getIcon());psButton.setIconPath("images/pause.png");songNameLabel.setText(currentSong.getSongName());intindex=defaultSongInfo.indexOf(currentSong);defaultSongList.setSelectedIndex(index);LRCParse.getInstance().LoadLRC();LRCLabel.getInstance().refresh();PlayerInfoLabel.getInstance().refresh();}}/***暫停音樂函數(shù)*/publicstaticvoidpause(){if(player!=null){player.stop();playerState=PlayerState.PAUSE;psButton.setIcon(newIconTool("images/play.png").getIcon());psButton.setIconPath("images/play.png");PlayerInfoLabel.getInstance().refresh();}}/***停止播放*/publicstaticvoidstop(){if(player!=null){playerState=PlayerState.UNREALIZED;psButton.setIcon(newIconTool("images/play.png").getIcon());psButton.setIconPath("images/play.png");SliderUpdateThread.pause();timeSlider.setValue(0);timeLabel.setText("00:00|"+FormatUtils.formatTime(player.getDuration().getSeconds()));player.close();PlayerInfoLabel.getInstance().refresh();}}/***清空所有信息*/publicstaticvoidclear(){i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論