基于java的音乐播放器的设计

合集下载

毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]

毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]

基于JA V A的Mp3播放器JMPlayer作者姓名专业计算机科学与技术指导教师姓名专业技术职务讲师山东轻工业学院本科毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、撰写的成果。

论文中引用他人的文献、数据、图件、资料,均已在论文中加以说明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。

对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。

本声明的法律结果由本人承担。

毕业论文作者签名:年月日山东轻工业学院关于毕业设计(论文)使用授权的说明本毕业论文作者完全了解学校有关保留、使用毕业论文的规定,即:学校有权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的全部或部分内容,可以采用影印、扫描等复制手段保存本论文。

指导教师签名:毕业设计(论文)作者签名:年月日年月日目录摘要 (III)ABSTRACT (IV)第一章引言 (1)课题研究背景及意义 (1)音乐播发器的发展及历史 (1)系统开发目标 (2)本文的主要内容和结构 (2)第二章相关工具及技术介绍 (1)Eclipse简介 (3)Java Thread简介 (4)JavaSound简介 (5)Java Swing简介 (6)Java Properties简介 (7)第三章需求分析 (9)工作流程分析 (9)评价具体需求分析 (9)系统功能结构图 (9)功能详细描述 (10)Mp3播放 (10)播放控制 (10)播放信息控制 (10)Mp3列表管理 (11)歌词 (11)其他 (11)第四章总体设计 (12)系统要求 (12)系统功能描述 (12)系统运行环境 (13)系统设计思想 (13)总体流程设计 (13)Mp3播放设计 (14)播放模式设计 (15)Mp3文件列表管理设计 (15)歌词设计 (16)皮肤切换设计 (17)显示模式设计 (18)第五章详细设计 (19)界面设计 (19)系统关键类设计 (20)系统类结构 (22)第六章软件功能实现 (23)播放Mp3实现 (23)Mp3文件解析实现 (23)Mp3列表控制类实现 (23)Mp3歌词解析及显示控制实现 (23)结束语 (25)参考文献 (24)致谢 (27)摘要随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随着Internet的发展,软件的跨平台性又被提高到另一个新的要求。

基于微信小程序的音乐播放器的设计与开发

基于微信小程序的音乐播放器的设计与开发

基于微信小程序的音乐播放器的设计与开发摘要:小程序一经面世带着自身的优势被各行业广泛应用,在信息的获取方面为用户提供了更为便捷、灵活的一站式信息搜索平台;也为各行业信息的发布和传播达到最大化和最优化开辟了新途径。

在微信小程序软件的开发过程中,还进一步提供了原生APP的组件。

而在HTML5+CSS3当中,这是需要通过模拟才能够有效实现的相关功能,但在小程序当中可以通过组件来得到有效的实现听音乐过程。

关键词:音乐播放器;Java;Android1微信小程序简介1.1小程序简介“听音乐”是深受众多人所喜爱的用来缓解压力的休闲方式之一。

现如今,社会生活日益加快,在紧张和压力下人们对音乐的需求也在以极大的幅度上升。

互联网上的音频与视频资源的数量规模更是爆发性地增长。

因此音乐播放器自然也就是大家比较关注的一个部分。

然而,现在的几大音乐门户竞争十分激烈,导致音乐资源被“分割”,不同的音乐资源需要下载不同网站的APP终端,结果每个人的手机上都会有几个不同的音乐APP,白白浪费了大量的空间不说,还让操作变得繁复,平白增加许多不必要的操作。

所以,设计出一款实用性高、简洁方便、占用空间较小的手机音乐播放器具有非常重要的现实意义,而不需要通过下载或安装即可以使用的微信小程序则恰好能满足这个需求。

微信小程序是腾讯公司在2017年1月9日全量发布的嵌入微信之中不需要安装即可使用的战略级产品。

用户通过二维码扫描或搜索即可打开应用获取所需信息,成为连接用户与信息及服务的一种全新方式,其目标是要"连接一切"。

互联网的上半场,各个行业都以技术优势来壮大自身,很大程度上依靠的是人口及流量红利。

而今,对整个市场来说,以往的红利即将殆尽,就目前情况而言最主要的是要靠创新服务于各行业用户的需求,靠大数据、移动互联网等技术的革新为现有用户提升全新的、更为人性化的信息体验。

打开小程序就可以看到选择城市和输入查询两个功能区域,用户点击当前城市选项,可以进入搜索页面来更换城市。

音乐播放器的设计与实现毕业论文

音乐播放器的设计与实现毕业论文

