网页Applet录音机的制作

网络多媒体是目前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);
}

时间: 2016-01-19

网页Applet录音机的制作的相关文章

dreamweaver中网页折叠菜单的制作

dreamweaver|菜单|网页 去过Microsoft的网站吗?(如图一)如果去过的话,那么你应该对这个站上面那条折叠式菜单的导航栏感到赞叹吧?("嘿嘿,还是老盖强.""啊,鸡蛋怎么会飞呀?!")你想过你也能够做出这样的效果吗?来吧,不用羡慕了,心动不如行动! 折叠式菜单实际上是通过层的显示和隐藏,来达到这种效果的.现在就让我来说说如何制作吧.Follow Me!先打开DreamWeaver(DreamWeaver对层的支持很好的,也是做网页的必备工具). 第一

dreamweaver中网页折叠菜单的制作(组图)

dreamweaver|菜单|网页 去过Microsoft的网站吗?(如图一)如果去过的话,那么你应该对这个站上面那条折叠式菜单的导航栏感到赞叹吧?("嘿嘿,还是老盖强.""啊,鸡蛋怎么会飞呀?!")你想过你也能够做出这样的效果吗?来吧,不用羡慕了,心动不如行动! 折叠式菜单实际上是通过层的显示和隐藏,来达到这种效果的.现在就让我来说说如何制作吧.FollowMe!先打开DreamWeaver(DreamWeaver对层的支持很好的,也是做网页的必备工具). 第一步

CSS网页设计实例:设计制作大背景网页

网页制作Webjx文章简介:如何用CSS实现大背景网页设计. 自从我发布了大背景网页设计合集之后,我收到了很多电子邮件询问如何用css实现大背景的网页设计.因此我决定和大家分享大背景网站的设计技巧.在此教程中,我会用一些实例来说明如何用一张或者两张图片实现大背景网站的设计. 经常会犯的错误:背景被裁减(查看示例) 查看示例文件,在小于1280分辨率时,是没有问题的.但是如果你的显示器的分辨率大于1280像素,你会看到背景图片以外的部分. 实例1:一张图片(查看示例) 简单的解决问题的方法:将图片

Dreamweaver网页中实用的制作技巧

dreamweaver|技巧|网页 1.灵活运用样式 熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custon Style来调用Style标准,也可以在状态栏中的元素列表上单击右键来调用Style.虽然不同的方法达到的效果看似一样,但实际上产生的HTML代码则完全不同.比如用Custon Style来调用Style标准,在网页代码中就生成一个〈span〉标签,这样的标签一多就会使文件十分臃肿而且影响浏览器的解析速度,所以我们应尽量使用状态栏中的元素列表来调用Sty

用DW8学习网页滚动字幕的制作

在网页中,制作滚动字幕使用marquee标签,如果用手写的方法,实在是太麻烦了.推荐利用网页制作软件比如Dreamweaver来学习.在DW中可以使用"标签选择器"插入各种标签,并且可以使用"标签检查器"设置标签的属性值,它的功能类似于属性面板,但是比属性面板更强大. 使用"标签选择器"插入marquee标签 1.把光标插入点放在需要插入滚动字幕的地方. 2.点击插入面板的"标签选择器 " 3.选择 marquee标签,点击&

精通CSS+DIV网页样式与布局--制作实用菜单

        在上篇博文中,小编中主要的简单总结了一下CSS中关于如何设置页面和浏览器元素,今天小编继续将来介绍CSS的相关基础知识,这篇博文,小编主要简单的总结一下在CSS中如何制作网页中的菜单,这部分的内容包括:项目列表.无需表格的菜单.菜单的横竖装换,看下面一张思维导图:                    首先,我们看项目列表,列表的符号,我们来看例子代码和运行效果:           <span style="font-size:18px;"><spa

网页字体在Frontpage2000制作网页中的讲解

运用Html,我们可以对字体的大小及字形进行简单的修改,但要进行统一地控制.创建特殊效果,就必须要用到css.它能让您更有效地控制网页外观,并可以扩充精确指定网页元素位置,外观以及创建特殊效果的能力.考虑到用frontpage制作网页的人较多,同时它对其他网页编辑器的使用者也有一定的借鉴作用, 因此,我就讲解一下如何在frontpage2000中运用css设置网页字体. 我们可以用css设置出无数种网页字体,但万变不离其宗,任何的变化都要遵循css的基本语法.因此我们先来了解一下css的基本语法

网页代码实例:CSS制作淘宝导航交互的小三角箭头

文章简介:淘宝导航的小三角箭头图标. 没事做了一个淘宝导航的小三角箭头图标,测试/支持环境:IE7+.Firefox8.chrome 以下为源码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w

网页图片设计技巧:制作清晰可见像素图片

文章描述:大家在设计界面和网页时,是不是经常碰到PS里绘制的图标虽然是矢量的,但还是会有许多虚边,在放大.缩?⑿笮楸弑涞母现亓耍蛘呤窃贏I里绘制的精美矢量图标粘到PS里就变虚了,我们辛苦设计的作品就这样变"糊了",这是我们双眼所不允许的,我们要让每一个像素 大家在设计界面和网页时,是不是经常碰到PS里绘制的图标虽然是矢量的,但还是会有许多虚边,在放大.缩小.旋转后虚边变的更严重了,或者是在AI里绘制的精美矢量图标粘到PS里就变虚了,我们辛苦设计的作品就这样变"糊了&q