Java - AG Audio - Ausgabe mit Java 3. Juli 2001 Frank Münster.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Dr. Andreas Winter Sommersemester 2007 Einführung in die Software-Entwicklung © Institut für Informatik Programmier-Richtlinien vgl. auch
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Ein Beispiel in Java.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Einführung in die Programmierung Datensammlung
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Java programmieren mit JavaKara
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
FH München FB 07 Informatik/Mathematik Projektstudium Chipkarten SS 2001 Schlüsselverwaltung (Kartenseitig) Anita (cookie) Costantini, Matthias Nau, Dan.
Vom Kontext zum Projekt V Carina Berning Sabrina Gursch Pierre Streicher Intelligente Dateisysteme.
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Programmbereich, zu dem eine Deklaration gehört Arten von Gültigkeitsbereichen -Namespace : Deklarationen von Klassen, Interfaces, Structs, Enums, Delegates.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Optimale Ursprungsgerade
EPROG Tutorium #3 Philipp Effenberger
Einführung in PHP 5.
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Multimedia in Java Thomas Witschel, Kerstin Steinert & Erik Reinhard.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Java-Kurs Übung Besprechung der Hausaufgabe
JAVA Sound. Stellt low-level Routinen zur Soundverarbeitung bereit media/sound/index.jsp Java Sound:
Objektorientierte Programmierung (OOP)
Ein- und Ausgabe in Java Packet: java.io
28/07/2015Walther-Rathenau- Gewerbeschule 1 Zeichenketten (Strings)
Wien Fotos, Audio und Video Multimedia in Android.
Einführung in Powerpoint XP Universität Leipzig Herder-Institut Video und Multimedia im Unterricht: DaF Dozent: Hr. Prof. Dr. E. Tschirner.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Import java.util.*; Hilfsklassen, die man eigentlich immer braucht.
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
Konstruktoren.
Dynamisches Laden von Klassen
Thema 4: Klassenbibliothek
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
 Präsentation transkript:

Java - AG Audio - Ausgabe mit Java 3. Juli 2001 Frank Münster

Arten von Sound z„Sampled“ zMIDI Sampled: Audiodaten liegen in einer Sounddatei vorMIDI: Audiodaten liegen in Form bestimmter abrufbarer Klänge innerhalb der Hardware vor. ( MIDI - Musical Instrument Digital Interface )

Packages des Java-Sound API zjavax.sound.sampled zjavax.sound.midi zjavax.sound.sampled.spi zjavax.sound.midi.spi Wir beschäftigen uns mit dem „sampled“-Package. Die „ spi “-Packages („Service Provider Interface“) dienen der „Erweiterung“ von Java, z.B. zusätzliche Unterstützung von.mp3 Dateien, etc.

FileFormat / AudioFileFormat zUnterstützte FileFormats: zPCM  mu-law (  -law ) za-law z Unterstützte AudioFileFormats: z.wav z.au z.aiff z.rmf Der Unterschied zwischen FileFormat und AudioFileFormat: AudioFormat: Datenformat, Art des Sample, Art der Codierung AudioFileFormat: Dateiformat, die Art, wie die Daten in Dateiform gespeichert werden.

Das „Sampled“-Package zWichtige Klassen: zAudioSystem zAudioInputStream zAudioFormat zDataLine.Info z Wichtige Interfaces: z Line z Clip z SourceDataLine z Mixer z LineListener

Audio-Wiedergabe zInterface Clip zInterface SourceDataLine Geben wir Sound-Dateien als Clip wieder, so wird die komplette Datei vor dem Abspielen in den Speicher geladen. Wir haben die Möglichkeit des „loopens“, entweder den kompletten Sound oder Ausschnitte. void loop(int count); void setLoopPoints(int start, int end) Unter Verwendung einer SourceDataLine werden jeweils nur Stücke der Datei in einen Buffer geladen, diese werden dann abgespielt, währenddessen wird der Buffer erneut mit den darauf folgenden Daten beschrieben. Somit eignet sich die SouceDataLine besonders für große Dateien.

