基于java的音乐播放器
基于java的音乐播放器(精选6篇)
基于java的音乐播放器 第1篇
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.总结与说明
在做写程序实现功能的过程中,界面和基本功能的设计需要较强的逻辑思维,一不小心就容易出错,在具体的功能设计和实现的过程中要尽可能用最简单的语句实现基本的播放器功能。我觉得可以设计更多的菜单及菜单项目从而实现更多的功能,如:删除,保存等,还可以实现更多的背景效果或者更多可选择的皮肤,还可以对按钮添加音效效果,这样感觉整个音乐播放器更具有灵活性,媒体感更强烈一些,界面会更加丰富和生动一些。
通过自己做课程设计,自己设计界面,功能和设计功能的代码实现,将理论知识运用到实际操作中,加深了对理论知识的理解和记忆,在做程序设计的过程中,对很多代码的多次操作和重复使用,使得对很多基本的代码和相关的操作能够牢固的记忆。
基于java的音乐播放器 第2篇
课程设计报告
题 目:基于QT的音乐播放器
系 别: 软件学院 班 级: 1522班
姓 名:贾梦洁 学 号:
同组组员:
设计时间: 2017年12月22日----2017年12月30日
公司名称: 上海杰普软件科技有限公司
目 录
第一章 引言.......................................1 第二章 软件分析与设计.............................2 2.1软件需求分析........................................2 2.2开发环境............................................3 2.3软件概要设计........................................3
第三章 软件功能实现...............................4 3.1软件总体架构........................................5 3.2软件功能流程........................................5 3.3具体功能实现........................................6 第四章 软件测试..................................16 第五章 总结......................................17
第一章 引言
计算机技术的飞速发展大大提高了人们的工作效率,尤其是互联网技术更是很大程度上丰富和方便了人们的生活。近些年来,人们的生活水平也在不断提升,在物质丰富的条件下,人们开始在工作之余关注娱乐,期望在其它方面释放工作压力,同时培养自己的兴趣爱好,随之而来的是人们对多媒体应用的关注,许多电影播放平台、音乐播放软件等逐渐深入人们的生活,并慢慢地成为人们生活重要组成部分。
目前,互联网上已经拥有大量的音乐播放软件,这些软件是各个软件供应商的商品关键组成部分,当前其实现技术较复杂,在功能方面相当完备且强大,如何简单、高效、方便地设计实现一款小巧美观的音乐播放器软件成为人们关注的热点。基于该问题,本文设计并实现了基于Qt的音乐播放软件,该软件能够便捷、高效地为用户展示音乐播放界面,方便的进行歌曲播放和控制功能。本文的工作分为软件界面设计和软件功能实现两部分,其中,软件界面设计工作主要包括用户界面设计实现;各个功能模块实现工作主要包括后台程序编码设计模块化完成设计等内容。
该音乐播放软件以Qt开发平台中实现歌曲播放的相应功能为基本框架设计,通过C++语言编程实现各个功能函数,软件设计方面采用模块化的软件设计思想实现,具有友好的用户交互界面和高承载能力的运行稳定性。
第二章 软件分析与设计
2.1 软件需求分析
在设计实现音乐播放器软件的同时,可以对目前存在的不同类型的音乐播放器进行广泛深入的研究,查看软件可能需要的需求内容。因此,需要对具体问题进行具体分析,深入挖掘其需要实现的系统功能,以方便后面对软件构架的设计工作。需求分析的过程,是开发人员对音乐播放器工作过程的认识与熟悉的过程,也是对软件内部工作流程进行计算机建模的过程,最终目的是通过需求分析了解用户需求实现的功能,根据用户提出的需求设计好系统的概念模型,对用户提出的需求进行计算机方法的描述,并建立相应配套的需求分析文档,设计好系统的具体实现方案。
在设计实现基于Qt的音乐播放器的同时,考虑到音乐播放器的实际工作环境,可以确定的是该软件应当拥有以下几个方面的特性:
(1)基本功能
随着电脑终端的扩大化,PC机上各种软件也不计其数。为了使用户体验及软件质量都达到一定的完备性,我们需要保证一定的基础功能。基于人性化角度,开发设计基础功能,使用户可以流畅使用软件。在进行功能划分的过程当中,可以采用模块化的功能设计思想,对功能的划分尽可能的细致,做到不遗漏。例如,应当有播放模式的选择,音乐列表的选择,音量高低的调试等。(2)稳定性
基于QT的音乐播放器是一款娱乐软件,更需要保证软件的稳定性,以使用户体验达到最高。若播放器不稳定,则用户体验这一指标则会大幅下降。
(3)联通性
移动设备日益增长,微博、微信等交流平台在市场中也占据重要地位。为迎合这一现象,QT音乐播放器必须进行一定的互联网联通性。可以进行音乐分享、转发评论等。这样可以实现软件之间的交流结合,有利于软件的推广。同时也有利于通过大数据分析,得到听众最喜爱听的歌曲,符合大众口味。
2.2 开发环境
操作系统:Windows 10 开发平台:Qt 使用语言:C++
2.3 软件概要设计
在软件概要设计阶段,是基于整个系统需要实现的功能,对物业管理信息系统的整体架构进行科学合理的设计,使之有一定的规律可以遵循,不进行盲目的设计工作,这对于后期的程序编码和系统的来说意义重大。在对音乐播放器软件进行软件需求分析之后,针对需求 分析的结果,对系统进行了整体的架构设计。
设计实现的音乐播放器软件,从软件的架构来看,主要包括两个功能部分:软件的歌曲播放部分和图标最小化功能实现部分。其中,歌曲播放部分主要实现该软件的主要功能,即选择歌曲和播放歌曲;另一部分则是最小化后软件的实现,主要包括显示、登录、设置、检查更新、退出。以上是对该音乐播放器软件的整体工作架构进行的设计,该步骤是后续进一步进行系统功能实现的基础。
第三章 软件功能实现
在设计实现基于Qt的音乐播放器软件的同时,充分考虑了Qt的语言特性和开发环境,发挥了其在用户界面应用程序开发当中的优势,对音乐播放器软件进行了开发。根据前文对该音乐播放器软件的 需求分析,以及对软件的设计分析结果,结合实际使用当中可能使用到的软件功能,并采用了软件工程中模块化的开发思想,完成了该音乐播放器软件的开发,下面分别对软件中重要的功能模块的实现方法及实现效果进行详细的介绍和分析。
3.1 总体架构
通过在需求阶段对系统的总体功能的分析,我们得到了这个音乐播放器软件的总体功能结构,它应包括四大基本功能模块。
(1)选择歌曲文件模块:用户可以方便的查询环境当中存在的歌曲列表信息,并找到满意歌曲的位置和具体的歌曲内容。
(2)歌曲播放模块:用户根据所选择的具体歌曲让该软件对歌曲进行播放,并且可以实时查看歌曲的播放状态。
(3)播放状态控制模块:用户可以查看成自己在歌曲播放过程中进度情况,并可以随时更改歌曲的播放进度信息。
(4)第二界面模块:用户可以进入第二个更为简洁的界面进行播放、暂停、切换等操作。
3.2 软件功能流程
整个软件所设计的工作流程如下:
(1)开始。进入Qt界面开始运行软件。
(2)播放歌曲。该部分是音乐播放器软件最主要的功能部分,播放歌曲的功能实现需要相对复杂的函数调用来实现,在软件开发的过程 当中有具体的实现代码。
(3)播放设置。该部分的实现是进一步提高用户的使用体验,方便用户根据其自身的需求对所播放的歌曲进行进度控制,可以暂停歌曲的播放,也可以继续歌曲的播放功能,同时也可以进行音量的调控,以及对歌曲播放的顺序进行调整,比如顺序播放、单曲循环等。(4)第二界面。点击shrink按钮可跳转至第二界面,进行播放切换歌曲等操作,也可以进行最小化。
(5)结束。点击关闭软件,结束软件运行。
3.3 具体功能实现
本人完成了本次音乐播放器中的歌曲导入模块以及播放歌曲的初步工作,具体的实现过程如下。
3.3.1歌曲导入(1).h文件
歌曲导入部分的代码函数名称以及相应的函数声明完成在settingwiget.h的头文件下,先对命名空间进行前向声明,对类内的对象和方法进行声明,具体代码如下:
#ifndef SETTINGWIGET_H #define SETTINGWIGET_H
#include
namespace Ui { class settingwiget;}
class settingwiget : public QWidget { Q_OBJECT
public: explicit settingwiget(QWidget *parent = 0);~settingwiget();
void initSystemSetting(void);
bool writeInit(QString path, QString user_key, QString user_value);bool readInit(QString path, QString user_key, QString &user_value);
private slots: void on_pb_save_clicked();
void on_pb_cancle_clicked();
void on_tb_lyricsPath_clicked();
void on_tb_songsPath_clicked();
void on_pb_save_destroyed();
private: Ui::settingwiget *ui;};
#endif // SETTINGWIGET_H
(2).cpp文件
配置文件写入和读取的方法完成在settingwiget.cpp文件内,代码如下:
settingwiget::settingwiget(QWidget *parent): QWidget(parent), ui(new Ui::settingwiget){ ui->setupUi(this);
SongsFile::m_songPath.clear();LyricsFile::m_lyricPath.clear();}
settingwiget::~settingwiget(){ delete ui;}
bool settingwiget::writeInit(QString path, QString user_key, QString user_value){ if(path.isEmpty()|| user_key.isEmpty()){ return false;} else { //创建配置文件操作对象
QSettings *config = new QSettings(path, QSettings::IniFormat);
//将信息写入配置文件
config->beginGroup(“config”);config->setValue(user_key, user_value);config->endGroup();
return true;} }
bool settingwiget::readInit(QString path, QString user_key, QString &user_value){ user_value = QString(“");if(path.isEmpty()|| user_key.isEmpty()){ return false;} else { //创建配置文件操作对象
QSettings *config = new QSettings(path, QSettings::IniFormat);
//读取用户配置信息
user_value = config->value(QString(”config/“)+ user_key).toString();
return true;} }
界面设计中按钮的具体功能也对应在settingwiget.cpp文件内,代码如下:
void settingwiget::on_tb_songsPath_clicked(){ SongsFile::m_songPath = QFileDialog::getExistingDirectory();ui->le_songsPath->setText(SongsFile::m_songPath);}
void settingwiget::on_tb_lyricsPath_clicked(){ LyricsFile::m_lyricPath = QFileDialog::getExistingDirectory();ui->le_lyricsPath->setText(LyricsFile::m_lyricPath);}
void settingwiget::on_pb_save_clicked(){ writeInit(QString(”../user.ini“), ”SONGPATH“, SongsFile::m_songPath);writeInit(QString(”../user.ini“), ”LYRICPATH“, LyricsFile::m_lyricPath);
initSystemSetting();this->hide();}
void settingwiget::on_pb_cancle_clicked(){ this->hide();}
void settingwiget::initSystemSetting(void){ readInit(QString(”../user.ini“), ”SONGPATH“, SongsFile::m_songPath);readInit(QString(”../user.ini“), ”LYRICPATH“, LyricsFile::m_lyricPath);
ui->le_songsPath->setText(SongsFile::m_songPath);ui->le_lyricsPath->setText(LyricsFile::m_lyricPath);}
void settingwiget::on_pb_save_destroyed(){}
其中,cpp文件内的头文件为:
#include ”settingwiget.h“ #include ”ui_settingwiget.h“
#include
3.3.2歌曲播放的部分功能(1).h文件
musicplayer.h的头文件下,采用枚举类型对播放模式进行声明,写入信号和槽方便传值,对歌曲播放逻辑、歌曲列表获取逻辑、歌曲歌词获取逻辑的对象、方法进行声明,具体代码如下:
#ifndef MUSICPLAYER_H #define MUSICPLAYER_H
#include
#include
#include ”songsfile.h“ #include ”lyricsfile.h“
#define TIME_MS_DURATION 1000 #define INIT_SYSTEM_VOLUME 50
enum PlaybackMode //播放模式 { CURRENT_ITEM_ONCE = 0, //单曲播放 CURRENT_ITEM_IN_LOOP = 1, //单曲循环 SEQUENTIAL = 2, //顺序播放 LOOP = 3, //列表循环 RANDOM = 4 //随机播放
};
class MusicPlayer : public QObject { Q_OBJECT
signals: void signalPositionChanged(QString updateTime);void signalDurationChanged(qint64 duration);
public slots: void slotPositionChanged(qint64 position);void slotDurationChanged(qint64 duration);
public: explicit MusicPlayer(QObject *parent = 0);
const qint64 getTotalPlayerTime(void)const;void setTotalPlayerTime(const qint64 time);
const qint64 getCurrentPlayerTime(void)const;void setCurrentPlayerTime(const qint64 time);
/// 歌曲播放逻辑
QMediaPlayer ¤tMediaPlayer(void);
/// 歌曲列表获取逻辑
QMediaPlaylist &musicPlayList(void);QStringList &songsNameList(void);
/// 歌曲歌词获取逻辑 void getCurrentSongLyric(void);QList
private: /// 歌曲播放逻辑
qint64 m_totalPlayerTime;qint64 m_currentPlayerTime;QMediaPlayer m_player;
/// 歌曲列表获取逻辑
SongsFile *m_songsFile;QMediaPlaylist m_musicPlayList;QStringList m_songsNameList;
/// 歌曲歌词获取逻辑
QList
#endif // MUSICPLAYER_H
(2).cpp文件
musicplayer.cpp的头文件如下:
#include ”musicplayer.h“
#include
同时在cpp文件内写入了信号与槽传值连接的方法,代码如下:
MusicPlayer::MusicPlayer(QObject *parent): QObject(parent){ m_songsFile = new SongsFile(this);
m_songsFile->initSongsListAndSongsNameList(m_musicPlayList, m_songsNameList);
m_player.setPlaylist(&m_musicPlayList);m_player.setVolume(INIT_SYSTEM_VOLUME);connect(&m_player, SIGNAL(durationChanged(qint64)), this, SLOT(slotDurationChanged(qint64)));connect(&m_player, SIGNAL(positionChanged(qint64)), this, SLOT(slotPositionChanged(qint64)));}
得到siganl后相应执行的槽函数(position),具体代码如下:
void MusicPlayer::slotPositionChanged(qint64 position){ m_currentPlayerTime = position / TIME_MS_DURATION;//歌曲进度条显示
QTime currentTime((m_currentPlayerTime/3600)%60,(m_currentPlayerTime/60)%60, m_currentPlayerTime%60,(m_currentPlayerTime*1000)%1000);QTime totalTime((m_totalPlayerTime/3600)%60,(m_totalPlayerTime/60)%60, m_totalPlayerTime%60,(m_totalPlayerTime*1000)%1000);
QString updateTime = currentTime.toString(”mm:ss“)+ ”/“+ totalTime.toString(”mm:ss");
emit signalPositionChanged(updateTime);}
void MusicPlayer::slotDurationChanged(qint64 duration){ m_totalPlayerTime = duration / TIME_MS_DURATION;//TIME_MS_DURATION 1000 emit signalDurationChanged(m_totalPlayerTime);}
以及对播放时间、播放列表等的声明,代码如下:
const qint64 MusicPlayer::getTotalPlayerTime(void)const { return m_totalPlayerTime / TIME_MS_DURATION;//INIT_SYSTEM_VOLUME 50 } void MusicPlayer::setTotalPlayerTime(const qint64 time){ m_totalPlayerTime = time;}
const qint64 MusicPlayer::getCurrentPlayerTime(void)const { return m_currentPlayerTime;} void MusicPlayer::setCurrentPlayerTime(const qint64 time){ m_currentPlayerTime = time;}
QMediaPlayer &MusicPlayer::currentMediaPlayer(void){ return m_player;}
QMediaPlaylist &MusicPlayer::musicPlayList(void){ return m_musicPlayList;}
QStringList &MusicPlayer::songsNameList(void){ return m_songsNameList;}
void MusicPlayer::getCurrentSongLyric(void){ LyricsFile lyricsFile;m_lyricIndexList.clear();m_lyricContentList.clear();lyricsFile.getCurrentSongLyric(m_lyricIndexList, m_lyricContentList);}
QList
QStringList &MusicPlayer::lyricContentList(void)//歌词内容列表 { return m_lyricContentList;}
第四章 软件测试
软件实现截图如下:(1)主界面
(2)第二界面(3)最小化
第五章 总结
本次所设计的基于Qt的音乐播放器软件,在Windows系统环境下可以成功的运行,对于预期的功能目标已经基本实现,其中包括歌曲的选择,歌曲打开,歌曲播放,歌曲暂停,显示歌曲播放的进度条等功能。该软件的开发是在Qt Creator的开发环境下完成的程序编写工作,该开发平台简单方便,操作快捷,可以直接在Windows系统平台下安装运行,完成代码的编写后,只需要直接点击编译和运行即可使音乐播放器开始工作,按用户的选择进行歌曲播放等功能,具有一定的实用性。
通过本次毕业设计,我终于明白了“看一万行代码,不如动手写一行代码”这一句真理,对于工科类的学生来说,除了加强对对书本里的理论知识的学习之外,更重要的是培养自己实践动手的能力。这次毕业设计,让我以后面对困难时变得更有耐心,对我来说,这一精力都是在以后的生活和学习中的很宝贵的财富,极大的影响我以后的成长和发展道路。
基于Java的多媒体播放器 第3篇
多媒体技术的概念和应用出现于上个世纪80年代初期, 随着计算机技术的和通讯技术的高速发展, 多媒体技术越来越成为计算机人们关注的热点技术之一。多媒体技术以丰富多彩的图片、文字、声音、视频、动画等各种形式改变或影响着我们的生活。针对目前音频、视频、动画等各种媒体格式, 如何简单方便的播放各类格式的媒体文件, 满足用户对多媒体播放器功能需求, 设计出来符合个人习惯的多媒体播放器, 已成为开发人员关注的问题。
二、开发工具的选择
(一) C/S体系结构
所谓C/S (Client/Server) 结构, 即客户机和服务器结构。它是应用软件的一种体系结构, 通过它可以充分利用两端硬件环境的优势, 将任务合理分配到Client端和Server端来实现, 降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构, 本系统采用C/S结构进行系统开发。
(二) JAVA技术简介
Java是一种编程语言, 被设计用于互联网的分布式环境。使用Java编写的应用程序, 既可以在一台单独的电脑上运行, 也可以被分布在一个网络的服务器端和客户端运行。java语言首先将源代码编译成二进制中间代码, 然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。Java技术具有通用性、高效性、平台移植性和安全性[1]。
(三) SQL Server 2000
SQL Server 2000是一个关系数据库管理系统, 具有易于安装和使用等优点, 支持本地和远程的系统管理和配置。本系统使用JDBC数据访问接口建立数据库连接, JDBC是一种可用于执行SQL语句的Java API。它由一些Java语言写的类、界面组成。JDBC给数据库应用开发人员提供了一种标准的应用程序设计接口。使用JDBC来完成对数据库的操作[2]。
三、系统需求分析
本系统旨在开发一个多媒体播放器, 对音频、视频文件进行播放、暂停、停止、音量和进度的拖放功能。通过图形界面设计出多媒体播放器的界面需要的功能按钮、显示区域以及控制区域, 然后对界面上各种按钮对应的功能进行编程, 来实现播放器的播放、暂停、快进等操作。最终多媒体播放器实现视频, 音频播放, 以及视频、音频音量调节等播放器功能[3]。
四、系统的模块实现
本系统主要包括以下几个模块:
(一) 打开模块
程序运行后, 点击打开文件按钮, 弹出文件选择对话框, 选择目标文件, 如音频、视频文件, 实现播放功能, 同时将视频信息显示在列表中。单击退出系统按钮, 程序自动关闭。
(二) 播放模块
播放模块主要实现对音频、视频信息的播放操作。如果当前没有播放视频音频文件, 则进行播放, 若有正在播放的文件, 则对正在播放的视频文件暂停操作。对播放列表中播放对象可设置不同的播放模式, 如:循环播放、单曲循环、单曲播放等。对正在播放的视频、音频执行快进、快退操作等播放控制。当前播放的视频可以停止操作。
(三) 帮助模块
为了让使用者了解播放器软件, 在系统的主菜单上的帮助菜单项, 设置在2项子菜单:关于、帮助。他们的功能主要是显示本系统的一些信息, 以及快捷键、系统操作的帮助信息。关于菜单主要是向用户介绍本播放器的版本、作者、信息。帮助菜单主要是向用户介绍本播放器的快捷键、操作帮助等。
(四) 播放列表模块
播放列表模块主要功能是实现用户对播放过的歌曲进行操作, 它会将播放过的音频、视频名称显示在界面的右方, 在播放列表中选择歌曲名字来播放当前选中的歌曲。也可以从播放列表中删除、添加歌曲信息。删除列表中的歌曲名称, 同时将文件中的歌曲信息删除。视频、音频的列表信息存储到数据库中, 以实现再次播放回显列表的功能, 通过编写java程序实现对数据库数据的查找、添加、删除等基本的功能[4]。
结论
多媒体素材类型比较多, 包括音频、视频、图像等, 由于音频、视频、图像等的信息量较大, 受硬件条件所限制, 以往多媒体的应用并不广泛, 随着硬件技术水平的不断提高, 多媒体技术已经为各类人员广泛使用, 开发多媒体课件、网络课程、网站、应用软件等均需利用多媒体素材, 因此开发制作多媒体播放器具备一定的现实意义。本文主要阐述了多媒体播放系统的设计, 能够实现打开、播放、暂停、停止、前进、后退、上一曲、下一曲、声音控制等基本功能, 还具有视频信息显示的功能。
摘要:随着多媒体技术的发展和人们对视频, 音频数据的需求, 越来越多的软件加入了多媒体功能。针对目前各种媒体格式, 如何简单方便的播放各类媒体已成为人们普遍关注的问题, 而媒体播放器的开发也受到人们的普遍关注。本文主要介绍了以Java为编程语言, 与SQL Server 2000数据库技术相结合的多媒体播放器的设计, 实现播放音频、视频的功能。
关键词:多媒体播放器,Java,SQL Server 2000
参考文献
[1]林胜利, 王坤茹.Java优化编程[M].北京:电子工业出版社, 2007.
[2]萨师煊, 王珊.数据库系统概论 (第三版) [M].北京:高等教育出版社, 2002.
[3]张海藩.软件工程[M].北京:机械工业出版社, 2010.
基于“云”技术的音乐播放器设计 第4篇
关键词: 云; 音乐播放器; 云计算; 共享
中图分类号:TP393 文献标志码:A 文章编号:1006-8228(2012)10-17-03
引言
近几年来“云计算”概念非常的火爆,“云计算”核心是将大量的网络资源统一起来,为用户提供高效、便捷的软件服务[1]。“云计算”倡导者希望的是:用户使用软件服务就像使用电和水一样,可以便捷、随时随地、按需地使用服务。在“云计算”这个网络应用模式下,用户可以通过各种“端”访问“云”,“端”可以是任何能够上网的电子设备,“云”就是提供的服务,“云”可能是巨大的、连成一片的、无边境的,也可能是渺小的、孤立的,总之它无处不在,能够提供给用户所需要的各种服务。云计算被视为科技业的下一次革命,它将带来工作方式和商业模式的根本性改变[2]。我国政府十分重视云计算的发展,全国各地纷纷建起云计算基地,云计算已在我国显示出了其强大的生命力。
音乐在我国已经有几千年的发展历史,它对每个人来说已经是一种不可或缺的产品。走在大街上,坐在餐厅中,呆在房间中,都能听到很多悦耳的音乐,这些都归功于技术的发展,让音乐生活更加丰富多彩。如今,人们听音乐的方式也已经有了很大的改变,从古老的乐器演奏,到后来的机器播放,再到现在的MP3,WMA等音乐文件的出现,始终向着为方便人们享受这种美妙的感觉的方向前进。而随着“云“的发展,音乐可以更加快速的在社会中传播,这一个时刻你正在听的歌曲,也许下一个时刻正在被其他人听。
正如文献[3]中所提出的:在“云计算”时代,“云”会替我们做存储和计算的工作,所以“云“的出现为我们的生活提供了极大的方便。假如要出差去一个很远的地方,不方便携带电脑,但是电脑中保存着一些重要的信息,那么,我们就可以把这些信息保存在”云“端,无论我们在哪里,只要有一台电脑或者一部手机,就可以下载到这些信息,而不需要携带电脑或者移动硬盘等。音乐也可以通过”云“达到这种效果,例如,我们在某个地方听到一首很好听的歌曲,但是没有办法下载带走,而通过”云“,我们就可以实现歌曲的上传和下载,从而实现音乐共享。很久以前,上传音乐只是一些音乐门户网站或者会员的权力,一般用户只能在线收听或者下载,这种单一的方式不利于音乐的快速发展。如今,人们将自己喜爱的音乐,或者自己录制的歌曲放置在”云“端后,可以告诉他的同学朋友们,这样,他的朋友就可以马上在”云“端找到这首歌,不仅可以将这首歌下载下来,还可以对这首歌曲添加评论。这种方式,让音乐不再仅限于听,而是更加注重于分享。
1 “云”音乐播放器设计思路
我们开发的是一款典型的Android娱乐应用软件——“云”音乐播放器,由于本软件是基于Google App Engine,借助Google云进行开发和编制的云端软件,其中包括网络音乐云同步,网络音乐云下载等功能,所以也是一款地地道道的Google云应用软件、云终端。
1.1 播放器模块
“云”音乐播放器引入了云存储等技术,设计包括两个主要模块:
⑴ 本地音乐播放模块,支持传统的音乐播放器模式,包括本地歌曲搜索,播放,设置铃声等功能。
⑵ “云”音乐播放模块,将本地音乐上传到“云”端,或者从云端下载到本地,包括上传,下载和评论的功能。
1.1.1 本地音乐播放模块功能
本地音乐搜索:
具有两种搜索方法,一是选择自己添加喜欢的歌曲或者歌曲文件夹,二是选择让程序自动扫描内存卡的所有歌曲文件。添加文件后,用户只要输入歌曲名,就可以查找在播放列表中的歌曲。
播放本地歌曲:
实现日常的播放功能,实现歌曲和歌词的同步,提供了单曲循环,列表循环,随机播放三个播放模式。一共有五个分类:全部歌曲,歌手,专辑,文件夹和我的最爱。用户可以根据分类来查看歌曲信息,将喜爱的歌曲添加到“我的最爱”列表,也可以删除歌曲,包括从列表中删除和删除内存卡中的文件。添加桌面插件功能,用户不需要打开程序,直接在桌面上就可以播放歌曲。
设置手机铃声:
⑴ 可以将自己喜欢的歌曲设置为来电铃声或短信铃声。
⑵ 有短信或者来电时会暂停播放歌曲,直到通话结束继续播放,并可以监听耳机上的按键操作,比如接通或挂断电话,音量的加减等。
1.1.2 “云”音乐播放模块功能
上传音乐:将本地音乐上传到“云”端,提供给其他用户下载使用。
下载音乐:查看并下载放置在“云”端的音乐,也可以在线播放,省去下载时间。
评论音乐:对放置在“云”端的音乐提供打分评论机制,所有用户都可以看到,作为对音乐的一种评价。
1.2 云存储
由于网络资源丰富,加上现代人尤其是年青一代对个性化的追求,使得播放器所要处理的音乐量非常庞大,所以才有了云存储的概念。
1.2.1 云存储的概念
云存储是在云计算概念上延伸和发展出来的一个新的概念,是计算机云领域比较成熟的一部分,可用于解决存储的相关问题,在网络时代可以用于解决个体用户的设备维护、数据安全、存储等一系列相关问题[3]。它是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统[1]。当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就转变成为一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。
1.2.2 云存储的模拟实现
本程序对于音乐文件的存储采用了云存储的概念,其存储设计如图2所示。
每个移动终端将自己的音乐文件存储到“云”端,用分布式文件系统管理这些文件,方便用户在需要的时候查看并下载,并可以共享给其他用户。这样不仅节省了很大的存储设备开支,也方便用户管理音乐文件。
本程序使用TOMCAT+SQLSERVER模拟了一个本地的“云”服务器,用户通过本程序,将选择的音乐保存到TOMCAT服务器中,同时将歌曲信息保存到SQLSERVER数据库里,包括歌曲名,歌曲所有者,歌曲保存路径,歌曲共享权限等。音乐文件上传到“云”服务器之后,用户可以在程序中看到保存在“云”端的歌曲列表,其他用户可以看到“云”端共享的音乐文件,并且能够下载这些文件。
2 系统开发的关键技术及验证性测试
2.1 系统的开发技术
根据Android的设计理念,在程序的开发过程中,尽量做到代码的高效性和程序的快速性[2]。本程序采用多线程处理模式,并发控制多个任务的进行,包括歌曲播放和歌曲下载,保证了程序的流畅性和高效性。云技术的发展让多媒体技术有了更广阔的发展空间。本程序的网络歌曲部分将放置在云端的音乐链接获取下来呈现给用户,用户可以随时随地收听,下载。而且通过云计算,能够保证用户在听音乐的同时完成其他任务,比如看电子书,浏览网站等等,大大增加了用户的体验感,也使得程序运行更加流畅。
2.1.1 本地音乐播放的开发
⑴ 本程序在实现了监听手机按键(Listener)的同时,还考虑到手机的外围设备,增加了对耳机的监听功能,以使用户能够更加容易地使用。
⑵ 歌曲显示和扫描方面,采用适配器的方法,将图片和文字整合到ListView中,监听Item操作来实现歌曲播放和添加。
⑶ Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的。MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。本程序使用了MediaPlayer类用来实现歌曲的本地播放和在线播放,并且用Java中的Stream类来控制歌曲下载,并支持断点重连。歌曲显示和扫描方面,采用适配器(Adapter)的方法,将图片和文字整合到ListView中,监听Item操作来实现歌曲播放和添加。
⑷ 后台处理方面,解析网络歌曲信息采用SAX类来解析XML文件,使用SQLite数据库来保存和处理歌曲和歌手信息,添加必要的触发器来操作数据库。将歌曲放在Service中操作,同时运用多线程处理,将搜索歌曲和下载歌曲放在子线程中,保证了整个程序流畅。
⑸ 在Android里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑处理。如图3所示。
本程序利用了BroadCastReceiver的机制,将所有按钮的监听通过该机制来实现,并且增加了对手机外围设备的监听,比如来电时暂停歌曲播放,通话结束后继续播放歌曲等。这样一来不仅统一了所有按钮的操作,也加快了程序运行的速度,进而提升了用户体验感。
⑹ 数据处理方面,解析网络歌曲信息采用SAX类来解析XML文件。采用XML文件存储数据是Android程序常用的存储方式。解析XML主要有DOM、SAX方式,DOM处理XML文档是基于将XML文档解析成树状模型,放入内存进行处理;而SAX则是采用基于事件驱动的处理模式,它将XML文档转化成一系列的事件,由单独的事件处理器来决定如何处理。SAX是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备。 本文给出部分使用SAX解析XML文件的代码:
2.1.2 云音乐播放模块的开发
根据云存储的理念,我们在本地模拟了一个云服务器。
在Android平台上,集成了一个嵌入式关系型数据库—SQLite,它是一款轻量级的关系型数据库。由于SQLite占用的资源非常少,所以在很多嵌入式设备都是用它来存储数据。SQLite目前支持Windows/Linux/Unix等主流的操作系统,兼容性还不错。我们也可以用多种开发语言如C#、Java、PHP等来通过ODBC接口操作SQLite,十分方便。本程序就是采用SQLite数据库来保存和处理歌曲和歌手信息,添加必要的触发器来操作数据库。将歌曲放在Service中操作,同时运用多线程处理,将搜索歌曲和下载歌曲放在子线程中,保证了整个程序的流畅性。
2.2 验证性测试
为了验证程序的可行性与兼容性,我们在多个平台上对其进行了测试,测试结果如表1所示。
3 “云”音乐播放器的特点
3.1 美观华丽的界面
用户评价一个软件项目的好坏,首先就是看其界面的美观程度,我们在这方面上精心设计,力争精心设计每个控件,让整个界面美观华丽。在UI上采用Android系统中的经典的布局结构(Layout),整合多种控件和华丽的动画效果,保证了程序的简洁性和界面的美观性,给予用户强烈的视觉冲击。
3.2 流畅简洁的操作
根据Android的设计理念,我们在程序的开发过程中,做到代码的高效性和程序的快速性。本程序采用多线程处理模式,并发控制多个任务的进行,包括歌曲播放和歌曲下载,保证了程序的流畅性和高效性。
3.3 “云”技术的应用
用户使用“云”技术时,可以选择公有云或私有云,即选择上传的音乐能否被其他用户查找到,从而尊重用户的隐私权。对上传到“云”端的音乐文件采用分布式管理,进行多个备份,防止数据丢失,并提供打分制度,提供一种对音乐文件的评价和用户下载的参考依据。通过“云”技术,还能优化程序运行的效率,提高运行速度。文献[2]指出:如果使用云计算服务,绝大部分任务交给云端完成,只需让电脑接入互联网即可。由于应用了“云”技术,省去了大型的服务器,使得本软件的运行成本大幅降低。
4 结束语
各种音乐播放器的比较 第5篇
现在播放器实在是多了点,有的新手觉得眼花缭乱,不知道选什么,今天就来个点评,给大家些参考。
一、普通播放器
1:Windows Media Player(系统自带版本)
这个是非常常用的播放器,一般网吧、课室都用这个
优点:系统自带,无需安装。新版本是某些随身听播放器传输视频或者音频必须的软件。新版本在声音上有一定改善。
缺点:声音不好听!含糊不清。对各种格式支持非常不好!ape和flac这类牛B哄哄的格式别指望能播放的了。打开速度慢,系统资源占用多,缺点太多,就不一一赘述了。
音质指数:C实用指数:C
2:搜狗音乐盒、酷我音乐盒、QQ音乐、青苹果音乐播放器、酷狗音乐
这些都是网络播放器,主要功能是让大家能在播放器内直接选择最新最流行的音乐试听
优点:内置音乐排行榜,点选热门歌曲直接播放。
缺点:声音质量差,不支持无损格式,转换,修改文件信息等功能缺乏,只适合做试听之用。
音质指数:D实用指数:D
3:千千静听
非常大众化的一个播放软件
优点:使用方便,修改和编辑文件信息效率高,对各种格式的支持和转换都很好,界面也丰富多彩。官方版本自带歌词速配,非常适合想偷懒又想看歌词的人。声音还算过得去。软件还算小巧,占用小。
缺点:千千的声音对追求音质的人来说太过马虎,特别突出的问题是对DTS文件的播放,出来的效果可以用非常差来形容。默认的配置使用了均衡器(两边高中间低),可以说是扭曲了声音。
音质指数:B+实用指数:A
4:暴风Winamp
曾经风靡一时的播放器
优点:界面华丽(默认皮肤来算,如果会弄的话,很多播放器的皮肤都可以很炫),播放mp3声音还不错。功能随着版本更新越来越多。
缺点:新版本不支持ape,flac的播放,需要找插件(麻烦)。随着版本不断更新,软件越来越臃肿,无用功能太多。
音质指数:B+实用指数:B
5:jetaudio
能歌善舞的播放器
优点:这个是iAUDIO开发出来的播放器,可以播放视频,有录音功能,是个功能比较多的播放器,并且界面华丽。声音方面,和iAUDIO随身听采用同一风格的调音,中频稍微凹一下去一点。但是整体声音还是很不错的。
缺点:支持ape,但是不支持CUE(囧rz)。界面为英文,软件比较臃肿。
音质指数:A实用指数:B-
6:airplay
小巧玲珑的播放器
优点:绿色,小巧(只有200多K),打开速度快,有专辑封面自动下载功能!
缺点:播放质量差,播放无损音乐时爆音很多,一般只是用来下载专辑封面用!封面也不是每张都能找到,外国的很多都找不到。(本软件为国产软件)
音质指数:E-实用指数:E
7:foobar2000
强大且实用的播放器
优点:基本上支持所有的音频格式。适合追求音质的人使用。功能强大,可以轻松进行各种格式转换,并且支持转换格式时添加DSP。支持asio输出,声音干净。有的版本自带歌词速配。由于foobar插件无数,潜力巨大,重采样到192K,再开asio输出,声音会有明显提升!(适合高手)
缺点:对新手来说默认界面太过简陋,参数设置项看着就头疼。
音质指数:A实用指数:A+
8:beoplayer
这是个高贵的播放器
优点:乃是丹麦著名音响品牌B&O出品的播放器。界面风格非常适合高级白领。这个播放器的调音很有意思,模仿高级音响晶莹剔透的感觉,播放mp3时让人眼前一亮。
缺点:使用不方便,不支持ape和flac,无损里面只支持WAV。英文界面(当然也有汉化版),功能不多。可以换的皮肤也不多。
音质指数:A实用指数:B-
9:iTunes
平淡而不平凡的播放器
优点:这个是苹果公司开发的播放器,专门给使用ipod和iphone的人士使用。(当然普通人也可以用)使用惯了的话还算方便。平滑的声音,虽然缺少了激情,但是给人一种歌声娓娓道来的感觉(调音和苹果随身听的风格一致),属于mp3播放器中的精品之作。还可以花钱买到正版音乐,有钱人必备。
缺点:不能播放ape,flac等无损格式音频。初次使用比较麻烦。弹出窗口太多,占用应该也比较厉害,软件也很臃肿。
音质指数:A实用指数:B-
10:J River Media Center
优点:
①、声场比foobar大一圈,声音收的快,foobar相比之下有点乱,低音很结实,很强大。同样可以使用asio输出
②、好看!
③、资源占用少!看起来很夸张的界面,只占用20M的内存,CPU基本是0 ④、功能多多,跟iTunes很像,是个音乐管理软件,第一次使用需要导入媒体库,需要花一点时间(我用了10分钟)可以用来刻录音乐,也可以用来播放视频。
缺点:如果音乐较多,第一次导入时间可能会很长,最好分开来导入;操作没有foobar这么简单明了,需要一段时间习惯。不能显示歌词!
格式的支持不算很多,但是ape,FLAC,WV,wav这些基本的无损都支持,大部分的有损压缩也支持。
想要像我的一样好看的话,需要下载很多的CD封面,花点时间还是值得的!
音质指数:A+实用指数:A+
二、专业播放器
11:Cplay
这个是专业用户使用的播放器
优点:很高质量的声音,给人的感觉很大气,有人比较说:重采样开到192K的foobar才能和他一比高下。
缺点:必须要有支持asio输出的声卡才能使用该软件,支持格式有限,界面为英文,而且非常简陋,操作复杂。只适合音质狂热爱好者。
音质指数:A++实用指数:C
12:SawStudio
播放器里的神器
优点:层次分明,清晰自然地声音,胜过foobar可以说是没有什么悬念。(但个人还是认为foobar的调音听着舒服)
这个是用汇编语言写的播放器,好处自然是受到windows影响极小。
缺点:界面复杂(灰常复杂),只能播放WAV,操作麻烦,不能批量选择歌曲播放(囧rz)
没有播放列表等基本播放器的功能。因为这个本来就是专业的混音软件,不是用
来当播放器用的。
音质指数:A++实用指数:D
最后,顺便说说各个播放器为啥声音有区别。
一个原因,是解码精度的问题。
例如:
SawStudio是 64Bit定点+64bit浮点内部处理精度
foobar2000是64Bit浮点内部处理精度(其他播放器基本都低于这个精度)
解码精度越高,出来声音质量也会越高。
另一个原因,是调音的问题。
基于java的音乐播放器 第6篇
有朋友要求介绍flash场景音乐播放器的做法,我就根据自己的体会介绍一下。不当之处,请朋友们指正。
这是一个简单实用的flash场景音乐播放器,用以控制flash动画场景的播放,同时也就可以控制其中的音乐播放。所以,也可以作为flash音乐播放器来使用。我做的一些音乐收藏欣赏的flash就是使用的这种功能。
下面是一个例子。
一、先分别制作三个按钮元件备用。一个是播放按钮,一个是停止(暂停)按钮,一个是返回按钮。做成什么样子的都可以。上图中下方左面的三个按钮就分别是播放按钮、停止按钮和返回按钮。
二、下面开始制作滑动条的元件。元件类型都是影片剪辑。一个是滑动槽,即一个长条。这个比较简单,做成什么样子的都可以了。参考上图下方的滑动条。
三、另一个是滑块,即一个小长方块。这个看似简单,但却是这个播放器中的一个核心元件,滑动块能否按进度滑动,就看这里的制作了。这里也要分别制作两个影片剪辑元件。
一个是滑块图形的影片剪辑元件。一个是动作命令影片剪辑元件。
滑块图形的元件做相应的图形就可以了。如上图中的滑块图形。
而动作命令的剪辑就复杂一些了。这个影片剪辑(这里命名为“as”)的场景中不用放任何东西,但要在图层中添加as命令。
在第一个关键帧上,打开动作面板,添加如下语句: if(!_load){ _load = 1;tellTarget(“..”){
pathToControl = _root;
isDragging = false;
progressWidth = _parent.progressBar._width;
setProperty(_parent.progressBar, _width, 1);
null;
this._parent._x = 0;} } nextFrame();play();
在第三帧上添加空白关键帧,再打开动作面板,添加如下语句: tellTarget(“..”){ if(isDragging){
gotoAndStop(“pathToControl:”+Math.floor(pathToControl._totalframes/_parent.sliderTrack._width*this._parent._x));
setProperty(_parent.progressBar, _width, this._parent._x*(progressWidth/_parent.sliderTrack._width));
null;} else {
this._parent._x = _parent.sliderTrack._width/pathToControl._totalframes*pathToControl._currentframe;
setProperty(_parent.progressBar, _width, this._parent._x*0.999000);
null;} } gotoAndPlay(2);
从以上这些语句可以看出,它的内容就是根据动画运行到哪个帧来确定滑块的位置。并不是去控制音乐的,只是因为音乐在场景中,所以同时得到控制。具体地,我也是知其然而不知其所以然的。我就是复制代码,直接使用。如果你跟我一样,懂得不那么多,那也不妨就直接复制使用就是了。
四、组装滑动块。新建影片剪辑“滑动块”,在图层1中放入制作好的滑块影片剪辑元件,并在属性面板中将实例命名为slider。
新建图层,拖入影片剪辑“as”,就是只有as命令的那个影片剪辑。
这两个图层都只一个关键帧。
五、再组装滑动条。新建影片剪辑元件“滑动条”,在图层1放入前面制作的滑动槽元件。并在属性面板中将它的实例命名为sliderTrack。
在新建图层中放入“滑动块”元件,并在属性面板中将它的实例命名为sliderBar。两个图层也都是只有一个关键帧。
六、以上各个元件都做好了。就可以“总装”了。
回到场景中来,将前面做好的播放按钮、停止按钮、返回按钮、滑动条剪辑,拖放到适当的位置。然后给按钮元件添加相应的as命令。
点击播放按钮,打开动作面板,添加如下语句(即添加按钮动作): on(release){ play();}
点击停止按钮,打开动作面板,添加如下语句: on(release){ stop();}
点击返回按钮,打开动作面板,添加如下语句: on(release){ gotoAndStop(1);}
七、播放器总装完毕。但还有几个要做到的事情。一是将场景中的音乐的同步方式设置成为“数据流”。
二是新建AS层,分别在第一帧和动画的最后一帧建立关键帧,分别输入stop();语句。(老虎注:最后一帧建立关键帧,代码:gotoAndStop(1);)
三是将播放器所在的图层也延长到与整个动画和音乐的帧数相同。
这些工作全做完了,就按 ctrl+enter试试吧。点击播放按钮,开始播放动画和音乐;点停止按钮,停止播放;再点播放按钮,从刚才停止的位置继续播放;点返回按钮,滑块返回到起点,动画也返回到起点。
基于java的音乐播放器
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


