当前位置:文档之家› Java_applet_音频播放器

Java_applet_音频播放器

Java_applet_音频播放器
Java_applet_音频播放器

1课题需求分析

在Java2平台出现前,Java语言只能处理电话音质的声音,以单声道8KHz的采样频率存储为u-lawAU文件。

Java2平台增加了AIFF、WAV以及三种MIDI文件类型的支持。

所支持的三种MIDI文件格式为MIDI文件类型0、MIDI文件类型1以及RMFo

2 课程解决方案

本程序有三个文件:是主文件,中的AppletSoundLoader类继承Thrwad负责为声音文件获得AudioClip对象并把它加到AppletSoundList中去;中定义的AppletSoundList 继承自Hashtable,提供getClip (String)和putClip(AudioClip,String)方法,分别从哈希表中取得AudioClip对象和放置AudioClip对象。

其结构是AppletSoundList中用AppletSoundLoader来装载制定URL的声音文件,AppletSoundLoader 负责为声音文件产生AudioClip对象并添加到AppletSoundList中。

在SoundApplet 中则只是利用AppletSoundList 类。

3 课题实现

主要的声音文件类型如下:

AU (扩展名为AU或SND):适用于短的声音文件,为Solaris和下一代机器的通用文件格式,也是Java平台的标准音频格式。AU类型文件使用的三种音频格式为:8位u-law类型(通常采用频率为8KHz), 8位线性类型以及16位线性类型。

WAV (扩展名为WAV):由Microsoft和IBM共同开发,对WAV的支持已经被加进Windows95并且被延伸到Windows98。WAV文件能存储各种格式包括u-law、a-law和PCM (线性)数据。它们儿乎

能被所有支持声音的Windows应用程序播放。

AIFF (扩展名为AIF或IEF)音频互换文件格式是为Macintosh计算机和Silicon Graphics (SGI)计算机所共用的标准音频文件格式。AIFF和AIFF-C儿乎是相同的,除了后者支持例如u-law 和IMA ADPCM类型的压缩。

MIDI (扩展名为MID)乐器数字接口MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器声卡之类的设备。

Java声音引擎支持两种MIDI文件类型:

MIDI类型0文件-包含仅仅一个序列,所有相关的乐器部分被包含在同一个逻辑“磁道”上。

MIDI类型1文件-包含多重的“磁道”使得不同的乐器被逻辑地分开,从而使对声音的操作和重组更加容易。

RMF (扩展名为RMF)混合音乐格式是山Beatnik设计出来的混合文件类型,通过交互设定将MIDI和音频采样封装在一起。RMF好比是一个所有音乐相关文件的容器。RMF也包含对有关版权的详细文件说明的支持。RMF文件可以包含多个由不同艺术家创作的存储为MIDI类型或音频采样类型的作品,每个都关联着相关的版权信息。

Java中用于播放声音的AudioClip接口提供下列机能:播放、循环、停止。恢复和播放声音最简单的方法是通过Applet类的play ()方法。调用play ()方法有如下两种方式:play ()带有一个参数,一个URL对象,装载并演奏储存在URL处的声音片段。Play ()带有两个参数,基本URL和文件夹路径名,装载并演奏声音文件。第一参数经常是对getCodeBase()或DocumentBase ()的调用。

play () 一旦被调用立刻开始恢复和播放声音。如果声音文件不能被查找,将不会有出错信息,仅仅是沉默。启动和停止声音文件,或循环播放,必须用applet的getAudioClip方法把它装载进入AudioClip对象,类似上面play ()方法的参数,getAudioClip方法要用一个或两个参数,当作播放的指示。第一个或唯一的一个参数是URL参数,用来指示声音文件的位置,第二参数是文件夹路径指针。

代码如下:

import

import

import class SoundApplet extends J Applet implements ActionListener,

ItemListener { AppletSoundList soundList;

String auFile = M sound\\H;

String aiffFile = n sound\\flute+hrn+H;

String midiFile = "soundW";

String rnifFile = H sound\V;

String wavFile = "soundW";

String chosenFile;

AudioClip onceClip, loopClip;

JComboBox formats;

JButton playButton, loopButton, stopButton; boolean looping = false;

public void init() {

String [] fileTypes = {auFile,

aiffFile,

midiFile, rnifFile, wavFile);

formats = new JComboBox(fileTypes);

(0);

Loopdd(controlPanel);

startLoadingSounds();

}

public void iteniStateChanged(ItemEvent e) {

chosenFile = (String)();

(chosenFile);

}

void startLoadingSounds() {

onceCIip = (chosenFile);

0;(true);

showStatus(H Playing sound n + chosenFile + H.H);

if (onceCIip == null) {

showStatus(H Sound ” + chosenFile + n not loaded yet.n);

return;

)

if (loopClip == null) { showStatus(H Sound H + chosenFile + H not loaded yet.”);

} return;

}

return;

}

}

}

?

import

import AppletSoundLoader extends Thread {

J Applet applet;

AppletSoundList soundList;

URL baseURL;

String relativeURL:

public AppletSoundLoader(JApplet applet,

AppletSoundList soundList,

URL baseURL,

String relativeURL) {

=applet;

=soundList;

=baseURL:

=relativeURL:

setPriority(MIN_PRIORITY); start();

}

public void run() {

AudioClip audioClip = (baseURL. relativeURL);

(audioClip, relativeURL);

}

}

import

import and holds a bunch of audio files whose locations are specified class AppletSoundList extends { J Applet applet;

URL baseURL;

public AppIetSoundList(JApplet applet. URL baseURL) { super(5); 〃初始化哈希表的容疑为5 =applet;

=baseURL:

}

public void startLoading(String relativeURL) { new AppletSoundLoader(applet, this,

baseURL, relativeURL):

}

//通过相对URL从哈希表中获得AudioClip public AudioClip getClip(String relativeURL) { return (AudioClip)get(relativeURL);

}

//将AudioClip对象放进哈希表,键值为relativeURL public void putClip(AudioClip clip. String relativeURL) { put(relativeURL. clip);

}

}

4课题运行及调试

运行结果入下图所示:按下“Loop”时,显示如下图,自动循环播放文件。

相关主题
文本预览
相关文档 最新文档