Interface Line Die zuvor beschriebenen Interfaces Clip und SourceDataLine sind vom Interface Line abgeleitet.

Abspielen einer Datei - Vorgehensweise z1. „File“-Objekt mit der gewünschten Dataei anlegen z2. „AudioInputStream“ anfordern z3. „AudioFormat“ des Sample überprüfen z4. Zum AudioFormat „passende“ Line anfordern z5. ggf. „LineListener“ hinzufügen z6. Line öffnen z7. Wiedergabe starten z8. ggf. Wiedergabe stoppen z9. Line schließen

File-Objekt anlegen import java.io.File; import java.io.IOException;... File audiodatei = new File(„e:\\beispiele\\beisp.wav“); // Verzeichnisse werden mit doppeltem // Backslash angegeben

AudioInputStream anfordern AudioInputStream audioinput = null; try { audioinput = AudioSystem.getAudioInputStream(Audiofile); } catch (Exception e) {... }

AudioFormat des Sample überprüfen... AudioFormat format = audioinput.getFormat(); System.out.println(format.toString() ); DataLine.Info info = new DataLine.Info(Clip.class, format); // DataLine.Info Objekt wird später zum // anfordern einer „passenden“ Line (hier vom // Typ „Clip“) benötigt.

„Passende“ Line anfordern... Clip line; try { line = (Clip) AudioSystem.getLine(info); // „info“ ist das zuvor angelegte DataLine.Info // Objekt. Java kann über dieses Objekt eine Line // mit den für das Sample benötigten Spezi- // fikationen anfordern) catch (Exception e) {...}

„LineListener“ hinzufügen try { line = (Clip) AudioSystem.getLine(info); line.addLineListener(this); } catch public void update(final javax.sound.sampled.LineEvent p1) { if (p1.getType().equals(LineEvent.Type.STOP)) {...}...}

Öffnen, starten etc. der Line try { line = (Clip) AudioSystem.getLine(info); line.open(audioinput); line.start(); // oder line.loop(n);... // evtl. line.stop(); } catch...

Line schließen... public void update(final javax.sound.sampled.LineEvent p1) { if (p1.getType().equals(LineEvent.Type.STOP)) { line.close(); }... } // Line muß unbedingt geschlossen werden!!! // Wird das Programm vor dem Schließen beendet, ist ein //Schließen der Line nicht mehr möglich, sie bleibt bis //zum Neustart des Rechners „reserviert“. // Mögl. Resultat: „Audio Device unavailable“

Line schließen (2) Von Line abgeleitete Objekte ( SourceDataLine, Clip, Mixer, Port, etc.) repräsentieren physische Einheiten innerhalb der Hardware (z.B. auf der Soundkarte). Daher ist die Erzeugung dieser Objekte hardwarebedingt, d.h. es können nicht beliebig viele dieser Objekte gleichzeitig existent sein. Schließen wir die Lines nach der Verwendung nicht, so kann diese Line für nichts Anderes mehr verwendet werden, da sie nicht „freigegeben“ wurde. Die nächste Anforderung muß also auf eine andere Line zurückgreifen. Gibt es keine andere Line mehr, wirft Java eine LineUnavailableException aus. Auch andere Anwendungen können in diesem Fall keine Sounds mehr abspielen und liefern Meldungen wie z.B: „Audio Device unavailable“.

Besonderheiten SourceDataLine zDaten werden Stück für Stück in einem Buffer gelesen und verarbeitet zBuffer wird in einer Schleife jeweils mit neuen Daten gefüllt zSchleife wird bei EndOfFile (Rückgabewert -1) unterbrochen (oder bei Benutzer-Stop) zLine wird geschlossen

SourceDataLine try { line = (SourceDataLine) AudioSystem.getLine(info); line open(format, int b); // b ist die Größe des Buffers in // Bytes, den die Line besitzen // soll. b kann auch weggelassen // werden, Java legt dann die Buffergröße // fest. int BUFFER_SIZE = line.getBufferSize(); int read = 0; byte[] data = new byte[BUFFER_SIZE]); int written;

SourceDataLine (2) while (read != -1) //read wird -1, wenn Dateiende erreicht { read = audioinput.read(data, 0, BUFFER_SIZE); // 0 (int offset) bedeutet, daß die // Datei beginnend bei Position 0 // (Dateianfang) gelesen werden // soll. if(read >= 0) { written = line.write(data, 0, read); } else break; } line.drain(); } // Ende von try{} catch... finally{line.close();}

Methoden AudioSystem.getAudioInputStream(file); // Liefert einen AudioInputStream, mit welchem die Daten aus der Sounddatei gelesen werden können. Audioinputstream.getFormat(); // Liefert ein AudioFormat - Objekt, welches Informationen über Das Format der in der Datei enthaltenen Audiodaten enthält. new DataLine.Info(Clip.class, audioformat); // Erzeugt ein DataLine.Info - Objekt anhand der AudioFormat- Informationen. Unter der Angabe der gewünschten Line (hier Clip) enthält das erzeugte Objekt speziellere Informationen als AudioFormat, welche zur Anforderung einer passenden „Line“ benötigt werden.

Methoden (2) DataLine.Info info.toString(); // Wandelt die im DataLine.Info Objekt enthaltenen Info‘s in einen String um, der dann angezeigt werden kann. Clip line =(Clip) AudioSystem.getLine(info); // Liefert eine den Spezifikationen des DataLine.Info Objektes entsprechende Line (hier vom Typ Clip). Der Aufruf dieser Methode muß innerhab von „try“ stehen, da möglicherweise keine entsprechende Line vorhanden ist; andernfalls wird es gar nicht erst von Java compiliert. line.open(); line.start(); line.loop(n); line.stop(); line.close(); // Verwendung selbsterklärend, loop(n) kann nur bei Lines vom Typ Clip verwendet werden, n ist die Anzahl der Wiederholungen

Methoden (3) line.addLineListener(this); // „heftet“ den LineListener (this, da er in diese Klasse implementiert ist, und Objekte dieser Klasse somit auch LineListener-Objekte sind) an die Line. In der „update“- Methode kann der LineListener dann auf „LineEvents“ reagieren (z.B. STOP-Event, CLOSE-Event, etc.) int read = audioinputstream.read(byte[] data, int offset, int Buffersize); // Das Array repräsentiert den Buffer, Offset die Startposition, Buffersize die Größe des Buffers, also die Größe des Arrays. Beginnend bei Offset werden Daten aus audioinputstream in den buffer gelesen, wobei die Methode jeweils die Anzahl der gelesenen Bytes zurückliefert (int read).

Methoden (4) int written = line.write(byte[] data, int Offset, int read); // Umgekehrt werden hier die zuvor in den Buffer gelesenen Daten in die Line „geschrieben“, damit eine Wiedergabe erfolgen kann. line.drain(); // Befinden sich noch Daten im Buffer, werden diese noch gelesen und verarbeitet (abgespielt), bis der Buffer leer ist. line.flush(); // Die restliche Daten werden „weggespült“, ohne daß sie weiter verarbeitet werden.

Literatur Leider läßt sich zur Zeit noch nicht allzuviel Literatur zu diesem Thema finden, möglicherweise auch weil das Java Sound-API erst seit Version 1.3 im JDK enthalten ist. Zuvor war Sound in Java nur bedingt möglich, und ohne größere Probleme nur in Applets. Zu empfehlen ist der Java Sound-API Programmer‘s Guide von Sun, welchen man sich unter als pdf (Adobe Acrobat) - Datei heruterladen kann. Diese Anleitung ist allerdings in HTML-Form auch in die API- Docs, welche im GIS-Labor zugänglich sind, integriert.