JAVA Sound Java Sound: • Stellt low-level Routinen zur Soundverarbeitung bereit • http://java.sun.com/products/javamedia/sound/index.jsp Applikation Wiedergabe Aufnahme Daten verarbeitung Java Sound OS-Hardware Soundausgabe vorrichtungen VM Java Sound • Programm muss sich selbst um die Verwaltung elementarer an der Soundverarbeitung beteiligter Datenstrukturen kümmern. • Zu diesen gehören Mixer, Line, Format, etc.. • Diese Ressourcen werden von der Klasse AudioSystem verwaltet. Mixer • Entspricht einer Vorrichtung zur Verwaltung und Modifikation von Audiosignalen. • Diese kann sowohl in Hard- als auch in Software vorliegen. • Verfügt über ein und Ausgabekanäle (Lines) diese sind ihrerseits mit Kanälen des Betriebssystems oder der Hardware verbunden. Mixer Lines • Lines sind die eigentlichen Ein- und Ausgabekanäle. • Sie stellen die Schnittstelle zwischen den eingehenden Audioinformationen und einem Mixer dar. • Können von AudioSystem oder einem assoziierten Mixer bereitgestellt werden. Clip und SourceDataLine • Bei diesen Klassen handelt es sich um Lines. • Clip wird genutzt um auf eine Audioquelle zuzugreifen, die vollständig im Voraus geladen werden kann. • SourceDataLines stellen die Möglichkeit bereit, eine Audioquelle stückweise in einen Puffer einzuladen und auszugeben, der erheblich kleiner ist, als die Quelle selbst. SourceDataLine • Der Benutzer lädt Daten in den Puffer hinein, diese werden dann an den Mixer weitergegeben. • Die Kommunikation über den Status der Line erfolgt über Events. Java Sound • Der Benutzer (also das Programm) muss sich selbständig um die Details der Medienwiedergabe und bestimmte Aufgaben wie Streaming etc. kümmern. • Dies ermöglicht jedoch auch weitgehende Kontrolle über den Ablauf. Java Media Framework (JMF): • http://java.sun.com/products/javamedia/jmf/index.jsp • Abstrahiert von diversen, in Java integrierten, Medienbibliotheken. • Durch vorgefertigte Klassen kann das Wiedergeben, Aufzeichnen und Umwandeln von Medienquellen in einfacherer Art und Weise gehandhabt werden als durch Verwendung der low-level Bibliotheken (bsplw. Java Sound). JMF • Verfügt bsplw. über eine Player API. • Weitere API‘s stellen Routinen zum Capturen zur Konvertierung und zur Weiterverarbeitung von Medienquellen Player API • Ermöglicht die Wiedergabe einer Vielzahl von Medienformaten. • Wiedergabemechanismus ist weitgehend unabhängig von der jeweiligen Ausprägung der Medienquelle (Stream, lokale Datei etc.) Player API • Kann mit URL initialisiert werden. • Übernimmt selbständig Prefetching, Streamverarbeitung und weitere Interna der Medienwiedergabe. • Benutzer muss nur noch den Status des Players beachten und nicht direkt mit den Bereitstellungsmechanismen der Medienquellen kommunizieren. Player API Service Provider Interface (SPI): • SPI ist eine Schnittstelle, die es erlaubt, die Fähigkeiten der JVM zu erweitern. • Diese Funktionalitätserweiterung kann so durchgeführt werden, dass sie für den Benutzer der VM (i.A. ein Java Programm) transparent bleibt. • So können z.B. nachträglich weitere Formate der Verarbeitungskompetenz der Java Medienbibliotheken hinzugefügt werden. Mp3 und Ogg Vorbis MP3 - vom Frauenhofer Institut entwickelt - Komprimierung durch Informationsverlust Ogg Vorbis - im Gegensatz zu MP3 freies Format - Komprimierung durch Informationsverlust Adressen der Soundbibliotheken -http://www.javazoom.net/projects.html -http://www.jcraft.com/jorbis/ SPI und Plugin -http://www.javazoom.net/mp3spi/documents.html -http://www.javazoom.net/vorbisspi/documents.html -http://www.tritonus.org/plugins.html Ein Beispiel für das Auslesen der MP3 Header Informationen: import org.tritonus.share.sampled.TAudioFormat; import org.tritonus.share.sampled.file.TAudioFileFormat; [...] File file = new File(filename); AudioFileFormat baseFileFormat = null; AudioFormat baseFormat = null; baseFileFormat = AudioSystem.getAudioFileFormat(file); baseFormat = baseFileFormat.getFormat(); // TAudioFileFormat properties if (baseFileFormat instanceof TAudioFileFormat) { Map properties = ((TAudioFileFormat)baseFileFormat).properties(); String key = "author"; String val = (String) properties.get(key); key = "mp3.id3tagv2"; InputStream tag= (InputStream) properties.get(key); } // TAudioFormat properties if (baseFormat instanceof TAudioFormat) { Map properties = ((TAudioFormat)baseFormat).properties(); String key = "bitrate"; Integer val = (Integer) properties.get(key); } (Quelle: http://www.javazoom.net/mp3spi/documents.html) //Teil der Standard java Sound Bib. // Teil der Standard java Sound Bib.