音乐播放器的设计与实现毕业论文毕业设计说明书学生姓名学号学院计算机科学与技术学院专业计算机科学与技术(软件工程)题目音乐播放器的设计与实现指导教师(姓名)(专业技术职称/学位)年月摘要: 随着生活水平的提高,娱乐已成为非常主流的话题,人们不仅需要通过音乐陶冶情操,而且越来越多的人倾向于使用音乐、视频等娱乐和放松自己,这大大促进了媒体软件的发展.本文旨在介绍研究常用数字音频编码和解码的相关知识,并结合VS2008编写多功能音乐播放器,了解音乐播放器功能的实现,掌握开发音乐播放器所需的相关知识,采用了面向对象软件工程方法,其开发主要包括应用程序界面设计和后台代码运行两个方面,实现了多功能音乐播放器在计算机上的应用,可以在很大程度上满足用户的需求.该系统主要具备:音乐播放控制、音乐文件控制、音量控制、下载控制、歌词控制、进度控制、音乐剪辑等功能模块。

关键字:音乐播放器,音频编码格式,TechSmith Screen Capture Codec,FFmpeg,C#,Visual Studio 2008Abstract:With the improvement of standards of living, entertainment has become verymainstream topics, it is required not only by music, edifying, and as more and more people tend to use music, video and other entertainment and relax, which greatly promoted the development of media software. This article aims to introduce the research knowledge of common digital audio encoding and decoding, and in conjunction with VS2008 prepared multifunctional music player, understand the functions of the music player to acquire related knowledge needed to develop music player, object-oriented software engineering methods are used, their development includes the application interface design and code to run in the background tracks to realize multifunctional music player application on your computer, you can to a large extent, meet the needs of users. The system mainly includes: a music player, music file control, volume control, control, control, schedule control of lyrics, music editing function module.Keywords:music player, audio coding format, techsmith screen capture codec, c#, visual studio 2008目录1前言................................................................................................................. - 3 -1.1选题的背景及意义...................................................................................... - 4 -1.2网络流行音乐播放器简介.......................................................................... - 4 -2系统相关技术及开发平台介绍................................................................... - 5 -2.1开发应用技术介绍...................................................................................... - 5 -2.2开发及运行坏境.......................................................................................... - 7 -3系统的分析..................................................................................................... - 8 -3.1可行性分析.................................................................................................. - 8 -3.2常见的几种音频格式及其特点 ................................................................. - 9 -3.3需求分析....................................................................................................- 10 -4系统设计........................................................................................................- 12 -4.1系统概要设计............................................................................................- 12 -4.2系统功能设计及描述................................................................................- 12 -5系统功能实现 .............................................................................................- 14 -5.1歌曲添加模块............................................................................................- 15 -5.2歌曲列表模块............................................................................................- 19 -5.3播放控制模块............................................................................................- 20 -5.4音量控制模块............................................................................................- 23 -5.5进度控制模块............................................................................................- 24 -5.6滚动字幕模块............................................................................................- 24 -5.7歌曲下载模块............................................................................................- 29 -5.8歌曲剪辑模块............................................................................................- 31 -结论.................................................................................................................- 35 -参考文献.......................................................................................................- 36 -致谢.................................................................................................................- 37 -1 前言1.1 选题的背景及意义音乐是情感的艺术,美妙动听的音乐来源于情感,又潜移默化地影响情感,让我们进入瑰丽多彩的虚化与现实的意境之中。

毕业论文基于javaweb的音乐网站的设计与实现开题报告

毕业论文基于javaweb的音乐网站的设计与实现开题报告

毕业论文基于javaweb的音乐网站的设计与实现开题报告1. 引言音乐是人们生活中不可或缺的一部分,随着互联网技术的发展,音乐网站的需求越发增加。

本文将以基于JavaWeb的音乐网站设计与实现为主题,旨在通过开发一个功能完备、用户友好的音乐网站,提供用户在线播放音乐、搜索音乐等功能。

本开题报告将给出研究背景、目标与意义、研究内容和方法等方面的介绍。

2. 研究背景随着互联网的普及,音乐市场也逐渐向线上转移。

然而,目前市面上的音乐网站存在一些问题,如界面设计不够友好、功能不够全面、用户体验不佳等。

因此,本文选择基于JavaWeb来设计和实现一个全面的音乐网站,以解决现有音乐网站的不足之处。

3. 目标与意义本文的目标是设计并实现一个基于JavaWeb的音乐网站,使用户能够方便地在线播放音乐、搜索音乐,并提供良好的用户体验。

同时,通过开发一个完善的音乐网站,可以为音乐爱好者提供更好的音乐交流平台,促进音乐文化的传播。

4. 研究内容和方法4.1 研究内容本文将主要研究以下内容: - 音乐网站的架构设计,包括前端和后端的设计; - 数据库设计,包括音乐信息、用户信息等; - 在线音乐播放功能的实现; - 搜索、分类等功能的实现;- 用户注册、登录、评论等用户管理功能的实现; - 网站性能的优化。

