作者:蝙蝠vs堕落 编辑:violet
java的声音处理
数字音频格式有很多种,其质量与采样频率和采样精度两个参数有关。频率的表示单位为赫兹〔hz〕,它表示每秒采样次数。采样频率越高,音质就越好。采样精度为每次采样所存储的数据数量,它决定每个数字信号所能够表示的离散振幅的数量。存储每个样本的数据越多,音质就越好。但是高品质的声音需要占用大量的内存和磁盘空间。考虑到网络带宽,在internet连接上传输就需要花费很长的时间。对于applet来说,保证声音文件的最小化是极为重要的。
java能够支持以下四种声音格式:
◆au
◆aiff
◆wave
◆midi
第一种声音格式au为以前的java 1.1版本支持的唯一的声音格式。采样频率为8000赫兹,采样精度为8位。aiff和wave与au格式一样,都用来表示数字化的声音。其中,wave格式提供了更宽范围的音质。midi格式专用于音乐,并且以音符与乐器而不是数字化的声音来描述声音的。
关于声音的创建:声音关键工具为windows9x中的标准应用程序—录音机。录制的格式为wave。另外还有很多专业水准的应用程序,采样和编辑数字化的声音,及格式的转换。
资源需求:
■ 硬件资源需求:
⑴声卡
⑵音箱
#如需要录制声音,这还需麦克风。
■ 软件资源需求:
⑴windows9x操作系统
⑵网络浏览器
⑶java插件/运行时间环境
处理方案一
java2开始,爪哇语言能够支持上述四种声音格式。简单的方法为在java中通过applet类的audioclip()接口来装载声音。该接口风钻了有关声音片断的常用方法,具有对播放声音片断的最小支持。
该接口定义了如下方法:
■ play()
语法:void play()
功能:开始播放声音片断。
不论声音片断是否已经在播放,都从头播放。播放一遍但不重复。
■ loop()
语法:void loop()
功能:循环播放声音片断。
调用该方法是不论声音片断是否已在播放,都从头开始播放。
■ stop()
语法:void stop()
功能:停止播放声音片断。
audioclip接口可以通过getaudioclip()及getcodebase()方法来获取声音片断及
url地址。可以利用此方法在web页中播放指定的声音片断。
#需求:基于jdk1.2以上版本的开发环境。如果只播放au格式的声音文件,jdk1
.1就可。
附:soundtest.html源代码
《html》
《head》
《title》
html test page
《/title》
《/head》
《body》
《applet
codebase = "" code = "test.class" name = "testapplet" wid
th = 400 height = 200 hspace = 0 vspace = 0 align = mi
ddle》
《param name = "clip" value = "sound.au"》
《/applet》
《/body》
《/html》
附:test,java源代码
package soundtest;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.net.*;
public class test extends japplet {
boolean isstandalone = false;
string sound;
jbutton jbuttonplay = new jbutton();
jbutton jbuttonloop = new jbutton();
jbutton jbuttonstop = new jbutton();
jlabel jlabel1 = new jlabel();
audioclip clip;
//get a parameter value
public string getparameter(string key, string def) {
return isstandalone ? system.getproperty(key, def) :
(getparameter(key) != null ? getparameter(key) : def);
}
//construct the applet
public test() {
}
//initialize the applet
public void init() {
try {
jbinit();
}
catch(exception e) {
e.printstacktrace();
}
}
//component initialization
private void jbinit() throws exception {
jbuttonplay.settext("play");
jbuttonplay.setbounds(new rectangle(50, 85, 80, 40));
jbuttonplay.addmouselistener(new java.awt.event.mouseadapter() {
public void mouseclicked(mouseevent e) {
jbuttonplay_mouseclicked(e);
}
});
this.setsize(new dimension(400,200));
this.getcontentpane().setlayout(null);
jbuttonloop.settext("loop");
jbuttonloop.setbounds(new rectangle(150, 85, 80, 40));
jbuttonloop.addmouselistener(new java.awt.event.mouseadapter() {
public void mouseclicked(mouseevent e) {
jbuttonloop_mouseclicked(e);
}
});
jbuttonstop.settext("stop");
jbuttonstop.setbounds(new rectangle(250, 85, 80, 40));
jbuttonstop.addmouselistener(new java.awt.event.mouseadapter() {
public void mouseclicked(mouseevent e) {
jbuttonstop_mouseclicked(e);
}
});
jlabel1.settext("sound test demo");
jlabel1.setbounds(new rectangle(109, 28, 186, 28));
this.getcontentpane().add(jbuttonplay, null);
this.getcontentpane().add(jbuttonstop, null);
this.getcontentpane().add(jbuttonloop, null);
this.getcontentpane().add(jlabel1, null);
try { sound = this.getparameter("clip", "sound.au"); } catch (exce
ption e) { e.printstacktrace(); }
if(sound!=null){
try{
clip=japplet.newaudioclip (new url(getcodebase(),sound));
}
catch(malformedurlexception e){
system.out.println ("bad url");
}
}
}
//get applet information
public string getappletinfo() {
return "applet information";
}
//get parameter info
public string[][] getparameterinfo() {
string[][] pinfo =
{
{"clip", "string", "sound.au"},
};
return pinfo;
}
void jbuttonplay_mouseclicked(mouseevent e) {
clip.play();
}
void jbuttonloop_mouseclicked(mouseevent e) {
clip.loop();
}
void jbuttonstop_mouseclicked(mouseevent e) {
clip.stop();
}
}
处理方案二
利用java媒体框架中的sound api来处理声音片断。sound api 被包含在sun公司的java媒体框架中,也包含在jdk1.3版本中。编译源代码需要支持jdk1.3的开发环境和运行时间环境。
可以利用sound api在网页中加入applet的方式达到要求。但浏览器需要通过java插件或运行时间环境的支持。
sound api主要包括以下四部分:
packages
javax.sound.midi 提供midi (musical instrument digital interface)的i/o、
序列、合成的接口和类。
javax.sound.midi.spi supplies interfaces for service providers to impl
ement when offering new midi devices, midi file readers and writers, o
r sound bank readers.
javax.sound.sampled 为采样数字音频的捕获、处理、重放提供接口和类。
javax.sound.sampled.spi supplies abstract classes for service provider
s to subclass when offering new audio devices, sound file readers and
writers, or audio format converters.
处理方案三
利用java 3d中的sound类。该类似声音资源的抽象定义。每一个具体的声音对象都可以应用sound的方法。
sound类的类关系如下:
java.lang.object
+-javax.media.j3d.scenegraphobject
+-javax.media.j3d.node
+-javax.media.j3d.leaf
+-javax.media.j3d.sound
sound类的子类有:
⒈backgroundsound
⒉pointsound
⒊conesound
使用上述三种声音的步骤如下:
⒈定义并生成一个mediacontainer对象,同时提供对象所需要的声音文件,通常
要单独设置一个存放au/wav声音文件的目录。
⒉定义一个backgroundsound/ pointsound/ conesound对象,根据需要,设置声
音的是否循环、强度大小等参数,设置它的作用范围并setenable用使其开始作用。
⒊根据具体的对象设置坐标系。
#java 3d应用程序只能播放au/wav格式的声音文件。不能播放midi文件。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


