.設計內容及要求java
可以實現簡單的音樂播放器功能,如:打開本地文件,播放,暫停,中止,背景播放,單曲循環等等,界面充實,交互友好,能夠添加多首歌曲目錄小程序
一個簡單的基於java語言的音樂播放器,菜單欄:文件,播放控制和播放列表,文件菜單包含打開、循環和退出三個菜單項;播放控制菜單包含播放、暫停和中止三個菜單項,播放列表菜單則是當向裏面添加歌曲以後纔可以查看到裏面所包含的歌曲目錄。當播放歌曲時,能夠調節音量大小或者設置是否靜音;能夠查看當前播放音樂的相關屬性,如:歌曲名,歌手,發佈時間,所屬專輯等等。網絡
2.需求分析架構
一、時間跟蹤條:根據歌曲播放的進度,控制條自動進行追蹤,用戶能夠隨時瞭解歌曲的播放進度框架
二、音量控制鍵:能夠點擊該控鍵進行音量大小的調節以及是否靜音的設置oop
三、屬性查詢鍵:經過該控鍵,用戶能夠查看當前播放音樂的相屬性,獲取關於該歌曲的用戶所需的相關信息。fetch
四、菜單欄:this
①文件:設計
打開:用戶經過該菜單項打開本地音樂文件,放任何用戶想聽的歌曲orm
循環:經過循環設置,用戶能夠重複的播放一首喜歡的歌曲
退出:退出音樂播放器,及退出該程序
②播放控制:
播放:
選擇歌曲以後,經過點擊播放菜單項啓動播放器播
放音樂
暫停:暫停當前正在播放的音樂
中止:中止當前正在播放的音樂
③播放列表:當用戶經過文件打開本地音樂文件後,及至關於在
播放列表裏面添加了歌曲,及造成相應的歌曲播放目錄
3
.整體設計
結合需求分析來看,
整個設計包含了簡單的菜單欄,根據用戶需求設置了三個簡單的實現基本操做的菜單,分別是:文件,播放控制,播放列表;根據具體的操做每一個菜單還包含了相應的菜單項,文件:打開,循環,退出;播放控制:播放,暫停,中止;播放列表則沒有菜單項,該菜單就是用來顯示或者查看相應的歌曲目錄的。該音樂播放器設置了兩個窗口,運行程序時打開的初始化歡迎界面,用戶能夠根據本身的需求進行菜單欄裏面的基本操做和相應的設置,當用戶添加或者打開音樂播放文件的時候,程序將會顯示出第二個音樂文件播放窗口,與此同時,第一個初始化窗口將會自動隱藏,在音樂播放窗口裏面用戶能夠進行相關的音樂播放的控制操做。當用戶進入音樂播放窗口時,該窗口有幾個快捷控制的控鍵:時間追蹤軸:能夠實現播放的前進、後退功能,根據用戶需求調節音樂的播放進度等;音量控制:設置靜音,打開揚聲器或者調節音量大小;播放列表:查看當前播放音樂的相關屬性。
(一)
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;
}
}
}
}