4.2 研究方法本文将采用以下研究方法: - 需求分析:分析用户需求,明确功能和性能要求; - 系统设计:设计音乐网站的架构,包括前端和后端的设计,并确定数据库的设计; - 开发实现:根据设计要求,使用JavaWeb技术进行开发; - 测试与优化:对开发完成的音乐网站进行测试,发现并优化潜在问题; - 用户反馈与改进:通过用户测试和反馈,不断优化网站的功能和用户体验。

5. 预期成果本文预期完成一个基于JavaWeb的音乐网站,具备以下特点: - 用户友好的界面设计,简洁明了; - 在线音乐播放功能,支持多种音乐格式; - 搜索、分类等功能,便于用户查找和发现音乐; - 用户管理功能,包括用户注册、登录、评论等; - 网站性能优化,提高用户访问速度。

Java实战音乐播放器

Java实战音乐播放器

Java实战音乐播放器-播放音乐文件,包括基本的音频控制创建一个基本的音乐播放器是一个有趣而复杂的项目,它涉及到音频文件的处理、用户界面的设计以及音频控制功能的实现。

在这个实战博客中,我将向您展示如何使用Java来创建一个简单的音乐播放器。

我们将使用Java的Swing库来构建用户界面,以及Java的javax.sound.sampled库来处理音频文件和音频控制。

这个播放器将能够加载和播放本地音频文件,包括基本的音频控制功能,如播放、暂停、停止和音量调节。

步骤1:创建Java项目首先,创建一个新的Java项目,并添加Swing和javax.sound.sampled库的依赖。

您可以使用Eclipse、IntelliJ IDEA或任何其他Java集成开发环境来完成这些任务。

步骤2:创建用户界面在我们的音乐播放器中,我们需要一个用户界面来加载和控制音乐文件。

我们将使用Swing 来创建以下基本组件:文件选择器:用于选择要播放的音乐文件。

播放按钮:用于开始或继续播放音乐。

暂停按钮:用于暂停音乐的播放。

停止按钮:用于停止音乐的播放。

音量控制:用于调整音量。

