第一篇:java音樂播放器源代碼(ChatClient)
package ChatClient;
import java.awt.*;import java.net.*;import java.awt.event.*;import java.io.*;import java.applet.*;class AudioClipWindow extends Frame implements Runnable,ItemListener,ActionListener { Thread thread;
Choice choice;
URL url;
AudioClip clip;
Button buttonPlay,buttonLoop,buttonStop;
String str;
AudioClipWindow(ActionListener chatClient)
{
thread=new Thread(this);
choice=new Choice();
choice.add(“陳綺貞-我在那一角落患過傷風.wav”);
choice.add(“no one wants forever.wma.wav”);
choice.add(“中島美嘉-雪之華(韓雪-飄雪)日文版.wav”);
choice.addItemListener(this);
buttonPlay=new Button(“播放”);
buttonLoop=new Button(“循環”);
buttonStop=new Button(“停止”);
buttonPlay.addActionListener(this);
buttonStop.addActionListener(this);
buttonLoop.addActionListener(this);
setLayout(new FlowLayout());
add(choice);
add(buttonPlay);
add(buttonLoop);
add(buttonStop);
setSize(350,120);
setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
validate();
}
public void itemStateChanged(ItemEvent e)
{ str=choice.getSelectedItem();
if(!(thread.isAlive()))
{ thread=new Thread(this);
}
try{ thread.start();
}
catch(Exception ee){}
}
public void run()
{ try{ File file=new File(str);
url=file.toURL();
clip=Applet.newAudioClip(url);
}
catch(Exception e)
{ System.out.println(e);
}
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==buttonPlay)
{ clip.play();
}
else if(e.getSource()==buttonLoop)
{ clip.loop();
}
if(e.getSource()==buttonStop)
{ clip.stop();
}
} }
第二篇:基于java的音樂播放器課程設計報告
Java課程設計報告
題目:java音樂播放器
姓
名 學
號 院
系 班
級 專
業 任課教師
1.設計內容及要求
能夠實現簡單的音樂播放器功能,如:打開本地文件,播放,暫停,停止,背景播放,單曲循環等等,界面充實,交互友好,可以添加多首歌曲目錄
一個簡單的基于java語言的音樂播放器,菜單欄:文件,播放控制和播放列表,文件菜單包含打開、循環和退出三個菜單項;播放控制菜單包含播放、暫停和停止三個菜單項,播放列表菜單則是當向里面添加歌曲之后才能夠查看到里面所包含的歌曲目錄。當播放歌曲時,可以調節音量大小或者設置是否靜音;可以查看當前播放音樂的相關屬性,如:歌曲名,歌手,發布時間,所屬專輯等等。
2.需求分析
1、時間跟蹤條:根據歌曲播放的進度,控制條自動進行追蹤,用戶可以
隨時了解歌曲的播放進度
2、音量控制鍵:可以點擊該控鍵進行音量大小的調節以及是否靜音的設
置
3、屬性查詢鍵:通過該控鍵,用戶可以查看當前播放音樂的相屬性,獲
取關于該歌曲的用戶所需的相關信息。
4、菜單欄:
①文件:
打開:用戶通過該菜單項打開本地音樂文件,聽任何用戶想
聽的歌曲
循環:通過循環設置,用戶可以重復的播放一首喜歡的歌曲
退出:退出音樂播放器,及退出該程序
②播放控制:
播放:選擇歌曲之后,通過點擊播放菜單項啟動播放器播
放音樂
暫停:暫停當前正在播放的音樂
停止:停止當前正在播放的音樂
③播放列表:當用戶通過文件打開本地音樂文件后,及相當于在
播放列表里面添加了歌曲,及形成相應的歌曲播放目錄
3.總體設計
結合需求分析來看,整個設計包含了簡單的菜單欄,根據用戶需求設置了三個簡單的實現基本操作的菜單,分別是:文件,播放控制,播放列表;根據具體的操作每個菜單還包含了相應的菜單項,文件:打開,循環,退出;播放控制:播放,暫停,停止;播放列表則沒有菜單項,該菜單就是用來顯示或者查看相應的歌曲目錄的。
該音樂播放器設置了兩個窗口,運行程序時打開的初始化歡迎界面,用戶可以根據自己的需求進行菜單欄里面的基本操作和相應的設置,當用戶添加或者打開音樂播放文件的時候,程序將會顯示出第二個音樂文件播放窗口,與此同時,第一個初始化窗口將會自動隱藏,在音樂播放窗口里面用戶可以進行相關的音樂播放的控制操作。
當用戶進入音樂播放窗口時,該窗口有幾個快捷控制的控鍵:時間追蹤軸:可以實現播放的前進、后退功能,根據用戶需求調節音樂的播放進度等;音量控制:設置靜音,打開揚聲器或者調節音量大??;播放列表:查看當前播放音樂的相關屬性。4.主要功能設計流程
5.系統實現及測試:
(一)JMF(java媒體框架)簡介
JMF 即Java媒體框架。其核心框架支持不同媒體,如音頻輸出和視頻輸出,包括時間的時鐘同步。它是一個標準的擴展框架,允許用戶制作純音頻流和視頻流。
JMF實際上是Java的一個類包。它包括了一個開放的媒體架構,可使開發人員靈活采用各種媒體回放、捕獲組件,或采用他們自己的定制的內插組件。
JMF軟件是Java Media系列軟件的一部分。采用各種Java Media API,軟件開發商人員就能容易、快速地為他們已有的各種應用程序和客戶端,Java小程序增添豐富的媒體功能,如流式視頻、3D圖像和影像處理等。就是 說,各種Java Media API發揮了Java平臺的固有優勢,將“編寫一次,到處運行”的能力擴展到了圖像、影像和數字媒體等各種應用領域,從而大大縮減了開發時間和降低了開發 成本。
在開發JMF 應用程序之前要完全理解JMF 的體系架構、接口和類。就拿我們的家用攝像機系統作個例子。首先用攝像機拍攝內容,拍攝下來的內容錄制在DV帶中。DV帶可以放在放像機里播放、放像機提供視頻信號給電視機,提供音頻信號給音箱,這樣我們就可以在電視機上看到畫面,從音箱里聽到聲音。JMF API 提供的也是同樣的模型。
JMF 提供的模型可大致分為七類
* 數據源(Data source)
* 截取設備(Capture Device,包括視頻和音頻截取設備)
* 播放器(Player)
* 處理器(Processor)
* 數據池(DataSink)
* 數據格式(Format)
* 管理器(Manager)
如果只是想觀看捕獲的內容,只需要使用捕獲數據源創建播放器Player即可。如果想把捕獲的數據發送到網絡或者保存起來,就需要創建處理器Processor。
基本步驟是首先獲取視頻、音頻捕獲設備的信息,然后再根據取得的設備信息確定設備的位置。找到設備的位置以后,調用ManageCreatePlayer方法創建Player,當Player開始播放的時候,就開始了捕獲的過程。
有多種方法獲得捕獲設備信息,可以通過查詢指定的格式,也可以查詢特定的設備名字。Player準備好播放數據,當Player發出這個事件時,就可以獲取播放器的可視面板和控制面板了。具體步驟如下:
1.先把所有的捕獲設備調出來
2.創建Player,當Play開始的時候,就開始了音頻捕獲的過程
3.以MediaLocator為參數,創建Player 4.為PLAYER添加監聽器,以便監聽RealizeComplete事件
(二)代碼實現
(1)添加庫、包等相關文件 import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.*;import javax.swing.*;import java.awt.*;
import java.awt.event.*;
(2)初始化窗口
1代碼實現
private void init(){
// TODO Auto-generated method stub
this.setLayout(new BorderLayout());
JPanel lrcPanel = new JPanel();
JPanel controP= new JPanel();
jta = new JTextArea(22,35);
jta.setBackground(Color.black);
jta.setLineWrap(true);
jta.setWrapStyleWord(true);
jta.setEditable(false);
lrcPanel.add(new JScrollPane(jta));
lrcPanel.setBackground(Color.black);
lrcPanel.setVisible(true);
JButton Jstart= new JButton(“");Jstart.setIcon(new ImageIcon(”start.png“));
Jstart.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent arg0){
// TODO Auto-generated method stub
start();} });JButton Jpause=new JButton();Jpause.setIcon(new ImageIcon(”停止.png“));Jpause.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){
stop();
} });JButton Jnext =new JButton();Jnext.setIcon(new ImageIcon(”next.png“));Jnext.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
next();} });JButton Jprior =new JButton();Jprior.setIcon(new ImageIcon(”back.png“));Jprior.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){
back();} });controP.setLayout(new FlowLayout());controP.add(Jprior);controP.add(Jstart);controP.add(Jpause);
} controP.add(Jnext);
this.add(lrcPanel,BorderLayout.CENTER);this.add(controP,BorderLayout.SOUTH);
(3)音樂播放窗口機基本功能的實現 ①界面
②代碼實現
// 播放方法
public void start(){
if(isplaying==false){
try {
player =
Manager.createPlayer(new File(mp3List.get
(mp3NO)).toURI().toURL());
jta.setText(null);
} catch(NoPlayerException e){
// TODO 自動生成 catch BufferedReader(new FileReader(lcf));
String s;
塊
e.printStackTrace();
System.out.println(”不能播放此文件!“);
return;
} catch(IOException e){
// TODO 自動生成 catch 塊
e.printStackTrace();
return;
}
if(player == null){
System.out.println(”播放文件為空!“);
return;
}
player.addControllerListener(this);
// 提取媒體內容
player.prefetch();
isplaying=true;//正在播放一首歌
setLrc();
} }
private void setLrc(){
// TODO Auto-generated method stub
File lrcfile = new File(lrcpath);
if(!lrcfile.exists()){
lrcfile.mkdir();
}
String lrcFName = getlrcFName();
BufferedReader bReader;
File lcf= new File(lrcpath+lrcFName+”.lrc“);
System.out.println(lcf.getName());
try {
bReader = new while((s=bReader.readLine())!= null){
jta.append(” “+s);
jta.append(”n“);
}
} catch(Exception e){
// TODO Auto-generated catch block
jta.setText(”沒有歌詞“);
System.out.println(”沒有歌詞文件!“);
}
}
private String getlrcFName(){//解析歌曲名;
// TODO Auto-generated method stub
String musicPath = mp3List.get(mp3NO);
String s =musicPath.substring(11);
System.out.println(s);
String []str = s.split(”.“);
String lrcFName=str[0];
System.out.println(lrcFName);
return lrcFName;}
public void stop(){
player.stop();
isplaying=false;}
public void next(){
if(isplaying==true)
stop();
if(mp3NO mp3NO++; start(); } else{ jta.setText(”沒有下一首了 // 當提取媒體的內容結束 if(e instanceof PrefetchCompleteEvent){ System.out.println(“內容結束”); player.start(); return; }(<_>“); } } public void back(){ if(isplaying) stop(); if(mp3NO>0){ mp3NO--; start(); } else jta.setText(”已經是第一首歌了(<_>)“);} public void controllerUpdate(ControllerEvent e){ // 當媒體播放結束時,循環播放 if(e instanceof EndOfMediaEvent){ isplaying=false; mp3NO++; System.out.println(mp3NO); if(mp3NO < mp3List.size()){ this.start(); } return; } // 當實例化后 if(e instanceof RealizeCompleteEvent){ System.out.println(”實例化“); // pack();//執行pack()操作 return; } } public void setMp3List(){ File file = new File(musicpath); if(!file.exists()){ file.mkdir(); } File[] mcFiles; mcFiles = file.listFiles(); if(mcFiles!=null){ for(File f : mcFiles){ System.out.println(f.getPath()); mp3List.add(f.getPath()); } }else System.out.println(”MyMusic中沒有歌曲文件"); } 6.總結與說明 在做寫程序實現功能的過程中,界面和基本功能的設計需要較強的邏輯思維,一不小心就容易出錯,在具體的功能設計和實現的過程中要盡可能用最簡單的語句實現基本的播放器功能。我覺得可以設計更多的菜單及菜單項目從而實現更多的功能,如:刪除,保存等,還可以實現更多的背景效果或者更多可選擇的皮膚,還可以對按鈕添加音效效果,這樣感覺整個音樂播放器更具有靈活性,媒體感更強烈一些,界面會更加豐富和生動一些。 通過自己做課程設計,自己設計界面,功能和設計功能的代碼實現,將理論知識運用到實際操作中,加深了對理論知識的理解和記憶,在做程序設計的過程中,對很多代碼的多次操作和重復使用,使得對很多基本的代碼和相關的操作能夠牢固的記憶。 Java課程設計報告 題目:java音樂播放器 姓 名 學 號 院 系 班 級 專 業 任課教師 1.設計內容及要求 能夠實現簡單的音樂播放器功能,如:打開本地文件,播放,暫停,停止,背景播放,單曲循環等等,界面充實,交互友好,可以添加多首歌曲目錄 一個簡單的基于java語言的音樂播放器,菜單欄:文件,播放控制和播放列表,文件菜單包含打開、循環和退出三個菜單項;播放控制菜單包含播放、暫停和停止三個菜單項,播放列表菜單則是當向里面添加歌曲之后才能夠查看到里面所包含的歌曲目錄。當播放歌曲時,可以調節音量大小或者設置是否靜音;可以查看當前播放音樂的相關屬性,如:歌曲名,歌手,發布時間,所屬專輯等等。 2.需求分析 1、時間跟蹤條:根據歌曲播放的進度,控制條自動進行追蹤,用戶可以 隨時了解歌曲的播放進度 2、音量控制鍵:可以點擊該控鍵進行音量大小的調節以及是否靜音的設 置 3、屬性查詢鍵:通過該控鍵,用戶可以查看當前播放音樂的相屬性,獲 取關于該歌曲的用戶所需的相關信息。 4、菜單欄: ①文件: 打開:用戶通過該菜單項打開本地音樂文件,聽任何用戶想 聽的歌曲 循環:通過循環設置,用戶可以重復的播放一首喜歡的歌曲 退出:退出音樂播放器,及退出該程序 ②播放控制: 播放:選擇歌曲之后,通過點擊播放菜單項啟動播放器播 放音樂 暫停:暫停當前正在播放的音樂 停止:停止當前正在播放的音樂 ③播放列表:當用戶通過文件打開本地音樂文件后,及相當于在 播放列表里面添加了歌曲,及形成相應的歌曲播放目錄 3.總體設計 結合需求分析來看,整個設計包含了簡單的菜單欄,根據用戶需求設置了三個簡單的實現基本操作的菜單,分別是:文件,播放控制,播放列表;根據具體的操作每個菜單還包含了相應的菜單項,文件:打開,循環,退出;播放控制:播放,暫停,停止;播放列表則沒有菜單項,該菜單就是用來顯示或者查看相應的歌曲目錄的。 該音樂播放器設置了兩個窗口,運行程序時打開的初始化歡迎界面,用戶可以根據自己的需求進行菜單欄里面的基本操作和相應的設置,當用戶添加或者打開音樂播放文件的時候,程序將會顯示出第二個音樂文件播放窗口,與此同時,第一個初始化窗口將會自動隱藏,在音樂播放窗口里面用戶可以進行相關的音樂播放的控制操作。 當用戶進入音樂播放窗口時,該窗口有幾個快捷控制的控鍵:時間追蹤軸:可以實現播放的前進、后退功能,根據用戶需求調節音樂的播放進度等;音量控制:設置靜音,打開揚聲器或者調節音量大??;播放列表:查看當前播放音樂的相關屬性。4.主要功能設計流程 5.系統實現及測試: (一)JMF(java媒體框架)簡介 JMF 即Java媒體框架。其核心框架支持不同媒體,如音頻輸出和視頻輸出,包括時間的時鐘同步。它是一個標準的擴展框架,允許用戶制作純音頻流和視頻流。 JMF實際上是Java的一個類包。它包括了一個開放的媒體架構,可使開發人員靈活采用各種媒體回放、捕獲組件,或采用他們自己的定制的內插組件。 JMF軟件是Java Media系列軟件的一部分。采用各種Java Media API,軟件開發商人員就能容易、快速地為他們已有的各種應用程序和客戶端,Java小程序增添豐富的媒體功能,如流式視頻、3D圖像和影像處理等。就是 說,各種Java Media API發揮了Java平臺的固有優勢,將“編寫一次,到處運行”的能力擴展到了圖像、影像和數字媒體等各種應用領域,從而大大縮減了開發時間和降低了開發 成本。 在開發JMF 應用程序之前要完全理解JMF 的體系架構、接口和類。就拿我們的家用攝像機系統作個例子。首先用攝像機拍攝內容,拍攝下來的內容錄制在DV帶中。DV帶可以放在放像機里播放、放像機提供視頻信號給電視機,提供音頻信號給音箱,這樣我們就可以在電視機上看到畫面,從音箱里聽到聲音。JMF API 提供的也是同樣的模型。 JMF 提供的模型可大致分為七類 * 數據源(Data source) * 截取設備(Capture Device,包括視頻和音頻截取設備) * 播放器(Player) * 處理器(Processor) * 數據池(DataSink) * 數據格式(Format) * 管理器(Manager) 如果只是想觀看捕獲的內容,只需要使用捕獲數據源創建播放器Player即可。如果想把捕獲的數據發送到網絡或者保存起來,就需要創建處理器Processor。 基本步驟是首先獲取視頻、音頻捕獲設備的信息,然后再根據取得的設備信息確定設備的位置。找到設備的位置以后,調用ManageCreatePlayer方法創建Player,當Player開始播放的時候,就開始了捕獲的過程。 有多種方法獲得捕獲設備信息,可以通過查詢指定的格式,也可以查詢特定的設備名字。Player準備好播放數據,當Player發出這個事件時,就可以獲取播放器的可視面板和控制面板了。具體步驟如下: 1.先把所有的捕獲設備調出來 2.創建Player,當Play開始的時候,就開始了音頻捕獲的過程 3.以MediaLocator為參數,創建Player 4.為PLAYER添加監聽器,以便監聽RealizeComplete事件 (二)代碼實現 (1)添加庫、包等相關文件 import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.PrefetchCompleteEvent;import javax.media.RealizeCompleteEvent;import javax.media.*;import javax.swing.*;import java.awt.*; import java.awt.event.*; (2)初始化窗口 ①界面 ②代碼實現 public void setupMenu(){ Menu f = new Menu(“文件”); MenuItem mi = new MenuItem(“打開”); CheckboxMenuItem cbmi = new CheckboxMenuItem(“循環”, false);MenuItem ee = new MenuItem(“退出”);f.add(mi);f.add(cbmi);f.add(ee); mi.addActionListener(this);cbmi.addActionListener(this);ee.addActionListener(this);f.addSeparator();f.addSeparator();f.addSeparator(); Menu l = new Menu(“播放列表”);Menu c = new Menu(“播放控制”); MenuItem move = new MenuItem(“播放”);MenuItem pause = new MenuItem(“暫?!?;MenuItem stop = new MenuItem(“停止”);move.addActionListener(this);pause.addActionListener(this);stop.addActionListener(this);c.add(move);c.add(pause);c.add(stop); c.addSeparator();c.addSeparator();c.addSeparator(); MenuBar mb = new MenuBar();mb.add(f);mb.add(c);mb.add(l); setMenuBar(mb);} (3)音樂播放窗口機基本功能的實現 ①界面 ②代碼實現 public void actionPerformed(ActionEvent e){ String cufile, selectfile, currentDirectory;if(e.getActionCommand().equals(“退出”)){ dispose(); return;} if(e.getActionCommand().equals(“播放”)){ if(player!= null) player.start();return; } if(e.getActionCommand().equals(“暫?!?) { if(player!= null) player.stop();return;} if(e.getActionCommand().equals(“停止”)){ if(player!= null){ player.stop(); player.setMediaTime(new Time(0));} return;} if(e.getActionCommand().equals(“打開”)){ FileDialog fd = new FileDialog(this, “打開媒體文件”, FileDialog.LOAD);fd.setVisible(true); if(fd.getFile()== null) return; selectfile = fd.getFile(); currentDirectory = fd.getDirectory(); cufile = currentDirectory + selectfile; MenuItem mi = new MenuItem(selectfile);mi.setActionCommand(cufile);MenuBar mb = getMenuBar();Menu m = mb.getMenu(2);mi.addActionListener(this);m.add(mi);} else { cufile = e.getActionCommand();selectfile = cufile;} if(player!= null) player.close();try { player = Manager.createPlayer(new MediaLocator(“file:” + cufile));}catch(Exception e2) { System.out.println(e2);return;} if(player == null){ System.out.println(“無法創建播放器”);return;} first = false; setTitle(selectfile); player.addControllerListener(this);player.prefetch();} public void itemStateChanged(ItemEvent arg0){ } public static void main(String[] args){ new MediaPlayer(“播放器”);} public void controllerUpdate(ControllerEvent e){ Container tainer = getContentPane();if(e instanceof ControllerClosedEvent){ if(vc!= null){ remove(vc);vc = null;} if(cc!= null){ remove(cc);cc = null;} } if(e instanceof EndOfMediaEvent){ player.setMediaTime(new Time(0));if(loop) player.start();return;} if(e instanceof PrefetchCompleteEvent){ player.start();return;} if(e instanceof RealizeCompleteEvent){ vc = player.getVisualComponent();if(vc!= null) tainer.add(vc, BorderLayout.CENTER); cc = player.getControlPanelComponent();cc.setBackground(Color.blue);if(cc!= null) { tainer.add(cc, BorderLayout.SOUTH);if(vc!= null){ pack();return;} Else { setSize(300, 75);setVisible(true);return;} } } } 6.總結與說明 在做寫程序實現功能的過程中,界面和基本功能的設計需要較強的邏輯思維,一不小心就容易出錯,在具體的功能設計和實現的過程中要盡可能用最簡單的語句實現基本的播放器功能。我覺得可以設計更多的菜單及菜單項目從而實現更多的功能,如:刪除,保存等,還可以實現更多的背景效果或者更多可選擇的皮膚,還可以對按鈕添加音效效果,這樣感覺整個音樂播放器更具有靈活性,媒體感更強烈一些,界面會更加豐富和生動一些。 通過自己做課程設計,自己設計界面,功能和設計功能的代碼實現,將理論知識運用到實際操作中,加深了對理論知識的理解和記憶,在做程序設計的過程中,對很多代碼的多次操作和重復使用,使得對很多基本的代碼和相關的操作能夠牢固的記憶。 音樂播放器作文 我有一臺音樂播放器,我非常喜歡它,給它取名為小白。這是我的一位好朋友送給我的。小白穿著一身漂亮的“白襯衫”還配著一條黑色的漂亮“短裙子”,再配上優美的音樂,簡直就是個小姑娘在翩翩起舞。小白是一個不太規則的長方體,其中,它長7厘米,寬4厘米,厚一厘米左右。小白身上有六個按鈕,它們分別是:開關按鈕、確定按鈕、待機按鈕、上翻按鈕、播放按鈕以及下翻按鈕,在播放按鈕正上方有一個小正方形,上面還有許多小洞洞,我想那應該是發音的吧!小白和一枚雞蛋比起來,可輕多了,它可以帶在身上,不像那些錄音機這么大,這么重。 小白不但外形漂亮,而且我和它在生活中還是一對兒形影不離的好朋友呢!每當我孤獨、寂寞的時候,小白總是陪伴我;每當我高興時,我不僅和家人分享快樂,我還和小白一起分享快樂。小白也需要我,有的時候,小白沒電了,它都會響起“嘟嘟”的警告聲,似乎在說“小主人,我的肚子餓了,快給我吃飯。”有的時候,小白的“裙子”臟了,我都會去拿點兒紙巾,擦去“裙子”的臟痕,它變得非常漂亮,我真是越來越喜歡它了。 小白還有許多的功能呢!里面有一個音樂播放器,我偶爾會下載一些歌曲,仿佛給小白增添了幾件新衣裳??荚囍?,我總要聽上一兩首優美的歌曲,放松一下緊張的心情。小白里面還有電影播放,我無聊時,我都看一些有趣的電影,這樣就可以解悶了。里面還有錄音,我每天都會錄音,長大后,我就可以細細的回味小時候的趣事了。小白里面還有一個電子書,有許多書籍我都可以在電子書里找呢!小白真是無所不能呀!我愛你,小白! 音樂播放器設計文檔 在 android平臺上開發音樂播放器是一個全新的挑戰。這次通過 android QQ music 項目實戰,總結出一些方法和經驗,希望能夠對移動平臺的設計尤其是多媒體這塊提供一些有價值的參考和幫助。1.1 項目背景 當今社會的生活節奏越來越快,人們對手機的要求也越來越高,由于手機市場發展迅速,使得手機操作系統也出現了不同各類,現在的市場上主要有三個手機操作系統,Windows mobile,symbian,以及谷歌的Android操作系統,其中占有開放源代碼優勢的Android系統有最大的發展前景。那么能否在手機上擁有自己編寫的個性音樂播放器呢?能的,谷歌Android系統就能做到。本文的音樂播放器就是基于谷歌Android手機平臺的播放器。 Android:是谷歌于2007年公布的開放式源代碼手機系統,它的開放性就優于其它封閉式的手機系統,因此,任何人都可能根據自己的喜好將手機系統中的所有功能重新編寫。這使得越來越多的人關注這個操作系統。本次作品音樂播放器就是基于Android平臺的。 隨著計算機的廣泛運用,手機市場的迅速發展,各種音頻視頻資源也在網上廣為流傳,這些資源看似平常,但已經漸漸成為人們生活中必不可少的一部分了。于是各種手機播放器也緊跟著發展起來,但是很多播放器一味追求外觀花哨,功能龐大,對用戶的手機造成了很多資源浪費,比如CPU,內存等的占用率過高,在用戶需要多任務操作時,受到了不小的影響,帶來了許多不便,而對于大多數普通用戶,許多功能用不上,形同虛設。針對以上各種弊端,選擇了開發多語種的音頻視頻播放器,將各種性能優化,繼承播放器的常用功能,滿足一般用戶(如聽歌,看電影)的需求,除了能播放常見格式的語音視頻文件,高級功能:還能播放RMVB格式的視頻文件。此外,還能支持中文、英文等語言界面。要研究了各種市場上流行的手機播放器,了解它們各自的插件及編碼方式,還有各種播放器播放的特別格式文件,分析各種編碼的優缺點以及各種播放器本身存在的缺陷和特點,編寫出功能實用,使用方便快捷的播放器。目前已經實現的功能有能播放常見音頻文件的功能,如MP3,WAV,等,擁有播放菜單,能選擇播放清單,具備一般播放器的功能,如快進,快退,音量調節等。播放模式也比較完善,有單曲,順序,循環,隨機播放等模式。 一、引入產品定義描述(Application Definition Statement) 相信大多數設計師都有過這樣的經歷:在產品設計過程中,設計師和產品經理不斷 pk,各抒己見,甚至鬧得臉紅 耳赤、拍桌翻臉,最后項目總結時又因達不到“理想目標“雙方深深自責,紛紛表示”缺少交流“。彼此不斷 pk,交流 絕對足夠,只是我們缺少有效溝通的工具。如果能在早期建立共識,口水仗爆發的頻率就會越少,真正花在產品上 的時間也就越多。這一次,我們決定更早地切入,在最開始的產品規劃層面,引入“產品定義描述”(關于 ap-plicationdefinition statement,請參考《iPhone Human Interface Guidelines》)。 注意: ADS 的定義也是一個迭代的過程,外部環境的變化、后續過程產生的問題,都可能對原 ADS 產生影響,需 要重新評估、修正,甚至否定再來,但無論如何,必須確保整個團隊對 ADS 有一個共同的認識。 二、細分場景,從場景推導需求,從需求推導設計 從源頭的戰略層面上建立了統一的認知,我們接下來開展的工作就有根據了。既然核心是解決“移動場景聽歌“的問 題,我們必須首先弄清楚什么是”移動場景“?移動環境和 PC 環境差異甚大,碎片時間的使用更為突出。用戶一天 是怎么活動的呢?每次拿起手機聽音樂都是什么時間?上班的公車上、走路、晚上睡覺前?在這些點上用戶都會做 些什么?簡單的腦暴可以羅列各個可能的使用場景,但還比較粗糙。場景的構想需要建立在高度的認知上,這時候 用研的切入顯得相當關鍵,用戶特征、喜好、使用習慣…對用戶越了解,場景就越能貼近真實、越能發現更多的細 節。這些都為后續的設計決策提供了有力的依據 客觀構建的場景有很多有意思的發現,比如用戶在播放本地歌曲時,挑選第一首歌往往比較猶豫,但對后續播放的 歌曲卻不太在意。從場景仔細分析和推敲,很容易就可以明確產品的需求,對應上述的發現,推導如下需求:為用 戶提供“馬上聽歌”按鈕引導用戶直接聽歌。需求的推導因為有用研的切入,避免了太多的個人情感因素。 三、敏捷原型設計,適應與借鑒并行 用研的輸出以及前面的 ADS 定義為功能篩選和設計取舍提供了強有力的決策依據。在需求框架大致決定的時候,我們接下來就進行方案設計了。正所謂“一圖勝千言”,原型有時候會比面面俱到的文檔更直觀。不同的階段,我們 會進行不同精度的原型設計: 在原型迭代的過程中,需要注意 android平臺的 UI 尷尬。與其他平臺(iPhone、symbian、windows mobile)不同,an-droid 更加開放,不同的廠商不同的 ROM 版本界面規范并不統一。如果簡單地將其他平臺的設計規范移植過來,產品體驗可能會和整個系統“格格不入”。借鑒了 android平臺的一些優秀 app(比如 twitter 和 new york times)的 設計策略,我們決定“適應與借鑒并行“:在大的基礎體驗上,保證與系統體驗一致,尊重平臺使用習慣;在細節體 驗上,盡量克服系統的操作困難,保證局部體驗的流暢。 四、視覺方案 在整個設計過程中,我們嘗試了多套風格方案,比如“夢幻光影”、“清爽夏日”、“木質桌面”“藍色海洋”等等,由于 beta1 開發時間有限,最后選擇了偏深綠色主色調的“夢幻光影”作為默認皮膚,這里奉上其他未曾謀面的方案,供 參考。 4.1 主要界面模塊劃分 視覺方案的第一步是對界面各模塊和控件進行作出符合審美原理和需要的的合理劃分和尺寸設定,這里重點會落在 正在播放界面和歌曲列表界面兩塊,雖然兩個界面功能和承載的信息都不相同,但是在造作上兩個界面跳轉和切換 是緊密關聯的,在各模塊劃分和空間比例上兩個需要統籌安排,一方面考慮上下同樣尺寸的“標題行”和底部“控制行 / tab 行”一方面要考慮歌曲列表界面的列表選擇合適的行高和行數。在保證每一行歌曲信息能夠有足夠的空間顯示 整個界 從上圖區域劃分和比例可以看出,播放器界面,封面/歌手圖片的中心點在整個界面的高度是 296,相對于面的高 480,這一比例基本是處在 0.618:1 的黃金分隔點上。4.2 正在播放界面 用戶使用音樂播放器,最大的關注點一般會落在正在播放/播放器界面上,這塊在視覺上是整個產品的核心區域,在很大程度上代表了整款軟件的品質、品位和風格信息表達。而專輯封面/歌手頭像又是正在播放界面的視覺中心,因此這塊在設計上花了比較重的筆墨,用細膩的光照效果與晶瑩剔透的質感精心營造了一種符合我們 QQ 音樂在手 機移動操作平臺上的氣質的效果。 4.3 系統菜單 icon 菜單選項 icon 是另外一個視覺信息傳達比較重要的地方,對整體風格的形成起著重要作用,這里做了兩種效果的 嘗試,一種 A 方案:是空心邊框形式,看起來彈出菜單很輕盈,一屏 6 個選項帶文字不會覺得擁擠,缺點是單個 圖標的輪廓有的地方不連貫,有可能會造成辨識度降低。另外最后選用的方案 B 是實心剪影的形式,這種表現方式 整個 icon 看起來很整體,比較飽滿,識別度較高,不過如果一屏圖標過多的話可能會稍有擁擠的感覺,但如果以 縮小的方式處理,對于手指觸摸操作來說是不合理的,這里 icon 作了圓角處理和鏤空實心均衡化處理,能在視覺 感受上弱化一下可能會產生的擁擠感。 4.4 出現“水波紋”的問題 色彩顯示效果上 Android 系統的手機由于硬件和技術上的限制和問題,會在某些情況下產生令人抓狂的水波紋問題,在嘗試的過程中大致總結了容易造成水波紋的漸變使用,如上圖左邊兩個圖塊:如果使用規則的徑向漸變,程序貼 圖后極容易出現水波紋,另一種情況是如右邊的兩圖塊:漸變色差值過小,就是說漸變特別的細膩不顯著的話也很 容易在切圖程序貼圖后出現明顯的水波紋。所以后面在配色和設計過程中可以據此避免盡量這樣的情況出現。 4.5 最終選用方案: 五、后記 (1)通過對Android手機平臺的音樂播放器軟件的開發,使我對Android音樂播放器系統的整體設計有一個深入的了解,對整個流程也會有一個清晰的認識。開發Android音樂播放器,要抓住開發的核心部分,音樂播放器大體由播放主界面、播放列表、菜單、播放設置、文件瀏覽、歌曲搜索六大核心組成,只要掌握了這六部分的開發,音樂播放器就能初具規模。而其它的功能都是在這六個功能的基礎上去補充添加的,但是這是功能的確是必不可少的功能,否則就不能算是音樂播放器了。 (2)音樂播放器系統實現了播放器的基本功能:播放,暫停、停止、上/下一首、音量調節、歌詞顯示、播放模式、歌曲搜索、文件瀏覽器、播放列表查詢等功能。運用的系統平臺是現今最熱門的Android系統,是一個開源的基于Linux系統的手機平臺。是以Java語言編寫+SQLite數據庫支持+SharePreference配置文件的組合方式進行數據管理。實現了音樂播放器的系統編程。 (3)本次程序設計,對播放器的系統結構框架做了精心的構思與設計,采用主要開發工具是Eclipse3.5+Java語言的支持,Android Development Tool的插件,和Android SDK2.1版本的全面結合,才使整個音樂播放器系統得以實現。 (4)總之,經過幾個月的Android系統技術知識的學習和對音樂播放器的構思與設計,使我對Android系統有了一定的了解,讓我對Android系統上的開發流程和開發模式有了深入的了解,這對我以后的Android項目開發有很大的幫助。參 考 書 籍 《Java API文檔》 《Android 系統原理及開發要點詳解》 作者:韓超,梁泉 著 《Android SDK開發范例大全》 作者:郭宏志 著 《Android Google API開發文檔》 作者:Google官方 《Android Application Development》 出版社: O’Reilly 《Java編程思想think of java》 作者:Bruce Eckel 《手機軟件研發培訓教材》 出版社:極地星空3G通信學院 參 考 文 獻 [1] 張孝祥著. java就業培訓教程[M].北京:清華大學出版社,2007.[2] 余志龍編著.Google Android SDK開發范例大全[M].北京:人民郵電出版社,2009-7-1.[3] E2ECloud工作室著.深入淺出Google Android[M].北京:人民郵電出版社,2009-08-1.[4] 靳巖 姚尚朗著.Google Android開發入門與實戰[M].北京:清華大學出版社,2009-07-01.[5] 高昂著.支持動態語言的Android平臺[M].北京:人民郵電出版社,2009-05-07.[6] eoe.Android開發社區.http://. 2010-04-10.[9] 高煥堂編.Android 應用框架原理與程式設計(第三版)[M].北京:清華大學出版社,2008-10-03 [10] 楊豐盛主編.Android 應用開發揭秘[M].西安:機械工業出版社,2010-01-25 [11] XML解析方式DOM、SAX之比較.http://wghjay.javaeye.com/blog/519955.2009-11-18.名詞術語: JDK Java Development Kit Android 基于Linux操作系統的手機平臺 SDK Android Software Development Kit ADT Android Development Tool Anroid開發工具 IDE Intergrate Design Environment 集成開發環境 ADB Android Debug Bridge 調試橋 AVD Android Virtual Devices Android虛擬設備 DDMS Dalvik Debug Monitor Service 調試監視服務 AIDL Android Interface Description Language Android接口描述語言 xmlns XML NamePace XML命名空間第三篇:基于java的音樂播放器課程設計報告
第四篇:音樂播放器作文
第五篇:電信-音樂播放器