<b>网页Applet录音机的制作</b>[Java编程]
本文“<b>网页Applet录音机的制作</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
网络多媒体是目前Web利用的一个发展方向.在网页上录音,并发给朋友,相信他们收到你的声音一定非常高兴.目前这已经是一项很普通的多媒体利用技术,笔者利用Java语言开辟出了可以嵌入Web页面上的Applet录音机(界面外观以下图所示).假如你有编程的爱好,无妨试试.在此,我将这种技术介绍给各位编程爱好者.
多媒体基本概念及常识
开辟多媒体音频软件,必须理解一些多媒体基本概念,诸如采样、量化、量化位、采样频率、单双声道、音频编解码、音频压缩格局等概念.采样是把时间上持续的模拟信号变成时间上离散的、有限个样值的信号.量化是在幅度上把持续值的模拟信号变成离散值的数字信号.在时间轴上已变成离散的样值脉冲,在幅度轴上仍会在动态范围内有持续值,大概呈现肆意幅值,即在幅度轴上还是模拟信号的性质,因此必须用有限个电平等级来代表实际量值.量化位是每个采样点可以表示的数据范围,常常采取的有8、12和16位.采样频率是将模拟声音波形转换为数字时,每秒钟所抽取声波幅度样本的次数,采样频率的计算单位是Hz(赫兹).按照采样理论,为了保证声音不失真,采样频率应为声音频率的两倍左右.记录声音时,假如每次生成一个声波数据,称为单声道;每次生成二个声波数据,成为立体声(双声道).量化位和采样频率越高,音质就越好.
正常人耳听觉的声音频率范围大约在20Hz至20KHz之间,人的语音频率大约在300Hz至3.4KHz之间.关于语音来说,采取8KHz的采样频率已经充足了.所以我们采取8KHz采样频率、16位量化位、单声道来记录和播放语音,便可以满意网页上的语音需求了.
网页录音机的制作历程
理解了以上常识,下面来看看录音机的制作历程.
首先要碰到的是音频采集.音频采集有很多种,JDK 1.3中构建TargetDataLine类实例来实现声音数据采集.在此例中,我采取Visual J++的J/Direct调用Windows API函数来实现声音的采集.
声音俘获主要由AudioCapture、AudioDataEvent、AudioDataListener三个类构成.我们顺次按照0.1秒时间采样数据块的大小(即1600字节)作为所送出到系统的录音数据缓冲区大小,这样也就相当于每隔0.1秒声卡提交给我们一次声音数据.别的,利用Windows API方法声音采集有一个好处,录音历程不需求成立单独的线程.这是因为有回调函数的宏大作用,这样节俭了系统资源,提高了程序的安定性.
//声音俘获类:
...
public class AudioCapture{
...
public AudioCapture(){
...
waveincaps=new WAVEINCAPS();
wavehdr=new WAVEHDR[bufferlen];
}
public void addAudioDataListener(AudioDataListener lter){
listeners.addElement(lter);
}
void applyBuffer(){
for(int i=0;i<bufferlen;i++){
wavehdr[i]=new WAVEHDR();
int
adr=dlllib.addrOfPinnedObject(dlllib.getPinnedHandle(data[i]));
wavehdr[i].lpData=adr;
...
}
}
int chkData(byte[] a){//将整型低16位高低位穿插并转为字节
...
}
public void close(){
if(!useful)return;
isclose=true;
waveInStop(deviceid[0]);
...
}
...
synchronized void notifyListener(int minValue,byte[] audioData){
AudioDataEvent evt=new AudioDataEvent(this,minValue,audioData);
For(Enumeration enu=listeners.elements();enu.hasMoreElements();)
((AudioDataListener)enu.nextElement()).onAudioDataArrived(evt);
}
...
public void setMuteValue(int muteValue){
this.muteValue=muteValue;
}
/**@dll.import("WINMM",auto)*/
...
public static native int waveInReset(int hwi);
private class c extends Callback{
AudioCapture record;
c(AudioCapture tt){
record=tt;
}
...
}
}
//缓冲数据提交事件类:
import java.util.EventObject;
public class AudioDataEvent extends EventObject{
...
}
//事件侦听接口
import java.util.EventListener;
public interface AudioDataListener extends EventListener{
public abstract void onAudioDataArrived(AudioDataEvent evt);
}
以上是“<b>网页Applet录音机的制作</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |