音声

last modified: Feb./3rd/2002

前節では画像データをオブジェクトとして取得し、描画しました。本節では、音声データをオブジェクトとして取得し、再生してみます。

音声データの取得と操作

音声データオブジェクトを参照する変数は java.applet.AudioClip インタフェース型として作成します。インタフェース型の変数として参照することで、実装する全てのクラス型オブジェクトと型が互換します。

音声の取得

いま、本文書ディレクトリをカレント (.) として、 ./audio/tada.au が存在します。

この音声データをオブジェクトとして取得します。

AudioClip ac = getAudioClip(getDocumentBase(), "./audio/tada.au");

Applet クラスのメソッド getCodeBase()getDocumentBase() については画像の項で紹介しました。 getAudioClip() の第二引数に与える相対 URL の解釈のために使われる基準 URL を、「文書と同じ場所」か、「アプレットクラスファイルと同じ場所」に設定します。

音声の再生

AudioClip インタフェースは、音声データの操作用に三つのメソッドを宣言しています。

voidloop() オーディオクリップを繰り返して再生します。
voidplay() オーディオクリップの再生を開始します。
voidstop() オーディオクリップを停止します。
//アプレットが開始したら繰り返し再生
public void start() {
	ac.loop();
}
//アプレットが停止したら再生も停止
public void stop() {
	ac.stop();
}

サンプル

音声データ ./audio/tada.au をオブジェクトとして取得し、アプレットのライフサイクルにしたがって動作を明記します。

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Graphics;

public class AudioTest extends Applet {
	//フィールドとして AudioClip を定義
	private AudioClip ac;

	//アプレット初期化
	public void init() {
		//AudioClip ac へ参照を代入
		ac = getAudioClip(getDocumentBase(), "./audio/tada.au");
	}

	//アプレット開始
	public void start() {
		//AudioCliip ac の再生
		ac.loop();
	}

	//アプレット停止
	public void stop() {
		//AudioCliip ac の停止
		ac.stop();
	}

	//描画
	public void paint(Graphics g) {
		g.drawString("Applet is here.", 10,30);
	}
}

AudioClip をフィールド(メンバ変数)として定義したのは、当該クラス内の任意のメソッドで自由に利用できるようにするためです。特定のメソッド内で定義すると、当該メソッド内部でしか利用できないローカル変数になってしまいます。

フィールドを private 宣言したのは、他のクラスから利用できなくしたのですが、ほんの座興です。このようにデータが隠蔽されても、メソッドをとおしてアクセスできることが確認できます。

<p><applet code="AudioTest.class" width="100" height="50">
アプレットが実行できない場合の代替内容。
</applet></p>

このアプレットは音が鳴ってうるさいので、別ファイルで確認することにしました。

アプレット: AudioTest

マルチメディア利用の注意

アプレットではブラウザ上で画像、音声などマルチメディアコンテンツを手軽に実装できるため、とても便利なのですが、ブラウザ/ネットワークに掛かる負荷も大きくなります。ブラウザには Plug-in を追加し、ネットワークはブロードバンドを利用しなければならないかもしれません。これはコンテンツ開発にアプレットが敬遠されている理由でもあるので、ロジックの実装ではなく、プレゼンテーションのためにアプレットを用いる場合は、その辺りのことを十分注意すると良いでしょう。

私がマルチメディアコンテンツを嫌いなせいもあります。



Copyright © 2001 SUGAI, Manabu. All Rights Reserved.