.设计内容及要求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;
}
}
}
}