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
インタフェースは、音声データの操作用に三つのメソッドを宣言しています。
void | loop() |
オーディオクリップを繰り返して再生します。 |
void | play() |
オーディオクリップの再生を開始します。 |
void | stop() |
オーディオクリップを停止します。 |
//アプレットが開始したら繰り返し再生 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 を追加し、ネットワークはブロードバンドを利用しなければならないかもしれません。これはコンテンツ開発にアプレットが敬遠されている理由でもあるので、ロジックの実装ではなく、プレゼンテーションのためにアプレットを用いる場合は、その辺りのことを十分注意すると良いでしょう。
私がマルチメディアコンテンツを嫌いなせいもあります。