用Java实现音频播放

用Java实现音频播放
用Java实现音频播放

用Java实现音频播放

一、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)一起发布,主页在https://www.360docs.net/doc/c812458598.html,/products/java-media/jmf/,适合JDK 1.1以及更高的版本。除了JDK实现的JavaSound API之外,还有一个源代码开放的JavaSound实现是Tritonus,主页在https://www.360docs.net/doc/c812458598.html,/。

图一描述了JavaSound API的体系结构,虚线表示Sun的JavaSound标准定义的API调用。上面一根虚线表示我们编写音频处理程序要调用的API,JavaSound API包含在javax.sound.sampled和javax.sound.midi包中。两根虚线之间的部分就是JavaSound API的具体实现。

图一:JavaSound体系结构

就象上面一根虚线表示的API具有统一标准一样,在所有的JavaSound实现中,图一下面一根虚线表示的SPI(服务提供者接口, Service Provider Interface)也是统一的。SPI的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与SPI兼容的插件扩展模块,就可以在不改变API的情况下扩展音频处理程序的能力。SPI包含在java.sound.sampled.spi和javax.sound.midi.spi 包中。

例如,假设有一个只能播放WAV文件的程序,我们只要增加一个支持MP3文件解码的插件模块,就可以在不改动播放程序的任何一行代码的前提下,为这个播放程序添加播放MP3的能力。

二、JavaSound混频原理

图二阐述了JavaSound的混频器原理。在处理输入音频的应用中,对于来自各种音频输入端口的信号,例如麦克风、CD播放器、磁带播放器,等等,我们可以在它们到达TargetDataLine之前,利用混频器控制输入混频,最后在程序中通过TargetDataLine获得数字化的音频输入流。

图二:JavaSound混频器

类似地,在处理输出音频的应用中,混频器用来对一系列来自SourceDataLine的数据进行混频处理,经处理后的信号可输出到各种输出端口,例如扬声器、耳机等。SourceDataLine是一个可写入音频信号数字流的设备,例如,我们可以从一个WAV文件读取内容写入到 SourceDataLine,然后再通过扬声器输出。

输入到混频器的信号可以来源于剪辑。剪辑(Clip)是一个包含一段完整音频数据流的设备,或者说,剪辑就是一个缓冲在内存中的完整音频数据流。在一些要求反复播放音乐片段的场合,例如游戏的背景音乐,剪辑是很有用的。

图三描述了JavaSound API中一些常用的类、接口及其关系,所有图三显示的类、接口都通过Line这个基本接口统一起来。Line接口用来关闭/打开设备、注册事件监听器,以及提供一些用来调整声音效果的对象,例如调整音量大小的对象。AudioSystem在JavaSound体系中起着一个工厂(Factory)类的作用,提供了一系列的静态方法,我们通过这些静态方法来获取JavaSound系统默认配置的资源(所谓静态方法,就是可以在不创建AudioSystem 实例的情况下直接调用的方法)。

图三:常用的JavaSound类

顺便说明一下,在当前(JDK 1.4)实现的JavaSound的默认配置中,输入声音来自本地声卡的麦克风,输出声音到本地声卡的扬声器。应当说当前实现的JavaSound对端口和混频器的支持还不完善,但对于包括本文音乐播放器在内的许多应用来说,默认实现的JavaSound配置已经足够了。

三、音频数据与存储格式

取样得到的音频数据——也就是从TargetDataLine输入或从SourceDataLine输出的数据,必须符合音频格式的标准。音频数据的格式选项由AudioFormat类封装,主要选项包括:编码方式,可以是PCM(Pulse Code Modulation,脉冲编码调制)、MP3等;通道数量;取样率;帧速率;等等。

音频数据可以用多种格式保存到磁盘上。在JavaSound参考实现中,直接支持的文件格式包括WAV(Windows)、AIFF(主要用于Apple的Macintosh)以及AU(主要用于UNIX),音频文件的格式由AudioFileFormat类指定。

并非所有音频数据格式都可以保存到任意音频文件格式(或从音频文件回放),具体由平台和操作系统的类型决定。为简单计,本文的播放器只考虑包含PCM Mono或Stereo数据的WAV文件,这是当前流行的音频数据/文件格式组合,常用于CD音质的音频数据。压缩的音频数据(例如MP3和Ogg Vorbis)通常有各自特殊的存储格式(如.MP3和.OGG),通常不以WAV/AIFF/AU格式存储。

四、设计音乐播放器

我们要编写的音乐播放器(图四)由表一所示的几个类构成。鉴于构造用户界面往往需要大量的代码,且这些代码通常可以用IDE自动生成,所以下文只对一些关键的GUI元素略作介绍,不再给出完整的代码。

图四:播放器的用户界面

播放器的用户界面主要由一个带菜单的JFrame框架、一个名称为filenamesList的JList和几个JButton构成。框架有一个私有的 TestBase成员,其实例在GUIInit()方法的末尾通过pBase = new TestBase()语句初始化。

表一

