如果自学java,在网上听2005年的java课程设计题目视频有没有影响?

6. 编写第一个Java程序_零基础学习Android开发系列课程_腾讯视频迄今为止 最好的IT 图书阅读平台
从来只是简单
乱序学习知识是片海洋,我们给你一叶扁舟.
众筹课程赋予灵魂让知识野蛮生长,学并给予着.
最佳阅读体验阅读是惬意, 学习是愉悦, 行云流水,自然而然.
在线教育 噱头?
重点不是在线
《 笨方法学 Ruby 》(Learn Ruby The Hard Way)是 Zed Shaw 编写的一本Ruby 入门书籍。适合对电脑了解不多,没有学过写程序,但对写程序感兴趣 ...
2198 人学习
The Django Book 可以说是Django的红宝书,是每一个学习Python并且要学习Django的程序员必须看的一本书。
本书从Django入门开始,逐步深入到D ...
1018 人学习
这本小教程是学习AngularJS的敲门砖,对AngularJS一无所知的小白可以用它来快速起步!
1197 人学习
这是一份指南,在 PHP 程序员遇到一些常见低层次任务但不明确最佳做法(由于 PHP 可能提供了多种解决方案)之时,为其建议最佳实践。 例如:连接数据库是一个常见任务,PHP 中提 ...
1861 人学习
Git 是Linux之父Linus Torvalds为了开发linux内核更加方便而开发的一套版本控制系统。从2005年以来迅速风靡开源世界。小到一个开发工作室,大到像Google ...
1464 人学习
本书不仅帮助读者迅速掌握JavaScript基础知识和核心技术,而且通过实例讲解如何将这些知识和技术理解应用到实际工作中,提升编程能力,以简洁、优美的代码开发出功能强大且更易于维护 ...
2594 人学习
入门课程的关键字是“入门”,入门要快!当然,还有免费!
逗比课程必须有,轻松娱乐不能缺!无趣如何继续?
PC移动全能看,随时随地阅读,么么哒!
{$ $select.selected.name $}
{$ $select.selected.name $}
清除控制台准备自学Java,跪求大神推荐好的书籍和学习视频,同学推荐的远标教育的视频还可以,可惜的是没有全部给我_百度知道
准备自学Java,跪求大神推荐好的书籍和学习视频,同学推荐的远标教育的视频还可以,可惜的是没有全部给我
我有更好的答案
很多的培训机构都会录制比较完整的入门级视频教程提供下载的,单是想要入门的话下载看这些就够了,如果要深入的学习可以参考他们列出来的教学提纲去网络搜索
兄弟 连Java战 狼班
程序员培训:400-700-1307
主营:程序员培训专注php、Java、UI设计、云计算、python、HTML5培训
网上找吧,应该好多网盘
自学Java视频笳妙送
链接: 密码:0jkf
其他1条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。早就听说JAVA对音频视频有支持,现在就转载一篇文章看看
桌面PC的性能日益提高,虚拟机的优化技术也不断获得突破,这一切使得用Java处理实时信号成为可能。本文将通过和构造一个支持实时、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)也是统一的。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,脉冲编码调制)、等;通道数量;取样率;帧速率;等等。
  音频数据可以用多种格式保存到磁盘上。在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图标库下载(例如http://developer.java.sun.com/developer/techDocs/hi/repository/)。
JButton playBttn = new JButton();
addBttnIconText(playBttn, "播放", "Play24.gif");
playBttn.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(ActionEvent e) {
playClick(e);
  当用户点击一个按钮,与该按钮对应的xxxClick()事件句柄函数开始执行。播放器共有5个按钮,相应的事件句柄也有5个:playClick(“播放”按钮),stopClick(“停止”按钮),pauseClick(“暂停”按钮),prevClick(“后退”按钮),nextClick(“前进”按钮)。
  例如,点击“播放”按钮时,playClick()句柄首先获得JList中选中的文件,然后调用TestBase实例中的playFile()辅助方法播放文件。playClick()句柄的代码如下所示,注意它把音乐文件及其所在目录连接起来的方法是中立的。
void playClick(ActionEvent e) {
String fileToPlay = (String)
filenamesList.getSelectedValue();
if (fileToPlay != null) {
pBase.playFile(searchDir +&
System.getProperty("file.separator") + fileToPlay);
  stopClick()和pauseClick()方法分别调用TestBase中的stop()和pause()方法。prevClick()和nextClick()句柄的任务稍微复杂一点。首先,它们要调用TestBase中的stop()方法中止当前的播放动作,然后选中JList中当前项目的前一项或后一项,最后调用playClick()播放新选中的音乐文件,如下所示。
void prevClick(ActionEvent e) {
pBase.stop();
filenamesList.setSelectedIndex( filenamesList.getSelectedIndex() -
playClick(e);
void nextClick(ActionEvent e) {
pBase.stop();
filenamesList.setSelectedIndex((filenamesList.getSelectedIndex()+1)&
% curPlayListLength);
playClick(e);
  五、播放音乐
  TestBase类包含主要的播放逻辑。例如,当用户点击“播放”按钮,TestBase类中的play()方法开始执行。
public void play() {
if ((!stopped) || (paused))
if (playerThread == null) {
playerThread = new Thread(this);
playerThread.start();
try { Thread.sleep(500);&
} catch (Exception ex) {}
synchronized(synch) {
synch.notifyAll();
  play()方法首先确认播放器当前已被终止播放,而不是暂停播放。然后它检查这是不是第一次调用play():如果是,则创建一个playerThread线程。我们用一个独立的线程负责音乐播放,这样,无论播放器正在读取文件、解码,还是正在把音频数据输出到扬声器,用户界面总是可操作的。
  启动线程之后,play()方法锁定静态synch同步对象,将stopped标记设置为false,然后通知正在等待的线程(playerThread线程在开始播放音乐文件之前,会等待静态synch对象上的提醒通知)。
  playerThread线程启动后,它的run()方法开始运行。这个线程一直执行while循环,直到threadExit标记变成true为止。在while循环中,线程首先等待“开始播放”的信号(当用户点击“播放”按钮时),然后播放音乐。表二列出了描述播放器状态的各个标记及其含义。
public void run() {
while (! threadExit) {
waitforSignal();
if (! stopped)
playMusic();
  playMusic()方法利用JavaSound
API播放当前选中的文件。首先要通过AudioSystem类获得一个AudioInputStream。然后,利用AudioInputStream的getFormat()获知音频数据的格式。在此基础上,我们试图通过getLine()方法获得一个支持该种格式的SourceDataLine。如果要播放的是WAV文件,现在我们已经有了非压缩的PCM格式的音频数据,可以用line对象开始播放音频。
ais= AudioSystem.getAudioInputStream(new
File(fileToPlay));
if (ais != null) {
baseFormat = ais.getFormat();
line = getLine(baseFormat);
  如果音频数据是压缩格式的,如或Ogg,必须先进行一次转换——把MP3/Ogg解码成PCM。解码主要包括三个步骤:
  1、创建一个解压缩结果的定制AudioFormat(PCM编码),但保留和原压缩流一样的取样率、通道信息等。
  2、创建一个AudioInputStream把原来的AudioInputStream转换成新的AudioFormat格式。
  3、获得一个处理解码后格式的SourceDataLine。
  如下所示:
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(),
baseFormat.getChannels(),
baseFormat.getChannels() * 2,
baseFormat.getSampleRate(),
ais = AudioSystem.getAudioInputStream(decodedFormat, ais);
line = getLine(decodedFormat);
  getLine()方法的返回值是一个与参数中指定的AudioFormat兼容的SourceDataLine。如果不能获得兼容的SourceDataLine,getLine()返回null。在getLine()方法中,我们首先创建和填充一个DataLine.Info结构,调用AudioSystem.getLine()方法,将info结构传递给AudioSystem类工厂。
private SourceDataLine getLine(AudioFormat audioFormat) {
SourceDataLine res =
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
catch (Exception e) {
  准备好AudioInputStream和SourceDataLine之后,playMusic()剩余的任务已经很简单:用一个循环从AudioInputStream读取数据,然后写入到SourceDataLine。
int inBytes = 0;
while ((inBytes != -1) && (!stopped) &&
(!threadExit)) {
inBytes = ais.read(audioData, 0, BUFFER_SIZE);
catch (IOException e) { e.printStackTrace(); }
if (inBytes &= 0) {
int outBytes = line.write(audioData, 0, inBytes);
if (paused) waitforSignal();
  六、支持更多的音频格式
  假设已经在test目录下准备好了所有的.java文件,执行javac *.java即可顺利编译,执行java
test.TestPlayer就可以启动图一的播放器。但现在播放器只能播放有限的文件,因为JDK实现的JavaSound只支持WAV、AIFF和AU。但是,我们可以用JavaSound
SPI为播放器增加对MP3和Ogg Vorbis的支持,只要下载和安装相应的插件Jar文件即可。
  Java版的Vorbis解码器可以从JavaCraft(http://www.jcraft.com/jorbis/)下载,最新版本是0.0.12。另外还要有一个JOrbis解码器的SPI封装器,这是使解码器在JavaSound下透明地运行所必需的,可以从http://www.javazoom.net/vorbisspi/vorbisspi.html下载。VorbisSPI的最新版本是0.7。
  对于MP3支持,JavaZoom也提供了一个兼容JavaSound的纯Java解码器,称为JavaLayer(http://www.javazoom.net/javalayer/javalayer.html),最新的版本是0.2.0。注意要下载的是JavaLayer的J2SE版,不要下载J2ME版。
  解开下载得到的文件,把所有Jar文件放到播放器所在目录。用下面的命令启动播放器:java -classpath
.;./jogg-0.0.5../jorbis-0.0.12../jl020../mp3sp../vorbisspi0.6.jar
test.TestPlayer。如果你下载的解码器版本不同,启动命令也要作相应地改动。把SPI扩展插件加入到了播放器的classpath之后,JavaSound就会在运行时自动使用它们。
下面是一段播放视频的源代码
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java自学课程 的文章

 

随机推荐