下面是一个示例的用户界面代码:javaCopy codeimport javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class MusicPlayerGUI extends JFrame {private JButton playButton;private JButton pauseButton;private JButton stopButton;private JSlider volumeSlider;private JFileChooser fileChooser;public MusicPlayerGUI() {setTitle("音乐播放器");setSize(400, 200);setDefaultCloseOperation(EXIT_ON_CLOSE);setLayout(new FlowLayout());fileChooser = new JFileChooser();playButton = new JButton("播放");pauseButton = new JButton("暂停");stopButton = new JButton("停止");volumeSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);add(fileChooser);add(playButton);add(pauseButton);add(stopButton);add(volumeSlider);playButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 实现播放音乐的逻辑}});pauseButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {// 实现暂停音乐的逻辑}});stopButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 实现停止音乐的逻辑}});volumeSlider.addChangeListener(new ChangeListener() { @Overridepublic void stateChanged(ChangeEvent e) {// 实现音量调节的逻辑}});}public static void main(String[] args) {SwingUtilities.invokeLater(new Runnable() {@Overridepublic void run() {new MusicPlayerGUI().setVisible(true);}});}}步骤3:音频处理和控制接下来,我们需要添加音频处理和控制的逻辑。

基于java的音乐播放器课程设计报告

基于java的音乐播放器课程设计报告

基于java的音乐播放器课程设计报告第一篇:基于java的音乐播放器课程设计报告Java课程设计报告题目:java音乐播放器姓名学号院系班级专业任课教师1.设计内容及要求能够实现简单的音乐播放器功能,如:打开本地文件,播放,暂停,停止,背景播放,单曲循环等等,界面充实,交互友好,可以添加多首歌曲目录一个简单的基于java语言的音乐播放器,菜单栏:文件,播放控制和播放列表,文件菜单包含打开、循环和退出三个菜单项;播放控制菜单包含播放、暂停和停止三个菜单项,播放列表菜单则是当向里面添加歌曲之后才能够查看到里面所包含的歌曲目录。

当播放歌曲时,可以调节音量大小或者设置是否静音;可以查看当前播放音乐的相关属性,如:歌曲名,歌手,发布时间,所属专辑等等。

2.需求分析1、时间跟踪条:根据歌曲播放的进度,控制条自动进行追踪,用户可以随时了解歌曲的播放进度2、音量控制键:可以点击该控键进行音量大小的调节以及是否静音的设置3、属性查询键:通过该控键,用户可以查看当前播放音乐的相属性,获取关于该歌曲的用户所需的相关信息。

4、菜单栏:①文件:打开:用户通过该菜单项打开本地音乐文件,听任何用户想听的歌曲循环:通过循环设置,用户可以重复的播放一首喜欢的歌曲退出:退出音乐播放器,及退出该程序②播放控制:播放:选择歌曲之后,通过点击播放菜单项启动播放器播放音乐暂停:暂停当前正在播放的音乐停止:停止当前正在播放的音乐③播放列表:当用户通过文件打开本地音乐文件后,及相当于在播放列表里面添加了歌曲,及形成相应的歌曲播放目录3.总体设计结合需求分析来看,整个设计包含了简单的菜单栏,根据用户需求设置了三个简单的实现基本操作的菜单,分别是:文件,播放控制,播放列表;根据具体的操作每个菜单还包含了相应的菜单项,文件:打开,循环,退出;播放控制:播放,暂停,停止;播放列表则没有菜单项,该菜单就是用来显示或者查看相应的歌曲目录的。

该音乐播放器设置了两个窗口,运行程序时打开的初始化欢迎界面,用户可以根据自己的需求进行菜单栏里面的基本操作和相应的设置,当用户添加或者打开音乐播放文件的时候,程序将会显示出第二个音乐文件播放窗口,与此同时,第一个初始化窗口将会自动隐藏,在音乐播放窗口里面用户可以进行相关的音乐播放的控制操作。

Java实现音频播放--JavaSound API编写音频处理程序

Java实现音频播放--JavaSound API编写音频处理程序

一、JavaSound的体系结构二、JavaSound混频原理三、音频数据与存储格式四、设计音乐播放器五、播放音乐六、支持更多的音频格式━━━━━━━━━━━━━桌面PC的性能日益提高,Java虚拟机的优化技术也不断获得突破,这一切使得用Java处理实时信号成为可能。

本文将通过设计和构造一个支持实时MP3、WAV和Ogg音频格式解码/回放的Java音乐播放器,阐述用JavaSound API编写音频处理程序的思路和一般过程。

JavaSound是一个小巧的低层API,支持数字音频和MIDI数据的记录/回放。

在JDK 1。

3。

0之前,JavaSound是一个标准的Java扩展API,但从Java 2的1.3。

0版开始,JavaSound就被包含到JDK之中。

由于Java有着跨平台(操作系统、硬件平台)的特点,基于JavaSound的音频处理程序(包括本文的程序)能够在任何实现了Java 1。

3+的系统上运行,无需加装任何支持软件。

一、JavaSound的体系结构当前JDK的JavaSound API随同Java媒体框架(JMF,Java Media Framework)一起发布,主页在java。

sun。

com/products/java—media/jmf/,适合JDK 1。

1以及更高的版本。

除了JDK实现的JavaSound API之外,还有一个源代码开放的JavaSound实现是Tritonus,主页在http://www。

tritonus。

org/。

图一描述了JavaSound API的体系结构,虚线表示Sun的JavaSound标准定义的API调用。

上面一根虚线表示我们编写音频处理程序要调用的API,JavaSound API包含在javax。

sound.sampled和javax。

sound.midi包中。

两根虚线之间的部分就是JavaSound API的具体实现.图一:JavaSound体系结构就象上面一根虚线表示的API具有统一标准一样,在所有的JavaSound实现中,图一下面一根虚线表示的SPI(服务提供者接口, Service Provider Interface)也是统一的。

头歌云课java实训作业五

头歌云课java实训作业五

头歌云课java实训作业五Java实训作业五:基于头歌云课的音乐播放器概述:在本次实训作业中,我们将使用Java编程语言基于头歌云课平台设计并实现一个简单的音乐播放器。

该音乐播放器能够实现音乐的播放、暂停、停止以及音量的调节等基本功能。

同时,我们还需考虑如何实现音乐列表的管理,能够实现音乐的添加、删除、排序等功能。

一、需求分析:1. 实现基本功能:- 播放音乐:能够选择音乐文件进行播放。

- 暂停音乐:暂停当前正在播放的音乐。

- 停止音乐:停止当前正在播放的音乐。

- 调节音量:能够调节音乐的音量大小。

2. 实现音乐列表管理:- 添加音乐:能够将音乐添加到播放列表中。

- 删除音乐:能够删除播放列表中的音乐。

- 排序音乐:能够根据音乐的名称、歌手、时长等属性对播放列表中的音乐进行排序。

二、概要设计:1. 音乐播放器类:- 属性:音乐列表(List<Music>)、当前播放的音乐(Music)、音量大小(int)。

- 方法:播放音乐、暂停音乐、停止音乐、调节音量等。

2. 音乐类:- 属性:音乐名称(String)、歌手(String)、时长(int)等。

- 方法:获取音乐名称、获取歌手、获取时长等。

3. 音乐列表管理类:- 属性:音乐列表(List<Music>)。

- 方法:添加音乐、删除音乐、排序音乐等。

三、详细设计与实现:1. 音乐播放器类的详细设计:- 属性:- 音乐列表:使用List<Music>类型的对象存储音乐列表。

- 当前播放的音乐:使用Music类型的对象存储当前播放的音乐。

- 音量大小:使用int类型的变量存储音量大小。

- 方法:- 播放音乐:根据传入的音乐名称,从音乐列表中查找对应的音乐并播放。

- 暂停音乐:暂停当前正在播放的音乐。

- 停止音乐:停止当前正在播放的音乐。

- 调节音量:根据传入的音量大小,调节当前音乐的音量。

- 其他辅助方法:例如获取当前播放音乐的名称、获取当前播放音乐的歌手等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《课程设计报告》课程名称:WEB课程设计2016—2017 学年度第一学期题目:基于java的音乐播放器系别:信息工程学院专业:计算机科学与技术专业班级:指导教师:编者目录一.需求分析 (1)(一)背景 (1)(二)音乐播放器需求分析 (1)二.概要设计 (4)(一)系统所用类及各类的主要说明 (4)(二)系统UML类图 (5)三.详细设计 (6)(一)核心技术介绍 (6)(二)创建播放器的图形用户界面所需的控件 (9)四 .系统实现 (12)五.测试 (24)结论 (26)一.需求分析(一)背景随着计算机的广泛运用,手机市场的迅速发展,各种音频视频也在网上广为流传,这些资源看似平常,但以渐渐成为人们必不可少的一部分了,于是各种手机播放器也紧跟着发展起来,但是很多播放器一味追求外观花哨,功能庞大,对很多用户的时间造成了很多资源的浪费,比如CPU、内存的占有率过高,在用户需求多用户操作时,受到了不小的影响,带来了许多的不便,而对于大多数普通用户,许多功能用不上,形同虚设。

(二)音乐播放器需求分析根据项目,我们可以获得项目系统的基本需求主要是功能需求而系统的功能需求,我们分成三部分来概括,即播放器的基本控制需求、播放列表管理需求和性能需求。

以下分别描述:11、播放器的基本控制需求(1)播放:点击播放列表中的歌曲进行播放。

(2)停止:在歌曲列表下方有一个小按钮,当歌曲正在播放时,显示的是可停止的按钮,点击则停止当前播放的歌曲。

(3)上一曲:歌曲在播放或者未播放时单击上一曲按钮时歌曲会跳到列表的当前歌曲的上一首。

(4)下一曲:歌曲在播放或者未播放时单击下一曲按钮时歌曲会跳到列表的当前歌曲的下一首。

(5)停止:单击停止按钮时立即停止播放当前的歌曲。

用户需求图2音乐播放器系统流程图2、播放列表管理(1)添加歌曲文件夹:在播放列表中单击,选择添加的文件夹则弹出一个添加文件夹的会话框,点击要添加的歌曲,则弹出“添加成功”的消息提示,否则弹出“添加失败”的相关信息。

(2)添加歌曲:选中歌曲后,单击选择添加歌曲或者点击左下角的添加按钮则弹出一个添加歌曲信息的会话框,点击提交则进行添加,添加成功则更新了歌曲列表。

33、性能需求(1)当要求歌曲播放时,软件响应时间最长不超过2秒(2)当要求歌曲暂停时,软件响应时间最长不超过1秒系统能持续运行,不影响其他程序的使用,不多占用内存,不会造成死机等问题。

二.概要设计(一)系统所用类及各类的主要说明(1)界面样式MUSICPLAYER类:主类,作为框架从指定的类获取图像和声音ListItem类:设置名称和位置init类:设置样式和界面(2)功能类actionPerformed类:添加音乐文件或文件夹play类:播放暂停设置controllerUpdate类:选择播放模式4(二)系统UML类图三.详细设计(一)核心技术介绍在Java.Applet包中的Applet类和AudioClip接口提供了播放声音的基本支持。

以前计算机存储声音文件的格式有许多,目前Java只支持一种声音文件格式有.au,.mid,.wav等。

对于其他格式的文件,可以用相应地工具软件将它们转换为.au或.mid等Java支持的文件。

在Applet中播放声音文件有两种方法:(1)在Java的API中,Applet类提供了一个方法play(),它可以直接根据URL地址来播放声音。

这个方法指定如下:Public void play(URL url);Public void play(URL url,string soundFile);在第一种方法的定义中,参数url是保存声音文件的绝对URL地址,即统一资源定位,它指定Web网上的一个声音文件;在第二种方法定义中,参数URL是保存声音文件的基地址,而参数soundFile是声音文件的文件名。

如果声音文件与Applet的HTML文件在相同的目录下,则可以通过使用getCodeBase()方法来获得该声音文件的基地址。

如果Applet本身的URL地址为“http///pro/”,则语句:Play(gatCodeBase(),“space.au”);6等同于语句:Play(“http///pro/”,“space.au”);在程序编写过程中,若使用第一种方法定义,则将程序由一个服务器转移到另一服务器上或从一个目录转移到另一个目录下时,必须改变源代码中的URL地址:若使用第二种方法定义,即使用getCodeBase()方法来定位资源文件,则将程序由一个服务器转移到另一个服务器或从一个目录转移到另一个目录下时,不必改变源代码中的URL地址,而只需将声音文件与播放他的Java文件放在同一目录下即可。

Play()方法只能进行简单的播放,只能一次敬爱那个声音文件播放完,没有停止和连续播放的功能,所以,一般编写播放声音的程序时不采用此方法。

(2)利用Java中的AudioClip类对象播放声音文件。

AudioClip类提供了两种获取声音数据的方法,定义如下:AudioClip getAudioClip(URL url);AudioClip getAudioClip(URL url,String soundFile);它们的参数含义与以上相同。

使用时可按如下步骤。

○1)声明一个AudioClip类的对象,如:AudioClip audio;7○2)使用getAudioClip()方法为AudioClip类的对象获得句柄,如: aud=getAudioClip(getCodeBase(),“space.au”);或一次完成,如:AudioClip aud=getAudioClip(getCodeBase(),“space.au”);或:AudioClip aud=getAudioClip(“HTTP///pro/”,“space.au”8Java.applet.AudioClip类提供了3个方法实现对声音文件播放的控制,它们分别是play(),loop()和stop()。

在这个设计过程中使用了java.applet.AudioClip类中的play()方法播放一个载入的声音文件;使用loop()方法循环地播放该声音文件,并且使用stop()方法来停止播放这个声音文件。

方法star()和stop()是Applet类中定义的方法,该程序继承了Applet类,并重新定义了这两个方法,这一过程称做方法的覆盖。

这两个方法是由操作系统自动调用的。

当程序启动时两个方法,star()方法由操作系统自动调用,star()方法在运行时通过AudioClip对象aud调用loop()方法,实现对声音的循环播放。

当程序停止运行时,Applet类中的stop()方法被自动调用,stop()方法运行时通过AudioClip对象aud调用AudioClip中的stop()方法来终止声音文件的播放。

(二)创建播放器的图形用户界面所需的控件1菜单栏与菜单在程序中创建菜单是最常用图形的用户界面之一。

Java语言中,9与菜单相关类有5个:JMenuBar,JMenuItem,JCheckBoxMenuItem和JRadioButtonMenuItem。

实现菜单的过程比较复杂,主要下面三步:(1)创建菜单栏,并将它设计到某个容器中。

创建菜单栏需要利用JMenuBar类,该类只有一个默认构造方法(2)创建菜单条,并将它们添加到菜单栏中。

创建菜单条需要利用JMenu类,该类有多种构造方法,其中最常用的是JMenu(String s)。

(3)创建菜单项,并将它们添加到菜单条中。

创建菜单项一般需要利用JMenuItem类,该类有多种构造方法,其中最常用的是JMenuItem(String text)。

2按钮与标签1)按钮创建按钮需要利用JButton类,JButton类中常用的方法有:public JButton() //创建一个没有标记的空按钮public JButton(Icon icon) //创建一个标有指定图标的按钮public JButton(String text) //创建一个标有指定文字的按钮10public JButton(String text ,Icon icon)//创建一个标有指定文字和图表的按钮2)标签标签与按钮相同,标签也可以显示一串文字或图像。

