Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 19 Applets, Midlets und Sound
gp 19.1 Applets und Applikationen - wer darf was?
gp 19.2 Das erste Hallo-Applet
gp 19.3 Die Zyklen eines Applets
gp 19.4 Parameter an das Applet übergeben
gp 19.4.1 Wie das Applet den Browser-Inhalt ändern kann
gp 19.4.2 Den Ursprung des Applets erfragen
gp 19.4.3 Was ein Applet alles darf
gp 19.5 Fehler in Applets finden
gp 19.6 Browserabhängiges Verhalten
gp 19.6.1 Java im Browser aktiviert?
gp 19.6.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
gp 19.6.3 Datenaustausch zwischen Applets und Java-Skripten
gp 19.7 Datenaustausch zwischen Applets
gp 19.8 Musik in einem Applet und in Applikationen
gp 19.8.1 Fest verdrahtete Musikdatei in einem Applet
gp 19.8.2 Variable Musikdatei über einen Parameter
gp 19.8.3 WAV- und MIDI-Dateien abspielen
gp 19.9 Webstart
gp 19.10 Java 2 Micro Edition
gp 19.10.1 Konfigurationen
gp 19.10.2 Profile


Galileo Computing

19.8 Musik in einem Applet und in Applikationendowntop

Die Applet-Klasse verfügt über die Objektmethode getAudioClip() und über die statische Methode newAudioClip(), die eine Audio-Datei als AudioClip-Objekt liefert. Die Quelle ist als URL gegeben. Die play()-Methode auf dem AudioClip spielt das Stück ab.


interface java.applet.AppletContext

gp E AudioClip getAudioClip( URL url )
Liefert ein AudioClip-Objekt, welches durch die URL gegeben ist.
gp E AudioClip getAudioClip( URL url, String name )
Aufruf von getAudioClip(new URL(url, name)).
gp E static AudioClip newAudioClip( URL url )
Liefert ein AudioClip-Objekt, welches durch die URL angegeben ist.

Hinweis Mit der statischen Methode newAudioClip() lässt sich ein AudioClip-Objekt auch ohne ein AppletContext erzeugen. Damit bietet sich diese Methode für Applikationen an.


Beispiel Spiele die Datei uups.wav in einer Applikation ab.

File f = new File( "uups.wav" );
AudioClip sound = Applet.newAudioClip( f.toURL() );
theSound.play();
Thread.currentThread().sleep( 100000 );

Weitere Informationen gibt es bei Sun unter http://developer.java.sun.com/developer/technicalArticles/Media/JavaSoundAPI/.


Galileo Computing

19.8.1 Fest verdrahtete Musikdatei in einem Appletdowntop

Wir platzieren die Audio-Datei in unserem Codeverzeichnis, so dass über die Methode getCodeBase() keine weiteren Angaben zum Host zu machen sind. Das Applet bekommt eine Minimalausführung. In der init()-Funktion lesen wir die Datei, und die start()-Methode spielt den AudioClip mit seiner ureigensten Methode play() ab.

Listing 19.10 AudioPlayer.java

import java.applet.Applet;
import java.awt.*;
public class AudioPlayer extends Applet
{
  String    file = "lala.au";
  AudioClip ac;
  public void init()
  {
    ac = getAudioClip( getCodeBase(), file );
    start();
  }
  public void start()
  {
    ac.play();
  }
  public void stop()
  {
    ac.stop();
  }
}

Da das Applet lediglich beim Starten Musik abspielen muss, benötigt es auf dem Bildschirm auch keine Ausmaße - wir können somit Höhe und Breite bedenkenlos auf null setzen. Das Applet-Tag ist herzlich kurz.

Listing 19.11 index.html

<applet code="AudioPlayer.class" width="0" height="0"></applet>

Galileo Computing

19.8.2 Variable Musikdatei über einen Parameterdowntop

Dass das Programm noch wesentlich kürzer programmiert werden kann, zeigt folgende Überlegung: In der init()-Methode können wir schon sofort mit dem Abspielen der Musik beginnen. Wir vereinbaren eine Variable musiFileName, über die wir die Musikdatei austauschen. Somit ist unser Programm wesentlich flexibler. Im Gegensatz zu unserem vorhergehenden Beispiel verzichten wir auf die Start-/Stopp-Möglichkeiten, wenn das Applet nicht mehr auf der Seite sichtbar ist.

Listing 19.12 AudioPlayer.java

import java.applet.Applet;
import java.awt.*;
public class AudioPlayer extends Applet
{
  public void init()
  {
    String soundFile = getParameter( "musiFileName" );
    play( getCodeBase(), soundFile );
  }
}

Zum Einbinden dieses Applets können wir etwa folgenden HTML-Code verwenden:

Listing 19.13 index.html

<applet code="AudioPlayer.class" width="0" height="0">
<param name="musiFileName" value="lala.au">
</applet>

Galileo Computing

19.8.3 WAV- und MIDI-Dateien abspielentoptop

Sound-Dateien im WAV- oder MIDI-Format können seit 1.2 abgespielt werden. Vorher war dies nicht möglich - hier blieb nur eine Konvertierung in das AU-Format, etwa mit dem Windows-Programm GoldWave. Seit Java 1.2 hat sich im Bereich Sound-Wiedergabe einiges getan, so ist die Sound-Engine gründlich überarbeitet worden. Sie unterstützt nun die folgenden Audio-Formate: AIFF, AU und WAV.

Ebenso ist ein MIDI-Renderer enthalten, der die Dateiformate TYPE 0 MIDI, TYPE 1 MIDI und RMF unterstützt. Dieser erzeugt softwaremäßig mit einem Wave-RAM General Midi. Die Sound-Maschine kann 8- oder 16-Bit-Audio-Daten rendern, entweder mono oder stereo. Dabei werden Sampling-Raten von 8 bis zu 48 KHz unterstützt.

Die neue Sound-API unter javax.sound kann zusätzlich um eigene Audio-Spieler erweitert werden. So gibt es einen Winamp-ähnlichen MP3-Spieler mit dem Namen jlGui (http://www.javazoom.net/jlgui/jlgui.html), dem der Unterschied zu einem nativen Player nicht anzusehen ist.1 Er unterstützt Drag&Drop, Webstart, M3U, WinAmp Skins, OGG Vobis und vieles mehr. jlGui nutzt hierzu einen eigenen AudioLayer (http://javalayer.sourceforge.net/) zum Abspielen von MP3-Dateien. Die zusätzliche Bibliothek basiert auf der Möglichkeit, eigene SPIs einzuhängen.






1 Er lässt sich per Webstart sofort ausprobieren:>http://www.javazoom.net/jlgui/jws/jlgui_jnlp.jsp. Unter>http://www.javazoom.net/jlgui/jnlp_configurator.jsp lassen sich einige Parameter einstellen und dann gleich ausprobieren. Cool!





Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de