Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5
Java ist auch eine Insel

Java ist auch eine Insel
5., akt. und erw. Auflage
1454 S., mit CD, 49,90 Euro
Galileo Computing
ISBN 3-89842-747-1
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.5 Methoden der Applet- und AppletContext-Klasse
    gp 19.5.1 Wie das Applet den Browser-Inhalt ändern kann
    gp 19.5.2 Den Ursprung des Applets erfragen
    gp 19.5.3 Datenaustausch zwischen Applets
    gp 19.5.4 Was ein Applet alles darf
  gp 19.6 Fehler in Applets finden
  gp 19.7 Browserabhängiges Verhalten
    gp 19.7.1 Java im Browser aktiviert?
    gp 19.7.2 Läuft das Applet unter Netscape oder Microsoft Explorer?
    gp 19.7.3 Datenaustausch zwischen Applets und Java-Skripten
  gp 19.8 Musik in einem Applet und in Applikationen
  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 Applikationetoptop

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  AudioClip getAudioClip( URL url ) Liefert ein AudioClip-Objekt, welches durch die URL gegeben ist.
gp  AudioClip getAudioClip( URL url, String name ) Aufruf von getAudioClip(new URL(url, name)).
gp  static AudioClip newAudioClip( URL url ) Liefert ein AudioClip-Objekt, welches durch die URL angegeben ist.

Hinweis   Mit der statischen Funktion 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() );
sound.play();
Thread.sleep( 100000 );

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

WAV- und MIDI-Dateien abspielen

Die Sound-Engine kann seit Java 1.2 Dateien im Format AIFF, AU und WAV abspielen. 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.

Im Allgemeinen funktioniert das Abspielen auf Anhieb. Die Java Sound API nutzt für die Instrumente das Angebot des Betriebssystems, doch lassen sich von Sun unter http://java.sun.com/products/java-media/sound/soundbanks.html einheitliche Instrumentendateien, so genannte Soundbanks, laden. Unter C:\Programme\Java\j2re1.5.0\lib\audio – das Verzeichnis gilt für die Standardinstallation unter C:\Programme – findet sich schon die kleinste Soundbank soundbank.gm. In das Verzeichnis lässt sich auch die Deluxe-Version soundbank-deluxe.gm mit über 5 MB entpacken, die Instrumente höchster Qualität bietet.

Die Sound-API im Paket javax.sound erlaubt Erweiterungen um eigene Audio-Spieler. So gibt es einen Winamp-ähnlichen MP3-Spieler namens jlGui (http://www.javazoom.net/jlgui/jlgui.html), dem der Unterschied zu einem nativen Player nicht anzusehen ist. Er unterstützt Drag&Drop, Webstart, M3U, WinAmp Skins, OGG Vobis und vieles mehr. jlGui nutzt hierfür 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.

MIDI-Dateien abspielen

Die Klassen zum Abspielen von MIDI-Dateien liegen unter javax.sound.midi. Die MIDI-Daten abspielende Hardware (oder Software) heißt Sequencer. Um an die Instanz zu kommen, wird die Fabrik-Funktion MidiSystem.getSequencer() bemüht. Anschließend muss die Abspieleinheit initialisiert werden – das geschieht mit open().

Sequencer sequencer = MidiSystem.getSequencer();
sequencer.open();

Der nächste Schritt besteht darin, die Musik-Informationen bereitzustellen und dem Sequencer zu übergeben. Diese Daten liegen als Sequence-Objekte vor. Sie lassen sich mit MidiSystem.getSequence() vorbereiten. Die getSequence()-Funktion erlaubt als Parameter File-, InputStream- und URL-Objekte.

InputStream midiFile = MidiDemo.class.getResourceAsStream( "media/beginn.mid" );
sequencer.setSequence( MidiSystem.getSequence(midiFile) );

Nun lässt sich der Sequencer mit start() zur Arbeit bewegen und mit stop() das Abspielen beenden. Bei start() wird automatisch ein Hintergrundprozess gestartet, sodass das Abspielen auch dann fortfährt, wenn die main()-Funktion und der main-Thread schon beendet sind.

sequencer.start();
sequencer.stop();



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!

 << zurück




Copyright © Galileo Press GmbH 2005
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, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de