热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->jsp 
站内搜索:
Java的声音处理介绍(2)
作者:不详 来源:www.jspcn.net 整理日期:2006-8-13


  在你已创建 AudioClip对象之后,你能用该对象调用play()、loop()以及stop()方法。如果 getAudioClip或 newAudioClip方法不能找到指定的声音文件, AudioClip对象的值将是空的。试着播放空对象会导致出错,所以标准的过程首先是对该条件进行检测。

  接下来是一个完整的程序设计示例,该程序将产生一个applet,当鼠标在该小应用程序applet范围内按下时会播放 flute+hrn+mrmba.au音乐样本。此AU示例文件与applet在相同目录或文件夹下的。

import java.applet.*;
import java.awt.event.*;

public class PlayAudio extends Applet
implements MouseListener {
AudioClip audio;

public void init() {
audio = getAudioClip(getDocumentBase(),
"flute+hrn+mrmba.au");
addMouseListener(this);
}

public void mousePressed(MouseEvent evt) {
if (audio != null) audio.play();
}

public void mouseEntered (MouseEvent me) {
}

public void mouseExited (MouseEvent me) {
}

public void mouseClicked (MouseEvent me) {
}

public void mouseReleased(MouseEvent me) {
}

}

  注意: 在许多JAVA2技术书籍中,mouseDown()方法确实是JAVA 1.0事件模型的一部分。使用该方法会有一定的危险,因为该方法在将来可能不会被支持。在JAVA2平台下将MouseListener与mousePressed结合使用是优先的选择。

API 1.0-质的飞跃

  注意:下列备注是以JAVA API的早期版本0.86为基础的。虽然目前这里讨论的大多数对象和概念与过去保持一致,但由于该API版本已经终止,出现某些改变的可能是存在的。

  JAVA声音 1.0 API为JAVA平台定义了一整套的基本的底层音频处理功能。它提供如下接口为:

音频捕获和播放

IDI合成及序列化

  这两个主要的功能模块在各自的程序包中提供。

  javax.media.sound.sampled-该程序包明确地说明了捕获、混合以及回播数字采样音频的界面。

  javax.media.sound.MIDI-该程序包提供MIDI合成、序列化以及事件传送的界面。


  JAVA 1.0 API具备如下特性:

  数字音频

频捕获-从输入源例如麦克风进行数据捕获。

音和重播-将各种输入源的声音混合并重播。

制与编码-调整增益、定位、回音处理等等,以及进行格式转换。

态及其提示-当重播开始和结束、设备打开或关闭以及其他相关事件发生时接收事件。

  对MIDI的支持

MIDI消息-交换消息(打开音符,关闭音符,诸如此类)

合成-从MIDI数据装入乐器并产生声音。

序列化-装入一个MIDI序列,开始和停止播放,以及调整节奏。

  工具

件输入输出-读写通用音频文件例如WAV,AIFF及MIDI

置-查询系统来获得组件和设备的信息;安装或取消编码、文件分析器和设备等。

  数字化音频

  通道

  Kara Kytle, JAVA声音 API主管工程师和系统设计师说:"Channel是音频管道中的基本功能部件"。实现Channel界面的类代表着该"管道"的一个元素,例如硬件设备,一个声音合成器,或者是一个单音频流。

  InputChannel和 OutputChannel继承了Channel,分别用于读入被捕获的数据和为播放写数据。子界面Clip支持对预装入的音频数据循环播放和重新定位。Device表示任何用于捕获、播放或混和音频的硬件或软件设备。

当一个Channel打开时,它为自己保留了系统资源 ,并且当它结束时,这些资源被释放给其他的应用程序和对象使用。用isOpen()方法可以查询Channel是打开还是关闭的。数据的处理通常由子界面方法比如read()方法来启动,这部分在InputChannel界面说明描述 (请看JAVA声音 API的说明书)。

  处理方法使Channel处于负责输入或输出音频数据的状态。用isActive方法可以识别Channel是否处于这种状态。通过调用pause()方法可以使通道处于暂停状态,此状态可以通过isPaused()方法判别。当通道被暂停时,有三种选择:保留数据(缺省),用flush()方法丢弃内部缓冲器中的数据,或用drain()方法使内部缓存中的数据被立即处理。

  对象事先可以注册,这样每当通道状态改变时它都可以收到通告信息。该注册对象必须实现Channel.Listener界面,该界面仅包含一个方法update()。当Channel打开、结束、启动、及停止时,该方法都将被调用。当Channel开始或停止活动以及开始或停止捕获数据时,会产生start或stop事件。

  输入通道

  InputChannel是被捕获的音频数据的源头。该界面提供了方法,可从 InputChannel缓冲器读取被捕获的数据,并判断当前可读的数据量。如果应用程序试图读过多的数据,该读方法阻塞,直到所需读取数据达到为止。

  输出通道

  OutputChannel接收用于播放的音频数据。这接口提供方法,将要播放的数据写入OutputChannel的缓冲区,并能判断该通道不间断可接收的数据量。如果应用程序试图写过量的数据,该读方法阻塞,直到有足够数据为止。

  剪贴

  Clip接口表示一个特殊的通道,它可以在播放之前先装入音频数据。由于数据是预装入的,而不是流入的,所以clip可以支持持续查询、循环播放、以及重新定位播放。

[1]  [2]  [3]  
相关文章
暂无