【转】 java的声音技术与AudioStream (包括在java应用程序中循环播放声音)

2011-01-04 22:51
转载自 xc_jetguo
最终编辑 xc_jetguo

java 的魅力之一就是对多媒体的支持,Appley使得原来沉闷的网页变得

丰富起来,在java.applet中提供了很多功能强大的方法对多媒体的支

持。现在我们就java中的声音技术来分析其中的功能。


一 在Applet中播放声音
播放声音是java对多媒体的支持一个重要部分.现今流行的声音格式

有wav,mid,au为扩展名的声音文件。而java现主要支持以au为名的声音

。在Applet中专门提供了类AudioClip来对声音的支持。
由于Applet的多媒体功能书上都有很清晰的介绍也很简单。我们就以一

个例子来结束这部分的说明。
import java.applet.*;

public class sounda extends Applet
{

public static void main (String[] args)
{
AudioClip ac = getAudioClip(getCodeBase(), "sloop.au");
ac.play();
// ac.loop();
// ac.stop();

}
}
上面例子只是很简单的说明,AudioClip是java中播放类。java中提供

了两个很有用的方法getCodeBase(),getDocumentBase()他们分别返回

Applet本身和包含此Applet主页的URL地址.上面的sloop.au即我机器上

的声音文件。我们在此直接使用了AudioClip的play方法来播放声音。

大家可测试用Applet的图像功能加入按钮。

二 java应用程序中的声音播放
由于在应用程序并不支持AudioClip类。所以播放声音文件成了一大

难题。制做自己的java播放器或应用媒体方面的java应用程序我们就不
能支持声音了吗?不是的,sun公司为应用程序中的声音支持另提供了

一个java新包。sun.audio在这个包下面提供了大部分所需要的声音处

理类。注:sun包下面还有很多很有意思的技术支持,如java2D,Tools

等,大家可自己尝试去使用。
下面我们就来做个自己的声音播放测试
import sun.audio.*;
import java.io.*;

public class Sound
{
public static voie main(String args[])
{
try {
FileInputStream fileau=new

FileInputStream("sloop.au");
AudioStream as=new AudioStream(fileau);
AudioPlayer.player.start(as);
}
catch (Exception e) {}
}
}

注:上面两例都没有提供相应的stop方法,本文章指在方法的尝试,并

非全面文章,但上面的例子都是可用的。

三 javaX中Sound包的应用
当我在进行上面的测试过程中,我发现javaX目录下也提供了一

个sound包对java声音的强大支持,并且在sun网站的jjse上可下载到相

关的大量例子程序.有志于声音处理方向的朋友可下载试试

现 在 关 于 如 何 在Java 小 程 序(Applet) 中 播 放 音 乐 以 供 人 边 浏 览 页 面 边 欣 赏 的 介 绍 已 经 很 多 了, 但 对 如 何 在 应 用 程 序(Application) 中 放 音 乐 的 介 绍 还 很 少, 下 面 我 就 逐 步 地 讲 解 一 下 如 何 实 现。

Jun 当 前 的Java Development Kit 版 本1.1.3 并 不 正 式 支 持 在Application 中 放 音 乐 文 件, 但 这 依 然 是 可 以 实 现 的。 首 先 让 我 们 复 习 一 下 在Applet 中 放 音 乐 的 四 个 步 骤, 代 码 如 下:

import java.applet.*;
  
  AudioClip ac=getAudioClip (getCodeBase(), File);
  // 创 建Audioclip 对 象 并 装 入.au 文 件
  ac.play();  // 播 放 一 次
  ac.stop();  // 停 止 播 放
  ac.loop();  // 循 环 播 放

大 家 可 能 认 为 此 代 码 在Application 中 也 能 使 用, 但 不 幸 的 是 它 在 编 译 时 就 会 发 生 错 误。 因 为AudioClip 对 象(object) 和getAudioClip() 方 法(method) 都 是 属 于java.applet 包 的-- 它 在Application 中 无 法 调 用。

解 决 问 题 的 办 法 是 使 用 一 些Sun 在JDK 中 发 布 但 未 正 式 注 明(undocumented) 的 特 点。 用Winzip 或Zip 观 察 一 下class.zip 文 件 就 会 发 现 除 了java.applet 包 中 包 含 对 声 音 文 件 处 理 外, 在/sun/audio 目 录 下 的sun.audio 包 也 提 供 类 似 的 方 法。 下 面 是 实 现 代 码 和 注 释:

import sun.audio.*;  // 引 入sun.audio 包
  import java.io.*;
 
  InputStream in = new FileInputStream (Filename);
  // 打 开 一 个 声 音 文 件 流 作 为 输 入
  AudioStream as = new AudioStream (in);
  // 用 输 入 流 创 建 一 个AudioStream 对 象
  AudioPlayer.player.start (as); 
 //“player” 是AudioPlayer 中 一 静 态 成 员 用 于 控 制 播 放
  AudioPlayer.player.stop (as);

当 需 从 网 上 下 载 文 件 播 放 时, 用 以 下 代 码 打 开 音 乐 文 件 网 址:

AudioStream as = new AudioStream (url.openStream());

播 放 一 个 持 续 的 声 音 流 就 复 杂 一 些 了:

首 先 如 上 创 建 声 音 流;
  AudioData data = as.getData ();
         // 创 建AudioData 源
  ContinuousAudioDataStream cas
         = new ContinuousAudioDataStream (data);
  AudioPlayer.player.play (cas); // 放 音
  AudioPlayer.player.stop (cas); // 停 止

完 成 了 ! 因 为 以 上 程 序 使 用 了 未 公 开 的 特 性, 所 以 不 能 保 证 它 能 在 除 了 当 前 版 本 的Sun JDK 以 外 的 编 译 器 上 运 行。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值