用户界面中的按钮用类似下面的代码创建,其中addBttnIconText()是一个私有方法,它把一个图标放到按钮的文字标签之上。Java程序的用户界面和Windows界面风格迥异,建议读者使用Java开发工具自带的图标,或者从Java 图标库下载(例如

https://www.360docs.net/doc/c812458598.html,/developer/techDocs/hi/repository/)。

当用户点击一个按钮,与该按钮对应的xxxClick()事件句柄函数开始执行。播放器共有5个按钮,相应的事件句柄也有5个:playClick(“ 播放”按钮),stopClick(“停止”按钮),pauseClick(“暂停”按钮),prevClick (“后退”按钮),nextClick(“前进”按钮)。

例如,点击“播放”按钮时,playClick()句柄首先获得JList中选中的文件,然后调用TestBase实例中的playFile()辅助方法播放文件。playClick()句柄的代码如下所示,注意它把音乐文件及其所在目录连接起来的方法是操作系统中立的。

stopClick()和pauseClick()方法分别调用TestBase中的stop()和pause()方法。prevClick()和 nextClick()句柄的任务稍微复杂一点。首先,它们要调用TestBase中的stop()方法中止当前的播放动作,然后选中JList中当前项目的前一项或后一项,最后调用playClick()播放新选中的音乐文件,如下所示。

五、播放音乐

TestBase类包含主要的播放逻辑。例如,当用户点击“播放”按钮,TestBase类中的play()方法开始执行。

play()方法首先确认播放器当前已被终止播放,而不是暂停播放。然后它检查这是不是第一次调用play():如果是,则创建一个 playerThread线程。我们用一个独立的线程负责音乐播放,这样,无论播放器正在读取文件、解码,还是正在把音频数据输出到扬声器,用户界面总是可操作的。

启动线程之后,play()方法锁定静态synch同步对象,将stopped标记设置为false,然后通知正在等待的线程(playerThread线程在开始播放音乐文件之前,会等待静态synch对象上的提醒通知)。

playerThread线程启动后,它的run()方法开始运行。这个线程一直执行while循环,直到threadExit标记变成true为止。在while循环中,线程首先等待“开始播放”的信号(当用户点击“播放”按钮时),然后播放音乐。表二列出了描述播放器状态的各个标记及其含义。

表二

playMusic()方法利用JavaSound API播放当前选中的文件。首先要通过AudioSystem类获得一个AudioInputStream。然后,利用AudioInputStream 的getFormat()获知音频数据的格式。在此基础上,我们试图通过getLine()方法获得一个支持该种格式的SourceDataLine。如果要播放的是WAV文件,现在我们已经有了非压缩的PCM格式的音频数据,可以用line对象开始播放音频。

如果音频数据是压缩格式的,如MP3或Ogg,必须先进行一次转换——把MP3/Ogg解码成PCM。解码主要包括三个步骤:

1、创建一个解压缩结果的定制AudioFormat(PCM编码),但保留和原压缩流一样的取样率、通道信息等。

2、创建一个AudioInputStream把原来的AudioInputStream转换成新的AudioFormat格式。

3、获得一个处理解码后格式的SourceDataLine。

如下所示:

getLine()方法的返回值是一个与参数中指定的AudioFormat兼容的SourceDataLine。如果不能获得兼容的 SourceDataLine,getLine()返回null。在getLine()方法中,我们首先创建和填充一个https://www.360docs.net/doc/c812458598.html,结构,调用AudioSystem.getLine()方法,将info结构传递给AudioSystem类工厂。

准备好AudioInputStream和SourceDataLine之后,playMusic()剩余的任务已经很简单:用一个循环从AudioInputStream读取数据,然后写入到SourceDataLine。

六、支持更多的音频格式

假设已经在test目录下准备好了所有的.java文件,执行javac *.java 即可顺利编译,执行java test.TestPlayer就可以启动图一的播放器。但现在播放器只能播放有限的文件,因为JDK实现的JavaSound只支持WAV、AIFF和 AU。但是,我们可以用JavaSound SPI为播放器增加对MP3和Ogg Vorbis的支持,只要下载和安装相应的插件Jar文件即可。

Java版的Vorbis解码器可以从JavaCraft

(https://www.360docs.net/doc/c812458598.html,/jorbis/)下载,最新版本是 0.0.12。另外还要有一个JOrbis解码器的SPI封装器,这是使解码器在JavaSound下透明地运行所必需的,可以从 https://www.360docs.net/doc/c812458598.html,/vorbisspi/vorbisspi.html下载。VorbisSPI的最新版本是0.7。

对于MP3支持,JavaZoom也提供了一个兼容JavaSound的纯Java解码器,称为 JavaLayer(https://www.360docs.net/doc/c812458598.html,/javalayer/javalayer.html),最新的版本是0.2.0。注意要下载的是JavaLayer的J2SE版,不要下载J2ME版。

解开下载得到的文件,把所有Jar文件放到播放器所在目录。用下面的命令启动播放器:java

-classpath .;.\jogg-0.0.5.jar;.\jorbis-0.0.12.jar;.\jl020.jar;.\mp3sp .jar;.\vorbisspi0.6.jar test.TestPlayer。如果你下载的解码器版本不同,启动命令也要作相应地改动。把SPI扩展插件加入到了播放器的classpath之后,JavaSound就会在运行时自动使用它们。

音乐播放器前十排行

音乐播放器前十排行 1、QQ音乐 QQ音乐是腾讯公司推出的网络音乐平台,是中国互联网领域领先的正版数字音乐服务的领先平台,海量乐库在线试听、卡拉ok歌词模式、最流行新歌在线首发等,绿钻用户还可享受高品质音乐试听、正版音乐下载、MV观看等特权。 QQ音乐目前是国内音乐APP的绝对龙头,2016年底其曲库已经超过2000万首,旗下拥有的版权也是音乐APP中的第一,如索尼、华纳、杰尔威、英皇、韩国YG等,其市场份额也超过50%。虽然总有人吐槽QQ音乐,但是十大音乐APP排行榜第一位毫无悬念。在此前评选的全球音乐流服务排行榜,QQ音乐排名第四。 2、虾米音乐 虾米音乐版权建设虽然起步较晚,歌曲量在整体版权音乐中的比例低于20%,但在华语资源上仍具有一定优势。你想要听到华研唱片下的林宥嘉、S.H.E和田馥甄、相信音乐的五月天、梁静茹以及聚集了李宗盛、周华健等人的滚石,还是要投入虾米音乐的怀抱。而且虾米也在去年取得了韩国SM公司的音乐版权,这在国内来说,争取到了很大一部分的韩粉。虽然无法对QQ音乐造成威胁但依旧稳居十大音乐APP排行榜第二。 3、网易云音乐 网易云音乐不用再过多介绍了,近两年大火的音乐APP,口碑爆棚,市场份额目前也达到15%,局国内第二仅次于QQ音域。为何口碑份额双丰收的网易云音乐仅列十大音乐APP排行榜第三?网易云音乐的版权数量实在太少,并且官方也并不太重视版权的购买,虽然网易云音乐的版权音乐歌曲量占整体版权音乐的70%左右,但非常有意思的是大部分的版权都是通过转授权获得的。

4、酷狗音乐 酷狗音乐是一款集中播放、音乐效果、在线下载歌词等众多功能于一身,完全免费的手机音乐播放器。酷狗算是老牌音乐APP了, 但此前酷狗和酷我同QQ音乐一起加入新音乐集团,三大音乐APP曲 库资源基本互通,而且音乐伴奏资源众多也是酷狗的一大优势,喜 欢唱歌的人通常都是用酷狗搜索放伴奏唱歌、录歌。 不过酷狗的音质是劣势,对于耳朵挑剔的乐迷,对音质要求高的人来说很难满足。 5、咪咕音乐 咪咕音乐是一款面向所有用户的手机音乐APP,它包含了在线听歌、下载歌曲、订购彩铃以及开通会员等功能和业务,用户通过咪 咕音乐可以第一时间聆听中国移动无线首发的最新音乐,感觉最热 最流行歌曲,实时了解最新音乐咨讯及娱乐新闻,并可通过软件行 使无线音乐俱乐部会员权益。目前该软件已经覆盖市面上高中低端 主流机型,无论你是何种手机,均可轻松安装和使用。 6、酷我音乐 酷我音乐是中国数字音乐的交互服务品牌,是互联网领域的数字音乐服务平台,同时也是一款内容全、聆听快和界面炫的音乐聚合 播放器,是国内的多种音乐资源聚合的播放软件。自平台成立以来,酷我音乐作为前端潮流音乐的重要推手,率先与唱片公司、版权管 理机构合作探索发展,免费向广大用户提供方便流畅的在线音乐, 还有免费无损音乐方便用户的试听和下载,生成了丰富的音乐流媒 体生态系统。 7、天天动听 天天动听是一款功能强大、完全免费的手机音乐播放软件,支持歌词和歌曲图片下载,简洁人性化的操作,带来手机听歌的全新体验,是拇指一族必备的音乐播放工具。 8、百度音乐

音乐播放器Java课程设计报告

课程设计报告课程设计题目:java音乐播放器 学生姓名: 专业:XXXXXXXXXXXXX 班级: 指导教师: 20XX年X月X日

一、课程设计目的 1、编程设计音乐播放软件,使之实现音乐播放的功能。 2、培养学生用程序解决实际问题的能力和兴趣。 3、加深java中对多媒体编程的应用。 二、课程设计的要求 利用学到的编程知识和编程技巧,要求学生: 1、系统设计要能完成题目所要求的功能,设计的软件可以进行简单的播放及其他基本功能。 2、编程简练,可用,尽可能的使系统的功能更加完善和全面 3、说明书、流程图要清楚。 三、课程设计内容 1、课程设计的题目及简介 音乐播放软件要求: 有图形界面,能播放MP3歌曲,有播放列表,前一首、后一首等常用播放软件功能。 2、设计说明 主要运用多媒体编程、图形界面、数组及循环进行设计,从而实现简单的音乐播放。 public MyMusicPlayer():实现窗口的成员方法 publi c void run():实现改变歌曲的播放状态的成员方法 public AudioClip loadSound(String filename):实现对声音的加载public void mouseClicked(MouseEvent e):实现对按钮的监听public void itemStateChanged(ItemEvent arg0):返回一个AudioClip 对象

3、程序流程图 4、程序清单 import java.awt.*; import javax.swing.*; import java.applet.*; import java.awt.event.*; import https://www.360docs.net/doc/c812458598.html,.*; public class MyMusicPlayer extends Thread implements MouseListener,ItemListener{ JFrame MainFrame=new JFrame("MyMusicPlayer"); //定义主窗体 JLabel songname=new JLabel(); //用标签 显示状态 JButton last=new JButton(); JButton play=new JButton();

几种立体声录音的拾音方法

几种立体声录音方法 一、A/B制式 首先我来介绍一下A/B制式,A/B制式是最早采用的录制立体声的方法,有人形象的称它为拉开距离式拾音方法。两支传声器在舞台上或者录音室里拉开2.0-3.5米的距离,传声器可以是无方向性的也可以是心形的,它们平行地对准乐队,也可以稍微向左右两侧张开一些。 对A/B制式拾音来说,每一件乐器(声源)到达两支传声器处的声音信号之间,既存在强度差也存在时间差。强度差是由传声器的指向性图形以及声源到达两支传声器的距离不同所形成的。在这种录音制式中,强度差和时间差对定向的作用迭加在一起了。很明显,对于不再中轴线上的声源,前导的声道始终是声级较高的声道。心理声学的研究,时间差比强度差更加的重要。这种制式的特点是简单,对所使用的一对传声器,在性能和技术指标配对上要求并不太严格。 这种拾音制式有两个明显的缺陷:一是存在中间空洞,中间稀疏或者称为中间后退现象。就是说当重放用A/B制式所录的音乐的时候,听众往往回感到中间部位乐器的声象变弱,或者这些乐器的声象在中间部位变得稀疏起来,而更多的乐器声象向左右扬声器方向靠拢,使得两端乐器声象密集起来。有时,也使听众感到中间部位的声象向舞台后部退去。 对于这种缺陷,可以借助两种方法来改善。一种方法是在录音的时候增加一个中间传声器,把它的信号放大,再分别分配到左右声道中去。另外一种方法是再重放时增加一个中置扬声器,而将左右声道信号各分一部分给此扬声器放声。 上述缺陷在两支当传声器拉开2.5-3.5米以上时,将变得相当明显。 当然,放声时如果将两支扬声器朝向稍微向听音室中间偏转一点,中间空洞现象也有些改善。~~~~~~一句老话~~~~办法是人想出来的嘛! A/B制式还有一个很明显的缺陷就是,它的录音在作单声道兼容重放时,将存在相位干涉现象,因而兼容度很低~~~~~对于中国现在的电视基于单声道来说,就应该注意咯! 这是很容易加以说明的,当作单声道兼容重放时,必须把左右声道信号迭加在一起才能形成单声道信号。由于左右内同一声音信号中存在时间差,也就是存在相应的相位差,因而在迭加时,必然会使某些频率的信号抵消或者部分抵消,从而使重放音质变恶劣。一些专门的试验结果表明,A/B制式两支传声器拉开仅30厘米的时候,就已经出现明显的相位抵消现象,因为这个距离已经相当于中,高频声音信号的λ/2或n.λ/2了。此时,作单声道兼容收听的大多数听众,都能听出这种这种音质的变劣。 试验还说明:当某一频率的声音信号在左右声道间有6db以上的强度差时,则兼容放声的相位差不会引起明显的相位干涉现象,因而不会明显损害收听音质。 许多录音室反映如果不考虑单声道兼容放声,他们更愿意使用A/B制式来录制古典音乐,因为这种制式录

java视频播放器源代码

import java.awt.*; import java.io.*; import java.util.*; import javax.media.*; import javax.media.format.*; import javax.swing.*; public class VideoPlayer implements ControllerListener { Vector audioCapDevList = null; Vector videoCapDevList = null; CaptureDeviceInfo audioCapDevInfo = null; CaptureDeviceInfo videoCapDevInfo = null; MediaLocator audioCapDevLoc = null; MediaLocator videoCapDevLoc = null; Player audioPlayer; Player videoPlayer; public void initAudioCapDevLoc() { //这里可以填写其它的音频编码格式,具体请看AudioFormat类 audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat( AudioFormat.LINEAR)); if ((audioCapDevList.size() > 0)) { //或许有几个CaptureDevice,这里取第一个 audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0); audioCapDevLoc = audioCapDevInfo.getLocator(); } else { System.out.println("找不到音频采集设备"); System.exit(0); } } public void initVideoCapDevLoc() { //这里可以填写其它的编码视频格式,具体请看VideoFormat类 videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat( VideoFormat.YUV)); if ((videoCapDevList.size() > 0)) {

java实验报告总结

java实验报告总结 导语:在这次实训里,让我知道还有很多地方的不足,还有许多的技术等着我去摸索,等着我去学习。下面是由小编为你整理的java实验报告总结,欢迎大家阅读。 java实验报告总结篇一伴随着新年钟声的到来,我不知道我是否是应该高兴还是悲伤。因为伴随自己三个月的华迪实训即将结束。转眼之间三个月的华迪实训就这样在忙碌中过去了。通过此次短暂的java开发习,回顾一下自己这三个月的每一天,觉得过的十分的充实,每天都有一堆忙不完的事。因为你每天想起的第一件事情就是完成自己的项目模块,哪些地方不够,哪些需要修改。渐渐的发觉,自己对自己所担任角色的认知:从原先的学生到现在“程序员”的转变。“任何一个初具规模的软件都是要团队来配合的”这是我一向的认知。因为你再全能程序员也有出纰漏的地方,你程序写的再好,那也只是你一个人的程序。 因为对于程序来说,可读性、可理解性是一项衡量它是否优秀的一个标准。所以就有了我们6位成员的项目组。在项目组中,我担任组员这一角色,这相当于一个正规项目的“项目开发人员”,感觉自己身上的担子挺重,因为要配合其他组员的进度并完成自己任务从而使得项目能够成功地,完整地把它应有的功能实现。对于项目中遇到的困难,我觉得那就是经验不足,会遇到很多问题但也培养了我们上网搜

索查询,咨询老师同学的良好习惯,让我相信任何困难都有被解决的一天。 所以从整个项目来说,自己在编码上遇到的太棘手的问题都是大家集体解决。但是总的来说,这次课程设计对我很有帮助,让我获益匪浅,期间时间虽短但是也学到了不少的知识。在这次实训过程中,我发现平时学习的知识与实践环节所用到的有一定的差距,往往我觉得自己掌握的很好或者自认为熟练的技术却在此次实践环节中往往出问题,书本上的知识只提供方法的借鉴,实践中自己必须摸索出适合具体工作的方法,这一切都离不开钻研精神与勤学好问的精神。 总的来说,这次培训效果不错,对自己有一定的提升,这完全不同与学校的学习,因为它更加贴近工作,针对以后工作的内容作了很多实例的练习与工具的使用,为我们更快的加入工作提供的很好的前提。并且在这次实训里,让我知道还有很多地方的不足,还有许多的技术等着我去摸索,等着我去学习。最后,感谢公司的几位老师辛勤的工作,我们的开心来自你们的热心与关心。祝你们工作顺利。 java实验报告总结篇二此次只实习了短短的三周。虽说时间很短,但其中的每一天都使我收获很大、受益匪浅,它不但极大地加深了我对一些理论知识的理解,不仅使我在理论上对Java有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对

Java音乐播放器源代码即结果显示

简单的音乐播放器一、程序代码: import java.io.File; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.FileDialog; import java.awt.Frame; import java.awt.GridLayout; import https://www.360docs.net/doc/c812458598.html,bel; import java.awt.List; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; public class Example extends Frame { private static final long serialVersionUID = 1L; boolean isStop = true;// 控制播放线程 boolean hasStop = true;// 播放线程状态

声音播放的几种妙招

声音播放的几种妙招 神木职教中心杜国金 电化教学或者叫多媒体教学已经被广大教师普遍采用,它利用声音,图片,视频等资料使得课堂生动活泼,更好的表现一堂课的内容,使学生学习兴趣大大提高。而在这几种媒体中,声音播放是使用频率最高的。比如语文课播放朗读带,英语课播放示范带,音乐课播放音乐欣赏曲子,体操比赛排练等。以前教师们大都使用录音机,然而由于现在很多音频资源已经没有录音带,而是以网上mp3的形式存在,这样传统录音机就基本上被淘汰。现在很多教师都采用网上下载音频资料存放在笔记本上,上课时再携带一个有源音箱,将它们连接在一起使用。虽然效果不错,但是笔记本未必人人都有。而且笔记本加一套有源音箱体积比较大,不便携带。更何况拿笔记本只是播放音频,显然是杀鸡用了宰牛刀,并且必须有电才行。综合以上问题,本人经过思考以及实际试用,总结出以下三种巧妙的播放音频的办法。 一、mp3+有源音箱 这个方法是对电脑加有源音箱的改进,抛弃了电脑,使得整套体积大大减小,便于携带,而且mp3几乎人人都有,且mp3本身就是专门播放音频的设备,音值不错。使用方法也很简单,将要播放的音频资料存入mp3,再将有源音箱音频输入插头插入mp3的耳机插孔,这样就可以播放了。有的读者看到这可能会想,把有源音箱换成无源音箱不就更可以减小体积了吗,实际使用发现不能换成无源音箱,有源音箱和无源音箱的区别是有源音箱要外接电源,内部有功率放大电路,因此音量较大。而无源音箱没有放大电路,直接使用音源带动,因此音量很小无法满足整个教室的需要。此方法的优点:音质好,便于操作。缺点:体积仍然较大,而且必须要有电,一旦遇到停电或没有电的环境就无法使用。 二、复读机 几年前复读机还很流行,很多人都有,而随着mp3、mp4等网络播放器的流行,复读机渐渐被淘汰,然而本人发现用复读机在教室等较小环境中播放音频还是不错的。复读机一般使用4节电池6伏电压,音量较大。但这里存在一个问题,复读机使用的是磁带,而现在很多音频资源是mp3形式的,如何让复读机播放mp3音频呢,那就要把mp3声音首先录制到磁带上,录制时不能使用外录,效果太差。要实现电脑与复读机之间的内录,必须使用一根内录线,这根线两头一样都是3.5mm插头,也就是普通耳机插头,有的电器或音响门市有卖,动手能力强的也可以自己制作。用两根线将两个插头芯线和地线一一对应焊接即可。然后将内录线一头插在电脑音频输出,另一头插在复读机mic也就是麦克风插口或音频输入插口,然后电脑播放音频并且音量放大,复读机录音。录完后试听效果,如果音量太大或者太小调整电脑播放音量重新录制。此方法的优点:体积最小,携带方便,而且由于使用电池,因此不受有无电源的影响。缺点:录制过程较麻烦,而且音量放大时音值不佳。 三、手机+喊话器 每年新生入校后都要进行军训,军训时每个班都买了喊话器,然而军训结束后,喊话器就没有用武之处了,闲置也是一种浪费。另一方面手机人人都有,而且基本上都具有mp3播放功能,把网上的mp3音频下载到手机就可以直接播放,只是音量较小不足以在整个教室使用。现在将这两样东西组合使用,就是很好的搭配。上课前把要播放的mp3下载到手机,使用时用手机播放,用喊话器放大即可。此方法的优点:简单易行,音量较大,而且不使用外接电源。缺点:喊话器音值较差。 以上方法是经本人思考和实际使用后得出的经验结论,既方便又把某些闲置的东西利用起来,比较实用。大家可以选择适合自己的方法,以改进自己的教学。

java视频播放器几种

package com.bird.jmf; import java.awt.*; import java.awt.event.*; import java.io.*; import https://www.360docs.net/doc/c812458598.html,.*; import javax.swing.*; import javax.media.*; // 视频播放程序 public class VideoPlayDemo extends JFrame { private Player player; // 播放器对象 private Component visualMedia; // 视频显示组件 private Component mediaControl; // 视频播放控制组件 private Container container; // 主容器 private File mediaFile; //媒体文件 private URL fileURL; //媒体文件URL地址 public VideoPlayDemo() { // 构造函数 super("视频播放程序"); //调用父类构造函数 container = getContentPane(); //得到窗口容器 JToolBar toobar = new JToolBar(); //实例化工具栏 JButton openFile = new JButton("打开媒体文件"); //实例化按钮 toobar.add(openFile); //增加按钮到工具栏 JButton openURL = new JButton("打开网络地址"); toobar.add(openURL); container.add(toobar, BorderLayout.NORTH); //设置工具栏 openFile.addActionListener(new ActionListener() { //打开文件按钮事件处理 public void actionPerformed(ActionEvent event) { JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器 fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件打开模式为仅打开文件 int result = fileChooser.showOpenDialog(VideoPlayDemo.this);//显示对话框 if (result == JFileChooser.APPROVE_OPTION) { //得到用户行为 mediaFile = fileChooser.getSelectedFile(); //得到选择的文件 }

JAVA实验报告一

Java语言程序设计实验报告一 班级:姓名:学号: 一、实验教学目的与基本要求 Java程序设计的实验是Java程序设计课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过上机加强学生的动手能力,掌握常用Java开发环境的使用方法,培养学生分析问题、解决问题、应用知识的能力和创新精神。充分放手让学生自行设计、自主调试,真正培养学生的实践动手能力,全面提高学生的综合素质。 本课程是一门程序设计语言课程,通过本课程的学习,学生能够掌握Java 语言程序的基本特点、基本编程方法和基本开发技巧,培养学生阅读、分析、设计和调试Java语言的能力,并具备一定的面向对象程序设计思想。 本课程的主要任务是在已学习的编程语言基础上,讲述Java语言的数据结构和语法规则;基本控制结构和编程技巧;Java语言面向对象的特点、编程方法和程序设计思路;Java语言的GUI程序和文件及I/O流的编程方法;能够正确配置Java开发环境,并使用相关的编辑、编译、调试、运行命令。 (1)掌握Java语言的编程技巧,能够独立进行面向对象的开发能力。 (2)具有根据编程需求独立查询Java类库文档及相关资料,完成系统的能力。 (3)具有分析、寻找和排除程序中常见问题的能力。 二、实验内容与收获 (1)Java的安装与配置。熟悉语言环境及简单程序设计的使用练习,正确配置Java 开发环境(Eclipse 集成开发环境的安装、配置与使用) a)安装JDK Sun公司为所有的Java程序员提供了一套免费的Java开发和运行环境。 可以通过IE或Netscape浏览器浏览网址:https://www.360docs.net/doc/c812458598.html,/j2se,根据提示

vc音频播放器(含源文件)

课程设计说明书题目:音频播放器 成绩: 时间:年月日至年月日

课程设计任务书 题目音频播放器 主要内容: 音频播放器,是目前用户选择播放任意格式的音频文件的软件,如酷狗、QQ音乐等。一般的音频播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。 在此次设计的音频播放其中,可以实现对音频文件的打开、播放、暂停、停止、上一曲/下一曲、歌词显示等操作。对于播放器的界面,可以最小化,并显示到托盘。处于最小化的状态下,依然可以对正在播放的文件进行上述操作。在此播放器中,最具特点的是在各个操作按钮以及整个界面上添加了位图和能将窗口最小化。播放器窗口的建立,也有区别与传统的有菜单显示的窗口。最小化到托盘后,仍可以进行操作,也可以选择退出。对于实现播放、停止、上一曲/下一曲、添加文件,都是利用CMidi这个类来存放实现这些功能的函数。需要的时候调用就可以。为了是界面更美观,让人看起来更舒服,加入了位图背景。目前还没有实现用户根据自己的喜好来更改背景图案。 主要参考资料: [1]姬涛、周启生,《计算机程序设计基础(上册)》[Z],北京:中国传媒大 学出版社,2010 [2]谭浩强,《C程序设计教程》[Z],北京:清华大学出版社,2007 [3]任哲,《MFC Windows应用程序设计(第二版)》[Z],北京:清华大学出 版社,2007 完成期限: 指导教师签名: 课程负责人签名: 年月日 摘要 音频播放器,是目前用户选择播放任意格式的音频文件的软件,如酷狗、QQ音

乐等。一般的音频播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。 在此次设计的音频播放其中,可以实现对音频文件的打开、播放、暂停、停止、上一曲/下一曲、歌词显示等操作。对于播放器的界面,可以最小化,并显示到托盘。 处于最小化的状态下,依然可以对正在播放的文件进行上述操作。在此播放器中,最具特点的是在各个操作按钮以及整个界面上添加了位图和能将窗口最小化。播放器窗口的建立,也有区别与传统的有菜单显示的窗口。最小化到托盘后,仍可以进行操作,也可以选择退出。对于实现播放、停止、上一曲/下一曲、添加文件,都是利用CMidi这个类来存放实现这些功能的函数。需要的时候调用就可以。为了是界面更美观,让人看起来更舒服,加入了位图背景。目前还没有实现用户根据自己的喜好来更改背景图案。 通过这次课程设计,更加巩固了我们所学的知识。 目录 摘要..............................................................II 第一章课题背景和概述 (1)

基于java的音乐播放器的设计源代码+实验报告

主类M U S I C P L A Y E R类:import .*; 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; private 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("d:\\"); private ImageIcon iconPre = new ImageIcon("d:\\"); private ImageIcon iconNext = new ImageIcon("d:\\"); private ImageIcon iconPause = new ImageIcon("d:\\"); public static void main(String[] args) { new MusicPlayer(); } public MusicPlayer() { init(); } public void init() { frame = new JFrame(); ("音乐播放器"); (400, 300); (false); (null); ; menubar = new JMenuBar(); menuFile = new JMenu("文件");

PowerPoint中插入声音的几种方法

PowerPoint中插入声音的几种方法 (一)将某段音乐作为整个演示文稿的背景音乐 如果用PowerPoint制作电子相册、画册时,人们不仅仅要欣赏精美的画面,还希望听到美妙动听的音乐。我们可以在第一张幻灯片上进行如下操作: 1.准备好一个音乐文件,可以是WAV、MID或MP3文件格式。 2.执行“插入”菜单下的“影片和声音”选项中的“文件中的声音”,插入你选择的声音文件,同时弹出对话框,询问是否在放映幻灯片时自动播放该声音文件,选择“是”。则幻灯片上有一个“喇叭”图标出现。 3.用鼠标右击该“喇叭”图标,在弹出的快捷菜单中选择“自定义动画”。 4.在“自定义动画”对话框的“多媒体设置”选项卡中,作如下设置: 播放时:选“继续幻灯片放映” 停止播放:选“在XX张幻灯片之后”,具体在第几张幻灯片之后,要视你的相册或画册中的幻灯片张数而定,比如总张数为20,则此处输入“20”。 然后,单击该选项卡上的“其他选项…”按钮,在弹出的对话框中选择“循环播放,直到停止”,然后依次单击“确定”按钮,关闭

各对话框。 在用PowerPoint制作课件时加入解说词 如果我们希望在播放到某一张幻灯片时,自动播放该张幻灯片的解说词,可以采用如下的方法: 1.首先录制好该张幻灯片的解说词,并保存为声音文件。 2.选择你要加入解说词的幻灯片作为当前操作的幻灯片,执行“幻灯片放映”菜单下的“幻灯片切换”命令。 3.在弹出的“幻灯片切换”对话框中,进行如下操作: 在“声音”的下拉列表中,选择“其它声音…”,在随后出现的“添加声音”对话框中选择你已录制好的声音文件,单击“确定”,关闭“添加声音”对话框,然后单击“应用”,关闭“幻灯片切换”对话框。 如果我们希望演示者自己根据情况决定是否播放声音,可以制作交互按钮来控制声音的播放或停止。这一方法在课件制作中经常使用。具体的操作步骤如下: 1.首先录制好该张幻灯片的解说词,并保存为声音文件。 2.选择你要加入解说词的幻灯片作为当前操作的幻灯片,在幻灯片上加入两个自定义按钮,并分别在上面加入文字“播放声音”和“停止播放声音”。 3.用鼠标右击“播放声音”按钮,在弹出的快捷菜单中选择“动作

Java实现视频网站的视频上传及视频播放功能

视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash 制作的播放器来播放该文件.项目中用制作的播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。?? ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。 1.能支持的格式 ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等) 2.不能支持的格式 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg 能解析的)格式. 实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具. 数据库 实例所需要的数据库脚本 drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media( id int not null primary key auto_increment comment '主键' , title varchar(50) not null comment '视频名称' , src varchar(200) not null comment '视频存放地址' , picture varchar(200) not null comment '视频截图' , descript varchar(400) comment '视频描述' , uptime varchar(40) comment '上传时间' );

音乐播放器Java课程设计报告

课程设计报告课程设计题目:java 音乐播放器 学生姓名: 专业:XXXXXXXXXXXXX 班级: 指导教师: 20XX 年X 月X 日

、课程设计目的 1、编程设计音乐播放软件,使之实现音乐播放的功能。 2、培养学生用程序解决实际问题的能力和兴趣。 3、加深java 中对多媒体编程的应用。 二、课程设计的要求 利用学到的编程知识和编程技巧,要求学生: 1、系统设计要能完成题目所要求的功能,设计的软件可以进行简单的播放及其他基本功能。 2、编程简练,可用,尽可能的使系统的功能更加完善和全面 3、说明书、流程图要清楚。 三、课程设计内容 1、课程设计的题目及简介 音乐播放软件要求: 有图形界面,能播放MP3 歌曲,有播放列表,前一首、后一首等常用播放软件功能。 2、设计说明 主要运用多媒体编程、图形界面、数组及循环进行设计,从而实现简单的音乐播放。 public MyMusicPlayer() :实现窗口的成员方法 publi c void run() :实现改变歌曲的播放状态的成员方法 :实现对声音的加载 public AudioClip loadSound(String ) :实现对按钮的监听 public void mouseClicked(MouseEvent e) public void itemStateChanged(ItemEvent arg0) :返回一个AudioClip 对象

3、程序流程图 * 出现界面 * 选择播放歌 曲 4、程序清单 import java.awt.*; import javax.swi ng.*; import java.applet.*; import java.awt.eve nt.* import java .n et.*; public class MyMusicPIayer exte nds Thread impleme nts MouseListe ner,ltemListe ner{ JFrame Mai nF rame =new JFrame( "MyMusicPlayer" ); // 定义主窗体 JLabel songname =new JLabel(); //用标签显示状态 JButton last =new JButto n(); JButt on play =new JButt on();

几种立体声录音的拾音方法

几种立体声录音方法 一、A/B制式首先我来介绍一下A/B制式,A/B制式是最早采用的录制立体声的方法,有人形象的称它为拉开距离式拾音方法。 两支传声器在舞台上或者录音室里拉开 2.0- 3.5米的距离,传声器可以是无方向性的也可以是心形的,它们平行地对准乐队,也可以稍微向左右两侧张开一些。 对A/B制式拾音来说,每一件乐器(声源)到达两支传声器处的声音信号之间,既存在强度差也存在时间差。 强度差是由传声器的指向性图形以及声源到达两支传声器的距离不同所形成的。 在这种录音制式中,强度差和时间差对定向的作用迭加在一起了。 很明显,对于不再中轴线上的声源,前导的声道始终是声级较高的声道。 心理声学的研究,时间差比强度差更加的重要。 这种制式的特点是简单,对所使用的一对传声器,在性能和技术指标配对上要求并不太严格。 这种拾音制式有两个明显的缺陷: 一是存在中间空洞,中间稀疏或者称为中间后退现象。 就是说当重放用A/B制式所录的音乐的时候,听众往往回感到中间部位乐器的声象变弱,或者这些乐器的声象在中间部位变得稀疏起来,而更多的乐器声象向左右扬声器方向靠拢,使得两端乐器声象密集起来。 有时,也使听众感到中间部位的声象向舞台后部退去。 对于这种缺陷,可以借助两种方法来改善。

一种方法是在录音的时候增加一个中间传声器,把它的信号放大,再分别分配到左右声道中去。 另外一种方法是再重放时增加一个中置扬声器,而将左右声道信号各分一部分给此扬声器放声。 上述缺陷在两支当传声器拉开 2.5- 3.5米以上时,将变得相当明显。 当然,放声时如果将两支扬声器朝向稍微向听音室中间偏转一点,中间空洞现象也有些改善。 ~~~~~~一句老话~~~~办法是人想出来的嘛!A/B制式还有一个很明显的缺陷就是,它的录音在作单声道兼容重放时,将存在相位干涉现象,因而兼容度很低~~~~~对于中国现在的电视基于单声道来说,就应该注意咯!这是很容易加以说明的,当作单声道兼容重放时,必须把左右声道信号迭加在一起才能形成单声道信号。 由于左右内同一声音信号中存在时间差,也就是存在相应的相位差,因而在迭加时,必然会使某些频率的信号抵消或者部分抵消,从而使重放音质变恶劣。 一些专门的试验结果表明,A/B制式两支传声器拉开仅30厘米的时候,就已经出现明显的相位抵消现象,因为这个距离已经相当于中,高频声音信号的λ/2或n.λ/2了。 此时,作单声道兼容收听的大多数听众,都能听出这种音质的变劣。 试验还说明: 当某一频率的声音信号在左右声道间有6db以上的强度差时,则兼容放声的相位差不会引起明显的相位干涉现象,因而不会明显损害收听音质。

《Java范例开发大全》

下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人

实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException)

java实训总结

实习报告 学生姓名:陈育伟 学号:20096361 专业班级:信息与计算科学1班 实习单位:高博教育 实习时间:2012-7-1——2012-7-14 2012年 7 月 14 日

一、实习目的 通过对java语言、JavaWeb、Oracle数据库应用设计及SQL语言的复习和锻炼,并且通过使用MyEclipse 开发平台设计库存管理系统项目,以达到充分熟悉开发平台及其应用设计。同时掌握并实践软件项目设计规范及其开发流程:需求分析、概要设计、详细设计、代码编写、系统测试及软件手册编写,以便提前适应软件公司开发流程、环境和工作要求进一步了解java开发的相关知识,掌握java开发的基本技术,丰富java开发的实战经验。学习SQL的基础知识及正确的运用方法,和有用的相关技术,提高自己的工作效率。通过实习,培养我们综合运用已学知识Java语言的面向对象编程能力;培养我们动手能力;培养我们良好编程规范、编程方法;以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力;增强自己的团队协作意识,了解软件开发的思考角度和主要流程。为毕业之后能够更快地进入工作状态并且能够更好的工作,打好一定的基础。 二、实习主要流程 1、公司管理规则,程序员素质,程序员编码规范; 2、需求开发与管理; 3、面向对象分析与设计,面向对象编程的特性; 4、javaSE、javaWeb 、页面设计-JSP页面; 5、数据库设计、SQL应用; 6、软件需求分析与设计; 7、项目实战 三、实习内容 Oracle数据库 数据库是数据的结构化集合。计算机是处理大量数据的理想工具,因此,数据库管理系统在计算方面扮演着关键的中心角色,或是作为独立的实用工具,或是作为其他应用程序的组成部分。 Oracle服务器还有一套实用的特性集合,这些特性是通过与我们用户的密切合作而开发的。在我们的基准测试主页上,给出了Oracle服务器和其他数据库管理器的比较结

音频播放器需求分析

项目名称 基于C++的音频播放器 系统需求分析规格说明书 组长:张家富 1043041219 组员:杨唯 1043041444 汤志豪 1043041027 李亮亮 1043041121 赵小波 1043041234 刘钰江 0843041275 二○一二年四月

目录 1引言 (3) 1.1 编写目的 (3) 1.2 项目背景 (3) 1.3 定义 (3) 1.4 预期的读者和阅读建议 (4) 2任务概述 (5) 2.1 系统目标 (5) 2.2 运行架构 (5) 3系统需求分析 (6) 3.1 播放器基本控制需求 (6) 3.1.1 音量控制 (7) 3.1.2 静音控制 (8) 3.1.3 上一首/下一首控制 (8) 3.1.4 播放控制 (8) 3.1.5 暂停控制 (9) 3.1.6 播放文件控制 (9) 3.2 播放列表管理需求 (9) 3.2.1 播放歌曲文件控制 (10) 3.2.2 添加歌曲文件控制 (11) 3.2.3 删除歌曲文件控制 (11) 3.3 播放器友好性需求 (12) 3.3.1视觉外观显示 (12) 3.3.2歌曲时间显示 (12) 3.3.3播放状态显示 (12) 3.3.4 歌曲文件信息显示 (13) 4性能需求 (13) 4.1 数据精确度 (13) 4.2 时间特性 (13) 4.3 适应性 (13) 5 运行需求 (13) 5.1 用户接口 (14) 5.2 软件接口................................................................................................................................ 6环境需求........................................................ 7产品质量需求..................................................... 7.1 故障分析................................................................................................................................ 7.2 系统利用率............................................................................................................................ 7.3 可靠性.................................................................................................................................... 8 附录............................................................

相关文档
最新文档