java的声音处理方法

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 = "" co de = "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;
imp ort java.awt.*;
imp ort java.awt.event.*;
imp ort java.applet.*;
imp ort javax.swing.*;
imp ort 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文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值