创建标签需要利用JLabel类。

JLabel类中常用的构造方法有:public JLabel()//创建一个空标签public JLabel(Icon image)//创建具有指定图标的标签public JLabel(Icon image,int horizontalAlignment)//创建具有指定图标和水平对齐方式的标签public JLabel(String text)//创建具有指定文字的标签public JLabel(String text,int horizontalAlignment)//创建具有指定文字和水平对齐方式的标签public JLabel(String text,Icon icon,int horizontalAlignment)11//创建具有指定文字,图标和水平对齐方式的标签3列表框列表也允许用户从中进行选择。

创建列表需要利用JList类,JList 类中常用的构造方法有:public JList()//创建一个列表,列表中的选项为空public JList(Object[] listData)//创建一个列表,列表中的选项由参数listData指定四 .系统实现主类MUSICPLAYER类:import java.util.*;import javax.swing.JSlider;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;12import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import javax.media.ControllerEvent;import javax.media.ControllerListener;import javax.media.EndOfMediaEvent;import javax.media.Manager;import javax.media.MediaLocator;import javax.media.NoPlayerException;import javax.media.Player;import javax.media.PrefetchCompleteEvent;import javax.media.Time;import javax.swing.ButtonGroup;import javax.swing.DefaultListModel;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButtonMenuItem;import javax.swing.JScrollBar;import javax.swing.JScrollPane;import javax.swing.filechooser.FileNameExtensionFilter;public class MusicPlayer implements ActionListener, Serializable,ControllerListener {private static final long serialVersionUID = 1L;private JFrame frame = null;private JPanel controlPanel = null;private JButton btnPlay = null;private JButton btnPre = null;private JButton btnNext = null;private JScrollPane listPane = null;private JList list = null;private DefaultListModel listModel = null;private JMenuBar menubar = null;private JMenu menuFile = null, menuAbout = null, menuMode = null;private JMenuItem itemOpen, itemOpens, itemExit, itemAbout;13private JRadioButtonMenuItem itemSingle, itemSequence ,itemRandom; private ListItem currentItem = null;private static Player player = null;private boolean isPause = false;private int mode;private int currentIndex;private ImageIcon iconPlay = new ImageIcon("res\\image\\play.png"); private ImageIcon iconPre = new ImageIcon("res\\image\\pre.png"); private ImageIcon iconNext = new ImageIcon("res\\image\\next.png"); private ImageIcon iconPause = new ImageIcon("res\\image\\pause.png"); public static void main(String[] args){new MusicPlayer();}public MusicPlayer(){init();}public void init(){frame = new JFrame();frame.setTitle("音乐播放器");frame.setSize(500, 300);frame.setResizable(false);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);menubar = new JMenuBar();menuFile = new JMenu("文件");menuAbout = new JMenu("关于");menuMode = new JMenu("播放模式");itemOpen = new JMenuItem("添加文件");itemOpens = new JMenuItem("添加文件夹");itemExit = new JMenuItem("退出");itemAbout = new JMenuItem("关于");itemOpen.addActionListener(this);itemOpens.addActionListener(this);itemExit.addActionListener(this);itemAbout.addActionListener(this);itemSequence = new JRadioButtonMenuItem("顺序播放");itemSequence.setSelected(true);itemSingle = new JRadioButtonMenuItem("单曲循环");14itemSequence.addActionListener(this);itemRandom = new JRadioButtonMenuItem("随机播放"); itemRandom.addActionListener(this);itemSingle.addActionListener(this);ButtonGroup bg = new ButtonGroup();bg.add(itemRandom);bg.add(itemSequence);bg.add(itemSingle);menuFile.add(itemOpen);menuFile.add(itemOpens);menuFile.add(itemExit);menuAbout.add(itemAbout);menuMode.add(itemSequence);menuMode.add(itemSingle);menuMode.add(itemRandom);menubar.add(menuFile);menubar.add(menuAbout);menubar.add(menuMode);frame.setJMenuBar(menubar);frame.setLayout(new BorderLayout());controlPanel = new JPanel();controlPanel.setLayout(new FlowLayout());btnPlay = new JButton(iconPlay);btnPre = new JButton(iconPre);btnNext = new JButton(iconNext);btnPlay.addActionListener(this);btnPre.addActionListener(this);btnNext.addActionListener(this);controlPanel.add(btnPre);controlPanel.add(btnPlay);controlPanel.add(btnNext);listPane = new JScrollPane();listModel = load();list = new JList(listModel);//获取音乐文件if (list.getSelectedIndex() == -1 && listModel.size() > 0){currentItem = (ListItem) listModel.get(0);list.setSelectedIndex(0);currentIndex=0;}listPane.getViewport().add(list);//添加点击响应list.addMouseListener(new MouseAdapter()15{public void mouseClicked(MouseEvent e){if (e.getClickCount() == 2){if(player!=null){player.close();btnPlay.setIcon(iconPlay);}currentIndex = list.locationToIndex(e.getPoint());currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIndex);play();}}});frame.setLayout(new BorderLayout());frame.add(controlPanel, BorderLayout.NORTH);frame.add(listPane, BorderLayout.CENTER);frame.setVisible(true);};public void actionPerformed(ActionEvent e){if (e.getSource() == itemOpen){// add filesJFileChooser jfc = new JFileChooser();FileNameExtensionFilter filter = new FileNameExtensionFilter("音乐文件", "mp3", "wav");jfc.setFileFilter(filter);jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);jfc.setMultiSelectionEnabled(true);if (jfc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION){File[] files = jfc.getSelectedFiles();for (File f : files){ListItem item = new ListItem(f.getName(), f.getAbsolutePath());listModel.addElement(item);}}}16else if (e.getSource() == itemOpens){// add files in a directoryJFileChooser jfc = new JFileChooser();jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);if (jfc.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION){File directory = jfc.getSelectedFile();File[] files = directory.listFiles(new java.io.FileFilter(){public boolean accept(File f){if (f.getName().toLowerCase().endsWith(".mp3")|| f.getName().toLowerCase().endsWith(".wav"))return true;return false;}});for (File file : files){ListItem item = new ListItem(file.getName(), file.getAbsolutePath());listModel.addElement(item);}save(listModel);}}else if (e.getSource() == itemExit){System.exit(0);}else if (e.getSource() == itemAbout){JOptionPane.showMessageDialog(frame, "作者:617");}else if (e.getSource() == btnPlay){// play or pauseplay();}else if (e.getSource() == btnPre){pre();17}else if (e.getSource() == btnNext){// next musicnext();}else if (e.getSource() == itemSequence){mode = 0;}else if (e.getSource() == itemSingle){mode = 1;}else if (e.getSource() == itemRandom){mode = 2;}}// play control/**** 播放*/public void play(){if (btnPlay.getIcon() == iconPlay){if (isPause){player.start();System.out.println("播放");isPause = false;}else{try{player = Manager.createPlayer(new MediaLocator("file:"+ currentItem.getPath()));player.addControllerListener(this); // 提取媒体内容18player.prefetch();}catch (NoPlayerException e1){e1.printStackTrace();}catch (IOException e1){e1.printStackTrace();}}btnPlay.setIcon(iconPause);}else{player.stop();isPause = true;System.out.println("暂停");btnPlay.setIcon(iconPlay); //播放暂停图标转换}}/**** 下一曲*/public void next(){if (currentIndex == listModel.getSize() - 1){currentIndex = 0;}else{currentIndex++;}currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIn dex);Point p = list.indexToLocation(currentIndex);JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条19jScrollBar.setValue(p.y);// 设置垂直转动条位置btnPlay.setIcon(iconPlay);if (player != null)player.close();isPause = false;play();}public void rand(){list.setSelectedIndex((int)(Math.random()%(listModel.getSize()-1)));Point p=list.indexToLocation((int)(Math.random()%(listModel.getSize()-1)));JScrollBar jScrollBar = listPane.getVerticalScrollBar();jScrollBar.setValue(p.y);btnPlay.setIcon(iconPlay);if (player != null)player.close();isPause = false;play();}/**** 上一曲*/public void pre(){if (currentIndex == 0){currentIndex = listModel.getSize() - 1;}else{currentIndex--;}currentItem = (ListItem) listModel.get(currentIndex);list.setSelectedIndex(currentIndex);Point p = list.indexToLocation(currentIndex);JScrollBar jScrollBar = listPane.getVerticalScrollBar();// 获得垂直转动条jScrollBar.setValue(p.y);// 设置垂直转动条位置btnPlay.setIcon(iconPlay);if (player != null)20player.close();}isPause = false;play();}// end play controlpublic DefaultListModel load(){File file = new File("list.lst");DefaultListModel dlm = new DefaultListModel();if (file.exists()){try{ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));Integer size = (Integer) ois.readObject();if (size != 0){for (int i = 0; i < size; i++){ListItem item = (ListItem) ois.readObject();dlm.addElement(item);}}ois.close();return dlm;}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}catch (ClassNotFoundException e){e.printStackTrace();}21return dlm;}public void save(DefaultListModel dlm){try{ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("list.lst")));Integer size = dlm.getSize();oos.writeObject(size);for (int i = 0; i < size; i++){ListItem item = (ListItem) dlm.get(i);oos.writeObject(item);}oos.close();}catch (Exception e){e.printStackTrace();}}public void controllerUpdate(ControllerEvent e){if (e instanceof EndOfMediaEvent){if (mode == 0){// 顺序播放System.out.println("顺序播放");next();}else if (mode == 1){ // 单曲循环System.out.println("播放结束");player.setMediaTime(new Time(0));System.out.println("单曲循环");player.start();}else if (mode == 2)22{System.out.println("随机播放");rand();}return;}// 当提取媒体的内容结束if (e instanceof PrefetchCompleteEvent){System.out.println("开始播放");player.start();return;}}}LISTITEM类import java.io.Serializable;public class ListItem implements Serializable{private static final long serialVersionUID = 1L;private String name;private String path;public ListItem(){}public ListItem(String name, String path){ = name;this.path = path;}public String getName(){return name;}public void setName(String name){ = name;}public String getPath(){return path;23}public void setPath(String path){this.path = path;}public String toString(){return name;}}五.测试2425结论本文介绍了基于java jmf音乐播放器的关键技术。

相关文档
最新文档