Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 39 - Applets I

## 39.3 Die Ausgabe von Sound

- 39.3 Die Ausgabe von Sound
  - 39.3.1 Soundausgabe in Applets
  - 39.3.2 Soundausgabe in Applikationen

### 39.3.1 Soundausgabe in Applets

|  |  |  | Das JDK bietet auch einige Möglichkeiten, Sound auszugeben. Hierbei muß klar zwischen dem JDK 1.2 und seinen Vorgängern unterschieden werden. Während das JDK 1.2 die Soundausgabe sowohl Applikationen als auch Applets ermöglicht, war diese vorher nur für Applets möglich. Dabei war die Ausgabe auf gesampelte Sounds beschränkt, die im AU-Format vorliegen mußten. Das AU-Format stammt aus der SUN-Welt und legt ein Sample im Format 8 Bit Mono, Sampling-Rate 8 kHz, µ-law-Kompression ab. Seit dem JDK 1.2 werden dagegen auch die Sample-Formate WAV und AIFF sowie die Midi-Formate Typ 0 und Typ 1 und RMF unterstützt. Zudem gibt es einige Shareware- oder Freeware-Tools, die zwischen verschiedenen Formaten konvertieren können (z.B. CoolEdit oder GoldWave). Mit dem JDK 1.3 wurden die Fähigkeiten erneut erweitert. Mit der nun im JDK enthaltenen Sound-Engine kann Musik nicht nur wiedergegeben, sondern auch aufgenommen und bearbeitet werden, und es ist möglich, Zusatzgeräte wie Mixer, Synthesizer oder andere Audiogeräte anzusteuern. |  |
JDK1.1-1.4

Die Ausgabe von Sound ist denkbar einfach und kann auf zwei unterschiedliche Arten erfolgen. Zum einen stellt die Klasse `Applet` die Methode `play` zur Verfügung, mit der eine Sound-Datei geladen und abgespielt werden kann:

    public void play(URL url)

    public void play(URL url, String name)
| java.applet.Applet

Hierbei kann entweder der URL einer Sound-Datei (siehe nächster Abschnitt) oder die Kombination von Verzeichnis-URL und Dateinamen angegeben werden. Üblicherweise wird zur Übergabe des Verzeichnis-URLs eine der `Applet`-Methoden `getCodeBase` oder `getDocumentBase` verwendet. Diese liefern einen URL des Verzeichnisses, aus dem das Applet gestartet wurde bzw. in dem die aktuelle HTML-Seite liegt:

    public URL getCodeBase()

    public URL getDocumentBase()
| java.applet.Applet

Der Nachteil dieser Vorgehensweise ist, daß die Sound-Datei bei jedem Aufruf neu geladen werden muß. In der zweiten Variante wird zunächst durch einen Aufruf von `getAudioClip` ein Objekt der Klasse `AudioClip` beschafft, das dann beliebig oft abgespielt werden kann:

    public getAudioClip(URL url, String name)
| java.applet.Applet

`AudioClip` stellt die drei Methoden `play`, `loop` und `stop` zur Verfügung:

    public void play()

    public void loop()

    public void stop()
| java.applet.AudioClip

`play` startet die zuvor geladene Sound-Datei und spielt sie genau einmal ab. `loop` startet sie ebenfalls, spielt den Sound in einer Endlosschleife aber immer wieder ab. Durch Aufruf von `stop` kann diese Schleife beendet werden. Es ist auch möglich, mehr als einen Sound gleichzeitig abzuspielen. So kann beispielsweise eine Hintergrundmelodie in einer Schleife immer wieder abgespielt werden, ohne daß die Ausgabe von zusätzlichen Vordergrund-Sounds beeinträchtigt würde.

Das folgende Beispiel ist eine neue Variante des »Hello, World«-Programms. Anstatt der textuellen Ausgabe stellt das Applet zwei Buttons zur Verfügung, mit denen die Worte »Hello« und »World« abgespielt werden können:

Abbildung 39.3: Das sprechende »Hello, World«-Programm

Hier ist der Sourcecode des Programms:

    001 /* HWApplet.java */
    002
    003 import java.awt.*;
    004 import java.awt.event.*;
    005 import java.applet.*;
    006
    007 public class HWApplet
    008 extends Applet
    009 implements ActionListener
    010 {
    011   Button    hello;
    012   Button    world;
    013   AudioClip helloClip;
    014   AudioClip worldClip;
    015
    016   public void init()
    017   {
    018     super.init();
    019     setLayout(new FlowLayout());
    020     hello = new Button("Hello");
    021     hello.addActionListener(this);
    022     add(hello);
    023     world = new Button("World");
    024     world.addActionListener(this);
    025     add(world);
    026     helloClip = getAudioClip(getCodeBase(),"hello.au");
    027     worldClip = getAudioClip(getCodeBase(),"world.au");
    028   }
    029
    030   public void actionPerformed(ActionEvent event)
    031   {
    032     String cmd = event.getActionCommand();
    033     if (cmd.equals("Hello")) {
    034       helloClip.play();
    035     } else if (cmd.equals("World")) {
    036       worldClip.play();
    037     }
    038   }
    039 }
| HWApplet.java

Listing 39.7: Das sprechende »Hello, World«

|  | Eine HTML-Datei HWApplet.html zum Aufruf dieses Applets findet sich in Abschnitt 50.6. Sie wird dort als Beispiel für die Einbindung von Applets in jar-Dateien verwendet. |  |
Hinweis

### 39.3.2 Soundausgabe in Applikationen

|  |  |  | Seit dem JDK 1.2 kann nicht nur in Applets, sondern auch in Applikationen Sound ausgegeben werden. Dazu bietet die Klasse `Applet` eine statische Methode `newAudioClip`:
    public static AudioClip newAudioClip(URL url)
JDK1.1-1.4

Da es sich um eine Klassenmethode handelt, kann sie auch außerhalb eines Applets aufgerufen werden. Das folgende Beispiel zeigt ein einfaches Programm, das in der Kommandozeile den URL einer Sounddatei erwartet und diese dann maximal 10 Sekunden lang abspielt:

    001 /* PlaySound.java */
    002
    003 import java.net.*;
    004 import java.applet.*;
    005
    006 public class PlaySound
    007 {
    008   public static void main(String[] args)
    009   {
    010     if (args.length >= 1) {
    011       try {
    012         URL url = new URL(args[0]);
    013         AudioClip clip = Applet.newAudioClip(url);
    014         clip.play();
    015         try {
    016           Thread.sleep(10000);
    017         } catch (InterruptedException e) {
    018         }
    019       } catch (MalformedURLException e) {
    020         System.out.println(e.toString());
    021       }
    022     }
    023   }
    024 }
| PlaySound.java

Listing 39.8: Soundausgabe aus einer Applikation

Das Programm kann beispielsweise dazu verwendet werden, einige der Standard-Sounddateien unter Windows abzuspielen:

    java PlaySound file:///c:/windows\media\passport.mid

    java PlaySound file:///c:/windows\media\dermic~1.wav

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de