4. 画像の表示と音声の再生

画像の表示や音声ファイルの再生について説明します。

(1) 画像の表示

 gif や jpeg といった画像ファイルも簡単に扱うことができます。アプレットを作るためには Applet クラスが必要でしたが、この Applet クラスのメソッドで getImage( ) というメソッドがあります。このメソッドを使うと画像のデータを読み込むことができます。読み込んだ画像データは java.awt.Image クラスのオブジェクトとして扱います

Image img = getImage(getCodeBase( ),"imgdata.gif");

 Image クラスは abstract クラスなので new でオブジェクトを生成できません。 ですから画像のオブジェクトを作るときは、 getImage メソッドを使って戻り値の Image オブジェクトを変数に代入します。

 さて、getImage メソッドの引数ですが、 API ドキュメントを見ると次のような形式になっています。

getImage(URL url,String name)

 1つ目の引数には URL を指定します。 例題では Applet クラスの getCodeBase( ) というメソッドを使います。このメソッドはアプレットがある場所の URL を管理している URL オブジェクトを返すメソッドです。Javaでは URL も java.net.URL クラスのオブジェクトとして扱います。2番目の引数で画像のファイル名を指定します。

 読み込んだ画像データは Graphics クラスの drawImage( ) メソッドで表示します。このメソッドの形式は以下の通りです。

drawImage(Image img,int x,int y,ImageObserver obj)

 表示する画像オブジェクト、座標、イメージオブザーバーのオブジェクトを指定します。イメージオブザーバーとは画像を管理するオブジェクトのことです。アプレットプログラムの場合はアプレット自信がイメージオブザーバーになるので、this と指定します。

指定したファイルが存在しないと何も表示されません。



(2) 音声の再生

 画像の読み込みと同じような方法で音声データを読み込むことができます。音声データを扱うには、 java.applet パッケージの AudioClip というインタフェースを使います
AudioClip clip = getAudioClip(getCodeBase( ),"music.mid");

 Applet クラスには getAudioClip( ) というメソッドがあります。 このメソッドの引数は URL とファイル名です。 先ほどの getImage( ) と同じですね。このメソッドの戻り値は AudioClip オブジェクトです。このオブジェクトを使って音声を再生します。

 AudioClip のメソッドは play( )、stop( )、loop( ) があります。play( ) は1度だけ再生、stop( ) は再生の停止、loop( ) は繰り返し再生します。

 JDK1.1.X までは AU ファイルという音声ファイルしか再生できませんでしたが、 Java2 からは MIDI ファイルや WAV ファイルなども再生できるようになりました。

1回だけ再生する場合には Applet クラスの play(URL url, String filename) というメソッドもあります。


(3) 画像と音声の例題

 画像の表示と音声の再生のサンプルです。 画像と音声のファイルは Class ファイルと同じフォルダに置いてください。画像と音声ファイルの名前は自分で用意したものを使ってください。用意できない場合は次のリンクを右クリックしてダウンロードしてください。

画像ファイルのダウンロード
音声ファイルのダウンロード


  ImgAudio.java

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

public class ImgAudio extends Applet {
    AudioClip clip;
    Image img;
	
    public void init() {
        clip = getAudioClip(getCodeBase(),"hello.mid");
        img = getImage(getCodeBase(),"onpu.gif");
    }
	
    public void start() {
        clip.loop();
    }
	
    public void stop() {
        clip.stop();
    }
	
    public void paint(Graphics g) {
        // Image クラスのメソッドで画像の幅と高さを求めます
        int width = img.getWidth(this);
        int height = img.getHeight(this);
        g.drawImage(img,0,0,this);
        g.drawString("MIDIファイル再生中",width,height);
    }
}


  ImgAudio.html

<APPLET CODE="ImgAudio.class" width=200 height=100>
</APPLET>


 実行例  (画像をクリックすると実際の ImgAudio.html のアプレットが起動します)

ImgAudio


 この例題はブラウザで実行すると音楽が鳴りません。これはブラウザの Java のインタプリタが Java2 に対応していないため、Midi ファイルを再生できないからです。Java2 以前では Au というフォーマットしか再生できません。

前の章(3.色とフォント)   次の章(5.AWTとは?)