プロが教えるわが家の防犯対策術!

初歩的な質問なんですがjava.applet.AudioClipインターフェースにおいて定義されているloop(),stop(),play()のメソッド達はどのように実装されるものなのでしょうか。
AudioClip ac;
ac = getAudioClip(getDocumentBase(), "音楽データのある所");
ac.play();
としただけで音楽が流れると解説されているのですが、抽象メソッドであるplay()をどこでどのように実装しているのかわかりません。
よろしくお願いします。

A 回答 (2件)

 getAudioClipで取得できるのは、AudioClipインターフェースではなく、


AudioClipインターフェースを実装し、音楽データとそれを演奏する仕組みを組み込んだインスタンスです。
このインスタンスのクラス名は定義できないので、必ず含まれているAudioClipで受け取ります。
この受け取ったインスタンスのplayメソッドは、
そのインスタンスに含まれているデータを適切に再生できるような仕組みを組み込んでオーバーライドされたものです。
よって、そのplayメソッドを呼び出すだけで音楽は演奏されます。

 以下は、アプレットと同じディレクトリに存在する音楽ファイルを再生するプログラムです。
音楽ファイル名はparamタグで設定します。

-----Java-----

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

public class audioclip extends Applet {

Button PB, SB;
AudioClip AC = null;
Label LB;

public void init() {

setLayout(new GridLayout(3, 1));
add(PB = new Button("Play"));
add(SB = new Button("Stop"));
add(LB = new Label(""));

PB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
AC = getAudioClip(getDocumentBase(), getParameter("Clip"));
AC.play();
} catch (Exception ex) { LB.setText(ex.toString()); };
};
});

SB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (AC != null) AC.stop();
AC = null;
};
});

};

}

-----ページHTML-----

<html>
<head><title>Play Clip</title></head>
<body>
<center>
<applet codebase="." code="audioclip" width="240" height="120">
<param name="Clip" value="test.wav">
</applet>
</center>
</body>
</html>
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!