Home
java sound als plattform für die entwicklung
Contents
1. Eine weitere M glichkeit den sichtbaren Bereich zu definieren bietet die Wellenform am unteren Rand des Editors Sie stellt immer eine bersicht ber den gesamten Dateiinhalt dar Durch Selek tieren eines Bereichs in dieser Wellenform wird der betreffende Bereich in der Hauptwellenform darstellung angezeigt Ebenso dient die untere Wellenform zur optischen Kontrolle welcher Teil der Datei gerade in der Hauptwellenformdarstellung zu sehen ist 1 2 2 Die MC 909 Version Aufbauend auf der Grundversion des Sampleeditors wurde eine weitere Version entwickelt die die Kommunikation mit der Sampling Groovebox Roland MC 909 erm glicht Sie unterscheidet sich von der Grundversion optisch lediglich in der Nutzung des linken Fensterteils der in der Grund version als Info Bereich dient sowie in einer neuen Seite f r die MIDI Einstellungen im Settings Dialog Au erdem kommt am unteren Rand eine Nachbildung der Keyboard Pads der MC 909 hinzu siehe Abbildung 22 die eine Hilfestellung f r das Exportieren von Rhythm Sets bieten soll BERREERRRRRRRRRR Abbildung 22 Die Keyboard Pads der MC 909 als Bedienelemente im Sampleeditor Im Folgenden wird diese Groovebox kurz vorgestellt Anschlie end werden die neuen Elemente der MC 909 Version gegen ber der Grundversion des Sampleeditors beschrieben 1 2 2 1 Kurzportrait der Groovebox MC 909 Abbildung 23 Roland MC 909 Ende 2003 brachte der Musikinstrumentenhersteller Roland mit
2. ben werden H lt man beim Dr cken der Pfeiltasten die Ergo Taste gedr ckt wird der Marker jeweils nur um ein Sample verschoben 1 2 1 4 Transportleiste Rechts oben befindet sich die Transportleiste zur Steuerung des Abspiel und Aufnahmevorgangs Bei Bet tigung des Play Buttons wird der gerade selektierte Bereich abgespielt oder falls kein Bereich selektiert ist der Bereich von der aktuellen Position bis zum Ende der Datei Das Abspie len erfolgt stets per Streaming obwohl Java Sound mit dem Clip Interface auch einen anderen Mechanismus erlauben w rde So wird gew hrleistet dass der Speicherverbrauch niedrig bleibt und dass keine Begrenzung bez glich der abspielbaren Datenmenge existiert gt Skalierbarkeit Der Pause Button ist nur aktiv wenn gerade abgespielt oder aufgenommen wird Durch ihn kann der aktuelle Abspiel oder Aufnahmevorgang angehalten werden die Treiberressourcen werden dabei aber nicht freigegeben so dass ein sofortiges Fortfahren m glich ist Im Gegensatz dazu wird beim Bet tigen des Stop Buttons die Position an den Anfang des selektierten Bereichs zur ckge setzt und alle Ressourcen werden freigegeben so dass andere Anwendungen wieder darauf zugrei fen k nnen Die Aufnahme wird mit dem Rec Button gestartet Eine Aufnahme ist nur m glich wenn eine neue Datei mit dem Men befehl File gt New oder dem Tastaturk rzel St rg N erzeugt wurde Nach dem eine Aufnahme durch Dr cken de
3. oder auf Performance optimiert werden kann 2 5 Exkurs SWT JFace als Alternative zu AWT Swing Ein Bestandteil von Java der bei Desktop Anwendungen beim Benutzer h ufig den Eindruck von Langsamkeit erzeugt ist das plattformunabh ngig gehaltene GUI Framework AWT 26 Swing Die Idee bei Swing ist das Erscheinungsbild von Desktop Applikationen unabh ngig von dem darunter liegenden Betriebssystem kontrollieren zu k nnen Daher l uft das Rendering und die Ereignisverarbeitung zu einem Gro teil in Java ab und ist in der Regel etwas langsamer als die betriebssystemeigenen GUI Frameworks Da der Benutzer im Allgemeinen bei GUI Elementen sehr empfindlich auf Verz gerungen reagiert wirken AWT Swing basierte Anwendungen oft langsam oder tr ge Swing wird auch als ein Heavyweight Framework bezeichnet da es zwangs l ufig einen hohen Ressourcenverbrauch hat Um auch Java Applikationen mit nativem Feeling zu erm glichen wurde mit dem von IBM initi ierten eclipse 28 Projekts unabh ngig von AWT Swing ein GUI Framework namens SWT 2 aufge baut das als Lightweight Framework konzipiert ist und sich nur als transparente Schicht zu den Betriebssystemaufrufen versteht Dazu existiert mit JFace auch eine Klassenbibliothek die auf SWT aufbaut und dem Programmierer h ufig wiederkehrende Aufgaben abnimmt Bei SWT wird be wusst in Kauf genommen dass der Programmierer das Ausschen der GUI Elemente nicht voll st ndig kontrollieren k
4. Methoden k nnen in Java mit dem Schl sselwort native versehen werden um sie als native Me thoden zu markieren Diese werden dann nicht in Java ausimplementiert sondern wie bei einer Interfacedeklaration mit einem Semikolon abgeschlossen vgl Codebeispiel 1 130 Aus DAUM S 124 131 Vgl DAUM S 124 132 Vgl HORSTMANN S 958 IV Audioverarbeitung in Java 51 1 2 JNI Beispielklass 3 ur 4 class NativeExample 5 Bei der ersten Verwendung der Klasse 6 native Bibliothek laden 7 static 8 System loadLibrary examplelib 9 10 JEF 11 Diese Methode wird in C C ausimplementiert 12 e 13 public native int nativeMethod 14 Codebeispiel 1 JNI Beispielklasse in Java Mit dem im JDK enthaltenen Programm javah kann man sich dann eine C Headerdatei erzeugen lassen die die Deklaration der in C C zu implementierenden Funktionen enth lt Nachdem die Funktionen implementiert und in eine Bibliothek kompiliert wurden muss diese noch mittels der statischen Methode System loadLibrary String libname in Java geladen werden Anschlie end kann auf die nativen Methoden so zugegriffen werden als w ren es reine Java Methoden Nach au en hin bleibt die Verwendung des JNI also transparent Vom nativen Code aus kann auf die Java Klassen und Objekte mit Hilfe des bei jedem Funktionsaufruf von Java berge benen JNIEnv Pseudoobjekts zugegriffen werden Ebe
5. den sollen die nicht von jedem PlugIn unterst tzt werden Beim Aufruf der Methoden getAudioFileFormat bzw getAudioFileOutputStream einer AudioManager Instanz kann angegeben werden welche property keys zwingend erforderlich sind und welche w nschenswert w ren Aus diesen Angaben wird der AudioManager dann den am besten passenden Provider ermitteln und den Aufruf an ihn weiterleiten Wird kein Provider gefun den der alle zwingend ben tigten property keys unterst tzt so wird eine UnsupportedAudioFileException geworfen Ergebnis Die entstandene PlugIn Schnittstelle zeigt Wege auf wie die SPI Schnittstelle von Java Sound er weitert werden k nnte um die beschriebenen Schw chen zu berwinden Sie wurde auch an ver schiedenen Stellen im Sampleeditor eingesetzt wo ein Einsatz der Java Sound SPI Schnittstelle nicht ausreichend gewesen w re Alle dazugeh rigen Klassen befinden sich im Package com groovemanager sampled providers VI Praktischer Teil 77 1 2 Sampleeditor Hauptinhalt des praktischen Teils dieser Arbeit war die Entwicklung eines Sampleeditors auf Basis von Java Sound Dieser wurde in zwei Versionen fertig gestellt Die Grundversion enth lt die Basis funktionen eines Sampleeditors sowie eine visuelle Kontrolle ber die verwendeten Ressourcen Die MC 909 Version verzichtet auf diese visuelle Kontrolle erweitert daf r aber die Grundversion um einige Funktionen f r die Kommunikation mit der Hardware
6. java sun com developer technicalArticles Media avaSoundAPI Letzter Zugriff 15 06 2004 Microsoft 2002 DirectKS Sample Application Microsoft Hardware and Driver Central http www microsoft com whdc hwdev tech audio DirectKS mspx Letzter Zugriff 15 06 2004 MIDI Mannufacturer s Association http www midi org Letzter Zugriff 15 07 2004 Musichne Genrelexikon Gregorianik http www musicline de de genre lexikon Klassik Gregorianik Letzter Zugriff 13 07 2004 Ner Lexikon http www net lexikon net Letzter Zugriff 15 06 2004 Literaturverzeichnis 97 PHILLIPS Phillips D 2003 Computer Music and the Linux Operating System A Re port from the Front http mitpress mit edu journals pdf comj_27_4 27_0 pdf Letzter Zugriff 15 06 2004 PORTMUSIC PortMusic APIs http www 2 cs cmu edu music portmusic Letzter Zugriff 16 06 2004 ULLENBOOM Ullenboom C 2002 Java ist auch eine Insel 3 Auflage http www galileocomputing de openbook javainsel3 Letzter Zugriff 15 06 2004 VOGT Vogt M 2004 Die Geschichte ATARI s http www atari computermuseum de history htm Letzter Zugriff 15 06 2004 Sonstige Quellen ASIO B MERS INTERVIEW JAVADOC JS INTEREST MACMILLAN RELNOTES ROLAND SCHNEIDER Steinberg 1997 Audio Streaming Input Output Specification Devel opment Kit 2 0 B mers F 2000 Wavelets in real time digital audio processing Analysis and sample imple
7. Es gibt verschiedene Situationen in denen Programmierer an die Grenzen von Java sto en und eine Schnittstelle ben tigen um auf Anwendungsteile zuzugreifen die in einer anderen Sprache geschrieben werden oder wurden Insbesondere in folgenden F llen e Die gew nschte Funktionalit t besteht bereits als funktionierende und bew hrte Bibliothek in einer anderen Sprache und eine Portierung in Java w re zu aufw ndig oder aufgrund von fehlendem Know how unm glich e Es wird ein Zugriff auf spezielle hardware oder betriebssystemspezifische Funktionen ge w nscht der direkt aus Java heraus unm glich ist e F r eine zeitkritische Anwendung konnte in einer anderen Sprache eine entschieden h he re Ausf hrungsgeschwindigkeit als in Java erreicht werden 13 Dass vor allem die ersten beiden F lle bei der Entwicklung professioneller Audioanwendungen in Java h ufig auftreten wird im praktischen Teil dieser Arbeit deutlich Jedoch sollte vor der Ver wendung von nativem Code stets eine Abw gung stattfinden ob der erwartete Vorteil die Ein schr nkung der Plattformunabh ngigkeit sowie den erzeugten Overhead wert ist Zwar kann der native Code theoretisch in jeder anderen Programmiersprache geschrieben sein solange man auf eine Java Bindung f r den entsprechenden Compiler zur ckgreifen kann In den meisten F llen wird es sich dabei aber um C oder C handeln F r diese F lle sieht das JDK das Java Native Interface JNJ vor
8. Jede Plattform hat zudem ein komplett anderes zugrunde liegendes Audio und MIDI System Java Sound schafft hier eine gute Abstraktion Zudem ist man bei Sun inzwischen bem ht in den Implementierungen die von der jeweiligen Plattform gebotenen M glichkeiten auszureizen In den ersten Java Sound Versionen war das weniger der Fall Man versuchte mit der Java Sound Audio Engine auf allen Plattformen gleiches Verhalten zu erzielen jg Man kann daher sagen dass Java Sound so viel wie m glich aber inzwischen auch so wenig wie n tig plattformunabh ngig gehalten ist Ein Problem bei der Plattformunabh ngigkeit ergibt sich jedoch bei der Unterst tzung der Mac Plattform Wie erw hnt liegt die Zust ndigkeit f r die Implementierung von Java Sound f r Mac Betriebssysteme bei Apple Die bisherige Aktivit t von Apple macht da nicht viel Hoffnung f r die Zukunft Allerdings existiert f r CoreAudio das Audio MIDI Framework des Mac OS X Betriebs systems eine Java Anbindung wenn auch keine Anbindung an Java Sound Diese Tatsache sowie die Existenz der SPI Schnittstellen in Java Sound erm glichen die Entwicklung einer CoreAudio Anbindung auch von Drittanbietern Es bleibt zu hoffen dass Apple oder ein Drittanbieter hier noch eine vollst ndige CoreAudio Unterst tzung nachreichen wird 4 Eignung f r studiotaugliche Anwendungen An dieser Stelle sollen noch einmal die Erkenntnisse aus theoretischer und praktischer Arbeit in Bezug auf die
9. Letzter Zugriff 15 06 2004 COREAUDIO Apple Computer Inc 2001 Audio and MIDI on Mac OS X http developer apple com audio pdf coreaudio pdf Letzter Zugriff 15 06 2004 Literaturverzeichnis 96 COWELL SHAH DICKMAN ESSER JAVASOUND JSRESOURCES KIR LY LEWIS MELOAN MICROSOFT MIDI MUSICLINE NET LEXIKON Cowell Shah C W 2004 Nine Language Performance Round up Bench marking Math amp amp File I O http www osnews com story php news_id 5602 Letzter Zugriff 16 06 2004 Dickman L 2002 A Comparison of interpreted Java WAT AOT JIT and DAC http www jadcentral com campaign knowledge_kit esmertec pdf Letzter Zugriff 15 06 2004 Esser F 2001 Java 2 Designmuster und Zertifizierungswissen http www galileocomputing de openbook java2 index htm Letzter Zugriff 15 06 2004 Sun Microsystems Inc 2004 Java Sound API Programmer s Guide http java sun com j2se 1 5 0 docs guide sound programmer_guide contents html Letzter Zugriff 15 06 2004 Java Sound Resources http www jsresources org Letzter Zugriff 29 06 2004 Kir ly A 2001 Real Time Specification for Java RTS http www ifi unizh ch riedl lectures rtsj pdf Letzter Zugriff 15 06 2004 Lewis J P 2004 Performance of Java versus C http www idiom com zilla Computer javaCbenchmark html Letzter Zugriff 15 06 2004 Meloan M 1999 The Science of Java Sound http
10. PCI PCM RFE RAM RMF ROM SAOL SASL SDK SMPTE SPI SP MIDI SWT WDM XMF Musical Instrument Digital Interface MIDI Manufacturer s Association Moving Pictures Expert Group Most Significant Byte MIDI Time Code Open Sound System Peripheral Component Interconnect Pulse Code Modulation Request for Enhancement Random Access Memory Rich Media Format Read Only Memory Structured Audio Orchestra Language Structured Audio Score Language Software Development Kit Society of Motion Picture and Television Engineers Service Provider Interface Scalable Polyphony MIDI Standard Widget Toolkit Windows Driver Model eXtensible Music Format Vorwort 10 Vorwort Die Motivation zu dieser Arbeit entstand als ich f r meine Groovebox Roland MC 909 versuch te einen Softwareeditor zu schreiben Um plattformunabh ngig zu bleiben sollte dieser in Java realisiert werden Ich musste schnell feststellen dass Java Sound zwar von der API Schnittstelle her eine umfangreiche Unterst tzung f r den Zugriff auf Audio und MIDI Hardware bietet die Implementierung in J2SE3 1 4 0 welche ich damals benutzte aber unvollst ndig ist Ich interessierte mich daf r inwieweit ein Projekt wie der von mir geplante Editor bzw allgemein professionelle Anwendungen im Audiobereich mit Java m glich sind Hinzu kam f r mich der Wunsch die Besonderheiten im Bereich der Audioprogrammierung theoretisch und praktisch zu erlernen und zu erfah
11. beispielsweise bei DataLine oder Mixer eine solche Methode vergeblich Weiterhin besteht keine M glichkeit zur Einbindung externer Synchronisationsquellen Professio nelle Soundkarten bieten beispielsweise Wordclock Eingange an an die ein Clock Signal zur Syn V Java Sound 65 chronisation angelegt werden kann In Java Sound existiert derzeit kein Mechanismus f r den Zugriff auf solche Einstellungen 4 Stand der Entwicklung 4 1 Die Referenzimplementierung von Sun Um ein grobes Bild ber den Stand der Entwicklung von Suns Referenzimplementierung von Java Sound zu bekommen ist es hilfreich sich die Verbesserungen und Bugfixes anzusehen die in J2SE 1 5 0 hinzugekommen sind Ports are now available on all platforms MIDI device I O is now available on all plat forms Optimized direct audio access is implemented on all platforms Java Sound no longer prevents the VM from exiting 45 Ganz offensichtlich war der Stand der Java Sound Implementierung bis Version 1 4 x unvollstandig und fehlerbehaftet So war es auf vielen Plattformen nicht m glich die vorhandenen Ger te abzu fragen es konnte also meist nur auf die f r viele Anwendungen v llig unzureichende Java Sound Audio Engine zur ckgegriffen werden Da J2SE 1 5 0 zu dem Zeitpunkt dieser Arbeit Mitte Juli 2004 immer noch nur als Beta Version erh ltlich ist und da es einige Zeit dauern wird bis sich diese Version bei den Endbenutzern durch setz
12. 19 Fehlermeldung 20 Codebeispiel 5 Senden von MIDI Nachrichten mit Java Sound In Codebeispiel 5 wird gezeigt wie in Java Sound eine Note On Note Off Sequenz gesendet wer den kann Dazu werden in den Zeilen 6 9 zun chst die entsprechenden ShortMessage Objekte erzeugt und mit dem gew nschten Nachrichteninhalt gef llt Der Wert 0 entspricht hier dem ersten Kanal 60 entspricht der Taste C1 und 100 ist die Anschlagsgeschwindigkeit Beim Senden der Nachrichten an den Receiver des MIDI Out Anschlusses Zeilen 11 14 muss ein Zeitstempel angegeben werden Der Wert 1 bedeutet hier ein sofortiges senden Da die Note eine Sekunde lang klingen soll wird in Zeile 13 eine Sekunde gewartet bevor das Note Off Event gesendet wird MIDI Verbindungen Um interne MIDI Verbindungen herzustellen verwendet Java Sound ein Modell mit den Interfaces Transmitter und Receiver Einem Receiver k nnen ber die Methode send MidiMessage MIDI Nachrichten geschickt werden Ein Transmitter sendet dagegen von sich aus MIDI Nachrichten ber setReceiver Receiver kann ihm ein Receiver zugeordnet werden an den er die Daten schickt Ohne Receiver sendet der Transmitter ins Leere Jede MidiDevice Instanz kann mit getTransmitter oder getReceiver um eine Instanz des gew nschten Interfaces gebeten werden Verf gt die Instanz ber keinen freien Transmitter bzw Receiver mehr wird eine MidiUnavailableException geworfen Wird ein Recei
13. Benachrichtigung von Listener Objekten erm glichen w r 142 Vol http bugs sun com bugdatabase view_bug do bug_id 5061439 143 Vol J AVASOUND Appendix 2 144 Vol http bugs sun com bugdatabase view_bug do bug_id 4666881 V Java Sound 63 de damit Anwendungsentwickler auf Situations nderungen zur Laufzeit reagieren k nnten Bisher besteht lediglich die M glichkeit auf das ffnen Schlie en Starten oder Stoppen einer Line Instanz zu reagieren Eine m gliche Erweiterung k nnte wie in Codebeispiel 6 aussehen Status n derungen k nnten ber die propertyChanged Methode bekannt gemacht werden und Fehlersi tuationen ber errorOccured ll jr 2 Erweiterung des LineListener Interface 3 4 public interface MixerListener extends LineListener 5 6 Benachrichtigung ber nderung einer Eigenschaft F param key Der Schl ssel der ge nderten Eigenschaft 8 x param newValue Der neue Wert der Eigenschaft 9 ty 10 public void propertyChanged String key Object newValue 11 pee 12 Benachrichtigung tiber das Auftreten eines Fehlers 13 param t Der aufgetretene Fehler 14 15 public void errorOccured Throwable t 16 Codebeispiel 6 M gliche erweiterte Listener Unterst tzung f r Java Sound Konfigurierbarkeit Auch die Konfigurierbarkeit scheint bei Java Sound auf den ersten Blick gut gel st Es existieren zu den wichtigen Klassen
14. Framerate sind daher bei unkomprimierten Formaten voneinander abh ngig Um Audiodaten von einem Format in ein anderes zu konvertieren bietet die Klasse AudioSystem statische Methoden an falls ein entsprechender FormatConversionProvider siehe 2 3 installiert ist Hierf r muss ein AudioInputStream s u im Ausgangsformat vorliegen Mit AudioSystem isConversionSupported AudioFormat AudioFormat kann ermittelt werden ob die gew nschte Konvertierung m glich ist und mit AudioSystem getAudiolnputStream AudioFormat AudioInputStream kann ein neuer AudioInputStream im gew nschten Format erzeugt werden Neben dem Format der Audiodaten selbst enth lt die Klasse AudioFileFormat Eigenschaften von Audio Dateiformaten n mlich Dateityp Dateil nge sowie die L nge der enthaltenen Audiodaten in Sample Frames Ab Version 1 5 0 bieten sowohl AudioFormat als auch AudioFileFormat mit den Methoden getProperty String key und getProperties Zugriff auf zus tzliche Informationen die in einem Format oder einer Datei enthalten sein k nnen JAVADOC macht hierzu Vorschl ge f r m gliche property keys Streams Zur Verarbeitung von Audiodatenstr men bietet Java Sound die Klasse AudioInputStream an welche von java io InputStream erbt Sie erweitert InputStream um die Angabe eines AudioFormats sowie die Gesamtl nge der Sampledaten Diese kann aber auch den Wert AudioSystem NOT_SPECIFIED annehmen was bedeutet dass die L nge
15. Groovebox Roland MC 909 Die Installation wird in Anhang C ausf hrlich beschrieben Die spezifischen Klassen f r die Grundversion finden sich im Package com groovemanager app sse die der MC 909 Version im Package com groovemanager app mc909se Alle weiteren Packages enthalten gemeinsam genutz te Elemente die auch von anderen Anwendungen wiederverwendet werden k nnten Beide Versionen sind unter Windows und Linux getestet worden Theoretisch m ssten sie auch auf jeder anderen Plattform mit SWT Implementierung lauff hig sein 1 2 1 Die Grundversion Ein Sampleeditor dient zur Bearbeitung samplingbasierter Audiodateien Dazu sollte er sowohl eine graphische Darstellung dieser Daten als auch elementare Grundfunktionen wie ffnen Speichern Aufnehmen oder Abspielen unterst tzen Hinzu kommen Basisfunktionen zur Bearbeitung des Audiomaterials wie L schen Copy Paste usw Beispiele f r bekannte professionelle Sampleeditoren sind Steinbergs Wavelab Adobes Audition fr her Cool Edit oder SoundForge von Sonic Foundry Bei der Entwicklung der Grundversion des Sampleeditors sollten folgende Ziele erreicht werden e Kennen lernen und Testen des Java Sound sampled Packages e Orientierung an den Anforderungen an Audiosoftware im Studiobereich siehe 111 3 e Implementierung elementarer Grundfunktionalit ten eines Sampleeditors e Konsequenter Einsatz von Nichtdestruktiver Bearbeitung siehe HI 1 3 2 3 e Entwicklung wiederverwendbarer Ei
16. Hauptvorteil von ASIO geringe Latenz zu verlieren e Verwendung von nativem Code nur zum Zugriff auf die API Funktionen von ASIO zur Wahrung bestm glicher Plattformunabh ngigkeit VI Praktischer Teil 69 e ASIO Bestandteile die sich in Java Sound nicht abbilden lassen als zus tzliche Methoden anbieten Insbesondere die Verwirklichung der ersten beiden Ziele erwies sich als schwierig da die Grund konzepte von Java Sound und ASIO unterschiedlicher kaum sein k nnten So baut ASIO auf ein Callback Modell in dem der Treiber st ndig Nachrichten an die Anwendung schickt wenn er neue Audiodaten ben tigt oder wenn in einer Aufnahmesituation neue Daten zur Verarbeitung vorlie gen Java Sound sieht hingegen vor dass die Anwendung laufend in den vom Treiber vorgegebenen Puffer schreibt oder aus ihm liest Dar ber hinaus finden sich noch viele weitere Punkte in denen die Unterschiedlichkeit der Ans tze erkennbar wird In Tabelle 2 sind die Hauptunterschiede aufge f hrt Tabelle 2 Hauptunterschiede im Konzept von ASIO und Java Sound ASIO Java Sound Grundlegender Ansatz Aufnahme Push Abspielen Pull Callback basiert Aufnahme Pull Abspielen Push Verf gbarkeit H chstens ein ASIO Treiber gleichzeitig von h chstens einer Anwendung nutzbar Keine Einschr nkung Datenkan le Pro Treiber mehrere Mono Kan le mit einheitlichem Format Pro Mixer mehrere DataLines k nnen unterschiedliche Kan
17. Man unterscheidet Verarbeitungen nach ihrer Echtzeitanforderung Erfolgt die Verarbeitung als eigener Prozess der vom Benutzer explizit gestartet wird so besteht keine Echtzeitanforderung man spricht in diesem Fall von Offine Verarbeitung Vorteil der Offline Verarbeitung ist es dass aufw ndige Algorithmen eingesetzt werden k nnen da die CPU Last nicht besonders gering gehal ten werden muss Au erdem ist es bei der Offline Verarbeitung m glich das Ausgangsmaterial als Ganzes zu analysieren weshalb einige Verarbeitungen nur offline m glich sind gt Findet die Verarbeitung dagegen erst zur Zeit des Abspielens oder Aufnehmens in Echtzeit statt spricht man von Echtzeitverarbeitung Vor und Nachteile siehe Echtzeitberechnung im vorherigen Abschnitt Bei der Echtzeitverarbeitung k nnen stets nur der aktuell zu verarbeitende Datenchunk sowie die bisher verarbeiteten Chunks als Grundlage f r eine Analyse herangezogen werden 50 Central Processing Unit 51 Kin Beispiel f r eine reine Offline Verarbeitung ist das Umkehren einer Audiodatei was als Online Verarbeitung nicht m glich ist 52 Vel BR SE S 44f III Audioprogrammierung 29 Analysen Analysen k nnen sich auf verschiedenste Aspekte beziehen Hier sind der Fantasie keine Grenzen gesetzt Es existieren sogar schon Ans tze um aus einem gegebenen Audiomaterial per Analyse den Musikstil oder Interpreten zu ermitteln In der Regel werden Analysen aber mit dem Zi
18. Thread aufgeru fen werden um den weiteren Programmablauf insbesondere das GUI nicht unn tig lang auf zuhalten Der einfache Aufruf verleitet jedoch dazu dies nicht zu tun Das Anbieten von AudioOutputStreams als Gegenst ck zu AudioInputStreams w re hier sicherlich die elegantere Variante gewesen Nutzen vorhandener Ressourcen Abgesehen von den unter Konfigurierbarkeit angesprochenen Problemen kann unter Java Sound weitestgehend auf alle verf gbaren Ressourcen zugegriffen werden Schwierig wird es nat rlich dann wenn spezielle Ressoutcen wie z B zus tzliche DSP Chips angesprochen werden sollen Hier kommt Java ganz deutlich an seine Grenzen In solchen F llen m ssten ber JNI Sonderl sungen gefunden werden Das stellt allerdings keinen besonderen Nachteil von Java Sound dar da ein hnlicher Aufwand auch bei Benutzung anderer Frameworks n tig w re Synchronisation Das Java Sound API bietet an mehreren Stellen Unterst tzung f r Synchronisation So k nnen Sequencer Objekte mit den Methoden setMasterSyncMode und setSlaveSyncMode in bestimmte Synchronisations Modi versetzt werden Ebenso steht f r Mixer Objekte die Methode synchronize zur Verf gung um mehrere DataLines zueinander zu synchronisieren F r die Berechnung der Latenzen der an einer Synchronisationskette beteiligten Elemente steht lediglich die Methode getLatency des Synthesizer Interfaces zur Verf gung Im sampled Package sucht man
19. Zwecke auszureizen Auch f r Mac Software wird ASIO nach wie vor eingesetzt werden da es den gro en Vorteil der Plattformunabh ngiskeit bietet was die Portabilit t der Software erh ht Auch arbeiten noch viele Studios mit Mac OS 9 x welches CoreAudio nicht unterst tzt Tabelle 1 bersicht Audiotreiberschnittstellen Mehrkanal Betriebssysteme unterst tzung Latenz Verbreitung MME Windows Nein Sehr hoch Standard Direct Sound Windows Nein Gering Sehr hoch ASIO Windows Mac Ja Sehr gering Im professionellen Bereich hoch EASI Windows Mac Ja Sehr gering Gering GSIF Windows Mac Ja Sehr gering Gering SoundManager Mac OS 8 x 9 x Nein Gering Standard CoreAudio Mac OS X Ja Sehr gering Standard Open Sound Linux Nein Hoch Standard System Commercial Commercial Gering Gering ALSA Linux Ja Sehr gering Standard ab Kernel 2 6 3 Anforderungen an Audiosoftware im Studiobereich Es gibt mit Sicherheit zahlreiche Meinungen dar ber welche besonderen Anforderungen Audio software im Studiobereich erf llen muss und eine allgemeing ltige Definition l sst sich daf r nicht finden Daher soll im Folgenden eine Liste der wichtigsten Anforderungen aufgestellt werden die keinen Anspruch auf Vollst ndigkeit erhebt und die pers nliche Sicht und Erfahrung des Autors widerspiegelt Allgemeing ltige Anforderungen an Software wie Stabilit t geringer Ressourcenverbrauch oder intuit
20. auf Basis von Java Sound sssessseeiesesssrsrsresrersrrstsrrterstsssstsrereretssesrsrerrerseseee 67 6 Alternativen zuJava Sound ue srl sk ee BR Bikr being 67 VI Praktischer Teil ssssssssssrssssssssssssssessessssessssssessessssessessssessessssessasessessesessasessassesessessassessssessesees 68 1 DieBeispielapplik ti nien 2 04 eean Aa E NE EE SAPARA EEEE AOA PEE ESAERA N ti 68 Leds Java Sound Plussa e eea l EE EE S e EE E NE Ee de e REN EEN ES 68 1 1 1 ASTOMixerProvider 2 22 24 EEN 68 11 2 FloatC nversionProvider eaaa E eE a EE AEE E AE AER 71 E GE EE 73 1 1 4 Eigene Plus In Schnittstelle 22 32 2 2 2e2esesin fan Bestens 75 Ee 2 8 Hs on sie 77 1 2 1 Die Grund version 2 2 este ik tn es ein rer lehren 77 12 2 Die ME 909 Version 4 2 rear E ee EE 83 2 Probleme nd Losin gen gege fie tea deer ahead ee 88 3 Bewertung Zusammenfassung enee EE EES 89 VII Abschlie ende Bewertung ussessrssssssnsnnsnssnsnnsnssnsnnsnssnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnssnsnnsnnsnsnnsnnsnsnnsnnenn 90 T Das Arbeiten mit Java ng eet ensemble 90 2 St rken Schwebech n reen e EEEE eE EEEE EEE EE E EE EERE svaeud EE EEEE ESE 90 3 Pl ttformu nabh ngigkeite iicn enie Eara e aE E E A E a epee E EN e Er 91 4 Eignung f r studiotaugliche Anwendungen sesesesseeseeseeiesesrstseerterersrsesreretetsretretsersesrererreserseseeee 92 SAUER EE 93 Literaturverzeichnis 0s0000s00r0000n00r0n0nn0nnonsnnonnsnsnnsnn
21. damals so Currently we are enabling multimedia in the computer desktop market by adding true sound support in the Java 2 platform In the future we would like to see our Java Sound API technology used in professional consumer and Internet audio applications 136 134 Die Applet Klasse beispielsweise war ber die play Methode in der Lage Sound Dateien nur in Suns AU Format abzuspielen 135 http www tritonus org 136 Aus MELOAN V Java Sound 53 F r k nftige Versionen wurde sogar von expliziter Unterst tzung professioneller Anforderungen gesprochen Movie and record companies need professional quality audio to use the Java Sound API technology Implementing support for 24 bit audio and multi channel configurations in the Java Sound Engine will encourage the development of professional editing and playback applications 137 In erster Linie aber sollte zun chst eine brauchbare Schnittstelle zum Zugriff auf Sound Hardware geschaffen werden Extensive low level support functions will be available so that programmers can input and output sound control MIDI instruments and query system functions Dieses Vorhaben stellte sich aber aufgrund der angestrebten Plattformunabh ngigkeit als sehr schwierig heraus Gefunden wurde eine erste L sung mit der Lizenzierung der Beatnik Audio Engine die elementare Aufgaben wie Sampling und MIDI Wiedergabe betriebssystemunabh ngig l sen konnte Die damit erreic
22. die abstrakte Klasse MidiMessage zu der drei konkrete Subklassen f r unterschiedliche MIDI Nachrichtentypen implementiert sind MetaMessage steht f r Meta Nachrichten die zwar von keinem Klangerzeuger interpretiert werden k nnen aber In formationen f r den Sequenzer enthalten Dies k nnen z B Tempo oder Taktart nderungen sein Die g ngigsten MIDI Nachrichten wie Note On Off Controller etc siehe 111 1 2 2 werden durch die Klasse ShortMessage abgedeckt F r systemexklusive SysEx Nachrichten steht schlie lich noch die Klasse SysexMessage zur Verf gung V Java Sound 60 Um MIDI Nachrichten mit einem Zeitstempel zu versehen um sie beispielsweise in einer Sequenz zu einem bestimmten Zeitpunkt abzuspielen m ssen MidiMessage Objekte zusammen mit dem Zeitstempel in ein MidiEvent Objekt gepackt werden 1 MidiDevice instanziieren 2 MidiDevice device 3 try 4 device open 5 MIDI Nachrichten erzeugen 6 ShortMessage noteOn new ShortMessage 7 noteOn setMessage ShortMessage NOTE_ON 0 60 100 8 ShortMessage noteOff new ShortMessage 9 noteOff setMessage ShortMessage NOTE_OFF 0 60 0 10 Ausgangskanal ffnen und Nachrichten senden 11 Receiver output device getReceiver 12 output send noteOn 1 13 Thread sleep 1000 14 output send noteOff 1 15 Ressourcen freigeben 16 output close 17 device close 18 catch Exception e
23. es nicht m glich sein w rde in der zur Verf gung stehenden Zeit die Grenzen von Java Sound vollst ndig auszuloten So beschr nkte ich mich darauf als Ziel die Entwicklung eines Sampleeditors mit Unterst tzung f r die MC 909 anzustreben und dabei Java Sound so weit wie m glich auf die Probe zu stellen Tendenziell l sst sich erkennen dass mit Java und Java Sound brauchbare Audioanwendungen m glich sind die weder langsam noch besonders ressourcenhungrig erscheinen Gleichzeitig k n nen aber nicht alle Anforderungen zu vollster Zufriedenheit erf llt werden Im Folgenden wird noch einmal kurz zusammengefasst was die Ergebnisse aus dem praktischen Teil f r die Erf llung der unter Il 3 aufgestellten Anforderungen bedeuten Was die Echtzeitf higkeit von Java Sound betrifft so konnte mit dem ASIO PlugIn nicht zu 100 die Echtzeitf higkeit erreicht werden wie sie mit anderen Applikationen die ASIO verwenden m glich ist Die genaue Ursache ist jedoch noch unklar Dagegen war das Ergebnis der Vorh r funktion im MC 909 Sampleeditor in Bezug auf die Reaktionsgeschwindigkeit zufriedenstellend Auf eingehende MIDI Signale kann der AudioPlayer so schnell reagieren dass sich ein Echtzeit gef hl beim Benutzer einstellt Es zeigte sich ebenfalls dass die erw hnten Schw chen in der Handhabung der AudioFileReader Writer SPls f r professionelle Anspr che ein gro es Problem darstellen so fern man die Erweiterbarkeit durc
24. hinaus besteht die M glichkeit mit nderungen der Puffergr e und der Priorit t des Player Threads zu experimentieren Die Puffergr e bestimmt wie viele Samples im Voraus gelesen werden Je gr er der Puffer desto kleiner die Wahrscheinlichkeit eines buffer un derruns also von Aussetzern im Audiodatenstrom Allerdings steigt auch die Reaktionszeit der Anwendung mit der Puffergr e F r echtzeitkritische Anwendungen wie z B in der MC 909 Version beim Vorh ren der Rhythm Sets siehe 1 2 2 4 sollte die Puffergr e daher m glichst klein gew hlt werden Dagegen kann beim Aufnehmen ein gro er Puffer helfen Timingschwankungen auszugleichen Im Info Bereich wird die tats chlich vom Treiber verwendete Puffergr e beim Abspielen oder Aufnehmen angezeigt Bei der nderung der Thread Priorit t sollte man vorsichtig sein Eine h here Priorit t bedeutet nicht immer auch besseres Echtzeitverhalten Das Ergebnis der in diesem Dialog get tigten Einstellungen kann nicht nur geh rt sondern auch im Info Bereich s u insbesondere anhand des Pufferf llstatus beobachtet werden GER Audio Settings Audio Output Port e Prim rer Soundtreiber SiS 7012 Wave Java Sound Audio Engine Audio Input Port Ce Wuschel s ASIO4ALL ASIO Prim rer Soundaufnahmetreiber SiS 7012 Wave Buffer Size in Sample Frames 2048 Priority of the player thread from 1 to 10 5 Restore Defaults Apply L a
25. im PCM_FLOAT Format bereitgestellt werden Zus tzlich zur Installation des jar Archivs und der nativen Bibliothek muss f r dieses PlugIn noch die REX Shared Library installiert werden All diese Elemente finden sich im Verzeichnis Plugins jsrex auf der beiliegenden CD Die Klassen sind im Package com groovemanger spi rex enthalten Der Quellcode f r den nativen Teil liegt unter Quellode Nativ jsrex 1 1 4 Eigene Plugin Schnittstelle Beschreibung Wie bereits unter V 3 beschrieben weist die Umsetzung der AudioFileReader und AudioFileWriter SPls M ngel auf die deren Einsatz erschweren Dies wurde auch im Rahmen der Arbeit am Sampleeditor deutlich Daher entschied ich mich alternativ dazu eine eigene PlugIn Schnittstelle f r das Ermitteln des AudioFileFormats aus einer gegebenen Datei sowie f r das Schreiben von Audiodaten zu entwickeln die diese Schw chen nicht aufweist Ziele Die Schnittstelle sollte folgende M glichkeiten bieten e Anlehnung an das PlugIn Konzept von Java Sound e An und Abmelden verf gbarer PlugIns e Qualitative Unterscheidung der verf gbaren PlugIns e Flexible Einsetzbarkeit Realisierung Als Basis f r die Implementierung von PlugIns wurden zwei abstrakte Basisklassen entwickelt von denen PlugIn Implementierungen erben sollten AudioFileFormatProvider f r PlugIns zum Lesen des Dateiformats sowie AudioFileOutputStreamProvider f r das Bereitstellen von OutputStreams zum Schreiben von Audiodatens
26. im kalifornischen Santa Clara MR Wie gestaltete sich grob die historische Entwicklung von Java Sound wichtige Mei lensteine Besonderheiten FB Schon sehr fr h so zwischen 1 0 und 1 1 hat ein Engineer bei Sun angefangen eine Sound API zu gestalten Es ergaben sich aber viele Probleme die vor allem durch die Plattformunabh n gigkeit begr ndet sind die unter anderem verlangt damals mehr als heute exakt gleiche Funktio nalit t und gleiches Verhalten auf allen Plattformen Speziell waren wichtig e Wie kann man MIDI Dateien unter Solaris abspielen das keinen OS oder Hardware Sup port f r MIDI hat e Wie kann man erreichen dass z B Applets mehrere Sounds auf einmal abspielen obwohl man nur eine Soundkarte hat e 6Erweiterbarkeit plug ins Es zeichnete sich also mehr und mehr ab dass die Entwicklung von Java Sound alles andere als trivial war Es wurde dann eine integrierte Sound Engine von Beatnik lizenziert die Mixen verschiedener Streams und MIDI Wiedergabe erm glichte und das mit einer plattformunabh ngigen C Imple mentierung Parallel dazu wurde die Java Sound API entworfen mit einem Team von internen und auch exter nen Entwicklern Mehrere ffentliche Alpha und Beta Versionen viele Diskussionen f hrten schlie lich zu der Java Sound API wie wir sie jetzt kennen Zuerst war Java Sound brigens als optional package gedacht hnlich wie JMF das man unabh n gig vom JDK installieren mu
27. jedes Pad wird das zugeh rige Einzelsample abgespielt Alternativ zur Be dienung mit der Maus kann auch eine externe MIDI Klaviatur an den im Settings Dialog eingestell ten MIDI Eingang angeschlossen werden z B auch die MC 909 selbst Um das Vorh ren m g lichst realistisch zu gestalten ist es w nschenswert dass die Verz gerung zwischen dem Bet tigen einer Taste und dem Abspielen des Samples minimal ist Dies kann durch die Wahl des richtigen Treibers sowie durch eine m glichst kleine Puffergr e erreicht werden Es handelt sich hier um eine harte Echtzeitanforderung Beim Dr cken des Export Rhythm Sep Buttons ffnet sich ein Wizard dessen Schritte im Folgenden beschrieben werden VI Praktischer Teil 87 Schritt 1 Zielauswahl Wee sl Establish an USB connection between your computer and your MC 909 Make sure you make the same settings in the USB select dialog of your MC 909 and in this dialog MC 909 Location USB Select C Internal Ze Memory Card Create on part X Create as Rhythm set User Z P z Tl Export single slices until end of file IT Create sequence as Standard MIDI File 7 Play sequence for Realtime Rec Abbildung 26 Zielauswahl im Export Rhythm Set Wizard Auf der ersten Seite wird der Benutzer aufgefordert zun chst wie beim Exportieren eines Patches eine USB Verbindung mit der MC 909 herzustellen und den Speicherort auszuw hlen an dem das Rhythm Set erstell
28. mehr im Serverbereich aber die bekannten Vorteile von Java wie beispielsweise Plattformunabh ngigkeit und Sicherheit lassen auch auf dem Desktop immer mehr Applikationen auf Java Basis entstehen Hinzu kommen neue Bestrebungen von Sun wie das Java Desktop System JDS um Java desktopfahiger zu machen Relativ wenig konnte sich Java dagegen bisher im Bereich der Verarbeitung audiovisueller Medien durchsetzen Dies mag zum einen daran liegen dass Java lange der Ruf anhaftete langsam zu sein zum anderen gab es in der Sun Implementierung von Java Sound bis zuletzt unz hlige L cken und Bugs so z B die mangelhafte Unterst tzung externer Hardware Diese erschwerten es zumindest Audioapplikationen zu entwickeln die den Anspr chen professioneller Anwender aus dem Studio bereich gerecht werden k nnen Zwar haben verschiedene Projekte in den letzten Jahren gezeigt dass mit Java brauchbare Anwen dungen im Audiobereich wie MP3 Player oder einfache MIDI Applikationen mit Hilfe von JMF5 oder Java Sound m glich sind F r den Studiobereich existieren jedoch bis dato nur wenige Projek te die in Java realisiert sind Diese umgehen zudem alle mehr oder weniger stark die von Java ange botenen Schnittstellen durch Eigenimplementierungen Seit Anfang 2004 ist die Beta Version des JDK 1 5 0 verf gbar Darin scheinen viele der M ngel beseitigt und ein gro er Schritt nach vorne getan zu sein Ob allerdings das Java Sound API und desse
29. mehrere auf einmal ausgew hlt werden Ist das Format der Datei einem Java Sound PlugIn bekannt wird diese ge ffnet andernfalls wird eine Fehlermeldung ausgegeben Dabei kann der Sampleeditor sehr gut vom PlugIn Konzept von Java Sound profitieren da f r die Unterst tzung weiterer Dateiformate lediglich die entsprechenden Java Sound PlugIns in den Classpath eingebunden werden m ssen Beim erstmaligen ffnen einer Datei wird zun chst eine Spitzenwertdatei erzeugt die f r eine per formantere grafische Darstellung n tig ist Sie kann wieder verwendet werden wenn dieselbe Datei sp ter erneut ge ffnet wird Das Speichern von Dateien geschieht derzeit ausschlie lich im WAVE Format Edit Im Edit Men finden sich grundlegende Bearbeitungsfunktionen siehe Abbildung 19 Sie sind alle nichtdestruktiv realisiert weshalb jederzeit beliebig viele Schritte wieder r ckg ngig gemacht wer 158 Alternativ dazu k nnen Dateien auch per Drag mn Drop durch Ziehen auf das Anwendungsfenster ge ffnet werden VI Praktischer Teil 79 den k nnen Dies wird durch Schnittlisten siehe III 1 3 2 3 realisiert die intern pro ge ffneter Datei verwaltet werden Jeder Bearbeitungsschritt erzeugt eine neue Schnittliste die auf der vorhe rigen aufbaut Das R ckg ngigmachen erfolgt dann durch Entfernen der zuletzt erzeugten Schnitt liste Die abzuspielenden oder darzustellenden Audiodaten werden dann aus den Schnittlisten er zeugt sob
30. nahmen Neben den aufgef hrten Java spezifischen Konzepten existieren nat rlich noch solche die f r jede andere Programmierplattform ebenso gelten wie Buffering oder Caching Werden diese nicht be 123 Vol SCHREIBER S 187ff 124 Aus SCHREIBER S 21 IV Audioverarbeitung in Java 49 wusst eingesetzt hilft auch die performanteste Ausf hrungsmethode nichts Auf diese Mechanis men soll jedoch an dieser Stelle nicht n her eingegangen werden 2 4 Zusammenfassung Zusammenfassend kann gesagt werden dass Java zwar mit ein paar Nachteilen behaftet ins Per formance Rennen geht insbesondere dort wo es nicht nur um reine mathematische Berechnun gen geht Jedoch k nnen diese Nachteile durch effiziente Programmierung und falls m glich die richtige Wahl von JVM und GC Parametern so in Grenzen gehalten werden dass sie in vielen F llen verkraftbar sind Schwieriger wird es bei der Erf llung von harten Echtzeitanforderungen Insbesondere die Garbage Collection kann hier Probleme verursachen auch wenn f r viele F lle die Wahl der richtigen JVM und das Anpassen des GC Algorithmus Abhilfe schaffen kann Es bleibt daher eine der gr ten Schw chen von Java dass die Optimierung von Java Anwedungen f r zeitkritische Systeme einen hohen Aufwand mit sich bringt und nicht immer den gew nschten Effekt erzielt Dabei sollte ber cksichtigt werden dass meist nur entweder auf Echtzeitf higkeit also kurze Pausen
31. r Programme mit langen Laufzeiten Aus diesem Grund bietet Sun jeweils eine Client HotSpot JVM f r k rzere Laufzeiten und eine Server HotSpot JVM f r lang laufende Serverprozesse an 104 Vgl SCHREIBER S 33 105 Just In Time 106 Random Access Memory 107 Vgl DICKMAN S 3f 108 Aus DICKMAN S 4 109 Aus SCHREIBER S 33 110 F r diese Optimierungen stehen unterschiedliche Verfahren wie z B oop unrolling zur Verf gung auf die hier nicht n her eingegangen wird IV Audioverarbeitung in Java 44 WAT AOT Ein anderer Ansatz als die bisher vorgestellten ist das bersetzen des gesamten Java Bytecodes in Bin rcode vor der Ausf hrung Man unterscheidet hier Ahead of Time Compilation AOT und Way Ahead of Time Compilation WAT AOT wird unmittelbar vor dem Starten des Programms auf der Zielplattform ausgef hrt Das Ergebnis kann f r weitere Programmstarts zwischengespei chert werden WAT findet schon beim Erstellen des Bytecodes statt Hierbei geht nat rlich die Plattformunabh ngiskeit verloren weshalb f r jede gew nschte Zielplattform ein WAT Compile Vorgang n tig wird F r das Erzeugen des Bin rcodes ist bei AOT und WAT Verfahren quasi keine Zeitbeschr nkung gegeben so k nnen komplexe Analyse und Optimierungsschritte mit eingebunden werden was die Qualit t des resultierenden Codes zwangsl ufig verbessert AOT findet sich haupts chlich in eingebetteten Systemen f r WAT gibt es einige Ans tz
32. unter III 3 erarbeiteten Anforderungen zusammengefasst werden Echtzeitf higkeit ist nicht unbedingt die St rke von Java Weiche Echtzeitanforderungen k nnen zwar meist erf llt werden da Java Anwendungen bei guter Programmierung in der Regel keine erheblichen performancetechnischen Nachteile gegen ber nativen Anwendungen haben Bei harten Echtzeitanforderungen kommt es dagegen auf die maximalen Pausenzeiten an welche zwar durch die Wahl des richtigen GC Algorithmus beeinflusst aber nicht vollends kontrolliert werden k n nen Sind harte Echtzeitanforderungen zu erf llen muss also abgewogen und getestet werden ob diese mit der gew hlten Java Umgebung eingehalten werden k nnen Java Sound selbst ist f r Echtzeitf higkeit gut ger stet Einziger Nachteil ist die Ver nderbarkeit der MidiMessage Objekte Beim Versenden m ssen diese kopiert werden was die Aktivit t des Garbage Collectors in die H he treibt und somit f r die Einhaltung von Echtzeitanforderungen zum Problem werden kann Ju F r derzeit verf gbare Formate und Standards bietet Java Sound zwar keine besonders umfassende Unterst tzung jedoch ist es mit seinen PlugIn Schnittstellen darauf vorbereitet Falls die erw hnten Schw chen der AudioFileReader Writer Schnittstellen in k nftigen Versionen noch ausgemerzt werden und wom glich noch eine zentrale PlugIn Registry eingerichtet wird kann dieser Punkt als Vorzug von Java Sound gesehen werden Bis dahin kann mit den Schn
33. vor allem das schon mehrmals erw hnte Thema Synchronisation Bei MIDI kann man das zumindest selbst programmieren Auch die Synchronisation von MIDI zu Audio d rfte mittlerweile wesentlich besser gehen als noch mit 1 4 2 Mehrkanalaudio ist nur rudiment r m glich n mlich alle Kan le auf einmal Auch fehlt komplett 3D Audio was immer wichtiger auch f r Studioanwendungen wird Weiterhin w re es f r einige Bereiche n tig bessere Einfluss nahme auf die Hardware zu haben Anhang A Emailinterview mit Florian B mers A 6 MR Wie wahrscheinlich ist es dass eines Tages das bestehende Java Sound API durch eine neue Version ersetzt wird in der ein paar konzeptionelle Schw chen ausger umt wer den und die Namensgebung an ein paar Stellen berdacht wird FB Grunds tzlich k nnen Klassennamen und Methodennamen nicht ge ndert werden Das wird also nicht passieren F r 1 6 sind aber weitere Vereinfachungen im Stil von AudioSystem getClip geplant Und wie schon oben erw hnt mit genug externer Mitarbeit k nnte man auch berlegen ein komplett neues MIDI package zu erstellen F r den sampled Bereich sehe ich nicht die Not wendigkeit Dort reicht es Interfaces und Klassen hinzuzuf gen MR Welche Verbesserungen oder Erweiterungen sind als n chstes f r Java Sound ge plant Und was wird es wohl mit Java Sound nie geben FB Da ich schon vielf ltig auf geplante nderungen eingegangen bin dazu hier nicht mehr vie
34. werden Die im zip Archiv enthaltenen Dateien geh ren in das ext Verzeichnis des Installati onspfads die nativen Bibliotheken direkt in den Installationspfad selbst Zus tzlich zu SWT wird noch die JFace Bibliothek ben tigt Daf r muss die eclipse Plattform die ebenfalls von der eclipse Homepage zu beziehen ist komplett heruntergela den werden Darin befindet sich im Verzeichnis plugins org eclipse jface_ die Datei jface jar Welche PlugIns aus der eclipse Plattform aus Abh ngigkeitsgr nden mitinstalliert werden m ssen ist versionsabh ngig und kann in der Datei plugin xml im Abschnitt lt requires gt nachgesehen werden Alle jar Dateien der ben tigten PlugIns m ssen dann ins ext Verzeichnis kopiert werden Das FloatConversionProvider PlugIn ist bereits in den kopierten Dateien enthalten Die beiden anderen PlugIns REXFileReader und AS IOMixerProvider k nnen bei Be darf zus tzlich installiert werden allerdings nur wenn die Installation auf einem Windows Betriebssystem stattfindet Dazu m ssen die jar Dateien in das ext Verzeichnis und die d11 Dateien direkt ins Installationsverzeichnis kopiert werden Um weitere Java Sound PlugIns hinzuzuf gen sollten diese sinnvollerweise auch ins ext Verzeichnis kopiert werden Jede hinzugef gte jar Datei muss dann der Classpath Angabe in der Datei META INF Manifest ME innerhalb der Datei start jar hinzuge f gt werden Nun kann das install
35. zu Beginn komplett in den Speicher l dt w hrend SourceDataLine f r kontinuierliches Streamen ausgelegt ist 140 Aus JAVADOC V Java Sound 55 Um Port oder DataLine Instanzen eines Ger ts zu verwalten existiert das Mixer Interface Eine Mixer Instanz steht f r eine Hard oder Softwareeinheit die je eine oder mehrere Eingangs und Ausgangs Lines besitzt Das Mixer Interface bietet unterschiedliche Methoden um Informationen ber an diesem Mixer verf gbare Lines zu bekommen oder auf diese zuzugreifen Zur Identifizierung einer Line dient die innere Klasse Line Info Ebenso besitzen die Subinter faces von Line eigene Info Klassen genau genommen Port Info Mixer Info und DataLine Info Mixer Info erbt als einzige Info Klasse nicht von Line Info was etwas ver wundert da Mixer von Line erbt Abbildung 13 zeigt diese nicht sofort schl ssig wirkende Interfacehierarchie inklusive der Info Klassen Die Vererbungshierarchie ist farblich hervorgehoben Zu jedem Interface werden nur die wichtigsten Methoden jeweils ohne bergabe und R ckgabeparameter angegeben getLineClass DataLine Info Abbildung 13 UML Diagramm der Line Interface Hierarchie im sampled Package Die hier gew hlte Namensgebung ist zumindest gew hnungsbed rftig So wundert man sich zu n chst warum man eine SourceDataLine zum Abspielen und eine TargetDataLine zum Auf nehmen ben tigt Jeder Programmierer w rde wohl zun chst vom u
36. zu halten und bei Bedarf weitere Daten von Festplatte nachzuladen ohne dabei allerdings die Performance durch die Festplattenzugriffe wesentlich zu beeintr chtigen 3 7 Nutzen vorhandener Ressourcen Im Allgemeinen kann man davon ausgehen dass bei einem Studiocomputer viel Geld in die Hard wareausstattung investiert wurde und dass dar ber hinaus spezielle Hardware daran angeschlossen ist die sich in g ngigen Consumer Rechnern nur selten findet Zwingende Voraussetzung f r pro fessionelle Audiosoftware ist daher dass die vorhandene Hardwareausstattung voll ausgenutzt wer den kann und dass Schnittstellen bestehen ber die auf spezielle Hardware zugegriffen werden kann Ebenso sollte dem Benutzer die M glichkeit offen stehen ber die Nutzung seiner Ressour cen soweit wie m glich selbst zu entscheiden gt Konfigurierbarkeit Von einem einfachen Audioplayer wird niemand erwarten dass man ausw hlen kann welche Kan le der Soundkarte genutzt werden da g ngige Soundkarten nur ber einen Stereoausgang verf gen F r Software in Studioumgebungen ist hingegen die Unterst tzung eventuell vorhandener Mehrka nalhardware zwingend erforderlich 3 8 Synchronisation Eine allt gliche Situation in Studios stellt die Synchronisation mehrerer Mediendatenstr me zuein ander dar Bestes Beispiel hierf r ist die Vertonung eines Videos bei der jeder Klang des Audiosig nals meist genau einem Ereignis im Bild entspricht so dass ei
37. 1 Abbildung 12 Prinzip von Joe Buiecode 42 Abbildung 13 UML Diagramm der Line Interface Hierarchie im sample Package 55 Abbildung 14 Bedeutung der Line Interfaces im Audiodoateniluee 57 Abbildung 15 Ablauf der Konvertierung von 16 Bit Integer little endian zu 32 Bit Float big endian 72 Abbildung 16 Die Loop Software Recycle 73 Abbildung 17 Vergleich der PlugIn Schnittstellen u22022u220essesnenesnersennansonnnesnensennensennonsonnnennennennon 76 Abbildung 18 Screenshot Sampleeditor CGrunduer ston 78 Abbildung 19 Das Edit Men nuue nenne rasen 79 Abbildung 20 Der Settings Dialog cseeseeseeeeeeeseeeseeseseeseseessreresesserereserereseseererseeeeesereeeseseeseeseereseeseeereseeee 80 Abbildung 21 Wellenformdarstellung mit Markern Position und Auewah SI Abbildung 22 Die Keyboard Pads der MC 909 als Bedienelemente im Sampleeditor cseceeserees 83 Abbildung 23 Roland ME 9 222 25a Seet EENEG 83 Abbildung 24 Die Suomple Eigenschaften 84 Abbildung 25 Der Import Export Dialog seseesseseeseeeeeseeeenereesereesesrsrreresresresresrnsrsrresesrenresresesseerreseseest 85 Abbildung 26 Zielauswahl im Export Rhythm Aer Wtzord A 87 Tabellenverzeichnis Tabelle 1 bersicht Audiotreiberschnittstellen sascha 34 Tabelle 2 Hauptunterschiede im Konzept von ASIO und Java Sound 69 Tabelle 3 REX AudioFileFormat Dropertties 74 Verzeichnis der Codebeispiele Codebeispiel 1 JNI Beispielklasse in Jug
38. 27 1 3 2 3 Nichtdestruktive Bearbeitung Eine Herausforderung f r die Programmierung von Audioanwendungen ist es dem Benutzer m g lichst umfangreiche Manipulationen des Ausgangsmaterials zu erm glichen dabei aber so lange wie m glich nichtdestruktiv zu arbeiten um nderungen nicht gleich permanent zu machen Das be deutet dass die Bearbeitungen keine tats chlichen Auswirkungen auf das Ausgangsmaterial haben sondern beispielsweise nur auf eine Kopie solange vom Benutzer nicht explizit das Gegenteil gew nscht wird Um dies zu erreichen existieren folgende M glichkeiten die auch kombiniert ein gesetzt werden k nnen Arbeiten auf Kopien Bei dieser Methode wird automatisch zu Beginn jeder Bearbeitung eine Kopie der Ausgangsdaten angelegt Damit ist es jederzeit m glich zum Ausgangsmaterial zur ckzuspringen unabh ngig da von was mit den Kopien gemacht wurde Dem Benutzer sollte zu jeder Zeit klar sein wann er auf Kopien arbeitet und wann auf dem Original Ein Nachteil von Kopien ist dass der Speicherplatz bedarf sehr hoch werden kann mindestens doppelt so hoch wie das Ausgangsmaterial Speichern jedes Bearbeitungsschritts Bei diesem Ansatz wird jeder vom Benutzer durchgef hrte Bearbeitungsschritt inklusive aller not wendigen Daten so gespeichert dass eine R ckkehr zum vorigen Stand jederzeit m glich ist Er kann sehr gut f r Undo Redo Funktionen eingesetzt werden Auch hierbei kann das Datenauf komme
39. BeOS in ein paar Jahren wieder auf dem Markt f r Audio Betriebssysteme zu finden sein wird derzeit ist es dort allerdings bedeutungslos In den letzten Jahren konnte sich aber noch eine weitere Alternative zu den beiden Branchenriesen etablieren Das Open Source Betriebssystem Linux konnte mit der Einf hrung des ALSA Treibermodells einen gro en Sprung in Richtung Studiotauglichkeit machen Seine Eignung f r den professionellen Audiobereich ist damit unumstritten Zwar schreckt es momentan noch viele Benutzer ab sich mit dem etwas schwieriger zu handhabenden Linux zu besch ftigen und auch die branchenf hrenden Softwarehersteller tun sich mit einer Linuxunterst tzung schwer Einige An wendungen zeigen aber dass Linux sich schon jetzt nicht hinter den Betriebssystemen von Micro soft und Apple verstecken muss 55 Inzwischen bietet z B die schwedische Firma eektron Synthesizer an die auf dem original Soundchip des C64 basie ren http www sidstation com 56 Aus VOGT 57 Aus VOGT 58 http www openbeos org 59 http www yellowtab com 60 Vel http www beosonline de 61 Advanced Linux Sound Architecture 62 Siche 2 3 63 Die GNU General Public License GPL unter der Linux erscheint besagt dass alle darauf basierenden Anwendun gen ihren Quellcode offen legen m ssen und dass Kopien davon kostenlos vertrieben werden d rfen womit manche kommerzielle Softwarehersteller verst ndlicherweise ihre Probl
40. Bit markiert sog Mark Phase Anschlie end wird in der sog Sweep Phase der gesamte Speicher durchlaufen und alle nicht markierten Objekte werden ge l scht Hierdurch wird allerdings der Speicher fragmentiert was sich negativ auf die Allokationszei ten neuer Objekte auswirkt An dieser Stelle unterscheidet sich der Mark amp Compact Algorithmus von Mark amp Sweep Er f hrt statt der Sweep Phase eine Compact Phase durch in der nicht markierte Objekte gel scht und gleich zeitig die lebendigen Objekte so im Speicher verschoben werden dass keine Fragmentierung ent steht Daher ben tigt Mark amp Compact etwas l nger f r die Speicherbereinigung als Mark amp Sweep f hrt aber anschlie end zu besserem Laufzeitverhalten 2 2 2 Optimierung der Garbage Collection S mtliche im vorigen Abschnitt vorgestellten Algorithmen erfordern einen exklusiven Zugriff auf den gesamten Speicher der Anwendung und m ssen diese daher f r die Zeit der Speicherbereini gung komplett anhalten wodurch die erw hnten unerw nschten langen Pausen entstehen k nnen Um dies zu vermeiden werden die Algorithmen in ihrer Verwendung optimiert Generationen Kollektoren In der Programmier Realit t ist es keineswegs so dass alle Objekte eine in etwa gleiche Lebensdau er haben und daher von der Speicherbereinigung gleich betroffen sein k nnen Vielmehr hat sich gezeigt dass die meisten Objekte eine sehr kurze Lebensdauer haben wohingegen einige wenig
41. For mateigenschaften aus einer Datei einem InputStream oder einer URL zu lesen Dieser Umstand f hrt zu folgender Einschr nkung Erstens kann der REXFileReader nur bei bergabe eines File Objekts sinnvolle Ergebnisse liefern nicht aber aus einem InputStream oder einer URL Das zwei te Problem besteht darin dass der REXFileReader theoretisch jede ihm angebotene Datei kom plett in den Speicher laden m sste um herauszufinden ob es sich um eine g ltige REX Datei han delt Da dies bei sehr gro en Dateien ineffizient ist oder sogar zu Out of Memory Fehlern f hren kann wurde eine maximale Dateigr e von 4 MB f r REX Dateien im REXFileReader verankert Wird der REXFileReader also nach einem AudioFileFormat oder AudioInputStream aus einem InputStream einer URL oder einer mehr als 4 MB gro en Datei gefragt muss er zwangsl ufig eine UnsupportedAudioFileException werfen obwohl es sein kann dass es sich bei den gegebenen Daten um g ltige REX Inhalte handelt Ergebnis Das fertige PlugIn funktioniert mit der erw hnten Einschr nkung auf Windows Betriebssystemen Da es das REX SDK auch f r Macintosh gibt w re eine Anpassung daf r auch denkbar Hierf r m sste der native Teil des PlugIns auf einem Mac System kompiliert und als JNI Bibliothek ver VI Praktischer Teil 75 f gbar gemacht werden Zus tzlich zu diesem PlugIn sollte auch das FloatConversionProvider PlugIn installiert werden da die Audiodaten
42. Gl Volume Control besorgen FloatControl volume FloatControl lineOut getControl FloatControl Type VOLUME Lautstarke auf Maximalwert setzen volume setValue volume getMaximum catch LineUnavailableException e Fehlermeldung else Fehlermeldung Codebeispiel 4 Ver ndern der Ausgangslautst rke des Line Out Anschlusses V Java Sound 58 Codebeispiel 4 zeigt wie mit Controls die Ausgangslautst rke des Line Out Anschlusses ver ndert werden kann Wie in Codebeispiel 2 wird bis Zeile 5 zun chst das Port Objekt ermittelt das den Line Out Anschluss des Mixers repr sentiert Das gew nschte Lautst rke Control wird ber das statische Feld FloatControl Type VOLUME identifiziert Unterst tzt das Port Objekt diesen Typ von Control Zeile 7 kann darauf zugegriffen und der Wert ge ndert werden Zeilen 9 12 Formate In Java Sound werden die Sampledaten stets als byte Array weitergegeben so wie sie in Dateien gespeichert oder im Speicher abgelegt werden Um diese Rohdaten interpretieren zu k nnen muss ihr Format bekannt sein welches mit Objekten der Klasse AudioFormat definiert wird AudioFormat enth lt Informationen ber Kodierung Endianess Zahl der Kan le Samplegr e Samplingrate Framegr e und Framerate In unkomprimierten Formaten besteht ein Frame aus je einem Sample pro Kanal die Parameter Samplegr e Kan le und Framegr e sowie Samplingrate und
43. IDI Keyboard ein spielt ohne f r ihn h rbare Verz gerung an das empfangende MIDI Ger t weitergegeben werden Ebenso darf der Rhythmus der Noten auf keinen Fall durch h rbare Varianzen beim Ansteuern vom Sequenzer aus verf lscht werden Im Gegensatz zu samplingbasierten Daten werden MIDI Daten nur dann gesendet wenn sie auch wirklich anfallen Beim Abspielen einer samplingbasierten Sounddatei die nur Stille enth lt werden trotzdem laufend Daten von der Software in den Hardwarepuffer der Soundkarte geschrieben Eine MIDI Datei die nur eine leere Spur enth lt w rde also keinerlei Hardwareaktivitat verursa chen Aus diesem Grund wird bei MIDI Hardware in der Regel auch kein gro er Puffer eingesetzt Die Daten werden in dem Moment gesendet in dem sie anfallen Die Software muss also in der Lage sein im richtigen Moment die Nachrichten an die Hardware zu schicken und kann sie nicht schon im Voraus senden Zwar kann die Software intern Puffer verwenden was auch gemacht wird allerdings ndert das nichts daran dass MIDI Software stets harte Echtzeitanforderungen zu erf llen hat Da das MIDI Nachrichtenformat seriell ist also mehrere gleichzeitig anstehende Nachrichten nicht gemixt werden k nnen sondern nacheinander gesendet werden m ssen sind minimale Timing schwankungen unvermeidlich Bei hohem Datenaufkommen m ssen hier Konzepte angewandt werden die diese Schwankungen nicht h rbar werden lassen beispielsweise eine Ausd nnu
44. Installation ben tig ten Dateien In diesem Anhang wird der Installationsprozess detailliert beschrieben Diese Anlei tung gilt analog f r beide Versionen des Sampleeditors Unabh ngig von der Installationsart muss zun chst ein Java Runtime Environment JRE auf dem System installiert sein Es wird dringend empfohlen aufgrund der vielen Verbesserungen von Java Sound J2RE 1 5 zu verwenden auch wenn es derzeit Anfang August 2004 nur als Betaversion verf gbar ist Eine ltere JRE Version mindestens 1 3 m sste aber auch funktionieren allerdings mit einigen Einschr nkungen und Bugs Downloadlinks finden sich unter http java sun com bzw unter http www apple com java Installation unter Windows 1 Die jeweilige zip Datei sollte neben der Installationsanleitung noch die Dateien install_sse_win jar launcher ini setup exe sowie setup manifest enthalten Die Installation wird durch den Aufruf von setup exe gestartet 2 Im nun folgenden Installationsdialog k nnen nun das Installationsverzeichnis sowie die zu installierenden Zusatzpakete ausgew hlt werden 3 Nach erfolgter Installation kann das Programm mit der exe Datei im gew hlten Installa tionsverzeichnis gestartet werden Installation unter Linux 1 Es empfiehlt sich mit dem Befehl export PATH usr java jre bin PATH die Java Ausf hrungsdatei in die PATH Umgebungsvariable mit aufzunehmen wobei anstelle von usr java jre bin der entsprechende Pfad zur Java I
45. Interpretieren Zun chst besteht die M glichkeit den Java Bytecode zur Laufzeit zu interpretieren was bei der ersten Generation von JVMs noch die Regel war Bei dieser Variante wird jede Java Instruktion zur 108 Aus SCHREIBER S 18 IV Audioverarbeitung in Java 43 Laufzeit in eine Reihe nativer Instruktionen bersetzt und ausgef hrt Sie ist allerdings die lang samste L sung und wird heute h chstens noch dort eingesetzt wo nur sehr begrenzter Speicher zur Verf gung steht 104 JIT Um die Ausf hrung zu beschleunigen wurden JIT Compiler entwickelt Diese bersetzen Code bl cke unmittelbar vor der ersten Ausf hrung in einen plattformspezifischen Bin rcode der sp ter bei jedem Zugriff auf diesen Codeblock verwendet wird was die Ausf hrung entschieden be schleunigt Allerdings bleibt zum Kompilieren dieses Bin rcodes nicht viel Zeit weshalb auf auf w ndige Analysen zur Codeoptimierung verzichtet werden muss Weiterhin ben tigen JVMs mit JIT Compiler mehr Speicher und eine l ngere Startzeit als JVMs mit Interpretern da sie den Bin r code nur im RAM halten Zudem kann es zu gr eren Pausen in der Programmausf hrung kom men wenn ein bestimmter Codeblock zum ersten Mal ausgef hrt werden soll und zun chst kompi liert werden muss 7 DAC Eine weitere Verbesserung des JIT Konzepts ist die Dynamic Adaptive Compilation DAC die sich in Suns aktuell ausgelieferten JVMs den so genannten HotSpot JVMs f
46. JAVA SOUND ALS PLATTFORM F R DIE ENTWICKLUNG STUDIOTAUGLICHER AUDIOAPPLIKATIONEN Diplomarbeit an der Fachhochschule Stuttgart Hochschule der Medien Manuel Ren Robledo Esparza Erstpr fer Prof Dr Fridtjof Toenniessen Zweitpr fer Dipl Ing FH Tobias Frech Bearbeitungszeitraum 15 April 2004 bis 14 August 2004 Eingereicht am 09 August 2004 Erkl rung 2 Erkl rung Hiermit erkl re ich dass ich die vorliegende Diplomarbeit selbst ndig angefertigt habe Es wurden nur die in der Arbeit ausdr cklich benannten Quellen und Hilfsmittel benutzt W rtlich oder sinn gem bernommenes Gedankengut habe ich als solches kenntlich gemacht Ort Datum Unterschrift Currently we are enabling multimedia in the computer desktop market by adding true sound support in the Java 2 platform In the future we would like to see our Java Sound API technology used in professional con sumer and Internet audio applications Michael Bundschuh Java Media Manager 1999 1 5 ist die erste Version die studiotaugliche Anwen dungen erm glicht Florian B mers Java Sound Chefentwickler 2004 Kurzfassung 4 Kurzfassung Die vorliegende Arbeit versucht die Eignung von Java Sound als Basisplattform f r die Entwick lung studiotauglicher Audioanwendungen zu evaluieren Daf r werden die Besonderheiten der Audioprogrammierung mit Sampling und MIDI Daten erarbeitet und daraus Anforderungen an Audios
47. Java die Methode System gc an die der JVM mitteilt wann ein g nstiger Zeitpunkt f r eine Speicherbereinigung gekommen ist Allerdings ist keineswegs gew hrleistet dass die Speicherbereinigung tats chlich mit Aufruf dieser Methode ausgef hrt wird sie ist vielmehr als Hinweis zu verstehen Au erdem sollte der Aufruf mit Vorsicht eingesetzt werden da er eine voll st ndige Speicherbereinigung und damit eine lange Programmunterbrechung nach sich ziehen kann auch wenn sie nicht unbedingt n tig w re 2 3 Konzepte zum Performancegewinn Der Java Programmierer ist nicht hilflos der Virtual Machine und ihren Eigenheiten ausgeliefert Dieser Abschnitt zeigt einige Konzepte die beim Java Programmieren aus Performancesicht beach tet werden sollten um beispielsweise die Aktivit t des Garbage Collectors gering zu halten 1 1 jur 7 Vel SCHREIBER S 43 8 Aus SCHREIBER S 49 119 jur F r eine komplette Auflistung der m glichen JVM Parameter zur Beeinflussung des Garbage Collectors bei der HotSpot JVM siehe SCHREIBER S 45 120 Vel SCHREIBER S 83 N IV Audioverarbeitung in Java 47 Vermeiden unn tiger Objekterzeugung Das Erzeugen neuer Objekte ist teuer Neuer Speicher muss alloziert werden der Konstruktor muss ausgef hrt werden und der Garbage Collector hat sp ter mehr zu tun Nat rlich ist das Er zeugen neuer Objekte eine der Hauptaufgaben in einem Java Programm und das soll auc
48. P Einheiten u v m die man auf einigen Karten vorfindet auf anderen wiederum nicht Oft werden diese bei Nichtvorhandensein durch die Treibersoftware emuliert weshalb der Benutzer oft nicht merkt welche Komponenten davon auf seiner Soundkarte tats chlich vorhanden sind Qualitativ k nnen sich Soundkarten in folgenden Merkmalen unterscheiden e Anzahl der Kan le e Art der Anschl sse analog digital un symmetrisch Clock Anschl sse e Unterst tzte Samplingraten e Zus tzliche DSP Prozessoren e Qualit t der Wandler e Synchronisationsm glichkeiten e Qualit t und Architektur der angebotenen Treiber 39 Diese Art der Haltung von Mehrkanaldaten wird auch als inzerleaved bezeichnet III Audioprogrammierung 24 1 3 1 2 Synchronisation berall dort wo mehrere Hardwarekomponenten im Einsatz sind die mit einer internen Timing Clock arbeiten ergibt sich das Problem dass diese nie ganz genau im selben Takt laufen und dass so nach einiger Zeit ein Auseinanderdriften der verschiedenen Hardwarekomponenten festzustellen ist Im Audiobereich tritt dies auf wenn mehrere Soundkarten parallel betrieben werden oder wenn externe digitale Hardware beispielsweise ein digitales Mischpult eingesetzt wird Um dieses Ausei nanderdriften zu verhindern ist es n tig festzulegen welche Clock die Referenz f r alle anderen darstellen soll und die anderen Komponenten entsprechend zu dieser sog Master Clock zu syn chronisieren Nicht alle
49. Schw chen Die gr te St rke von Java Sound ist dass es als Java Framework und seit Version 1 3 fester Bestandteil der J2SE von vielen Vorteilen profitiert F r ein Audioverarbeitungsframework sind das insbesondere die Plattformunabh ngigkeit und die umfangreiche Klassenbibliothek f r die unter schiedlichsten Bereiche die in der J2SE enthalten ist Ebenso wird dadurch eine gro e Verbreitung sichergestellt Neben der Installation des JRE ist keine weitere Zusatzinstallation wie z B f r das JMF n tig Eine weitere Starke von Java Sound sind die SPI Schnittstellen Zwar l sst sich an der Umsetzung einiges kritisieren aber prinzipiell ist das Konzept der Erweiterbarkeit gut gel st Bestehenden An wendungen kann dadurch auf einfache Weise eine Unterst tzung f r neue Standards hinzugef gt werden 166 Aus INTERVIEW 167 Java Runtime Environment VII Abschlie ende Bewertung 91 Die konsequente Lowlevel Orientierung von Java Sound kann ebenfalls als St rke angesehen wer den Letztendlich bleibt dem Programmierer eine gr tm gliche Freiheit wie er seine Anwendung auf der von Java Sound abstrahierten Schicht aufsetzen m chte Nachteile von Java Sound sind in erster Linie die sp te Reifung zu einer relativ vollst ndigen Refe renzimplementierung Java Sound existierte ca f nf Jahre lang in einer Version die nur sehr einge schr nkt f r anspruchsvollere Anwendungen nutzbar war In dieser Zeit hat es mit Sicherh
50. So ist die Namensge bung vieler Elemente zumindest fragw rdig und gerade das sampled Package muss in seiner Kom plexit t erst einmal erfasst werden In JDK Versionen bis 1 4 x kommt hinzu dass viele Bestandtei le fehler bzw l ckenhaft implementiert sind was die Verwirrung in der Anfangsphase nicht gerade mindert Allerdings existieren mit J SRESOURCES und JS INTEREST sehr gute Quellen die schnell und umfassend kompetente Hilfe bieten und damit den Einstieg erleichtern Jedoch bleibt auch nach l ngerer Besch ftigung mit dem API hin und wieder und meinem Eindruck nach fter als bei anderen APIs die Notwendigkeit bestimmte Dinge in der Dokumentation nachzulesen weil sie sich nicht von selbst erkl ren Dies mag aber auch an der komplexen Thematik der Audiopro grammierung liegen Auff llig beim Java Sound API ist die konsequente Lowlevel Orientierung Es wird nicht versucht ein Medienverarbeitungsframework 4 la JMF zu kreieren sondern man beschr nkt sich auf die elementaren Funktionalit ten f r den Zugriff auf Audiohardware Leider wurde dieser Ansatz in den Anfangszeiten durch die Implementierung wieder etwas aufgeweicht weil alles auf die Java Sound Audio Engine ausgerichtet war und der Zugriff auf externe Hardware erschwert bis unm g lich gemacht wurde Mit JDK 1 5 0 ist Sun aber auf dem richtigen Weg 1 5 ist die erste Version von Java Sound die grunds tzlich alle Features implementiert 6 2 St rken
51. Soundkarten unterst tzen diese Form der Synchronisation Um diese Synchronisation zu erm glichen muss der Master in der Lage sein ein sog Wordclock Signal zu bertragen ein Signal das in der Frequenz des Taktgenerators oszilliert Wordclock kann entweder ber digitale Datenverbindungen zusammen mit dem Nutzsignal oder mittels einer eige nen Wordclock Leitung bertragen werden Daher bieten professionelle digitale Ger te wie digitale Mischpulte oder HD Recorder stets Wordclock Anschl sse Die zu synchronisierenden Ger te m ssen in den sog Slave Modus versetzt werden und verwenden dann den Takt aus dem Wordc lock Signal als Referenz f r ihre Wandler und sonstigen Funktionen Die Wordclock Synchronisation sollte nicht mit absoluten Synchronisationsmethoden wie MIDI Time Code MTC oder SMPTE Timecode verwechselt werden Diese dienen vielmehr der Syn chronisation unterschiedlicher Medientypen wie Audio Video MIDI zueinander 1 3 2 Softwarekonzepte und besonderheiten Im Bereich der Programmierung von Audioanwendungen gibt es h ufig wiederkehrende Problem stellungen und Konzepte um bestimmte Anforderungen zu erreichen Die wichtigsten werden im Folgenden vorgestellt 1 3 2 1 Echtzeit in der Audioprogrammierung In der DIN Norm 44330 wird Echtzeitbetrieb folgenderma en definiert Ein Betrieb eines Rechensystems bei dem Programme zur Verarbeitung anfallender Daten st ndig betriebsbereit sind derart dass die Vera
52. a Sound oder einer anderen Ursache liegt konnte in der begrenzten zur Verf gung stehenden Zeit nicht herausgefunden werden Bei der Umsetzung der Mehrkanalunterst tzung von ASIO offenbarte das Java Sound API eben falls Schw chen So ist es nicht m glich unterschiedliche DataLines eines Mixers mit Namen zu versehen um beispielsweise unterscheiden zu k nnen welche Kan le einer Mehrkanalsoundkarte man ansprechen m chte oder ob man den Analog oder Digitalausgang nutzen m chte Ebenso existiert kein Mechanismus zur Unterscheidung zwischen einem Monodatenstrom der auf die zwei Kan le einer Stereosoundkarte verteilt werden soll und einem der tats chlich nur auf einem Kanal bertragen werden soll Ein weiteres Problem das sich im praktischen Teil ergab bestand darin dass das Verhalten der unterschiedlichen Implementierung insbesondere zwischen 1 4 und 1 5 stark variiert Ebenso verh lt sich die Java Sound Audio Engine die ja in Version 1 5 immer noch zur Verf gung steht in vielen Anwendungsf llen anders als die anderen Mixer Implementierungen Als Ergebnis dieser 162 Request for Enhancement 163 Vel http bugs sun com bugdatabase view_bug do bug_id 5061439 VI Praktischer Teil 89 Unterschiede kann es vorkommen dass sich der Sampleeditor bei verschiedenen Java Versionen und Treibern unterschiedlich verh lt 3 Bewertung Zusammenfassung Im Lauf der Arbeit am praktischen Teil wurde schnell klar dass
53. agdynamische Pads alternativ oder zus tzlich kann aber auch ein externes MIDI Keyboard zum Anspielen der Kl nge angeschlossen werden 1 2 2 2 Die Sample Eigenschaften F r jedes ge ffnete Sample k nnen links unten im Editor MC 909 spezifische Eigenschaften fest gelegt werden siehe Abbildung 24 die sp ter beim Exportieren ber cksichtigt werden Neben dem Namen des Samples ist das zun chst der Loop Mode Dieser bestimmt ob das Sample vor w rts r ckw rts im Loop oder nur einmal abgespielt wird Der timestretch type hier mit TS Type abgek rzt bestimmt das Verhalten dieses Samples im oben erw hnten Auto Sync Modus Ein niedriger Wert f hrt zu besseren Ergebnissen bei tonalem Material ein hoher Wert empfiehlt sich dagegen f r perkussives Material Name groovy Loop Mode Jone sHoT ss menge beem Bars fa Time signature a 4 BPM 7 26 Calc BPM from selection Abbildung 24 Die Sample Eigenschaften Die darunter folgenden Elemente dienen alle der Tempoermittlung und k nnen f r alle Samples ignoriert werden die kein bestimmtes Tempo haben Beispielsweise hat ein Drumloop immer ein Tempo ein einzelner Drumsound dagegen nicht Mit Bars und Time signature wird die L nge des 160 Read Only Memory VI Praktischer Teil 85 Samples in Takten sowie die Taktart angegeben Das Tempo in BPM Beats per Minute kann ent weder per Hand eingegeben oder mit dem darunter liegenden Button aus den Angaben von Ba
54. al zahlen und Formate unterst t zen ffnen Schlie en der Datenkan le Alle Kan le auf einmal Alle DataLines unabh ngig voneinander Starten Stoppen der Datenkan le Alle Kan le auf einmal Alle DataLines unabh ngig voneinander Synchronisieren der Datenkan le Automatisch Muss explizit aufgerufen werden zueinander Organisation der Jeder Kanal hat eine eindeutige Keine Datenkan le Bezeichnung Kan le sind in Gruppen organisiert Einheit f r Puffer Sample frames unabh ngig von Bytes gr en Format und Kanalzahl Realisierung Zun chst wurden f r s mtliche Bestandteile des ASIO SDK 5 Wrapper Klassen in Java geschrie ben um das Zusammenspiel dieser Elemente komplett in Java realisieren zu k nnen Anschlie end wurden Implementierungen f r die Interfaces Mixer SourceDataLine und TargetDataLine geschrieben die deren Methoden in ASIO bersetzen Da sich SourceDataLine und TargetDataLine lediglich durch die Methoden read und write unterscheiden und da in ASIO die Aufnahme und Wiedergabe von Audiodaten ber den selben Mechanismus realisiert wird wurden beide Interfaces in ein und derselben Klasse AsIODataLine implementiert 153 Software Development Kit VI Praktischer Teil 70 Der ASIO Treiber gibt beim Vorbereiten zum Abspielen oder Aufnehmen zwei Speicheradressen zur ck die zwei Pufferh lften markieren Zu jeder Zeit ist eine von beiden Pufferh lften d
55. ald sie ben tigt werden Abbildung 19 Das Edit Men An Edit Funktionen gibt es zun chst die Elementarfunktionen Copy Cut und Paste die das Kopie ren Ausschneiden und Einf gen von Audiomaterial innerhalb des Sampleeditors erm glichen Ein Kopieren von und zu anderen Audioanwendungen w rde eine plattformabh ngige Implementie rung erfordern und ist daher derzeit nicht vorgesehen Bei Copy bzw Cut wird der selektierte Be reich kopiert bzw ausgeschnitten Ist kein Bereich selektiert sind diese Funktionen auch nicht ver f gbar Paste berschreibt den selektierten Bereich mit dem Inhalt des internen Clipboards falls dieses Daten enth lt Ist kein Bereich selektiert wird der Inhalt an der aktuellen Position eingef gt ohne etwas zu berschreiben Die Funktionen Delete und Trim beziehen sich ebenfalls auf den selektierten Bereich und stehen daher nur zur Verf gung wenn ein Bereich selektiert ist Delete entfernt den selektierten Bereich und Trim entfernt alles au erhalb des selektierten Bereichs Schlie lich existieren noch die Funktio nen Undo zum R ckg ngigmachen des letzten Bearbeitungsschritts sowie Redo zum Wiederherstel len eines vorher zur ckgenommenen Bearbeitungsschtitts Effect F r das Einbinden von Effekten wurde eine eigene Effektschnittstelle entwickelt ber die relativ einfach neue Effekte hinzugef gt und in den Sampleeditor eingef gt werden k nnen hnlich wie bei Java Sound PlugIn
56. angegeben werden VI Praktischer Teil 86 In der linken Auswahlliste findet man alle derzeit im Sampleeditor ge ffneten Dateien auf der rechten Seite eine Liste aller derzeit auf dem gew hlten Speichermedium der MC 909 enthaltenen Samples Jedes Sample ist hier einer Nummer zugeordnet Stereosamples belegen zwei Nummern Mit dem gt gt Button k nnen ge ffnete Samples zum Exportieren markiert werden Sie erscheinen dann in der rechten Liste an der Nummer die unter Next ausgew hlt wurde Existiert an dieser Stelle bereits ein Sample wird der Benutzer gefragt ob er dieses berschreiben will Zum Export markierte aber noch nicht exportierte Samples erscheinen in der rechten Liste in roter Farbe Ebenso k nnen mit dem lt lt Button Samples von der MC 909 importiert und im Sampleeditor ge ffnet werden Dabei wird eine lokale Kopie des Samples angelegt um zu gew hrleisten dass es auch nach Beendigung der USB Verbindung noch gelesen werden kann Daher muss das Sample wieder zur ckexportiert werden um vorgenommene nderungen permanent zu machen Der Update Burton dient schlie lich dazu die Liste der Samples auf der MC 909 neu einzulesen Um den Export Vorgang f r alle zum Export vorgesehenen Samples auszuf hren muss der Export Button gedr ckt werden Dabei sollte die nebenstehende Checkbox ausgew hlt sein falls aus den bertragenen Samples automatisch auch Patc
57. ann Dieser Verzicht wird durch eine verz gerungsfreiere und damit ange nehmere Bedienbarkeit der Programme belohnt Das SWT unterscheidet sich bei der Ansprechgeschwindigkeit nicht von nativen Ap plikationen da direkt auf die Ereignisverarbeitung des jeweiligen Betriebs oder Fenstersys 125 Graphical User Interface 126 Abstract Window Toolkit 127 An dieser Stelle soll nicht unerw hnt bleiben dass Sun bei der Entwicklung von JDK 1 5 in den AWT Swing Bereich viel Arbeit investiert hat um diesen Umstand zu verbessern Inwieweit dies zu einer besseren Performance f hrt wurde im Rahmen dieser Arbeit nicht berpr ft 123 http www eclipse org 19 Standard Widget Toolkit IV Audioverarbeitung in Java 50 tems aufgesetzt wird Swing ist dagegen in der Interaktion oft etwas tr ge Zudem ist SW nicht so ressourcenhungrig wie Swing 121 SWT Implementierungen existieren derzeit f r Windows Linux GTK oder Motif Mac OS X sowie verschiedene Unix Derivate Hierbei sind aufgrund des Konzepts von SWT leichte Variatio nen im Verhalten auf den unterschiedlichen Plattformen unvermeidlich 3 Da in Medienapplikationen eine absolut verz gerungsfreie Reaktion der Applikation auf Benutzer interaktion angestrebt wird bietet sich SWT JFace in diesem Bereich als Alternative zu AWT Swing an Die Anwendungen im praktischen Teil dieser Arbeit sind daher auch ausnahmslos mit SWT JFace realisiert 3 Das Java Native Interface
58. arte bekannt ist Drittprogrammierer k nnen f r die unterschiedlichen Betriebssysteme und Treiberschnittstellen Treiber bereitstellen um die Soundkarte ber eine definierte Schnittstelle an sprechen zu k nnen Der Name Soundkarte stammt aus einer Zeit in der diese Funktionalit t tats chlich immer auf einer ISA oder PCP Karte untergebracht wurde Inzwischen gibt es sowohl in das Mainboard integrierte Onboard L sungen als auch externe Ger te mit umfangreichen Anschlussm glichkeiten und interner zus tzlicher Hardware 35 Digital Signal Processing 36 Integrated System Architecture 37 Peripheral Component Interconnect III Audioprogrammierung 22 PCI Bus Analoge Ein u Ausg nge Mono Stereo Kontrolllogik Businterface Joystick und MIDI Anschluss Abbildung 6 Vereinfachter schematischer Aufbau einer herk mmlichen Stereosoundkarte Eine Soundkarte besteht mindestens aus den folgenden Bestandteilen vgl Abbildung op Anschl sse G ngige Soundkarten bieten meist einen analogen Line Stereo und einen Mikrofoneingang Mo no sowie ein bis zwei analoge Ausg nge Stereo Hinzu kommt der Joystick Anschluss ber den mit Hilfe eines speziellen Adapterkabels externe MIDI Hardware angeschlossen werden kann Soundkarten f r den Profi Bereich bieten in der Regel eine h here Zahl an Anschlussm glichkei ten darunter meist auch digitale Ein und Ausg nge in unterschiedlichen Formaten Wandle
59. ati on mehrerer Mediendatenstr me und Ger te zueinander ist noch nicht m glich Einige Ans tze bestehen im API meist sind sie jedoch noch nicht implementiert Aber selbst wenn Mixer synchronize und die MIDI Synchronisationsmethoden voll implementiert w ren w r de man mindestens noch eine Wordclock Unterstitzung sowie eine DataLine getLatency Methode vermissen Zusammenfassend kann festgestellt werden dass Java Sound derzeit noch zu viele Schwachstellen aufweist um den hohen Anspr chen an studiotaugliche Audiosoftware ganz gerecht zu werden Der Versionssprung von 1 4 zu 1 5 kann zwar ohne Zweifel als Meilenstein angesehen werden aber es bleiben noch viele Kritikpunkte Die derzeitige Aktivit t bei der Weiterentwicklung macht jedoch Hoffnung dass viele dieser M ngel in k nftigen Versionen verbessert werden k nnen Trotz aller Kritik soll noch einmal erw hnt werden dass Java Sound als plattformunabh ngiges Audioframe work und als Bestandteil eines gro en Plattformstandards in seinem Umfang ohne Konkurrenz ist W rde Java Sound also konsequent weiterentwickelt k nnte es sich zu einer m chtigen Basis f r plattformunabh ngige Audioanwendungen auch f r den Studiobereich entwickeln 5 Zukunftsausblick Das heift aber nicht dass die Entwicklung von Java Sound hier aufh rt Wie gezeigt bietet Java Sound eine gute Basis auf der sich aufbauen l sst Der Bedarf f r Weiter entwicklungen ist allerdings
60. auch durchaus gegeben F r den Einsatz als Audioframework f r nor male Desktopanwendungen ist Java Sound schon jetzt gut ger stet f r den Studiobereich bedarf es noch einiger Verbesserungen Momentan ist bei Sun genau eine Person f r Java Sound zust ndig und das nicht einmal zu hun dert Prozent Daraus l sst sich ablesen dass die Weiterentwicklung von Java Sound noch nicht allzu hohe Priorit t bei Sun hat 170 Aus INTERVIEW 171 Aus INTERVIEW 172 Vol INTERVIEW VII Abschlie ende Bewertung 94 Allerdings kann sich hier vieles ndern zum Beispiel erfahren sowohl JMF als auch Java Sound gerade einen Priorit tsschub durch JDS das Java Desktop System und die Allianz mit AMD Mit anderen Worten Sun will zur ck auf den Desktop und dazu geh rt nat r lich Sound 7 Bleibt zu hoffen dass auch professionelle Anforderungen dabei ber cksichtigt werden Java Sound bietet viel Potential f r diesen Bereich und f r meine Person kann ich sagen dass ich damit gerne weiter arbeiten werde In der Java Sound Mailingliste JJS INTEREST haben schon viele Entwickler ihre Zufriedenheit ber die endlich erreichte Qualit t der Implementierung in der Beta Version von JDK 1 5 0 zum Ausdruck gebracht M glicherweise steigt dadurch auch die Bereitschaft Java Sound einzusetzen und damit auch der Druck auf Sun die Priorit t f r die Weiterentwicklung von Java Sound zu er h hen Oder anders gesagt
61. bei dem versucht wird einen Klang anhand regelm iger Abtastwerte des analogen Signals so detailgetreu wie m glich abzubil den Im Gegensatz dazu steht der auf musikalisches Material beschr nkte Ansatz der Beschrei bung des Klangs durch eine Reihe von Musiknoten und anderer sog Events hnlich einer Partitur der im MIDI Format Verwendung findet Der Name MIDI hat sich auch als g ngigste Bezeichnung f r diesen Ansatz der Digitalisierung von Klangmaterial durchgesetzt 1 2 1 Sampling Der Quantisierungsprozess l uft beim Sampling folgenderma en ab Der Wandler tastet in regel m igen Abst nden den aktuellen Wert des analogen Signals ab und wandelt ihn in einen diskreten Wert um Dieser Wert wird als Sample engl f r Stichprobe bezeichnet daher der Name Sampling Die Genauigkeit der Abtastung eines Samples wird durch die Samplegr e bestimmt Sie bestimmt die Aufl sung mit der die einzelnen Samples dem abgetasteten analogen Wert angen hert werden Je mehr m gliche Werte es pro Sample gibt desto n her ist das Ergebnis dem analogen Original G ngige Gr e hierf r ist eine Samplegr e von 16 Bit Audio CD Standard also 2 65536 m gliche Werte die ein Sample annehmen kann F r reine Sprachaufnahmen werden oft 8 Bit gro e Samples verwendet wohingegen im Studioumfeld inzwischen oft mit 24 oder 32 Bit gearbei tet wird Bei zu geringer Aufl sung erzeugt der Samplingvorgang ein so genanntes Quantisierungs
62. computermarkt einbrachte siehe 2 1 Das MIDI Nachrichtenformat umfasst folgende Nachrichtentypen e Notennachrichten Note On Taste gedr ckt Note Off Taste losgelassen e Controller Nachrichten zur Steuerung der Ger teparameter z B Lautst rke Stereopositi on Brillanz e Synchronisationsnachrichten z B Tempo Start Stop sog MIDI Clock e Pitch Bend Zus tzliche Beeinflussung der Tonh he e Aftertouch Druckvariation nach dem Dr cken der Taste e Systemexklusive Nachrichten Ein Rahmenformat in das jeder Hersteller ger tespezifische Nachrichten packen kann Zur Speicherung von MIDI Daten definiert der MIDI Standard drei Typen von MIDI Dateien die in Abschnitt 1 2 4 2 genauer behandelt werden 1 2 3 Vereinbarkeit von Sampling und MIDI So verschieden die Ans tze von Sampling und MIDI sind so gab es doch immer wieder Versuche beide miteinander zu vereinen und so von den Vorteilen beider Ans tze zu profitieren Diese Ver suche gehen allesamt den Weg dass einzelne Klangsamples mit ihren Steuerdaten zusammengefasst werden Beim Abspielen erzeugt der Player aus diesen Informationen den gew nschten Klang So erh lt man sich die volle Kontrolle ber den Klang kann das Datenaufkommen jedoch in Grenzen halten und beh lt dar ber hinaus die M glichkeit relativ einfach nderungen an der Komposition vorzunehmen Nahezu alle neueren Software Sequenzer arbeiten heute nach diesem Prinzip Sie bieten neben der M g
63. dem Modell MC 909 eine Groo vebox auf den Markt die Sampler Sequencer und Synthesizer in einem Ger t vereint VI Praktischer Teil 84 Der Synthesizer Sampler erm glicht die Klangerzeugung entweder auf Basis der mitgelieferten ROM Samples oder auf Basis eigener Klangsamples die ber den Audioeingang aufgenommen oder ber die USB Schnittstelle importiert werden k nnen Die Kl nge k nnen entweder als Ein zelklang sog Patch oder als Zusammenfassung mehrerer Kl nge in einem sog Rhythm Set gespei chert werden Ein Patch kann ber die gesamte Klaviatur in unterschiedlicher Tonh he gespielt werden In einem Rhythm Set ist dagegen jeder Taste ein anderer Klang zugeordnet Der Sequencer bietet die M glichkeit die Kl nge ber MIDI Sequenzen auf 16 Spuren anzusteu ern Die Zusammenfassung von je einer gleich langen Sequenz pro Spur wird als Pattern bezeichnet Eine Besonderheit der MC 909 ist die Aato Sync Funktion die den tempounabh ngigen Umgang mit Samples erm glicht Das bedeutet dass Samples schneller oder langsamer abgespielt werden k nnen ohne dass sich dabei die Tonh he ndert Zur Datenhaltung verwendet die MC 909 einen internen 16 MB Flash ROM Speicher sowie opti onal eine bis zu 128 MB gro e Smart Media Karte Das Ger t kann in einen USB Modus versetzt werden um von einem angeschlossenen Computer auf eines dieser beiden Speichermedien zu zugreifen Als Klaviaturersatz bietet die MC 909 16 anschl
64. den Es ist auch m glich durch Klicken ohne Mausbewegung die aktuelle Auswahl zu l schen Abgespielt wird immer der beim Dr cken auf den Play Button selektierte Bereich oder falls kein Bereich selektiert ist die gesamte Datei Innerhalb der Wellenform k nnen bestimmte Punkte mit Markern markiert werden 5 Die Marker k nnen entweder aus einer Datei gelesen werden deren Format solche Markierungen erlaubt oder per Hand hinzugef gt werden Die Unterst tzung f r das Lesen von Markern aus Audiodateifor maten war mit ein Grund f r die Entscheidung eine eigene PlugIn Schnittstelle zu entwickeln Java Sound h tte nicht garantieren k nnen dass ein AudioFileReader der diese Marker lesen kann einem anderen vorgezogen wird wenn beide das Audioformat der Datei lesen k nnen Die Marker 159 Verwendungsm glichkeiten f r Markierungen innerhalb von Audiodateien gibt es zahlreiche Ein Beispiel daf r findet sich beim Exportieren von Rhythm Sets in der MC 909 Version des Sampleeditors siche 1 2 2 4 VI Praktischer Teil 82 werden wie in Tabelle 3 bei den Slices beschrieben als property im AudioFileFormat Objekt ge speichert Ein Marker kann hinzugef gt oder entfernt werden indem bei gedr ckter STRG Taste mit der Maus an die gew nschte Stelle in der Wellenform geklickt wird Mit gehaltener SHIFT Taste kann ein Marker selektiert und dann mit der Maus oder mit den Pfeiltasten nach links oder rechts verscho
65. der Computertechnik die wahrgenommene Antwortzeit eines Ger ts auf ein Signal vgl NET LEXIKON Im Audiobereich ist damit meist die durch eine Soundkarte und ihren Treiber insbesondere durch Pufferung entstehende Verz gerungszeit im Audiodatenfluss gemeint 70 Multi Media Extension Die Standard Treiberschnittstelle f r Audio auf Windows Systemen 71 Laut Microsoft entstehen mindestens 30 ms Latenz bei Verwendung von Direct Sound vgl MICROSOFT 72 Audio Streaming Input Output 1997 entwickelt Version 2 0 erschien 1999 73 Aus ASIO S 3 7 http michael tippach bei t online de asio4all 7 Windows Driver Model Ein Treiberstandard von Microsoft um die Entwicklung von Treibern zu erm glichen die auf unterschiedlichen Windows Versionen eingesetzt werden k nnen 76 Enhanced Audio Streaming Interface III Audioprogrammierung 33 gic von Apple aufgekauft wurde und damit die Windowsplattform nicht mehr unterst tzt wird dem EASI Standard keine gro e Zukunft mehr vorausgesagt GSIF Eine weitere Treiberschnittstelle die hier erw hnt sein soll ist die GSIF Schnittstelle die vom Hersteller Nemesys Tascam speziell f r die hauseigene Anwendung GigaSampler GigaS tudio entwickelt wurde und auch nur dort Verwendung findet GSIF minimiert ebenso wie ASIO und EASI die Latenz um das Echtzeitgef hl beim Arbeiten mit der Giga Software zu gew hrleisten CoreAudio Im Rahmen des 2001 ver ffentlichten Apple Betr
66. dioverarbeitung in Java Im Folgenden werden die Bestandteile und Eigenschaften von Java vorgestellt und besprochen die f r den Bereich Audioprogrammierung relevant sind Dies sind insbesondere die verschiedenen APIs die in Java f r die Verarbeitung von Audiodaten existieren Auch wird diskutiert inwieweit Java f r die Erf llung der im letzten Abschnitt aufgef hrten Echtzeitanforderungen f rderlich ist oder ein Hindernis darstellt 1 Audio APls in Java In Java gibt es verschiedene M glichkeiten auf Audio Hardware zuzugreifen bzw Audiodaten zu verarbeiten Die wichtigsten sollen im Folgenden kurz vorgestellt werden Java Speech Das Java Speech API ist Bestandteil des JDK und wurde darauf ausgelegt Sprachverarbeitung in Java zu erm glichen Sprache kann damit sowohl analysiert als auch synthetisch erzeugt werden Sun arbeitet in diesem Bereich mit verschiedenen Firmen zusammen um unterschiedliche Imple mentierungen zu erm glichen F r den Studiobereich spielt diese Art der Sprachverarbeitung aller dings keine Rolle daher wird auf Java Speech hier nicht n her eingegangen Java3D Java3D ist ein optional erh ltliches Paket das sich wie der Name schon sagt der 3D Programmierung widmet Mit Java3D ist es m glich Szenegraphen und andere interaktive dreidi mensionale Modelle zu erstellen und zu verwalten Dar ber hinaus bietet es auch Ans tze f r 3D Audio also die Option Klangquellen im 3D Raum zu posi
67. durch eine Reihe statischer Methoden anbietet Hinzu kommen die Packages javax sound sampled spi und javax sound midi spi die Drittanbietern die Erweiterung der Implementierung durch PlugIns so genannte Service Provider Interfaces SPI erm glichen Im Folgenden werden kurz die wichtigsten Bestandteile des APIs besprochen Eine vollst ndige API Beschreibung findet sich neben JAVADOC in JAVASOUND 137 Aus MELOAN 138 Aus MELOAN 139 Aus INTERVIEW V Java Sound 54 2 1 Das Package javax sound sampled Die Line Interface Hierarchie Das Zentrum des sampled Package bildet das Line Interface The Line interface represents a mono or multi channel audio feed A line is an element of the digital audio pipeline such as a mixer an input or output port or a data path into or out of a mixer Eine Line repr sentiert also ein Objekt durch das Audio daten flie en k nnen Subinterfaces von Line sind Port Mixer und DataLine Ports stehen f r tats chliche Ein und Ausgangsanschl sse der Soundkarte wie den Mikrophon oder Line Out Anschluss ber Port Instanzen k nnen diese Anschl sse ein und ausgeschaltet oder falls unterst tzt in Lautst rke Panorama oder hnlichem kontrolliert werden siehe auch Controls weiter unten Codebeispiel 2 zeigt wie man mit Java Sound den Mikrophoneingang einer Soundkarte einschalten kann was sonst blicherweise ber einen Dialog des Soundkartentreibers geschieh
68. e sehr lange existieren Diese Erkenntnis f hrte zur Entwicklung von Generationen Kollektoren Sie unterteilen den verf gbaren Speicher in Bereiche unterschiedlicher Gr en die so genannten Ge nerationen Neue Objekte werden stets in der j ngsten Generation erzeugt und falls sie mehrere Bereini gungsschritte berleben in eine ltere Generation verschoben Sobald der Speicher einer Genera tion an die Grenzen seiner Kapazit t kommt wird er mit einem der oben beschriebenen Algorith men aufger umt Der Vorteil von Generationen Kollektoren ist dass nicht bei jedem Bereinigungsvorgang der ge samte Speicherbereich ges ubert werden muss was die Pausenzeiten drastisch verringern kann zumal wenn die Gr e der Generationen geschickt gew hlt oird ip 114 Vgl SCHREIBER S 41 115 Vgl SCHNEIDER S 24ff 116 Vgl SCHREIBER S 43 IV Audioverarbeitung in Java 46 Inkrementelle und nebenl ufige Speicherbereinigung Bei der inkrementellen Speicherbereinigung werden die Pausenzeiten kurz gehalten indem darauf verzichtet wird bei jedem Durchlauf den gesamten Speicher bereinigen zu wollen vielmehr be schr nkt man sich jeweils auf die Bereinigung kleiner Teilbereiche Einen hnlichen Ansatz ver sucht die nebenl ufige Speicherbereinigung Hierbei l uft die Garbage Collection in einem eigenen Thread parallel zur eigentlichen Programmausf hrung Da sich der Zustand der nicht untersuchten Speicherte
69. e 51 Codebeispiel 2 ffnen des Mikrophonanschlusses einer Soundkarte n ennennnneenen 54 Codebeispiel 3 Abspielen einer Audiodatei als Srreom 56 Codebeispiel 4 Ver ndern der Ausgangslautst rke des Line Out Anschlusses 222u224022 nennen 37 Codebeispiel 5 Senden von MIDI Nachrichten mit Java Sound 60 Codebeispiel 6 M gliche erweiterte Listener Unterst tzung f r Java Sound oo 63 Abk rzungsverzeichnis Abk rzungsverzeichnis AIFF ALSA AMT API ASIO AWT BPM CPU DIN DSP EASI FFT GC GC GM GNU GSIF GUI Hz ISA J2SE JDK JDS JIT JNI JRE JVM LGPL LSB LTB Audio Interchange File Format Advanced Linux Sound Architecture Active MIDI Transmission Application Programming Interface Audio Streaming Input Output Abstract Window Toolkit Beats per Minute Central Processing Unit Deutsches Institut f r Normung Digital Signal Processor Digital Signal Processing Enhanced Audio Streaming Interface Fast Fourier Transformation Garbage Collector Garbage Collection GNU Java Compiler General MIDI GNU s Not UNIX Giga Sampler Interface Graphical User Interface Hertz Integrated System Architecture Java 2 Standard Edition J2SE Development Kit Java Desktop System Just In Time Java Native Interface Java Runtime Environment Java Virtual Machine Lesser General Public License Least Significant Byte Linear Time Base Abk rzungsverzeichnis MIDI MMA MPEG MSB MTC OSS
70. e wie beispielsweise den GNU Java Com piler GJC die aber noch nicht f r alle Einsatzzwecke uneingeschr nkt geeignet sind 2 2 Garbage Collection Ein Bestandteil der Java entschieden von nativen Sprachen wie C C unterscheidet ist die Art der Speicherverwaltung Der Programmierer muss sich nicht explizit um das Allozieren und Deal lozieren von Speicher k mmern die JVM bernimmt das komplette Speichermanagement Das ist zwar zun chst ein gro er Vorteil da gerade dieser Bereich sonst sehr komplex und fehleranf llig ist Gerade in punkto Echtzeit ist dieses Verhalten aber manchmal auch ein entscheidender Nachteil da dem Programmierer die M glichkeit entzogen wird auf diese performance und echtzeitkriti schen Vorg nge gezielt Einfluss zu nehmen Hier ist insbesondere das Aufr umen nicht mehr be n tigter Objekte gemeint was in Java der Garbage Collector GC erledigt ber sein Verhalten k nnen kaum Vorhersagen getroffen werden Es kann allerdings hilfreich sein die verschiedenen Garbage Collection Algorithmen zu kennen da sich einige ihrer Parameter oft ber die JVM Parameter steuern lassen F r die meisten GC Algorithmen ist es n tig dass der Programmfluss zwischenzeitlich komplett unterbrochen wird damit der Garbage Collector exklusiven Speicherzugriff erh lt und keine Inkon sistenzen beispielsweise durch Referenzen auf verschobene Objekte entstehen Dies f hrt zu unangenehmen Pansen in d
71. ear beitungen noch zum Zeitpunkt des Abspielens Einfluss nehmen kann Nur mit Echtzeitberech nung ist es m glich das Gef hl des Arbeitens mit analoger Technik nachzuempfinden Echtzeitbe rechnung erfreut sich dementsprechend hoher Beliebtheit Der Nachteil von Echtzeitberechnung ist die Echtzeitanforderung Die Anzahl der simultan einge setzten Effekte und Bearbeitungen erh ht die Prozessorlast und kann irgendwann dazu f hren dass ein Berechnen s mtlicher Bearbeitungen in Echtzeit nicht mehr m glich ist F r ein CPU5 sparendes Arbeiten mit Schnittlisten oder Echtzeitberechnung bzw f r das Spei chern des Bearbeitungsergebnisses in einer neuen Datei bieten moderne Programme mit dem sog Bouncing oder Freezing M glichkeiten einige Bearbeitungen einmalig in die Quelldaten hineinzurech nen um sie dann nicht mehr in Echtzeit berechnen zu m ssen Dies geht nat rlich auf Kosten der Interaktionsm glichkeiten 1 3 2 4 Analysen und Effekte Eine Audioanwendung stellt dem Benutzer in der Regel eine ganze Reihe an Verarbeitungsm g lichkeiten f r das Ausgangsmaterial zur Verf gung Handelt es sich hierbei lediglich um eine Aus wertung des Materials zur Gewinnung von Informationen ber enthaltene Frequenzen Lautst rke etc so spricht man von Analysen Wird dagegen das Ausgangsmaterial durch die Verarbeitung ver ndert spricht man von Effekten wobei Effekte in der Regel auch eine Analyse beinhalten Echtzeitanforderung
72. egenzug wird allerdings die von Java bekannte Qualit t und Planungssicherheit geboten Nachteilig ist auch die Situation auf dem Mac Apple besitzt hier die Verantwortung f r die Implementierung und scheint derzeit nicht viel Energie in die Entwicklung einer ausgereiften Java Sound Implementierung zu stecken Was Java Sound derzeit ebenfalls fehlt ist eine Art zentrale Registry beispielsweise auf einer Websi te An einer solchen Stelle k nnten Informationen ber existierende PlugIns property keys sowie m gliche Werte f r die verschiedenen identifizierenden Klassen z B AudioFileFormat Type AudioFormat Encoding Control Type gesammelt werden W rde allerdings solch eine Registry eines Tages eingef hrt was durchaus denkbar ist w re sie eine besondere St rke von Java Sound JSRESOURCES w re daf r ein geeigneter Ort Ein weiterer Schwachpunkt von Java Sound sind einige grundlegende Designschw chen im midi Package vgl INTERVIEW die auch in zuk nftigen Versionen schwer zu beheben sein werden da die Abw rtskompatibilit t des API gewahrt werden muss Teilweise k nnen diese jedoch durch Workarounds umgangen werden 3 Plattformunabh ngigkeit Plattformunabhangigkeit kann in der Audioprogrammierung generell nur in sehr begrenztem Ma erf llt werden Wie sich auch im praktischen Teil dieser Arbeit zeigt sind viele Schnittstellen nur VII Abschlie ende Bewertung 92 f r bestimmte Plattformen verf gbar
73. ein Audiosignal erst einmal den Weg in ein digitales System gefunden er ffnet die heutige DSP Technik mannigfaltige M glichkeiten Von der Analyse ber die Optimierung bis hin zur totalen Verfremdung des Ausgangssignals ist mit digitaler Technik all das komfortabler m glich was fr her mit analoger Audiotechnik bewerkstelligt werden konnte Au erdem stehen zus tzliche M glichkeiten offen die mit analoger Technik undenkbar gewesen w ren und das zudem um ein vielfaches schneller und billiger Mit Digitaler Klangverarbeitung ist meist die Verarbeitung samplingbasierter Daten gemeint Die Verarbeitung von MIDI Daten stellt keine besondere Herausforderung dar da sie bereits in einem gut strukturierten und damit leicht les und modifizierbaren Format vorliegen Einzige Herausfor derung ist hier der Echtzeitanspruch von MIDI Folgende Aufgaben k nnen im Bereich der Verarbeitung von samplingbasiertem Audiomaterial angetroffen werden e Formatkonvertierung e Analyse e Klangbearbeitung Echtzeit oder nicht e Abspielen und Aufnehmen Im Folgenden werden die daf r ben tigten Hard und Softwarekonzepte vorgestellt 1 3 1 Sound Hardware 1 3 1 1 Soundkarten Soundkarten findet man heutzutage in vielfachen Ausfertigungen Im Prinzip ist eine Soundkarte eine Ansammlung von A D und D A Wandlern sowie einem Chip der vom Rechner aus ber Befehle angesteuert werden kann Der Hersteller der Soundkarte oder sofern der Befehlssatz der K
74. ein sehr grobes Raster gew hlt Wenn man die so gewonnenen Werte mit dem analogen Originalsignal vergleicht wird der Informationsverlust deutlich vgl Abbildung 5 III Audioprogrammierung 17 Spannung Abbildung 5 Ergebnis der Digitalisierung im Vergleich zum Originalsignal Entscheidend f r die Qualit t des Ergebnisses ist zudem die Synchronisation der Abtastvorg nge Man kann sich leicht vorstellen dass es wenig sinnvoll ist wenn man 44 100 Mal pro Sekunde ab tastet diese Abtastungen aber so unregelm ig erfolgen dass sie das Ergebnis verzerren Der Pro zess des Abtastens ist also hoch echtzeitsensibel Beim bergang von der Hardware zur Software schicht werden daher Puffermechanismen eingesetzt damit Schwankungen im Software Timing ausgeglichen werden k nnen Neben diesen Faktoren die bei der Quantisierung eine Rolle spielen gibt es verschiedene Wege der Kodierung der quantisierten Daten zur Speicherung oder bertragung auf digitale Medien Diese werden in Abschnitt 1 2 4 1 behandelt 1 2 2 Musiknoten als digitale Klangdaten MIDI W hrend das Sampling erst mit dem Aufkommen digitaler Technik m glich wurde gab es eine andere Form der Quantisierung von Klangmaterial schon viel fr her Bereits aus dem 10 Jahrhun dert sind erste Quellen berliefert die Versuche belegen Musik durch bestimmte Zeichen schrift lich festzuhalten Aus diesen Versuchen ging die Notenschrift hervor die heute fast berall a
75. eit einige potentielle Bef rworter und Anwender verloren die es nun erst einmal zur ck zu gewinnen gilt Ebenso kann es noch einige Zeit dauern bis sich die J2SE 1 5 die derzeit Mitte Juli 2004 nur als Beta Version existiert verbreitet hat Ebenso f llt das umst ndliche API negativ ins Gewicht Auch nach dessen intensiver Nutzung im praktischen Teil dieser Arbeit kann noch nicht von einem intuitiven Umgang damit gesprochen werden Zu irref hrend ist die Namensgebung und zu undurchsichtig sind die Zusammenh nge Allerdings kann dies als Sch nheitsfehler abgetan werden solange die Funktionalit t dadurch nicht beeintr chtigt wird So sehr Java Sound auch von den Vorteilen von Java profitiert so hat es doch auch unter dessen Schw chen zu leiden Die Performance ist dabei nicht das Problem aber eine Umsetzung harter Echtzeitanforderungen wie sie im Audiobereich angetroffen werden k nnen ist nicht immer mit dem gew nschten Ergebnis m glich Ebenso kann nur auf solche Ressourcen zugegriffen werden f r die in irgendeiner Form eine Java Anbindung besteht Ein weiterer Nachteil den Java Sound von Java erbt ist der umst ndliche und langwierige Verbes serungsprozess API nderungen k nnen nur in Major Releases eingef hrt werden und m ssen au erdem einen komplizierten Pr fungsprozess durchlaufen Auch bug fixes werden nicht so schnell realisiert wie das bei einem gut betreuten Open Source Projekt der Fall w re Im G
76. el einge setzt das Ausgangsmaterial auf einen der folgenden Aspekte zu untersuchen e Lautst rke e Lautheit Empfundene Lautst rke e Frequenzverteilung e zeitlicher Verlauf dieser Aspekte Die Analyse der Lautst rke stellt keine Schwierigkeit dar da PCM kodierte Audiodaten f r jedes Sample direkt den Lautst rkewert beinhalten Eine etwas gr ere Herausforderung ist das Analysie ren eines Signals nach seiner Frequenzverteilung was auch f r eine Lautheitsmessung n tig ist da diese im Gegensatz zur Lautst rke abh ngig von den Frequenzen ist Hierf r wird meistens die mathematisch relativ komplizierte Fast Fourier Transformation FFT verwendet die auch eine gewisse CPU Belastung mit sich bringt FFT beruht auf der Erkenntnis dass sich jedes periodische Signal theoretisch als Summe von Sinusschwingungen verschiedener Frequenzen und Intensit ten darstellen l sst Um FFT auch auf nichtperiodische Signale anwenden zu k nnen wird ein kleiner Trick angewandt Es wird ein bestimmter Ausschnitt des Signals be trachtet sog FFT Window und so behandelt als w rde sich dieses Signal stetig wiederholen Das FFT Window wird dann im Signal verschoben Durch diesen Trick entstehen kleine Fehler die sich aber in der Summe der Einzelbetrachtungen in der Regel ausgleichen Als Ergebnis der FFT erh lt man die Frequenzbestandteile eines Signals und deren Intensit ten Eine relativ neue Alternative zur FFT stellt die sog Wavelet Trans
77. elfell in Schwingung die im Innenohr in Nervenstr me umgesetzt wird wel che das Gehirn auswerten kann Luftdruck Zeit Abbildung 1 Analoges Audiosignal Nach einem hnlichen Prinzip funktionieren auch s mtliche analogen Klangerzeuger und Rezeptoren z B Lautsprecher und Mikrophone Klangerzeuger erzeugen Schwingungen die meistens durch die Luft zum Klangrezeptor gelangen Dieser wandelt sie ber Induktion oder Kapazit t in elektrische Str me um In der analogen Audiotechnik werden diese Str me dann ber Audiokabel f r eine eventuelle Weiterverarbeitung bertragen oder auf analogen Speichermedien Kassette Tonband gespeichert An keinem Punkt findet eine Kodierung dieser Str me in ein digitales Format statt Dementsprechend ist die Qualit t der bertragung in der analogen Audio technik abh ngig von der Qualit t und den Rauschabst nden der verwendeten bertragungs und Speichermedien Der Einfachheit halber wird hier vom bertragungsmedium Luft ausgegangen F r alle anderen Stoffe und Stoffzu sammensetzungen gelten diese Erkenntnisse analog D Vel WATKINSON S 32ff H Der Signal Rauschabstand bezeichnet das Verh ltnis von Nutzsignal zu St rsignal INET LEXIKON III Audioprogrammierung 14 1 2 Digitalisierung Ihe conversion of audio to the digital domain allows tremendous opportunities which were denied to analog sig nals 77 Die digitale Audiotechnik fangt dort an wo Kla
78. ellers Emagic http www heise de newsticker meldung 28696 im Jahr 2002 begr ndet DI http www agnula org Funktionen die die Hardware nicht bereitstellt werden softwarebasiert emuliert und sind somit etwas langsamer III Audioprogrammierung 32 Direct Sound erm glicht zwar geringere Latenzen als MME Treiber allerdings keine die profes sionellen Anspr chen gen gen k nnten Auch ist es ber Direct Sound nicht m glich Mehrka nalhardware als solche anzusprechen Die Soundausgabe ist nur in Mono oder Stereo vorgesehen Direct Sound hat daher im Studiobereich keine besondere Bedeutung wird aber an dieser Stelle erw hnt da Suns Java Sound Implementierung in der JDK Version 1 5 0 unter Windows mit Di rect Sound arbeitet ASIO Das ASIO Treibermodell wurde von der Firma Steinberg entwickelt und im Jahr 1997 zusammen mit der Software Cubase VST eingef hrt Dabei war das Ziel Audioapplikationen zu erm glichen die Audiohardware mit niedriger Latenz und mehreren gleichzeitig ansprechbaren Ein und Aus g ngen unterst tzen Damals stellte sich die Situation folgenderma en dar The personal computer platform really misses a relatively simple way of accessing multiple audio inputs and outputs Today s operating system s audio support is designed for stereo input and stereo output only There is no provision to extend this without creating major problems i e synchronization issues between the differen
79. ellt Ein paar Beispiele e Timestamps im MIDI package sind pro Device Sequencer und MIDI IN port haben also unterschiedliche Timestamps Wenn man nun einen Receiver und Transmitter verbindet um von einem externen MIDI port in einen Sequencer aufzunehmen dann m sste man von der API her mit den Timestamps des MIDI devices im Sequencer aufnehmen obwohl der nat rlich eine ganz andere Zeitbasis hat In der Sun Implementierung ignoriert also der Sequencer die Timestamps f r die Aufnahme Aber damit geht dann die M glichkeit zur Auswertung der Timestamps des MIDI IN Ports verloren es sei denn man umgeht die Aufnahmefunktion vom Sequencer und programmiert sie selbst Anhang A Emailinterview mit Florian B mers AA e F r MidiSystem getTransmitter und MidiSystem getReceiver gibt es keinen Anwendungs fall da man damit nicht ausw hlen kann was f r eine Art Transmitter und Receiver ge w nscht sind und e von einem Receiver oder Transmitter kann man nicht das dazugeh rige MidiDevice er fragen e MidiSystem getSequencer lieferte seit 1 3 einen Sequencer der implizit mit dem damals einzigen Synthesizer verbunden war Es war unm glich diese Verbindung zu trennen Um das Problem zu l sen unter Beibehaltung von Kompatibilit t zu existierenden Program men wurden MidiSystem getSequencer boolean um mit getSequencer false einen Se quencer zu bekommen der keine Verbindung hat und MidiDevi ce getReceivers getTransm
80. em ASIOMixer eine DataLine in Monoformat anfordert Handelt es sich bei der Soundkarte um ein Stereoger t kann davon ausgegangen werden dass das Mono Signal auf der linken und rechten Seite ausgegeben werden soll Wird dagegen eine Mehrkanalsoundkarte ange sprochen ist es gut m glich dass die Ausgabe nur auf dem ersten Kanal gew nscht ist Im ASIOMixerProvider PlugIn wurde die zweite L sung gew hlt Das ffnen einer DataLine im Mono Format f hrt also dazu dass nur auf dem ersten bei Stereokarten dem linken Kanal abge spielt oder aufgenommen wird Dieses Verhalten wird Benutzer von Stereosoundkarten m gli cherweise verwundern aber f r die Mehrkanalunterst tzung scheint es der bessere Weg zu sein Ergebnis Das fertige ASIO PlugIn erm glicht den Zugriff auf installierte ASIO Treiber aus Java Sound her aus Derzeit existiert nur eine Windows Implementierung F r Mac m sste der native Teil leicht angepasst und neu kompiliert werden Bei bestimmten ASIO Treibern kann es n tig sein f r ein korrektes Funktionieren das FloatConversionProvider PlugIn siche n chster Abschnitt in stalliert zu haben Das Abspielen und Aufnehmen funktioniert allerdings tritt bei kleinen Puffergr en und bei hoher Systemlast Knacksen im Audiosignal auf die sich wohl darauf zur ckf hren lassen dass die Daten nicht schnell genug verarbeitet werden Ob diese Probleme auf Java Java Sound oder die Imple mentierung zur ckzuf hren sind konnte
81. eme haben 64 Eine umfassende Sammlung von Audiosoftware f r Linux findet sich auf http www linux sound org 65 Vgl PHILLIPS III Audioprogrammierung 31 2 2 Heutige Bedeutung Ein Blick auf das Softwareangebot und die Stimmung in Benutzerkreisen ergibt folgendes Bild f r die heutige Bedeutung der unterschiedlichen Betriebssystemplattformen f r professionelle Audio software Apples Macintosh Plattform konnte sich bis heute ihren professionellen Ruf erhalten und hat daher im professionellen Umfeld nach wie vor eine st rkere Position Allerdings konnte die Windows Plattform nicht zuletzt dank der Zusammenf hrung des stabilen Windows NT und des multimedia freundlichen Windows 98 ME im Betriebssystem Windows XP viel Boden gut machen und ist im semiprofessionellen Umfeld und im Hobbybereich der einen nicht zu untersch tzenden Markt darstellt verst rkt anzutreffen In der Bedeutung f r anspruchsvolle Audiosoftware k nnen Mac Plattform und Windows Plattform daher in etwa gleichgesetzt werden Auch Atari Rechner finden sich noch in einigen Studios f r die Erf llung von Aufgaben im MIDI Bereich Allerdings wird so gut wie keine neue Software f r diese Plattform entwickelt und die Sys temleistung liegt auch weit hinter dem was heutzutage m glich ist Daher werden auch diese Ataris fr her oder sp ter durch neue Rechner ersetzt werden Linux konnte sich inzwischen auch auf dem Audiosektor etablieren leidet aber der
82. en die Komplexit t der unteren Schicht in der Kommunikation mit der Audio Hardware vor dem Programmierer zu verbergen und ihm bestimmte wiederkehrende Aufgaben abzunehmen Java Sound dagegen ist ein Framework das sich im Lowlevel Bereich eben dieser Komplexit t widmet indem es dem Programmierer Zugriff auf die Abl ufe in dieser Schicht bietet Java Sound ist seit der Version 1 3 fester Bestandteil des JDK und die meisten anderen APIs verwenden intern Java Sound In Punkt V wird Java Sound als Hauptinhalt dieser Arbeit detaillierter beschrieben 2 Echtzeit und Performance in Java Java ist langsam eine oft ge u erte Kritik die generell gegen die Nutzung von Java in zeitkriti schen Systemen wie z B im Medienumfeld vorgebracht wird Es ist zwar nicht von der Hand zu weisen dass Java durch das Konzept der Virtual Machine einen gewissen Overhead erzeugt und somit einen Nachteil gegen ber Maschinencode zu kompensieren hat trotzdem sollten solche Aus sagen kritisch betrachtet werden Zun chst muss zwischen Performance und Echtzeit unterschieden werden W hrend Performance die durchschnittliche Ausf hrungszeit meint ist mit Echtzeit die F higkeit zum Erf llen harter Echtzeitanforderungen also das Kontrollieren der maximalen Ausf hrungszeiten gemeint Ein Grund warum mit Java nicht immer 100 der vom System her m glichen Geschwindigkeit erreicht werden kann ist die angestrebte Plattformunabh ngigkeit S
83. enen die Applikation nicht auf Eingaben reagiert Diese Pansen sind f r Echtzeitan wendungen z B Audio Video Anwendungen nicht akzeptabel Daher gilt es f r Audioanwendun gen falls m glich einen GC Algorithmus auszuw hlen der diese Pausenzeiten gering h lt 2 2 1 GC Algorithmen Kopierender Kollektor Die einfachste Implementierung eines Garbage Collectors die in Java Verwendung findet ist der Kopierende Kollektor Hierbei wird der Speicher in zwei oder mehr Teile aufgeteilt wovon zu jeder Zeit nur ein Teil g ltige Objekte enth lt Bei jedem GC Durchlauf wird der Objektbaum von der 111 GNU s Not UNIX 112 http gcc gnu org java 113 Aus SCHREIBER S 43 IV Audioverarbeitung in Java 45 Wurzel an durchlaufen und alle erreichbaren Objekte werden in den n chsten Speicherteil kopiert der anschlie end zum aktuell g ltigen Teil wird Der gerade durchlaufene Speicherteil kann nach dem Kopieren komplett gel scht werden Kopierende Kollektoren f hren zu schnellen Allokati onszeiten da der freie Speicher nicht fragmentiert wird und daher keine aufw ndige Verwaltung des freien Speichers n tig ist Allerdings ben tigen sie insgesamt relativ viel Speicher und k nnen zu langen Pausenzeiten w hrend der Garbage Collection f hren Mark amp Sweep Mark amp Compact Bei diesen beiden Verfahren wird bei jedem GC Durchlauf der gesamte Objektbaum durchlaufen und jedes erreichbare Objekt mit einem
84. erformance vor allem im Bereich latency durch DirectAudio e Vereinfachung z B AudioSystem getClip e Stabilit t erh hen Abst rze e Die API mit wenigen aber wichtigen Methoden abrunden Sequencer loop Midi System getSequencer boolean connected properties property file MR Inwieweit wurden diese Ziele erreicht FB Im Gro en und Ganzen wurden alle Ziele erreicht Der Plan ogg und mp3 zu unterst tzen fiel der Lizenzierungsproblematik zum Opfer F r Synchronisierung war nicht genug Entwick lungszeit vorhanden Das hei t aber nicht dass die Entwicklung von Java Sound hier aufh rt Im Gegenteil erst jetzt kann Sun von einer Referenz Implementierung sprechen Und erst jetzt ist es sinnvoll ber wirk lich gro e nderungen nachzudenken Matthias Pfisterer und ich haben schon Pl ne f r ein ja vax sound newmidi package und das nur halb im Scherz Auch Profifeatures wie ASIO DirectX und ASIO plugins Klangerzeuger usw brauchen mehr API support damit sie effizient von Java aus benutzt werden k nnen Zum Beispiel verlangt Mehr kanalaudio nach neuen Klassen Interfaces um die n tigen Kanalzuordnungen vornehmen zu k n nen MR Was sind denn die Schw chen des MIDI package die Dich und Matthias zu der berlegung bringen ein komplett neues MIDI package aufzuziehen FB Im Allgemeinen sind das typische API Design Fehler die auftreten wenn man die Implementierung erst nach Festlegung der API fertigst
85. erungen von Sound Zugriffen anderer Java Media APIs vgl IV 1 Seit JDK 1 3 1999 ist es ein fester Bestandteil des JDK wel ches davor nur sehr begrenzte Sound Funktionalit t bot Java Sound umfasst folgende Bestandteile 1 2 Java Sound API Das Java Sound API umfasst die Programmierschnittstelle die in den Packages javax sound definiert wird Sie ist unabh ngig von jeder Implementierung Java Sound Implementierungen Neben der Referenzimplementierung von Sun f r die Zielplattformen Linux Windows und Solaris existieren auch andere Implementierungen von Drittanbietern Die wohl be kannteste ist die Linux Implementierung des Open Source Projekts Tritonus die zu mindest bis vor JDK 1 5 einige Schw chen der Sun Implementierung umgehen konnte Java Sound Audio Engine Das JDK beinhaltet mit der Java Sound Audio Engine die auf der Beatnik Audio Engine basiert einen virtuellen Player f r Audio und MIDI der bereits eine MIDI Soundbank mitbringt In fr heren Java Sound Versionen war es nur m glich ber die Java Sound Au dio Engine Kl nge abzuspielen Zielsetzung und Entwicklung von Java Sound Zur urspr nglichen Zielsetzung bei der Entwicklung von Java Sound finden sich einige bemer kenswerte Zitate in einem Artikel MELOAN der zu einer Zeit erschien als an der ersten Re lease Version von Java Sound gearbeitet wurde Der damalige Java Media Manager Michael Bund schuh sah die Bedeutung von Java Sound
86. erzeitige Umgang mit den installierten SPI Implementierungen durchaus noch verbesserungsw rdig Es kann beispielsweise nicht festgelegt werden welche von mehreren instal lierten AudioFileReader Implementierungen beim Aufruf von AudioSystem getAudioFileFormat bevorzugt verwendet witd In Version 1 5 wurden zwar hnliche Mechanismen f r andere Bereiche z B AudioSystem getClip eingef hrt warum diese allerdings nicht auch auf z B AudioFileReader Writer bertragen wurden erscheint un verst ndlich Vermisst wird auch die M glichkeit Provider zur Laufzeit hinzuzuladen oder zu ent fernen 44 Ebenso w re eine Art zentrale Registry beispielsweise auf einer Website f r verf gbare Service Provider Dateiformate Klasse AudioFileFormat Type Kodierungstypen Klasse AudioFormat Encoding property keys z B f r AudioFileFormat getProperty String key und hnliches w nschenswert An dieser Stelle k nnten sowohl vorhandene PlugIns als auch darin verwendete Benennungen bekannt gemacht werden Ein Punkt in dem Java Sound ebenfalls an die Grenzen seiner Erweiterbarkeit st t ist das Reagie ren auf besondere Ereignisse zur Laufzeit Viele Treibermodelle verf gen ber so genannte Call back Mechanismen Der Treiber ruft hierbei zu beliebigen Zeiten bestimmte Callback Funktionen auf hnlich den Listener Interfaces im GUI Bereich Es w re w nschenswert dass Java Sound irgendeine Form der Registrierung und
87. especkte Versionen f r den Einsatz auf mobilen Endger ten ver ffentlicht SP MIDI konnte sich hierunter am meisten durchsetzen Heutzutage unterst tzen die meisten Synthesizer und Betriebssysteme GM Es ist also m glich MIDI Daten im GM Format beispielsweise auf Webseiten oder in Spielen einzusetzen und damit bei den meisten Anwendern ein mehr oder weniger identisches Klangerlebnis hervorzurufen ab h ngig nat rlich davon wie z B das Acoustic Grand Piano auf unterschiedlichen Synthesizern klingt MIDI wird daher oft mit GM verwechselt Im Studiobereich beh lt MIDI allerdings seine ur spr ngliche Bedeutung Es ist nur f r die reinen Steuerinformationen zust ndig Wie welches In strument hei t und klingt wird au erhalb der MIDI Daten definiert 1 2 4 3 Strukturiertes Audio Bisher gab es einige Formate in denen samplingbasierte Audiodaten zusammen mit ihren Steuerin formationen gespeichert werden konnten um so die Vorteile von Sampling und MIDI zu kombi nieren Als Beispiele w ren hier die Formate MOD RMF oder XMF zu nennen die allerdings mehr f r Spiele oder Handyklingelt ne eingesetzt werden und in Studioumgebungen bisher bedeu tungslos blieben Dagegen finden sich dort meist propiet re Formate der unterschiedlichen Soft warehersteller die diese Daten in Projekten oder Songs zusammenfassen Einen ganz neuen Ansatz beschreibt das MPEG 4 Format mit MPEG 4 Structured Audio Hierin wird versucht in ei
88. f hrlichere Abhandlung dieser Thematik findet sich bei LEWIS und COWELL SHAH Java VsC FFT 220 200 180 160 140 120 100 80 3 4 5 10 12 13 14 16 16 Ave Array size log2 Abbildung 11 Performance Benchmark unterschiedlicher JVMs und C Compiler Auch zeigen die Erfahrungen dass der gr te Performanceverlust vom Programmierer selbst ver schuldet ist und nicht von der verwendeten Programmierplattform So kann beispielsweise ein C 97 Mit nativ sind in dieser Arbeit solche Softwarebestandteile gemeint die in systemnaheren Sprachen als Java imple mentiert sind vgl 3 8 Vel SHIRAZI S 67 9 Java Native Interface 100 Vgl SHIRAZI S 90 101 Aus LEWIS 102 Quelle LEWIS IV Audioverarbeitung in Java 42 Programmierer durch ineffiziente Speicherverwaltung ebenso langsamen Code erzeugen wie ein Java Programmierer der laufend neue Objekte erzeugt Bei interaktiven Programmen wie Audioapplikationen kommt ein weiterer Aspekt hinzu Empfun dene Performance ist letztlich was zahlt Gerade in diesem Punkt werden oft Programmiers nden begangen die weit schwerer wiegen als die Performanceunterschiede zwischen Java und nativem Code So ist es enorm wichtig den Benutzer st ndig ber den aktuellen Fortschritt einer Aktion auf dem Laufenden zu halten z B Fortschrittsbalken Auslastungsanzeige etc und ihm stets die M g lichkeit offen zu halten darauf auch aktiv Einflu
89. ff 85 Paradebeispiel hierf r ist das Environment in Emagics Sequencersoftware Logic Audio mit dem von einfachen Anpas sungen bis hin zu komplexen PlugIns zahlreiche Anwendungen auf Basis einer grafischen Oberfl che entwickelt wer den k nnen III Audioprogrammierung 36 3 4 Konfigurierbarkeit Jede Studioumgebung sieht anders aus und jeder Benutzer hat eigene Pr ferenzen f r die Integrati on einer Software in diese Umgebung Es ist also wichtig dass der Benutzer Zugriff auf m glichst viele Parameter hat Zu diesen Parametern geh ren insbesondere e Auswahl der zu verwendenden Ger te z B Soundkarte MIDI Interface falls mehrere vorhanden sind e Einfluss auf verwendete Puffergr en und andere Hardwareparameter e Auswahl der Festplattenbereiche f r tempor re Dateien oder Streaming e Qualit ts und Leistungsparameter verwendeter Algorithmen 3 5 Nichtdestruktives Arbeiten Professionelle Audiosoftware sollte die verschiedenen Ans tze f r Nichtdestruktive Bearbeitung siehe 1 3 2 3 konsequent umsetzen um somit eine gr tm gliche Spontaneit t bei optimaler Res sourcennutzung zu gew hrleisten 3 6 Skalierbarkeit Um skalierbar zu bleiben muss professionelle Audiosoftware unabh ngig von der anfallenden Da tenmenge gehalten werden In der Regel sind viele Programme auch im Audiobereich darauf ausge legt alle Bearbeitungsschritte komplett im Hauptspeicher des Computers durchzuf hren Das ist auch gut
90. formation dar Diese teilt das Signal in nichtperiodische Anteile sog Wavelets auf und eignet sich daher besser f r die Analyse unperiodischer Signale wie es Audiosignale meistens sind Auf mathematische Details der beiden Ans tze wird hier verzichtet und stattdessen auf die ein schl gige Fachliteratur verwiesen ber die FFT finden sich Abhandlungen in zahlreichen Mathe matikb chern f r Details ber Wavelets insbesondere in Bezug auf Audioprogrammierung sei auf BOMERS verwiesen 2 Audio auf verschiedenen Betriebssystemplattformen 2 1 Historische Entwicklung Als in den 80er Jahren die Software Einzug in Studioumgebungen hielt war die Nutzung noch ausschlie lich auf den MIDI Bereich beschr nkt Die hohen Anforderungen an Speicherkapazit t 7 Vgl LINDLEY S 188ff 54 Vel STEWART III Audioprogrammierung 30 und Prozessorgeschwindigkeit die der heute allgemein bliche Einsatz samplingbasierter Daten mit sich bringt konnten damals von keiner erschwinglichen Rechnerplattform erf llt werden Der Commodore C64 gilt als erster Musikcomputer hatte aber eher experimentellen Charakter Dage gen fanden sich die Rechner der Atari ST Serie bald auch in professionellen Studios wieder Der Atari 1040 ST konnte sich schnell auf dem Musikermarkt etablieren Es gibt sehr gute Programme zudem verf gten die ST s als einzige Computer der 80er Jahre ber eine serienm ig eingebaute MIDI Schmittste
91. ge Klasse ist ver nderbar mu table gestaltet so dass jede MidiMessage vor dem Versenden geklont werden muss Die dadurch hervorgerufene hohe Zahl an Objektneuerzeugungen f hrt zu einer h heren Aktivit t des Garbage Collectors und erschwert damit die Einhaltung von Echtzeitanforderungen W nschenswert f r eine Minimierung der Latenzen und somit ein besseres Echtzeitverhalten w re au erdem eine Unterscheidungsm glichkeit verschiedener Treibertypen bei der Auswahl von Mixer Objekten siehe Konfigurierbarkeit So k nnte dem Benutzer beispielsweise eine Liste der vorhandenen ASIO Treiber zur Auswahl angeboten werden was derzeit nicht m glich ist Unterst tzung g ngiger Formate und Standards Welche Formate von einer auf Java Sound basierenden Software unterst tzt werden ist nicht ab h ngig vom Java Sound API Durch das PlugIn f hige Konzept von Java Sound siehe Erweiter barkeit bleibt es den Entwicklern berlassen welche Formate unterst tzt werden Auch sonst l sst sich kein Aspekt erkennen in dem das Java Sound API f r kommende Standards ungeeignet sein k nnte Erweiterbarkeit Mit dem Konzept der Service Provider Interfaces siche 2 3 erm glicht Java Sound eine hohe Er weiterbarkeit f r unterschiedliche Bereiche So kann z B eine Unterst tzung f r das Lesen und Schreiben neuer Dateiformate ebenso von Drittanbietern hinzugef gt werden wie eine Anbindung an neue Treiberarchitekturen Allerdings ist der d
92. h SPI PlugIns voll ausnutzen m chte Nichtdestruktives Arbeiten lie sich im praktischen Teil gut realisieren Das betrifft Java Sound allerdings nur in geringem Ma e da es sich hierbei eher um eine Highlevel Funktionalit t handelt die dank Javas Objektorientierung gut umsetzbar ist Was die Nutzung vorhandener Ressourcen betrifft so wurde beim ASIO PlugIn die schlechte Un terst tzung von Mehrkanalhardware durch das Java Sound API deutlich Es existiert auch bereits ein Eintrag in Suns Bugdatenbank der dieses Problem anspricht Abgesehen davon traten im praktischen Teil keine M ngel bzgl der Unterst tzung vorhandener Ressourcen zu Tage Bez glich der Synchronisation musste lediglich wie im letzten Kapitel erw hnt f r die Synchro nisation externer Ger te ber MIDI Clock eine eigene Implementierung geschrieben werden Alle weiteren relevanten Anforderungen konnten erf llt werden 164 Weiterf hrend h tten beispielsweise Tests auf unterschiedlichen Plattformen mit unterschiedlicher Hardware mit unterschiedlichen GC Algorithmen o durchgef hrt werden k nnen um detailliertere Ergebnisse zu erhalten Diese h tten allerdings den zeitlichen Rahmen dieser Arbeit gesprengt 165 http bugs sun com bugdatabase view_bug do bug_id 5067483 VII Abschlie ende Bewertung 90 Vil Abschlie ende Bewertung 1 Das Arbeiten mit Java Sound Die ersten Schritte mit Java Sound erfordern durchaus etwas Gew hnung
93. h so sein allerdings gibt es Mechanismen um berfl ssige Objekterzeugungen zu vermeiden z B e StringBuffer Die Klasse StringBuffer bietet zahlreiche Methoden f r das Zusammenf gen oder Zerteilen von Zeichenketten die im Gegensatz zu den String Methoden oder dem Operator nicht f r jede Aktion ein neues String Objekt erstellen F r h ufige Manipulationen von Zeichenketten sollte daher stets die StringBuffer Klasse der String Klasse vorgezogen werden e Collections S mtliche Collection Klassen bieten die M glichkeit bei ihrer Erzeugung die erwartete maximale Gr e anzugeben Ist diese in etwa bekannt kann dadurch verhindert werden dass beim Wachsen der Collection im Hintergrund laufend neue Objekte f r die interne Datenhaltung der Collection erzeugt und deren Inhalte kopiert werden m ssen e Okonomischer Einsatz von Exceptions Exception Objekte zu erzeugen dauert etwas l nger als das Erzeugen gew hnlicher Ob jekte da immer der aktuelle Stack Trace ermittelt werden muss Au erdem k nnen Exceptions einige wichtige Codeoptimierungen des Compilers verhindern Daher kann der h ufige Einsatz von Exceptions abgesehen davon dass Exceptions nur f r selten auftretende Ausnahmesituationen eingesetzt werden sollten zu Performanceeinbu en f hren Es kann sich in diesen F llen durchaus lohnen die Except ion Objekte nicht jedes Mal neu zu erzeugen sondern bereits geworfene Exceptions wieder
94. hes generiert werden sollen was meistens der Fall sein wird Wurde diese Option selektiert erscheint nach erfolgtem Export f r jedes Sample ein Dialog in dem der Benutzer aufgefordert wird den Speicherort f r den Patch anzugeben Zum erfolgreichen Erstellen eines Patches muss zun chst eine MIDI Verbindung zur MC 909 hergestellt und der richtige MIDI Treiber im Settings Dialog ausgew hlt sein Nach Erzeugen des Patches muss der Benutzer ihn direkt an der Groovebox abspeichern um ihn zu behalten Ein ferngesteuertes Abspeichern ist leider nicht m glich Damit ist der Exportvorgang abgeschlossen 1 2 2 4 Rhythm Sets Exportieren Ein Rhythm Set besteht aus 16 unterschiedlichen Kl ngen die jeweils einer Taste auf der Klaviatur zugeordnet sind Diese Tasten entsprechen genau den 16 Keyboard Pads der MC 909 Mit dem MC 909 Sampleeditor ist es m glich aus einem Sample das mit Markern in mehrere Samples un terteilt wurde solch ein Set zu generieren Folglich ist der Export Rhythm Set Button nur dann ak tiv wenn die Wellenformdarstellung mindestens einen Marker enth lt Neben dem Rhythm Set wird auf Wunsch auch noch eine MIDI Sequenz exportiert die die Abfolge der Marker widerspie gelt Dies ist eine Funktion die oft gew nscht wird da sie beispielsweise das Arbeiten mit Drum loops erheblich erleichtert Das Ergebnis kann vorgeh rt werden indem mit der Maus die Keyboard Pads im Sampleeditor angeklickt werden F r
95. hronize die f r eine Synchronisation von Audiodaten str men innerhalb eines Ger tes verantwortlich sein soll was f r professionelle Anwendungen ein sehr wichtiger Aspekt sein kann 145 Aus RELNOTES 14 Z B konnte mit Einf hrung der Direct Audio Devices ALSA auf Linux Direct Sound auf Windows die Latenz beim Abspielen und Aufnehmen wesentlich verringert werden V Java Sound 66 4 2 Java Sound auf dem Macintosh F r die Implementierung von Java Sound f r Mac Betriebssysteme ist der Hersteller Apple als Li zenznehmer von Sun verantwortlich Daf r stehen ihm die Implementierungen f r andere Platt formen als Referenz zur Verf gung In der aktuellen Java Version f r Mac 1 4 2 scheint man sich bei Apple stark an die Referenzimplementierung von Sun gehalten zu haben da sie einen hnlich l ckenhaften Stand aufweist wie die 1 4 x Implementierungen von Sun Offensichtlich wurde auch die Java Sound Audio Engine bernommen Dieser Eindruck ergibt sich aus einigen Tests auf Mac OS X im Rahmen des praktischen Teils dieser Arbeit und aus den Beitr gen von Mac Usern in der Java Sound Mailingliste JJS INTEREST Wann die Java Sound Implementierung auf dem Mac die Qualit t erreicht wie sie die Referenzimplementierung von Sun in Version 1 5 0 vorlegt kann nicht gesagt werden Hier wird ein gro er Nachteil von Java Sound hinsichtlich der nach wie vor f hrende Plattform im professionellen Audiobereich Apple Macintosh de
96. hte Plattformunabh ngigkeit hatte jedoch ihren Preis Ein Zugriff auf andere auf einem System instal lierte Audio oder MIDI Treiber war nicht m glich da die Java Sound Audio Engine nicht umgan gen werden konnte Nach Ver ffentlichung der ersten Java Sound Version im JDK 1 3 verlie en die Java Sound Entwickler Sun nach und nach woraufhin ein Jahr lang niemand bei Sun f r Java Sound zust ndig war Erst durch die Anstellung von Florian B mers als neuem Zust ndigen f r Java Sound im Jahr 2001 unmittelbar vor der Ver ffentlichung des JDK 1 4 wurde Java Sound wieder zum Leben er weckt Jedoch konnten naturgem nicht mehr viele Ver nderungen in diese Version bernommen werden So kam es dass bis Version 1 5 nicht weiter ber die Zielsetzung von Java Sound nachgedacht wurde erst jetzt kann Sun von einer Referenz Implementierung sprechen Und erst jetzt ist es sinnvoll ber wirk 6139 lich gro e nderungen nachzudenken 2 Kurzbeschreibung des API Entsprechend den unter HI 1 2 dargestellten beiden M glichkeiten Kl nge digital darzustellen gliedert sich das Java Sound API in die beiden Packages javax sound sampled welches den Um gang mit samplingbasiertem Audiomaterial erm glicht und javax sound midi f r MIDI Funktionalit t F r beide Packages existiert mit den Klassen AudioSystem bzw MidiSystem je weils eine zentrale Klasse die das Abfragen installierter Ger te sowie einige andere zentrale Aufga ben
97. ie ende Weiterverwertung des Materials ber das Intranet auf anderen Plattformen oft Windows Daher wird von professioneller Audiosoftware gefordert dass sie m glichst viele Formate und Standards unterst tzt und zwar sowohl zum Im als auch zum Export Ebenso sollte sie auf das Aufkommen neuer Formate vorbereitet sein gt Erweiterbarkeit Nat rlich muss eine professionelle Audioanwendung s mtliche Facetten die bestimmte Formate mit sich bringen unterst tzen Bestes Beispiel hierf r sind die unter 1 2 4 1 erw hnten Daten Chunks Sie werden von den meisten einfacheren Audioanwendungen ignoriert und gehen beim Abspeichern verloren Erlaubt ein Format verschiedene Qualit tsparameter wie Sampling Frequenz oder Samplegr e sollte die Anwendung zumindest nach oben hin m glichst viele Werte erlauben 3 3 Erweiterbarkeit Da sich im Audiobereich immer noch relativ h ufig neue Standards f r Treiber Effektschnittstel len Dateiformate etc etablieren ist es wichtig dass Audiosoftware f r den Studiobetrieb nicht nur die derzeit g ngigen Schnittstellen unterst tzt sondern auch Schnittstellen f r Erweiterungen Plug Ins anbietet Die Forderung nach Erweiterbarkeit geht Hand in Hand mit der Forderung nach Konfigurierbar keit Einige Softwarehersteller bauen in ihre Produkte so umfangreiche Konfigurationsm glichkei ten ein dass allein damit von Benutzern neue PlugIns geschaffen werden K nnen 84 Vel HAIN S 20
98. ie Software das nicht in der ihr zur Verf gung stehenden Zeit treten ungewollte akusti sche Effekte wie Knacksen oder Wiederholungen auf buffer underrun oder overflow Meist sind die Puffer so ausgelegt dass sie abwechselnd mit je einem Sample f r den linken und einem Sample f r den rechten Kanal gef llt werden Clock Jede Soundkarte besitzt einen eigenen Taktgeber f r die Abtastvorg nge der Wandler der meist in Form eines sehr genauen Quarzes eingebaut ist Auch der Chip muss zu dieser Clock synchronisiert werden um der Software diese Zeitbasis weitergeben zu k nnen Da unterschiedliche Soundkar tenclocks nie hundertprozentig synchron sind laufen Signale die auf unterschiedlichen Soundkar ten parallel abgespielt oder aufgenommen werden fr her oder sp ter auseinander Um dies zu ver hindern bieten professionelle Soundkarten die Option ihre Clock von einem externen Zeitgeber zu beziehen oder die eigene Clock an andere Ger te zu bermitteln vgl 1 3 1 2 Chip Der Soundkartenchip bildet schlie lich die Kontrolleinheit der Soundkarte Er hat einen definierten Befehlssatz den der Soundkartentreiber ansprechen kann um Hardwarefunktionen auszul sen Viele der zuvor beschriebenen Elemente befinden sich faktisch im Chip In der Abbildung wurden sie jedoch als eigene Komponenten dargestellt Optionale Komponenten Dar ber hinaus gibt es viele Elemente wie GM Synthesizer Effektprozessoren Surroundprozesso ren DS
99. ie aktive in die die Anwendung Audiodaten schreibt Abspielen oder aus der sie Audiodaten liest Aufnah me Nachdem der Aufnahme oder Abspielvorgang gestartet wurde sendet der ASIO Treiber regelm ig Callbacks um anzuzeigen dass die aktive Pufferh lfte gewechselt werden soll Diese Funktionalit t in Java zu bersetzen war nicht ganz trivial zumal f r jeden Callback der aktuelle Thread an eine JVM Instanz angeh ngt werden muss Dazu muss diese nat rlich schon vorher bekannt sein Ein weiteres Beispiel f r die Schwierigkeit die sich bei der Umsetzung der ASIO Bestandteile in Java Sound ergab ist der Umgang mit den einzelnen Kan len die ein Treiber zur Verf gung stellt Ein ASIO Treiber hat eine feste Anzahl von Ein und Ausgangskan len mit einem einheitlichen Format von denen f r jeden Aufnahme oder Abspielvorgang eine beliebige Zahl verwendet wer den kann allerdings kann zu jedem Zeitpunkt nur ein Aufnahme oder Abspielvorgang aktiv sein Anders bei Java Sound Jede Mixer Instanz stellt eine Anzahl von Source und TargetDataLines sowie Clips zur Verf gung Diese k nnen unabh ngig voneinander ge ffnet geschlossen gestartet und gestoppt werden und sind vom Format her unabh ngig voneinander Es ist auch m glich dass eine DataLine auf mehreren Kan len aufnimmt oder abspielt in ASIO ist dagegen jeder Kanal ein Mono Kanal Daraus ergibt sich unter anderem die Frage wie damit umzugehen ist wenn ein Be nutzer von ein
100. iebssystems Mac OS X wurde unter dem Namen CoreAudio eine komplett neue Audio und MIDI Treiberarchitektur eingef hrt nicht zuletzt um dem Anspruch von Apple gerecht zu werden Produkte f r den professionellen Audiobereich zu entwickeln In creating this new architecture on Mac OS X Apple s objective in the audio space has been twofold The primary goal is to deliver a high quality superior audio experience for Macintosh users The second objective reflects a shift in emphasis from developers having to establish their own audio and MIDI protocols in their applications to Apple moving ahead to assume responsibility for these services on the Macintosh platform Dieser Ansatz von Apple zielt eindeutig mehr auf die Unterst tzung professioneller Studioanwen dungen und weniger auf die Unterst tzung von Spieleentwicklern wie bei Microsofts Direct Sound Betrachtet man die Ziele die Apple mit der Entwicklung von CoreAudio verfolgte finden sich dort Begriffe wie Multi channel Audio I O oder Application determined latency die dies deutlich machen Die Praxis zeigt dass diese Ziele auch eingehalten werden konnten ALSA ALSA steht f r Advanced Linux Sound Architecture und ist eine Neuentwicklung der Open Source Gemeinde nachdem viele Linux Programmierer mit dem alten Audiotreiber System unter Linux Open Sound System OSS unzufrieden waren Anders als OSS erlaubt ALSA neben der Unterst tzung g ngiger Cons
101. ierte Programm mit dem Befehl java Djava library path jar start jar im angelegten Installationsverzeichnis ausgef hrt werden Hinweis F r Mac OS X muss die ebenfalls in der eclipse Plattform enthaltene Datei java_swt f r die Ausf hrung benutzt werden da SWT Applikationen mit dem normalen java Aufruf unter Mac OS X nicht korrekt funktionieren Der Aufruf hei t dann entspre chend java_swt Djava library path jar start jar
102. ile liegen auf der Hand Zum einen findet die Verarbeitung der Audiodaten in Effekten meist ohnehin in Flie kommaform statt da sich damit einfacher mathematische Berechnungen durchf hren lassen Zum anderen erh lt man durch die Normalisierung auf den Maximalwert 1 0 einen Headroom der hilft digitale bersteue rungen bei der Verarbeitung zu vermeiden Das Gegenargument dass Flie kommaberechnungen langsamer sind als Ganzzahlberechungen f llt bei heutigen CPUs mit ausgewachsenen Flie kom maeinheiten nicht mehr entscheidend ins Gewicht Daher verwundert es schon dass Java Sound derzeit keine explizite Unterst tzung dieses Formats bietet Als m gliche vorgegebene Kodierungen existieren PCM_SIGNED PCM_UNSIGNED ALAW sowie ULAW Die ersten beiden bezeichnen PCM kodierte Ganzzahlen und die letzten beiden sind speziel le Kodierungsverfahren Um eine standardisierte Verarbeitung von Audiodaten als Flie kommazahlen zu erm glichen wur de in dieser Arbeit ein FloatConversionProvider PlugIn entwickelt das auch an anderen Stellen dieses Praxisteils Verwendung findet Ziele Hauptziel bei der Entwicklung des FloatConversionProvider PlugIns war CS SO zu schreiben dass es sich nahtlos in bestehende Java Sound Umgebungen einf gen kann Ebenso wurde Wert auf eine effiziente Implementierung gelegt da die Formatkonvertierungen oft in Echtzeit erfolgen m ssen Realisierung Zur Realisierung des PlugIns musste ein neuer Kodier
103. ile st ndig ndern kann und in der Regel auch h ufig wird muss die Garbage Collection ber diese nderungen informiert werden was einen hohen Synchronisationsaufwand erfordert Ergebnisse von inkrementeller und nebenl ufiger Speicherbereinigung sind daher geringere Pausenzeiten aber schlechtere Performance zur Lauf zeit 117 Falls Ihr Programm Echtzeit Kriterien standhalten muss w hlen Sie eine VM mit inkre mentellem oder nebenl ufigem Garbage Collector Inkrementelle Garbage Collection h lt die maximalen Pausenzeiten kurz f hrt jedoch sonst meist zu schlechterer Performance 3 2 2 3 Beeinflussung der Garbage Collection Fast jede JVM Implementierung bietet die M glichkeit ber Parameter das Verhalten des Garbage Collectors zu beeinflussen Suns aktuelle HotSpot JVMs basieren beispielsweise auf einem Genera tionen Kollektor der den Heap in f nf Bereiche aufteilt und standardm ig einen kopierenden Kollektor f r die j ngste Generation sowie einen Mark amp Compact Algorithmus f r die lteren Generationen verwendet ber JVM Parameter kann hier u a das Gr enverh ltnis der Generatio nen zueinander bestimmt und der reine Mark amp Compact Algorithmus bei Bedarf durch inkremen telle Speicherbereinigung ersetzt werden Ebenso besteht die M glichkeit sich die Aktivit t des Garbage Collectors ausgeben zu lassen um die optimale Einstellung f r eine Applikation zu fin den Dar ber hinaus bietet
104. indet A dynamic adap tive compiler is basically a just in time compiler with added intelligence Der Name HotSpot kommt vom 80 20 Prinzip auf dem DAC basiert Dieses besagt dass w hrend 80 der Laufzeit eines Programms gew hnlich 20 des Co des ausgef hrt werden Daraus folgt dass es sich lohnt genau jene 20 besonders schnell auszuf hren w hrend Optimierungen in den restlichen 80 des Codes keinen gro en Ef fekt haben Im Englischen hei en die besonders kritischen Programmteile auch Hotspots daher der Name 10 DAC JVMs verhalten sich bei der ersten Ausf hrung eines Codeblocks innerhalb einer JVM Instanz wie interpretierende JVMs mit der Ausnahme dass sie die Laufzeiten f r die Ausf hrung analysieren und die H ufigkeit der Aufrufe einzelner Codebl cke protokollieren Darauf aufbauend entscheiden sie selbst welche Teile des Bytecodes zu Bin rcode kompiliert und dabei wie stark optimiert werden sollen Die Ergebnisse der Laufzeitanalysen flie en dabei in die Optimierung ein Man kann sich leicht vorstellen dass die Performance mit zunehmender Laufzeit des Pro gramms zunimmt So ist der Eindruck zu erkl ren dass manche Java Anwendungen kurz nach Programmstart noch etwas tr ger reagieren als im weiteren Verlauf der Ausf hrung Daraus resul tiert aber auch dass die Algorithmen und Entscheidungen bei der Optimierung f r Programme mit kurzen Laufzeiten im Optimalfall anders ausfallen sollten als f
105. ingend auf Java Sound angewiesen ist Es finden sich allerdings auch einige Projekte die komplett auf das Java Sound API aufbauen und entweder die derzeitigen Einschr nkungen in Kauf nehmen oder durch den Einsatz von Service Provider Interfaces ben tigte Funktionalit ten f r Java Sound verf gbar machen wobei diese L sungen oft auf Kosten der Plattformunabh ngigkeit gehen Diese Projekte k nnen von k nftigen Verbesserungen der Java Sound Implementierung sowie von Service Provider Interfaces von Dritt anbietern profitieren 6 Alternativen zu Java Sound Es f llt schwer eine Konkurrenzsituation zu Java Sound aufzuzeigen da Java Sound mit seinem Gesamtkonzept und als Bestandteil der Java Plattform einmalig ist Innerhalb von Java k nnte man JMF bzw MMAPI siehe IV 1 als Konkurrenten ansehen jedoch grenzt sich Java Sound durch seinen Lowlevel Ansatz deutlich von diesen Highlevel Fraemeworks ab Davon abgeschen verwen det JMF intern f r den Zugriff auf Soundhardware Java Sound Die beiden Frameworks erg nzen sich also vielmehr als dass sie alternativ zueinander gesehen werden k nnten Trotzdem kann es auch im Studioumfeld Anwendungen geben die nicht auf den hardwarenahen Ansatz von Java Sound angewiesen sind daf r aber von den Highlevel Features des JMF profitieren k nnen Au erhalb der Java Plattform finden sich noch ein paar Soundverarbeitungsframeworks die in eine hnliche Richtung zielen wie Java Sound Am weitesten a
106. itters damit man die entsprechenden Verbindungen mit close schlie en kann eingef hrt e Der MetaEventListener verschweigt von welcher Track Instanz die jeweilige MetaMessage stammt e MidiChannel Instrument Patch SoundbankResource VoiceStatus sind Klassen die De signfehler haben und die Funktionalit t auf andere Weise wesentlich besser repr sentiert werden k nnte Auch fehlen viele moderne Features e Manche Klassen enthalten protected Felder die von der Implementierung gepflegt und entsprechend verwendet werden m ssen da ableitende Klassen auf diese Felder direkt drauf zugreifen k nnten Beispiel ist das data array in MidiMessage das z B f r eine ShortMessage nur berfl ssigen Overhead bedeutet ShortMessages k nnte man intern bequem und effizient in einem int Feld speichern e MidiMessage ist ver nderbar mutable Das f hrt dazu dass alle MidiMessages die ver sandt werden geklont werden m ssen was zu hohem GC Aufwand f hrt Leider ist aber gerade der GC entscheidend f r die Realtime Performance von Java MR Wie verh lt es sich mit Java Sound Implementierungen auf dem Mac Welche Frei heiten hat Apple bzgl der Implementierung und an welche Vorgaben m ssen sie sich hal ten FB Als Lizenznehmer von J2SE hat Apple Zugriff auf den kompletten Source Code von Sun s Implementierungen f r Solaris Linux und Windows Was Apple daraus macht ist nicht vorge schrieben Allerdings
107. ittstellen schon viel erreicht werden mit den Schw chen muss man zun chst jedoch leben Selbiges gilt f r die Erweiterbarkeit F r diese w re es ebenfalls w nschenswert wenn das API Unterst tzung f r die Besonderheiten mancher Treibertypen b te und beispielsweise so etwas wie den unter V 2 1 vorgeschlagenen MixerListener vors he 168 Vgl INTERVIEW 169 Vol INTERVIEW VII Abschlie ende Bewertung 93 In Punkto Konfigurierbarkeit ist Java Sound gut vorbereitet Allerdings vermisst man auch hier den Zugriff auf den Konfigurationsdialog des Treibers sowie eine Unterscheidung nach Treibertypen z B Mixer Type Nichtdestruktives Arbeiten l sst sich in Java dank seiner Objektorientierung gut realisieren Java Sound spielt hierf r als Lowlevel Framework keine Rolle Skalierbarkeit ist durch die gute Streaming Unterst tzung gegeben Lediglich vermisst man AudioOutput Streams in Java Sound die beim Schreiben von gro en Audiodateien hilfreich w ren Das Nutzen vorhandener Ressourcen ist bis auf die von Java gegebenen Grenzen und die schlechte API Unterst tzung f r Mehrkanalhardware in Java Sound gut m glich Zuletzt noch ein im professionellen Bereich u erst wichtiger Punkt n mlich die Synchronisation Hier offenbaren sowohl API als auch Implementierung noch Verbesserungsbedarf Profifeatures wie Synchronisation sind in der derzeitigen Implementierung nicht verf gbar Eine umfassende Synchronis
108. ive Benutzerf hrung werden an dieser Stelle nicht extra aufgef hrt da sie f r Audiosoftware im Studiobereich nicht mehr gelten als f r jede andere Art von Software 3 Vgl MACMILLAN III Audioprogrammierung 35 3 1 Echtzeitf higkeit Ein Studioanwender wird von einer Audioapplikation erwarten dass sie auf jede seiner Eingaben und nderungen ohne merkliche Verz gerung reagiert Entscheidend ist das beispielsweise in MI DI Systemen wo Noten ber ein externes MIDI Keyboard eingegeben und sofort h rbar gemacht werden sollen Treten hier h rbare Latenzen auf ist ein normales Einspielen nicht m glich Ebenso gibt es Software Klangerzeuger die in Echtzeit auf eintreffende MIDI Daten mit Klangver nde rung reagieren sollen Auch hier sind schon die kleinsten Latenzen intolerabel In den meisten samplingbasierten Anwendungen wird ebenfalls eine hohe Interaktivit t gefordert so dass der Anwender seine am Bildschirm gemachten nderungen unmittelbar zu h ren be kommt 3 2 Unterst tzung g ngiger Formate und Standards Mit der Zeit haben sich im Audiobereich zahlreiche Formate und Standards verschiedener Herstel ler entwickelt Einige von ihnen sind in bestimmten Bereichen unumg nglich andere nur sehr sel ten anzutreffen Auch arbeiten inzwischen nur noch wenige Studios mit nur einem einzigen Be triebssystem und den darauf blichen Formaten H ufig erfolgt die Produktion auf Macintosh Systemen und die anschl
109. javax sound midi Im Vergleich zum sampled Package ist das midi Package einfacher und schl ssiger aufgebaut Dies ist nicht weiter verwunderlich da die MIDI Verarbeitung weniger komplex ist als die Sampling Verarbeitung MIDI Ger te F r die Repr sentation von MIDI Ger ten Hard oder Software bietet Java Sound das MidiDevice Interface f r das auch eine MidiDevice Info Klasse zur Identifizierung unter schiedlicher Ger te existiert MidiDevice besitzt die beiden Subinterfaces Sequencer und Synthesizer Ein Sequencer bietet Methoden zum Abspielen und Aufnehmen von MIDI Sequenzen auf meh reren Spuren Klassen Track und Sequence zur Beeinflussung des Tempos sowie zur Synchroni sation und nderung der Abspielposition Ein Synthesizer repr sentiert einen Software Klangerzeuger der MIDI Nachrichten empfangen und dementsprechend Kl nge wiedergeben kann ber Soundbank Instrument und Patch Objekte k nnen bestimmte Kl nge in den Synthesizer geladen werden die dann jedem MidiChannel Objekt des Synthesizers zugeordnet werden k nnen Um die bei softwareemulier ten Klangerzeugern anfallenden Latenzen zu ermitteln die zwischen dem Eintreffen der MIDI Nachricht und dem Erzeugen des Klangs vergehen bietet das Synthesizer Interface die Methode getLatency die die im schlimmsten Fall zu erwartende Latenz angibt Diese kann beim Abspie len ber cksichtigt werden MIDI Nachrichten F r MIDI Nachrichten enth lt Java Sound
110. jeder Transformator nur seinen Vorg nger und Nachfolger kennen muss Sind die beteiligten Transformatoren schnell genug kann die gesamte Verarbeitung in Echtzeit ablaufen IT Transformator O Ausgabeport HE Eingabeport Abbildung 7 Verarbeitungskette mit aktiver Quelle Push Ansatz Eine Verarbeitungskette beginnt jeweils mit einer Datenquelle und endet mit einer Datensenke Datenquellen k nnen aktiv oder passiv sein Je nach Art der Datenquelle unterscheidet man zwei Ans tze von Verarbeitungsketten Beim Push Ansatz vgl Abbildung 7 steht zu Beginn der Kette eine aktive Datenquelle die von sich aus Datenchunks sendet Die Chunks werden dann jeweils an den n chsten Transformator weitergegeben bis das Ende der Kette erreicht ist wo sie z B in eine Datei geschrieben werden Beim Pw Ansatz dagegen beginnt die Verarbeitung nur auf Anfrage durch die Datensenke am Ende der Kette Diese Anfrage wird bis zur meist passiven Quelle wei tergegeben die die geforderten Daten in die Kette schickt D Active MIDI Transmission http www emagic de products hw amt amt php lang DE H Linear Time Base http www steinberg de ProductPage_sb asp Product_ID 2022 amp Langue_ID 4 4 Aus EIDENBERGER S 43 4 Aktive Quellen schicken von sich aus Chunks in die Verarbeitungskette z B Mikrophon 47 Passive Quellen stellen Chunks nur auf Anfrage zur Verf gung z B Audiodatei Vgl EIDENBERGER S 43ff III Audioprogrammierung
111. k nnen diese unabh ngig voneinander wei terverarbeitet werden was neue M glichkeiten im Arbeiten mit Loops er ffnet Die Firma Propellerheads Entwickler dieses Formats bietet ein SDK f r die Programmiersprache C an mit dem es m glich ist REX Dateien zu lesen allerdings nicht zu schreiben Um Java Entwicklern Zugriff auf dieses Format zu erm glichen wurde im Rahmen dieser Arbeit ein REXFileReader PluglIn f r Java Sound entwickelt Ziele Das Ziel bei der Entwicklung des REXFileReaders war das REX SDK in Java Sound zu abstra hieren und damit aus Java Sound heraus Zugriff auf REX Dateien und deren Eigenschaften zu erm glichen Der REXFileReader sollte in der Lage sein neben den reinen Audiodaten auch alle weiteren in der jeweiligen Datei enthaltenen Informationen zu lesen und weiterzugeben Realisierung hnlich wie beim ASTOMixerProvider wurden zun chst Wrapper Klassen in Java geschrieben um in Java Zugriff auf alle Bestandteile des REX SDK zu bekommen Im Gegensatz zum ASIO SDK wirkt das REX SDK wesentlich aufger umter und stimmiger weshalb die Einarbeitung weniger schwierig war 156 http www propellerheads se technologies rex 157 _http www propellerheads se products recycle VI Praktischer Teil 74 Um die Audiodaten als AudioInputStream bereitstellen zu k nnen musste dann eine Subklasse von InputStream implementiert werden die die SDK Funktionen abstrahiert Weiterhin musste festgelegt werde
112. konnte mit den gew nschten F higkeiten realisiert werden Das fertige PlugIn kann in alle auf Java Sound basierende Systeme auf s mtlichen Plattformen einge bunden und dort genutzt werden Da allerdings keine zentrale Stelle existiert die m gliche Namen f r Kodierungsarten in Java Sound definiert muss dem Entwickler der das PlugIn einsetzen m ch te der gew hlte Name PCM_FLOAT f r die Flie kommakodierung und dessen Bedeutung bekannt sein Alle ben tigten Klassen sind im Package com groovemanager spi floatEncoding enthalten Die kompilierte Version befindet sich auf der beiliegenden CD Rom im Verzeichnis PlugIns floatconversion VI Praktischer Teil 73 1 1 3 REXFileReader ReCyde ll x File Edit View Process Sampler Windows Help i SS BB a E p ic S DI Ges Beats 0 Son 474 Z Orginal Tempo 120 000 BPM R 8 A 9 Sens 77 in Gate Sens OF Pitch C 000 Gain 2 0048 Tempo 120000 BPM O gt Atak Oms Decay Ars Stretch 1 50 Stereo 44 1 kHz 10 Slices 5 92s 510kB Abbildung 16 Die Loop Software Recycle Beschreibung Das REX Dateiformat 5 wurde f r die Loop orientierte Audiosoftware Recycle siehe Abbildung 16 entwickelt und erfreut sich im kreativen Audiobereich gro er Beliebtheit Es beinhaltet die Au diodaten eines Loops und dar ber hinaus Informationen ber die zeitliche Abfolge dessen einzel ner Bestandteile diese werden als S ices bezeichnet So
113. l Grunds tzlich kann jeder RFE s request for enhancement an Sun abgeben Auch muss f r gr e re API Anderungen ein Expertengremium gebildet werden Wenn es um viele Klassen oder ganze Packages geht muss ein JSR auf jcp org durchgef hrt werden was prinzipiell auch von Jedermann getan werden kann allerdings unter erheblichem finanziellen Aufwand es sei denn man ist eine open soutce Organisation Da es wahrscheinlich ist dass Sun nicht in ein JSR f r Java Sound in vestieren wird haben Matthias und ich schon berlegt ob wir das im Rahmen des Tritonus Pro jekts machen wollen Das sind aber alles nur Vermutungen es kann nat rlich alles ganz anders kommen z B durch JDS siehe oben Was es nie geben wird Ich bin gegen high level Funktionen wie sie von einigen Anwendern ge w nscht werden dazu geh rt im Gro en und Ganzen alles was man in Java selbst programmieren k nnte Besser ist daf r ein Java optional package geeignet wie JMF Und was wir hoffentlich nie von Java Sound h ren werden ist Stille Anhang B Der Inhalt der beiliegenden CD Rom B 1 Anhang B Der Inhalt der beiliegenden CD Rom Die beiliegende CD Rom enth lt s mtliche Quelldateien der im praktischen Teil entwickelten Pro grammteile Ebenso befindet sich darauf die Dokumentation als Javadoc aller Packages sowie die fertigen PlugIns und Anwendungen F r Windows und Linux existieren Installer f r andere Platt formen besteht die M glichkeit die In
114. l ne Abbildung 20 Der Settings Dialog 1 2 1 2 Der Info Bereich Der Info Bereich im linken Teil des Fensters besteht aus drei Gruppen die jeweils Informationen ber einen bestimmten Bereich liefern Diese k nnen jeweils mit dem x Button rechts oben versteckt und dann mit dem Show Info Button wieder sichtbar gemacht werden VI Praktischer Teil 81 Folgende Gruppen existieren e File Info Informationen ber Name Gr e und Format der gerade aktiven Datei e Device Info Informationen ber Name Puffer Position und Format des gerade f r das Abspielen oder Aufnehmen verwendeten Treibers e Memory Info Informationen ber den aktuellen Speicherverbrauch der JVM Instanz 1 2 1 3 Wellenformdarstellung In diesem Bereich kann mit Hilfe der Register zwischen den momentan ge ffneten Dateien ge wechselt werden Die Wellenformdarstellung selbst besitzt stets eine Position eine Auswahl sowie eine beliebige Anzahl von Markern Marker Position Auswahl Ka Abbildung 21 Wellenformdarstellung mit Markern Position und Auswahl Die Position der Wellenform wird durch einen senkrechten wei en Strich dargestellt und kann durch einfaches Klicken mit der Maus an die gew nschte Position gesetzt werden Das Abspielen startet immer von der aktuellen Position F r die Dauer des Abspielens oder Aufnehmens kann die Position nicht ver ndert werden Die Auswahl kann durch Dr cken und Ziehen der Maus festgelegt wer
115. laden Wurde ein bertragen der MIDI Sequenz ber den MIDI Anschluss gew hlt kann nun dieser Schritt noch ausgef hrt werden Daf r muss die MC 909 zu n chst in den Sync Mode Slave versetzt werden damit sie das Tempo sowie Start und Stop von extern bezieht Au erdem muss der Realtime Rec Standby Modus gestartet werden damit die Se quenz auch aufgenommen werden kann Mit Bet tigen des Play Buttons im Wizard kann die Se quenz nun beliebig oft bertragen werden 2 Probleme und L sungen Ein Problem von Java Sound das sich f r den praktischen Teil als besonders gravierend herauskris tallisierte war die unzufriedenstellende Umsetzung der SPI Schnittstelle f r AudiofileReader und AudioFileWriter siehe V 3 Als Workaround f r diese Schw che der SPI API wurde eine eigene PlugIn Schnittstelle entwickelt siehe 1 1 4 und au erdem ein RFE in Suns Bug Datenbank eingetragen Weiterhin offenbarten sich hin und wieder kleinere L cken in der Java Sound Implementierung So fehlt beispielsweise im Java Sound Sequencer die Unterst tzung f r MIDI Clock Zur Synchroni sation beim berspielen der MIDI Sequenz beim Exportieren eines Rhythm Sets musste diese Unterst tzung daher selbst implementiert werden Eine gr ere Schwierigkeit stellte die Implementierung des ASIO PlugIns dar was gr tenteils an den unterschiedlichen Ans tzen von Java Sound und ASIO lag Ob das Knacksen das im ASIO PlugIn auftritt an Java Jav
116. lichkeit externe oder softwareemulierte Ger te ber MIDI anzusteuern auch die Option Sampling Datenstr me zum MIDI Datenstrom zu synchronisieren 1 2 4 Digitale Audioformate 1 2 4 1 Samplingformate Grunds tzlich unterscheidet man bei samplingbasierten Audioformaten zwischen komprimierten und unkomprimierten Formaten Komprimierte Formate wie beispielsweise das weit verbreitete MP3 Format versuchen den typischerweise relativ hohen Speicherbedarf samplingbasierter Au diodaten zu verringern Dies kann zum einen dadurch erreicht werden dass Informationen die f r das menschliche Ohr weniger wichtig sind weniger genau abgebildet werden als solche die f r das III Audioprogrammierung 19 H rempfinden entscheidend sind Hier flie en psychoakustische Merkmale ein auf die in dieser Arbeit nicht n her eingegangen werden soll Einen anderen Weg zur Datenreduzierung beschreiben mathematische Komptessionsverfahren die durch eine andere Anordnung der Daten die Daten menge verringern ohne Informationsverlust in Kauf zu nehmen Komprimierte Audioformate spielen in Studioumgebungen nur eine untergeordnete Rolle Die Gr nde hierf r sind zum einen dass Speicherplatz meist nicht der begrenzende Faktor ist und der Informationsverlust aufgrund h herer Qualit tsanspr che so gering wie m glich gehalten werden soll Zum anderen m ssen die Daten vor der Verarbeitung eventuell dekodiert und nach der Verar beitung stets wieder kodiert we
117. lifizierten Namen dieser Klasse als Dateinamen z B javax sound sampled spi AudioFileReader in dieses Verzeichnis gelegt werden Innerhalb dieser Datei werden dann die vollqualifizierten Klassennamen aller in der jar Datei enthaltenen Implementierungen dieses Services untereinander aufgelistet Der Inhalt dieser jar Datei muss nun noch in den Classpath eingef gt werden Dies kann entwe der dadurch geschehen dass sie in das lib ext Verzeichnis unterhalb des Java Home Verzeichnisses gelegt wird oder dadurch dass der Pfad zur jar Datei explizit dem Classpath hinzugef gt wird 3 Theoretische F higkeiten und Grenzen von Java Sound Zur Bewertung des Java Sound API unabh ngig von jeglicher Implementierung werden im Fol genden die Anforderungen an professionelle Audiosoftware aus II 3 im Einzelnen durchgegangen Dabei werden die theoretischen F higkeiten und Grenzen des Java Sound API in Bezug auf die jeweilige Anforderung herausgearbeitet Echtzeitf higkeit Java Sound bietet volle Kontrolle ber echtzeitrelevante Daten Hierzu z hlt insbesondere die Wahl der Puffergr en Als Lowlevel Framework berl sst es dem Anwendungsentwickler die Imple mentierung der echtzeitkritischen Bestandteile der Software und abstrahiert nur den Zugriff auf die Soundhardware Einziger Punkt in dem Java Sound negativ mit Echtzeitanforderungen in Ber h V Java Sound 62 rung kommt ist ein Designfehler im midi Package Die MidiMessa
118. lle Wegen Missmanagement konnte Atari diesen Vorsprung allerdings nicht dauerhaft halten oder gar ausbauen und wurde in den 90er Jahren von Macintosh Systemen verdr ngt Eine Zeit lang war Apple damit unumstrittener Marktf hrer bis die weite Verbreitung der Intel PCs dazu f hrte dass auch diese nach und nach in den Tonstudiomarkt dr ngten Bestehende Software wurde f r Win dows portiert und auch die ben tigte Hardware wurde angeboten Ende der 90er Jahre ergab sich zwischen Microsoft und Apple ein einigerma en ausgeglichen auf geteilter Markt wobei Apple Produkten ein etwas professionelleres Image anhaftete da Hardware und Betriebssystem aus einem Haus kommen Das verschaffte ihnen in Profi Studios weiterhin einen Vorsprung wohingegen die billigeren Windows basierten Microsoftprodukte kleinere Studios und Hobbyproduzenten erreichten Im Jahr 1997 entstand mit BeOS ein Betriebssystem das speziell den Anforderungen von Multime diasoftware gerecht werden wollte Dieses Projekt scheiterte haupts chlich an der z gerlichen Un terst tzung durch die etablierten Hard und Softwarehersteller und an der Marktdominanz von Microsoft und Apple Nach der Insolvenz der Firma Be Inc im Jahr 2002 wird BeOS als Open BeOS heute noch als Open Soutrce Initiative von engagierten Programmierern weiterentwickelt Ebenso wird von der Firma YellowTab an einer kommerziellen Version von BeOS gearbeitet Es ist nicht auszuschlie en dass
119. lten Interfaces im Audiodatenfluss veran schaulicht V Java Sound 57 I I I Mixer I I I Port DataLine Lese und Schreibpuffer i L Anschl sse Anwendung I I I I I I I I I I l L Abbildung 14 Bedeutung der Line Interfaces im Audiodatenfluss Controls Um auf eventuell von Soundkartenherstellern zur Verf gung gestellte Besonderheiten wie bei spielsweise eigene Effektsektionen Equalizer oder einfache Lautst rkeregler zugreifen zu k nnen existiert in Java Sound die abstrakte Klasse Control Jede Line also auch jeder Port jeder Mixer und jede DataLine verf gt ber die Methoden isControlSupported Control Type getControls sowie getControl Control Type um Zugriff auf die f r diese Line verf gba ren Controls zu bekommen Zur abstrakten Klasse Control existieren vier ebenfalls abstrakte Subklassen um verschiedene Arten von Controls zu erm glichen BooleanControl Auswahl aus zwei m glichen Werten FloatControl Angabe eines kontinuierlichen Wertes EnumControl Auswahl aus einer Liste von Werten und CompoundControl Enth lt mehrere andere Control Instanzen oo oO gt WY HH d 12 13 14 15 16 17 18 19 Mixer instanziieren Mixer mixer if mixer isLineSupported Port Info LINE_OUT Port Instanz vom Mixer holen Port lineOut Port mixer getLine Port Info LINE_OUT tryt if lineOut isControlSupported FloatControl Type VOLUM
120. mentations Diplomarbeit an der Universitat Mannheim http www bomers de personal thesis pdf Emailinterview mit Florian B mers Anhang A Java 2 SDK Documentation http java sun com j2se 1 5 0 docs api Offizielle Java Sound Mailingliste http archives java sun com archives javasound interest html MacMillan K Droettboom M Fujinaga I Audio Latency Measure ments of Desktop Operating Systems Peabody Institute of the Johns Hopkins University J2SE Version 1 5 0 Summary of New Features and Enhancements Java Sound http java sun com j2se 1 5 0 docs relnotes features html js Roland 2002 MC 909 MIDI Implementation Schneider D amp Ernst M 2000 Konzepte und Implementierungen moder ner virtueller Maschinen Diplomarbeit an der Universitat Hamburg Fachbereich Informatik http www virtualmachine de 2000 ernst schneider pdf Anhang A Emailinterview mit Florian B mers A 1 Anhang A Emailinterview mit Florian B mers Das folgende Interview f hrte ich zwischen dem 23 05 2004 und dem 17 07 2004 mit Florian B mers per Email Florian B mers betreibt zusammen mit Matthias Pfisterer das Open Source Projekt Tritonus http www tritonus org das sich seit 1999 mit Java Sound befasst sowie die Website http www jsresources org die eine Sammlung zahlreicher Hilfestellungen rund um das Thema Java Sound bietet Seit Juni 2001 ist er Zust ndiger und alleiniger Entwickler f r Java Sound bei Sun Microsystems
121. mgekehrten Fall ausgehen Zum besseren Verst ndnis kann es hilfreich sein sich vor Augen zu f hren dass bei der Namens gebung der Mixer im Mittelpunkt steht Aus der Sicht des Mixers ist eine TargetDataLine ein Zielobjekt an das er Audiodaten schicken kann und eine SourceDataLine eine Audioquelle aus der er von der Applikation bereitgestellte Daten lesen kann V Java Sound 56 1 Mixer instanziieren 2 Mixer mixer 3 try 4 Stream aus Quelldatei erzeugen 5 AudioInputStream stream 6 AudioSystem getAudioInputStream new File 7 Line zum Abspielen besorgen und ffnen 8 DataLine Info info 9 new DataLine Info SourceDataLine class stream getFormat il 10 SourceDataLine sourceLine SourceDataLine mixer getLine info 11 sourceLine open stream getFormat 8192 12 Lesen der Audiodaten vom Stream und Schreiben auf die DataLine I3 int numBytesRead 0 14 byte buffer new byte 8192 15 while numBytesRead 1 16 numBytesRead stream read buffer E7 if numBytesRead gt 0 sourceLine write buffer 0 numBytesRead 18 sourceLine start 19 20 Warten bis der Ausgabepuffer der Soundkarte geleert ist 21 sourceLine drain 22 Freigeben der Ressourcen 23 sourceLine stop 24 sourceLine close 25 catch Exception e 26 Fehlermeldung 27 Codebeispiel 3 Abspielen einer Audiodatei als Stream Codebeispiel 3
122. munabh ngiges erweiterbares und objektorientiertes Multimediaverarbei tungsframework ist das JMF derzeit eine einzigartige Entwicklung Das Framework das vom Kon zept her am ehesten an das JMF heranreicht ist QuickTime von Apple f r das es mit dem Quick Time for Java API auch eine Java Anbindung gibt Quick Time bertrifft das JMF in punkto Funk tionsumfang und ist weiter verbreitet Es ist allerdings nur f r Mac und Windows implementiert und erfordert dar ber hinaus eine Lizenzierung f r jeden Client 29 JMF lehnt sich sehr an das Konzept von Java Sound s u an Viele Komponenten aus Java Sound finden sich dort wieder allerdings oft in verallgemeinerter Form um unabh ngig vom Medientyp zu bleiben Weiterhin wird im JMF das Konzept von Verarbeitungsketten siehe 111 1 3 2 2 konse quent umgesetzt Java Sound bietet dagegen keine explizite Unterst tzung f r Verarbeitungsketten Mobile Media API Beim Mobile Media API MMAPI handelt es sich um eine reduzierte Version des JMF die f r die Verwendung auf mobilen Endger ten ausgelegt ist und auf der Java 2 Micro Edition J2ME ba siert Das MMAPI gewinnt derzeit stark an Bedeutung f r die Entwicklung Java basierter Multime diaanwendungen f r mobile Endger te Es ist als plattformunabh ngiges Medienverarbeitungsfra mework f r diese Ger te derzeit konkurrenzlos 5 Java Sound Alle bisher vorgestellten APIs sind cher im Highlevel Bereich anzusiedeln da sie zum Ziel hab
123. muss Apple das JCK Java Compatibility Kit bestehen bevor es eine Portie rung von J2SE vertreiben darf Das JCK ist eine sehr umfangreiche Sammlung von Tests die alle API s auf Kompatibilit t pr fen Das umfasst Signaturtests der ffentlichen API s aber auch funk tionale Tests die die javadoc Spezifikation exakt berpr fen Es gibt also keine Qualit tsvorgaben und nur auf das JCK beschr nkt funktionelle Vorgaben W rde Apple zum Beispiel nur Java Sound in Telefonqualit t implementieren so w rde dieser Port immer noch J2SE konform sein F r Java Sound beschr nken sich die Lizenznehmer aber im Allgemeinen darauf den wenigen nativen low level Quellcode zu portieren so dass die gesamte Java Implementierung identisch ist Bei Sun wird nat rlich versucht m glichst viel plattformunabh ngigen also shared Code zu programmieren so dass es Lizenznehmer einfach haben und auf die Qualit t achten k nnen Anhang A Emailinterview mit Florian B mers AS MR Worin liegen Deiner Meinung nach die haupts chlichen St rken und Schw chen des Java Sound API FB St rken e Plattformunabh ngigkeit e Esist Java e Erweiterbarkeit e Im offiziellen Java Standard enthalten keine separaten Downloads n tig Schw chen e Un intuitive API e byte Arrays nicht gut geeignet f r Bearbeitung von Samples Optimierungen vielfach nicht m glich z B Notwendigkeit des Klonens von MidiMessages da sie mutable sind e Implementie
124. n V Java Sound 64 Nichtdestruktives Arbeiten Als Lowlevel Framework kommt Java Sound mit der Anforderung nach M glichkeiten f r Nicht destruktives Arbeiten nicht in Ber hrung S mtliche unter III 1 3 2 3 vorgestellten Ans tze m ssen vom Programmierer selbst implementiert werden Skalierbarkeit Java Sound ist weitestgehend unabh ngig von verwendeten Datenmengen gehalten Das Arbeiten mit samplingbasierten Daten erfolgt ber AudioInputStreams und damit unabh ngig von der Gesamtdatenmenge Wann und in welchem Umfang Daten in den Speicher geladen werden sollen bleibt damit dem Programmierer berlassen Der einzige Punkt an dem das Java Sound API im Sampling Bereich nicht mit Streaming arbeitet ist bei der Verwendung von Clips Diese stellen eine M glichkeit zum Abspielen kurzer St cke dar die dabei komplett in den Speicher geladen werden und somit auch geloopt abgespielt werden k n nen Dem Programmierer sollte bei der Arbeit mit Java Sound bewusst sein dass der Einsatz von Clips nur dort Sinn macht wo mit berschaubaren Datenmengen gerechnet werden kann Sollen gro e Datenmengen abgespielt werden sollten SourceDataLine Instanzen anstelle von Clips verwendet werden Eine kleine Schwachstelle bei der Arbeit mit gro en Datenmengen stellt die Methode AudioSystem write dar siche 2 1 Streams Da diese Methode erst nach Beendigung des Schreibvorgangs zum Aufrufer zur ckkehrt sollte sie eigentlich in einem eigenen
125. n welche Dateiformateigenschaften auf welche Weise in den properties der AudioFileFormat Klasse dargestellt werden Tabelle 3 zeigt die gew hlte Zuordnung der REX Dateieigenschaften zu property keys Auf die in JAVADOC vorgeschlagenen property keys wurde dabei R cksicht genommen Tabelle 3 REX AudioFileFormat properties Property key Datentyp Beschreibung duration Long Gesamtdauer der Audiodaten in Mikrosekunden author String Name Emailadresse und URL des Autors optional copyright String Copyright Informationen optional comment String Kommentar optional Valice Coun Integer Anzahl der Slices in dieser Datei bpm Float Tempo in beats per minute time_ signature int Taktart Z hler an Index 0 und Nenner an Index 1 Delle Zelt Die Slices in dieser Datei Das Array enth lt f r jeden Slice ein Array der Gr e 2 mit der Position des Slice in Sample Frames an Index 0 und der L nge des Slice in Sample Frames an Index 1 Als letzter Schritt musste noch eine Implementierung der AudioFileReader SPI Klasse geschrie ben werden um den Service einer Java Sound Umgebung anbieten zu k nnen Hierbei ergab sich folgendes Problem Das REX SDK fordert dass REX Dateien komplett in den Speicher geladen werden m ssen um Informationen oder Audiodaten aus ihnen lesen zu k nnen Streaming ist nicht vorgesehen Die AudioFileReader Klasse bietet dagegen Methoden um Audiodaten oder
126. n Implementierung nun tats chlich die Entwicklung studiotauglicher Audioanwendungen erm glicht und ob die von Sun angestrebte Plattformunabh ngigkeit auch bei der sonst schr hard warenahen Audioprogrammierung gew hrleistet bleibt muss sich noch zeigen Im Folgenden soll versucht werden diese Fragen durch theoretische Untersuchung sowie durch Beispielapplikationen im praktischen Teil zu er rtern 4 _http java com en business products jds 5 Java Media Framework 6 J2SE Development Kit II Ziel und Aufbau dieser Arbeit 12 ll Ziel und Aufbau dieser Arbeit Prim res Ziel dieser Arbeit ist es die Java Sound Technologie von theoretischer und praktischer Seite her zu beleuchten Dabei soll kritisch berpr ft werden ob sie den besonderen Anforderun gen an Audiosoftware im Studioumfeld gerecht werden kann und inwieweit dabei die Plattformu nabh ngigkeit gewahrt bleibt Zun chst wird ein allgemeiner Einblick in die Thematik der Audioprogrammierung gegeben Hier zu z hlen grundlegende Ans tze und Schwierigkeiten die diese mit sich bringt Ebenso wird her ausgestellt welches die Anforderungen an studiotaugliche Audiosoftware sind Der folgende Teil befasst sich mit den Grundvoraussetzungen welche Java f r die Entwicklung von Audiosoftware bereitstellt Anschlie end wird die Java Sound Technologie von der Idee ber die Programmierschnittstellen bis hin zum derzeitigen Stand der Implementierungen beschrieben Hier
127. n Klang aus Sie enth lt ledig lich Daten wie beispielsweise die folgenden die jeweils mit einem Zeitstempel versehen sind e Kanal 1 Programmwechsel zu Bank 4 Instrument 3 e Kanal 14 Controller 53 Wert 93 e Kanal 5 Taste C3 mit Anschlagst rke 65 gedr ckt Diese Daten allein haben noch wenig Aussagekraft da niemand wissen kann welches Instrument an der Stelle Bank 4 Instrument 3 zu h ren sein oder welchen Einfluss Controller 53 auf den Klang haben soll Um diesem Umstand entgegenzutreten wurde 1991 von der MIDI Manufactu 21 Genau genommen k nnen Kodierungen wie uLAW oder aLAW auch als unkomprimiert bezeichnet werden da sie die Daten lediglich auf einer logarithmischen Skala abbilden Hier sind aber nur lineare Kodierungen gemeint 22 Pulse Code Modulation 23 Vel WATKINSON S 3 24 Audio Interchange File Format 25 Beide Formate k nnen auch nicht PCM kodierte Daten enthalten der Kodierungstyp wird im Dateikopf mit angege ben Am h ufigsten werden sie jedoch f r PCM kodierte Daten eingesetzt 26 Der Begriff Chunk engl f r St ck steht allgemein f r ein Datenpaket III Audioprogrammierung 20 rer s Association MMA der General MIDI Standard GM definiert der u a 128 Instrumenten nummern jeweils fest einem bekannten Instrument zuordnet z B Instrument 1 Acoustic Grand Piano und einigen Controllernummern Bedeutung gibt Inzwischen wurde dieser Standard in GM2 erweitert Ebenso wurden abg
128. n anderen Teilen arbeiten Der gesamte Quellcode findet sich auf der beiliegenden CD im Verzeichnis Quellcode die Javadoc unter Javadoc 1 Die Beispielapplikationen 1 1 Java Sound Plugins Java Sound bietet mit den Service Provider Interfaces siehe V 2 3 eine PlugIn Architektur um eine Unterst tzung f r zus tzliche Formate Ger te oder Standards in Java Sound aufnehmen zu k nnen Um die M glichkeiten dieser PlugIn Schnittstelle zu evaluieren wurden im Rahmen dieser Arbeit verschiedene PlugIns entwickelt die im Folgenden vorgestellt werden Au erdem wird noch eine eigene PlugIn Schnittstelle vorgestellt die entwickelt wurde um die Schw chen der AudioFileReader Writer SPls zu umgehen 1 1 1 ASIOMixerProvider Beschreibung ASIO siehe 111 2 3 ist heutzutage aus Studioumgebungen kaum noch wegzudenken Insbesondere f r das Erzielen von m glichst geringen Latenzen f r besseres Echtzeitverhalten der Software hat sich ASIO als Standard etabliert Keine Java Sound Implementierung bietet derzeit jedoch Zugriff auf ASIO Treiber Mit dem ASIOMixerProvider PlugIn sollte eine Implementierung des MixerProvider SPls geschaffen werden die das Ansprechen von ASIO Treibern aus Java Sound heraus erm glicht Ziele Ziele waren hierbei im Einzelnen e M glichst viele der von ASIO gebotenen Funktionalit ten so direkt wie m glich auf ent sprechende Java Sound Komponenten abbilden e Den Overhead gering halten um nicht den
129. n diese Anforderung sehr einfach durch ein Lesen der Daten im Voraus und das Verwenden eines gro en Puffers erf llt werden In diesem Fall kann sich die Audioquelle leichte Timingschwankungen erlauben da genug im Voraus gelesen wurde Es handelt sich also um eine weiche Echtzeitanforderung Werden die Daten dagegen erst zur Laufzeit generiert und k nnen sich bis kurz vor dem Moment des Abspielens noch ndern was in interaktiven Applikationen die Regel ist siehe 1 3 2 3 Echt zeitberechnung ergibt sich ein Spannungsfeld da die Daten erst so sp t wie m glich an die Hard ware geschickt werden sollen um auf nderungen bis in den letzten Moment reagieren zu k nnen In diesem Fall handelt es sich um eine harte Echtzeitanforderung da die Audioquelle st ndig in der Lage sein muss im n chsten Zeitintervall die n tigen Audiodaten zu liefern um buffer underruns zu verhindern Diese machen sich meist dadurch bemerkbar dass das Audiosignal entweder an f ngt zu knacksen oder dass der Inhalt des Soundkartenpuffers wiederholt abgespielt wird Es gilt also Je kleiner der verwendete Puffer desto besser die Interaktivit t aber auch desto h her die Echtzeitanforderung an die Software Ebenso wie bei samplingbasierten Daten spielt auch bei MIDI Daten die Echtzeitf higkeit der Software eine gro e Rolle Um vern nftig mit einem MIDI System arbeiten zu k nnen erwartet der Benutzer dass beispielsweise MIDI Daten die er von einem externem M
130. n unter Umst nden enorm gro werden Schnittlisten Schnittliste 1 B 2 B 1 0 1 A 2 A 2 C 1 D fA TB ip DC 2B Abbildung 8 Beispiel f r eine Schnittliste Geht es um das reine zeitliche Anordnen L schen Kopieren usw von Audiomaterial stellen Schnittlisten eine einfache M glichkeit dar das hohe Datenaufkommen der beiden vorherigen An s tze zu verhindern Schnittlisten funktionieren so dass das Ausgangssignal nach Bedarf zerschnit ten und wieder neu angeordnet wird Sie definieren die Reihenfolge in der die betreffenden Teile des Ausgangsmaterials aufeinander folgen Auf diese Weise muss nicht das ganze Bearbeitungser gebnis gespeichert werden sondern lediglich die neue Abfolge Schnittlisten k nnen wiederum als Quellen f r weitere Schnittlisten verwendet werden Sie k nnen zudem um elementare Grundbear beitungen wie Umkehren einzelner Abschnitte nderung der Lautst rke o erweitert werden und 49 Vgl BRUSE S 51ff III Audioprogrammierung 28 k nnen viel Speicherplatz und Bearbeitungszeit sparen Allerdings m ssen die Ergebnisse ausrei chend schnell beim Abspielen berechnet werden k nnen Echtzeitberechnung Ein hnlicher Ansatz wie Schnittlisten ist die komplette Berechnung der Bearbeitungen zum Zeit punkt des Abspielens in Echtzeit Dies ist die intuitivste Methode f r den Benutzer da er keine Berechnungszeiten in Kauf nehmen muss um seine nderungen zu h ren und da er auf die B
131. nd an outlook into future development of Java Sound is given Keywords Java Sound Audio MIDI Studio professional Inhaltsverzeichnis 5 Inhaltsverzeichnis Erkl rung csssccsssccactssscstsescessesbsassconssoustevssoscosdseuksosdboncsossseuscasdesescusdonceonsdecasssdbssased svesestsauesdeasesbsasssonbesbesesasoss KRUPZFASSUNG sisssscedsecesisssesssussncesssesecsocedsessooseseseesbosnsonvoudsovesedendeaseucebecdecesvoesecesoadsecosossdesessssuec asesnseseceseessesooes IAAI E E Ce BEE E E OAR OTE EE O ET OE EOT E E EE OE E teg Inhaltsyerzeichnis si ssscsvesescssssscosassesossssscscosanveseasess EENEG Eege ENEE deeg EE TabellemverZeich mis si icceccscccosssscdsccosscocsntscecsacesoseesnessodseeecesecoacesccsccssseqsases ENEE EEN Verzeichnis der Codebeispiele 0 000s000200000000000000000n0000000000n00nn00nn0snnennnennnsssnssnssonssonssnnsnnssonssonsnnnsnne 2 4 4 5 Abbildunngsverzeichniis ccsccsscccscccscscsscscscssscscsscscssscsssccssscssscsccssecsnecssccsecesecssssscssscssscssssssssescsssesenee 7 7 7 8 Abk rzungsverzeichnis sisscssccessvesesescsdersssserseceseadeavesesdentesssoessevectenss sehen sessesassosseessaseussonssovdoasseostesssusstboceven VOL WOM GEET I Il II 1 IV 1 SE LTE ERT Ziel und Aufbau dieser Arbeit cccsccccsssscssssscccsssscccsssssccssssccsesssccsscsssccssssscsccsssssscssssscssssccesees LD Audioprogrammierung csssssssssssonss
132. ne genaue Synchronisation erforder lich ist Hierf r gibt es verschiedene Synchronisationsformate wie beispielsweise SMPTE Timeco de MIDI Time Code oder MIDI Clock Wichtig ist auch das Bestimmen der Synchronisationsquelle Sobald mehrere Hardwareger te im Einsatz sind ergibt sich die Problematik dass unterschiedliche Clocks im Spiel sind an denen sich die Ger te orientieren Es nutzt wenig wenn in der Software genau angegeben werden kann zu welchem Videoframe ein bestimmter Klang ert nen und wann welcher MIDI Befehl gesendet wer III Audioprogrammierung 38 den soll wenn Video Audio und MIDI Hardware unterschiedliche Clocks verwenden vgl 1 3 1 2 mem Semer pff vw EST 0 ool Arrange Track Record Automation Mode Volume 00000000 OO OR OL Abbildung 10 Synchronisation mehrerer Mediendatenstr me im Audio MIDI Sequenzer Logic Audio Professionelle Audiosoftware muss daher die M glichkeit bieten die Master Slave Beziehungen f r die Synchronisation festzulegen und dar ber hinaus an externe Ger te unterschiedliche Synchroni sationsformate zu senden bzw diese von selbigen zu empfangen Ein weiterer Faktor der f r die Erreichung einer perfekten Synchronisation n tig ist sind die La tenzen der beteiligten Komponenten Sind diese bekannt k nnen sie mit einberechnet werden und werden so nicht zu St rfaktoren 8 Quelle http www emagic de IV Audioverarbeitung in Java 39 IV Au
133. nem objektorientierten Verfahren jeden Klang in seiner Charakteristik so zu beschreiben dass er beim Abspielen von einem Synthesizer m glichst authentisch generiert werden kann Es werden also Informationen ber das verwendete Syntheseverfahren und die dazugeh ri gen Parameter gespeichert Das Format f r diese Musiksynthese nennt sich SAOL Hinzu kommt mit SASL quasi ein MIDI Ersatz der Steuerdaten f r musikalische Anwendungen beschreibt Beim Abspielen erfordert dieses Verfahren nat rlich eine wesentlich h here Rechenleistung da der Klang erst zur Laufzeit mit teilweise sehr komplexen Syntheseverfahren generiert wird was in Zu kunft aber aufgrund steigender Prozessorleistung nicht das gr te Problem darstellen d rfte Dieser neue Ansatz der auch parallel von einigen anderen Technologien verfolgt wird k nnte in der Zukunft eine gro e Rolle spielen und sich in verschiedenen Bereichen durchsetzen Studioum gebungen sollten zumindest darauf vorbereitet sein und diese Formate kennen 27 Mehr Informationen zu General MIDI http www midi org about midi gm gminfo shtmi 28 Scalable Polyphony MIDI 2 G ngige Soundkarten sind heutzutage mit einem Synthesizer Chip zur Klangerzeugung ausgestattet 30 Rich Media Format 31 eXtensible Music Format 32 Moving Pictures Expert Group 33 34 Structured Audio Orchestra Language Structured Audio Score Language III Audioprogrammierung 21 1 3 Digitale Klangverarbeitung Hat
134. ng re dundanter Daten das Vorziehen bestimmter Nachrichten oder eine Priorisierung wichtigerer Nach richten was nicht immer mit befriedigendem Ergebnis m glich ist III Audioprogrammierung 26 Es gibt allerdings inzwischen auch Ans tze MIDI Interfaces mit umfangreicherer Puffer Technik auszustatten um das Timing zu verbessern und gleichzeitig Datenreduktion und Priorisierung zu erm glichen Diese sind allerdings fast alle herstellerspezifisch und setzen spezielle Hardware vor aus Beispiele hierf r sind Emagics AMT Technologie oder Steinbergs LTB 1 3 2 2 Verarbeitungsketten Zur Verarbeitung zeitabh ngiger Medien wie es Audiodaten sind hat sich in der Softwareent wicklung das Konzept von Verarbeitungsketten durchgesetzt Unter einer Verarbeitungskette versteht man in der Medienverarbeitung eine Kette von Stationen die ein Eingabemedium chunkweise parallel verarbeiten Die beteiligten Stati onen nennt man Transformatoren Der Datenfluss zwischen ihnen l uft ber so ge nannte Ports ab Man unterscheidet Ein und Ausgabeports von denen jeder Transformator beliebig viele oder keine haben kann Dabei spielt es keine Rolle ob ein Transformator eine Hard oder Softwareein heit repr sentiert Verarbeitungsketten bieten den Vorteil dass die Verarbeitung auf einmal vorge nommen werden kann indem Datenchunks vom Anfang bis zum Ende der Kette durchgereicht und dabei verarbeitet werden wobei
135. nge entweder von digitalen Medien z B Compu ter erzeugt werden um sp ter ber einen D A Wandler ausgegeben zu werden oder wo Kl nge aus der analogen Welt ber A D Wandler in ein digitales Format bersetzt werden Abstrakt geschen kann ein A D oder D A Wandler in zahlreichen Varianten auftreten So kann das Einspielen einer Melodie ber ein Keyboard in den Computer auch als A D Wandlung ver standen werden Ist allerdings in der Fachliteratur oder in dieser Arbeit von A D oder D A Wandlern die Rede so sind damit die f r das Abtasten kontinuierlicher analoger Signale bzw f r das Erzeugen analoger Signale aus Abtastwerten ben tigten Ger te gemeint Der Digitalisierungsprozess von analogen Kl ngen kann in zwei Schritte unterteilt werden Zu n chst wird das theoretisch unendlich genaue Eingangssignal in Werte von endlicher Genauigkeit umgewandelt sog Onantisierung Dieser Schritt ist zwangsl ufig mit einem Informationsverlust verbunden von unendlicher in endliche Aufl sung Allerdings kann dieser Informationsverlust mit vertretbarem Aufwand so gering gehalten werden dass er jenseits des vom menschlichen Ohr wahrnehmbaren Bereichs liegt Im zweiten Schritt werden die bei der Quantisierung gewonnenen Werte in ein digitales Format umgewandelt sog Kodierung Prinzipiell unterscheidet man zwei grundlegend verschiedene Arten der digitalen Haltung von Klangdaten Der am weitesten verbreitete Ansatz ist das sog Sampling
136. nicht herausgefunden werden Ein m gliches Bottle neck k nnte das st ndige An und Abmelden des Callback Threads bei der JVM sein das bei klei nen Puffergr en sehr h ufig ausgef hrt werden muss 154 Um den ASIOMixerProvider auf einem Windows System ohne vorhandenen ASIO Treiber zu testen kann der ASIO4AII Treiber siehe I11 2 3 installiert werden VI Praktischer Teil 71 Weiterhin konnten nicht alle Bestandteile des ASIO SDK wunschgem in Java Sound bersetzt werden Es wurden einige Zusatzelemente wie beispielsweise ein ASIOListener eingef hrt auf die man aber naturgem nur zugreifen kann wenn man das Mixer Objekt explizit auf ASIOMixer castet und die Aufrufe kennt siehe Javadoc Das ASIOMixerProvider PlugIn besteht aus den Klassen im Package com groovemanager spi asio Der Quellcode f r den nativen Teil findet sich im Verzeichnis Quellcode Nativ jsasio Um den nativen Teil kompilieren zu k nnen muss das ASIO SDK von Steinberg heruntergeladen und eingebunden werden Um das PlugIn nutzen zu k nnen muss die native Bibliothek zus tzlich zum jar Archiv installiert werden Beide liegen unter PlugIns jsasio 1 1 2 FloatConversionProvider Beschreibung In den meisten g ngigen Audioapplikationen werden heutzutage die Audiodaten intern als 32 Bit Flie kommazahlen normalisiert auf 1 0 verarbeitet Auch gibt es immer mehr Treiber die diese Form der Kodierung der Audiodaten w hlen Die Vorte
137. nsnnnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnsnsnnsnnenn 95 Buchquellen 2 44 8 22 20 52 Sue E EEE EE EES senken 95 Zeitschriften eet e Asian hierin ie u nr SE 95 Internetquellen a ae Eder 95 Sonstige Quellen ege a Al dig AV Ae Se Ri el eee 97 Anhang A Emailinterview mit Florian B mers Anhang B Der Inhalt der beiliegenden CD Rom Anhang C Installationsanleitung Sampleeditor Abbildungsverzeichnis 7 Abbildungsverzeichnis Abbildung 1 Analoges Audiosignal oeseeeeeeeeeeeeeeeerersreresreresrsesrsresressesesrerteresssesrsterretesssereseereeneses 13 Abbildung 2 Visualisierung des Aliasingeffekts beim Abtasten sosser 15 Abbildung 3 Zeitliche Quantisierung beim Sampling seeseeeeeeseeeeeeeeseeeserreresrsrsrsresreresrserrereereseseses 16 Abbildung 4 Quantisierung der Abtastwerte beim Sampling uussuussnesnnesnnesnersnensnensnennonnnnnnennnennnennne 16 Abbildung 5 Ergebnis der Digitalisierung im Vergleich zum Originalsignal s 17 Abbildung 6 Vereinfachter schematischer Aufbau einer herk mmlichen Stereosoundkarte s seses 22 Abbildung 7 Verarbeitungskette mit aktiver Quelle Buch Ansatz 26 Abbildung 8 Beispiel f r eine Schuiriltete 27 Abbildung 9 Bearbeiten einer 95 MB gro en Datei im Windows Aoundrecorder 37 Abbildung 10 Synchronisation mehrerer Mediendatenstr me im Audio MIDI Sequenzer Logic Audio 38 Abbildung 11 Performance Benchmark unterschiedlicher JVMs und Compte 4
138. nso k nnen neue Java Objekte instanziiert und Exceptions geworfen werden Eine direkte Abbildung der Java Klassen auf C Klassen ist dagegen nicht vorgesehen Um auf die verschiedenen Besonderheiten die beim Arbeiten mit nativem Code auftreten k nnen einzugehen bietet das JNI dar ber hinaus einige spezielle Funktionen an So existiert mit dem In vocation API eine M glichkeit von C C Code aus eine neue JVM zu instanziieren Ebenso ist es m glich einen nicht von Java erzeugten Thread an eine existierende JVM Instanz zu koppeln um von ihm aus auch Java Code ausf hren zu k nnen Hierdurch wird es m glich auf Callbacks beispielsweise von Treibern in Java zu reagieren Ebenso bietet das JNI die M glichkeit in nati vem Code neue Instanzen der java nio ByteBuffer Klasse zu erstellen die Zugriff auf einen vorgegebenen Speicherbereich haben So k nnen Daten effizient und ohne teures Kopieren zwi schen Java und anderen Prozessen ausgetauscht werden 133 Die Funktionsnamen setzen sich aus dem Pr fix Java_ sowie dem vollqualifizierten Klassennamen und dem Metho dennamen zusammen V Java Sound 52 V Java Sound 1 Einf hrung 1 1 Was ist Java Sound Java Sound versteht sich als Lowlevel Framework das Java Programmierern einen f r Java Verh ltnisse relativ hardwarenahen Zugriff auf vorhandene Sound Hardware Sampling und MIDI erm glichen soll Es dient au erdem als Basis f r fast alle Implementi
139. nstallation angegeben werden muss Dieser kann von System zu System variieren Ansonsten muss bei jedem der folgen den java Aufrufe der gesamte Pfad zur ausf hrbaren java Datei angegeben werden 2 Die jeweilige zip Datei sollte neben der Installationsanleitung noch die Datei install_sse_linux jar enthalten Mit dem Befehl java jar install_sse_linux jar kann diese ausgef hrt werden 3 Im nun folgenden Installationsdialog k nnen das Installationsverzeichnis sowie die zu in stallierenden Zusatzpakete ausgew hlt werden 4 Nach erfolgter Installation kann das Programm mit dem Befehl java Djava library path jar start jar im gew hlten Installationsverzeichnis ausgef hrt werden Manuelle Installation auf beliebiger Plattform Sollten bei der automatischen Installation Fehler auftreten oder soll der Sampleeditor auf einer anderen Plattform installiert werden kann die Installation Schritt f r Schritt manuell durchgef hrt Anhang C Installationsanleitung Sampleeditor G2 werden Theoretisch m sste der Sampleeditor auf allen Plattformen funktionieren f r die eine SWT Implementierung existiert 1 Zun chst muss ein Installationsverzeichnis f r den Sampleeditor angelegt werden in wel ches s mtliche Dateien aus der zip Datei kopiert werden Als n chstes m ssen die SWT Bibliotheken f r die gew nschte Plattform installiert wer den Diese k nnen von der eclipse Homepage http www eclipse org bezogen
140. ntabilit t von Sun so dass Priorit t auf Technologien gesetzt wurde die direkt Geld erwirtschafteten JMF liegt ungef hr im gleichen Bereich wie Java Sound obwohl es da mehr direkt zuordnende zahlende Kunden gibt MMAPI dagegen hat viele Lizenznehmer und wird deshalb auch mit mehr Entwicklern ausgestattet Ich arbeite brigens auch zu 50 an Sun s MMAPI Implementierung und ich war f r das API Design von einigen MMAPI Controls zust ndig Nat rlich gibt s da ber schneidungen mit Java Sound und Ziel f r die Zukunft ist es die low level Implementierungen von Java Sound MMAPI und JMF zu vereinheitlichen JMF setzt allerdings auch auf Java Sound auf Allerdings kann sich hier vieles ndern zum Beispiel erfahren sowohl JMF als auch Java Sound gerade einen Priorit tsschub durch JDS das Java Desktop System und die Allianz mit AMD Mit anderen Worten Sun will zur ck auf den Desktop und dazu geh rt nat rlich Sound Anhang A Emailinterview mit Florian B mers A3 MR Welches waren die Hauptziele f r die Verbesserung von Java Sound im Rahmen von JDK 1 5 0 FB Hauptziele waren e Alle Features der API bis auf ein paar Profifeatures zu implementieren Ports MIDI i o Zugriff auf alle installierten Soundcards hohe Sampling Rates 24 bit Receiver und Transmitter f r Sequencer e Gleiche Features auf allen Plattformen z B waren Ports und MIDI i o in 1 4 2 noch nicht f r Linux implementiert e Bessere P
141. nzelkomponenten Auf eine detaillierte Beschreibung der Implementierung wird an dieser Stelle mit Verweis auf den Quellcode und die Javadoc auf der beiliegenden CD verzichtet Vielmehr werden die Bestandteile des Sampleeditors und ihre Funktion kurz vorgestellt Abbildung 18 zeigt die Hauptbestandteile des Sampleeditors auf die im Folgenden eingegangen wird 1 File Edit Effect und Options Men 2 Info Bereich 3 Wellenformdarstellung 4 Transportleiste 5 Scroll und Zoom Bereich VI Praktischer Teil Simple Sample Editor Z All w Effect Options x File name kurzzeit wav ND File size 30775336 Frame length 7693823 Encoding PCM_SIGNED Channels 2 Sampling rate 44100 0 Sample size 16 Frame size 4 Frame rate 44100 0 Big endian false Device Info x Input device Output device SiS 7012 Wave Buffer size samples Buffer fill level Frame Position Encoding Channels Sampling rate Sample size Frame size Frame rate Zoom Big endian Se m Memory Info _ K Total memory 1 960 MB d Used memory Abbildung 18 Screenshot Sampleeditor Grundversion 1 2 1 1 Die Men Funktionen File Das File Men bietet die g ngigen Optionen New Open Save Save As und Close Es k nnen beliebig viele Dateien gleichzeitig ge ffnet werden allerdings nicht mehrmals dieselbe Datei Im Open Dialog kann jede beliebige Datei auch
142. o muss an manchen Stellen 9 Vgl EIDENBERGER S 8ff 9 5 Vgl EIDENBERGER S 8f Ip http java sun com products java media sound IV Audioverarbeitung in Java 41 eine reine Java L sung f r bestimmte Aufgaben gew hlt werden f r die es auf manchen Plattfor men performantere native Funktionen g be Bestes Beispiel ist das Package java lang Math Die hier verwendeten Flie kommazahlenberechnungen k nnten vom Betriebssystem sehr schnell ausgef hrt werden Da das Ergebnis aber nicht auf allen Plattformen Bit f r Bit identisch ist muss te die langsamere Variante einer reinen Java L sung gew hlt werden Selbst wenn Java jeden Methodenaufruf per JNI siehe 3 direkt als Aufruf an das darunter liegen de Betriebssystem weitergeben k nnte w re das mit Performanceeinbu en verbunden da auch das JNI nicht ganz ohne Overhead auskommt Allerdings hat Java in bestimmten F llen durchaus auch Performancevorteile gegen ber nativen Anwendungen da beispielsweise Pointer in C C manche Code Optimierung durch den Compi ler verhindern die in Java m glich w re Abbildung 11 zeigt das Ergebnis von Benchmarks der IBM Virtual Machine IBM der HotSpot Virtual Machine von Sun HotSpot sowie unterschiedli cher C Compiler bei der Berechnung einer FFT mit unterschiedlichen Array Gr en So what do yon conclude from this benchmark Java is twice as fast as C or twice as slow or anything in between Eine aus
143. oftware f r den Studiobereich abgeleitet Es wird kritisch berpr ft inwieweit Java und Java Sound theoretisch geeignet sind diese Anforderungen zu erf llen Gegenstand der berpr fung ist dabei sowohl das Java Sound API als auch dessen Implementierungen Im praktischen Teil werden zwei Sampleeditoren und einige PlugIns entwickelt um aus der praktischen Erfahrung weitere Er gebnisse zu gewinnen Abschlie end wird eine Gesamtbewertung der Studiotauglichkeit von Java Sound vorgenommen und ein Zukunftsausblick gegeben Schlagw rter Java Sound Audio MIDI Studio professionell Abstract This work is intended to evaluate the suitability of the Java Sound framework for being used as a basis for the development of professional audio applications that can be used in a studio environ ment The main principles of audio programming including sampling and MIDI are shown The main requirements for audio software in studio environments will then be derived from those prin ciples followed by a theoretical verification of Java s and Java Sound s ability to fulfil those re quirements Both the Java Sound API and its implementations will be taken into account In the practical part of this work two sample editors and some plug ins are developed to gather additional results from the practical experience At the end the results are summarized in a rating about Java Sound s suitability as a development platform for professional audio applications a
144. ormationen darin enthalten sind Sinnvoll kann der Einsatz hoher Sampling Frequenzen dann sein wenn Rundungsfehler bei sp teren Konvertierungen in andere Sampling Frequenzen minimiert werden sollen oder zur Verringerung des Aliasingeffekts die jedoch effizien ter durch den Einsatz guter Lowpassfilter vor dem A D Wandler erreicht werden kann Spannung Zeit Abbildung 2 Visualisierung des Aliasingeffekts beim Abtasten Aliasing beim Abtasten bezeichnet den Effekt dass Frequenzen die h her als die halbe Samplingrate sind im abgetasteten Signal als tiefere Frequenzen wieder auftauchen und somit zu einer h rbaren Klangverf lschung f hren Abbildung 2 zeigt diesen Effekt Das blaue Signal als grobes Ergebnis der Abtastung weist eine niedrigere Frequenz auf als das gr ne Originalsignal 3 Vgl BR SE S 16ff 1 Hz steht f r eine Abtastung pro Sekunde 1 Hz d x s 5 Vel NET LEXIKON 6 Vel WATKINSON S 729 7 Vgl BRUSE S 11 ff 8 Vel BRUSE S 14ff III Audioprogrammierung 16 Spannung Abbildung 3 Zeitliche Quantisierung beim Sampling Das analoge Signal wird also beim Sampling Vorgang zweimal quantisiert zun chst in ein zeitliches Raster vgl Abbildung 3 und anschlie end in ein Raster m glicher Werte pro Abtastung vgl Abbildung 4 Spannung Abbildung 4 Quantisierung der Abtastwerte beim Sampling F r die Abbildungen wurde in beide Richtungen zur Veranschaulichung
145. osssosssnssonssonsnonsonnsnnssnnssnnesnnennnsssnssnsssnssonssonsnnnsnnssnnssnsssnsnssnennnen LO Von analog Z digital eene beste 13 1 1 Analoge A di technikK s tesisini rea a a a ES 13 1 2 Digitalisierung EE 14 ES Sampling E 14 1 2 2 Musiknoten als digitale Klangdaten MIDI 17 1 2 3 Vereinbarkeit von Sampling und MIDI 18 1 2 4 Digitale Audioformate 18 1 3 Digitale Klangverarbeitung US AN WE Ee 21 1 3 2 Softwarekonzepte und besonderheiten s s ssesssssesssssssssessssstetstsrststerereentntersrstsreneertstntnertrererersrstet 24 Audio auf verschiedenen Betriebssystemplattformen nennen 29 SL Historische Entwickl ns scn ener ea eate d e ee heet eet EE ei 29 2 2 Heutige Bedeutung 2 2 2522 28H 22 Reiki EES 31 2 3 Audiotreibermodelle 22 23 2220 Brenn Ben 31 Anforderungen an Audiosoftware im Stodobereich nn 34 3 1 Fchtzett bigket 39 3 2 Unterst tzung g ngiger Formate und Standarde 35 3 3 Erweiterbafk tt ausnhneanetnin enshenusautn dE EEN OESCH dEr et 35 zk Konfigurierbarkeit 4 2 22 o iei ee a AE ET R e enaa 36 3 9 Nichtdestr ktives Arbeiten nisin E E E E EE RES 36 3 0 Skaheib rkeit EE 36 3 7 Nutzen vorhandener Ressourcen cccsscesneessseceeeeeceseceeeeecseceeneeceaeeesaeecsaeeeeaeecaeeeeeeecsaeeesaees 37 Oe EE 37 Audioverarbeitung in Java cuscossssssssssossnssonssonsnnnsnnnsnnssnnsennennnennnsnsnssnssonssenssnssonssons
146. r Die A D Wandler bersetzen analoge Eingangssignale in eine digitale Form damit sie vom Chip der Soundkarte weiterverarbeitet werden k nnen Analog dazu wandeln D A Wandler die digitalen Daten aus dem Rechner in analoge Spannungswerte f r die Ausgangssignale vgl 1 2 1 Die Wandler beziehen von der Soundkarten Clock ihre Sampling Frequenz und lesen direkt aus dem bzw schreiben direkt in den Hardwarepuffer Sie bestimmen welche Samplingraten die Soundkarte unterst tzt und in welcher Aufl sung Samplegr e die Abtastung erfolgt Gute Wandler arbeiten mit etwas gr erer Aufl sung als nominell angegeben z B 20 Bit statt 16 Bit und reduzieren diese anschlie end durch ein spezielles Verfahren sog noise shaping So kann das Quantisierungsrauschen beim Sampling reduziert werden Hardwarepuffer Um die echtzeitsensiblen Wandlungsvorg nge unabh ngig von Timingschwankungen der Software schicht zu halten wird zwischen Wandler und Chip je ein Puffer eingebaut auf den Wandler und Chip jeweils mit einem internen Zeiger zugreifen der nach jedem Sample um eins weiter ger ckt 38 Vel BRUSE S 68ff III Audioprogrammierung 23 wird bis er am Ende des Puffers angelangt ist und wieder an den Anfang gesetzt wird Dabei arbei ten die Wandler mit ihrem vorgegebenen Takt unabh ngig davon ob der Chip also letztendlich die Software rechtzeitig Daten im Puffer bereitgestellt bzw aus dem Puffer ausgelesen hat Schafft d
147. rauschen Dieses Rauschen ist signalabh ngig und wird daher als st render empfunden als ein kon 10 Aus WATKINSON S 8 11 Digital Analog Wandler 12 Analog Digital Wandler III Audioprogrammierung 15 stantes Hintergrundrauschen Ist das Eingangssignal nicht gut ausgesteuert also relativ leise verrin gert sich die effektive Aufl sung da die Anzahl der m glichen Werte die das Signal annehmen kann sinkt 3 Die H ufigkeit der Abtastung ist der zweite Faktor der dar ber entscheidet wie originalgetreu das Ergebnis ist Sie wird als Sampling Frequenz oder Samplingrate bezeichnet und in Hertz Hz angege ben Da das menschliche Ohr bestenfalls Frequenzen im Bereich bis zu 20 kHz wahrnehmen kann und nach dem Abtasttheorem von Shannon Nyquist gt die Abtastung eines analogen Signals mit mehr als der doppelten h chsten aufzuzeichnenden Frequenz erfolgen sollte hat sich f r gute Au dioqualit t die Sampling Frequenz 44 1 kHz Audio CD Standard etabliert Weitere g ngige Fre quenzen sind unter anderem 11 025 Hz 22 050 Hz und 48 kHz Im Studiobereich wird inzwischen aber auch dort wo es die Soft und Hardware unterst tzt hin und wieder mit deutlich h heren Sampling Frequenzen 96 oder gar 192 kHz gearbeitet Solch hohe Sampling Frequenzen f hren zu einem starken Anstieg des Datenaufkommens und sollten daher nur dort eingesetzt werden wo sie auch ben tigt werden da keine f r das menschliche Ohr verwertbaren Mehrinf
148. rbeitungsergebnisse innerhalb einer vorge gebenen Zeitspanne verf gbar sind Die Daten k nnen je nach Anwendungsfall nach einer zeitlich zuf lligen Verteilung oder zu vorherbestimmten Zeitpunkten anfallen Bei Echtzeitanforderungen unterscheidet man harte Echtzeit und weiche Echtzeit Eine harte Echtzeit anforderung liegt dann vor wenn die Zeitvorgaben unter keinen Umst nden berschritten werden d rfen Bestes Beispiel f r harte Echtzeitanforderungen sind computergest tzte Kfz Fahrhilfen denn ein Anti Blockiersystem das auch nur ein bisschen zu sp t reagiert ist genauso gut wie gar keines Dagegen toleriert eine weiche Echtzeitanforderung geringe berschreitungen der Zeitvor gaben wenn sie in der Regel eingehalten werden 40 Vgl BRUSE S 139fF 1 Society of Motion Picture and Television Engineers 42 Deutsches Institut f r Normung III Audioprogrammierung 25 Im Bereich der Audioprogrammierung wird Echtzeit insbesondere an zwei Stellen gefordert Zum einen wenn es darum geht samplingbasierte Audiodaten wiederzugeben oder aufzunehmen Um beispielsweise bei der Wiedergabe sicherzustellen dass der Puffer der Soundkarte zu jeder Zeit soweit mit Daten gef llt ist dass der Klang zur rechten Zeit ausgegeben werden kann also um buffer underruns zu verhindern muss die Quelle die Audiodaten regelm ig innerhalb eines vorge gebenen Zeitintervalls liefern Sind die Daten schon vor dem Abspielvorgang bekannt kan
149. rden was unn tig viel Rechenzeit kostet Im Folgenden wird daher nur auf die Eigenschaften unkomprimierter Formate eingegangen In unkomprimierten linearen Formaten werden die Audiodaten PCM kodiert das hei t pro Abtastung und Kanal wird ein Samplewert gespeichert Die einzelnen Werte werden z B als Inte ger oder Gleitkommawerte in einen fortlaufenden Datenstrom geschrieben Die wichtigsten For mate hierf r sind das Microsoft WAVE und das Apple AIFF Format Beide Formate hneln einander sehr und erlauben Mono Stereo oder Mehrkanaldateien sowie unterschiedliche Abtast frequenzen und Samplegr en Ebenso erlauben beide das Einf gen frei definierbarer sog Chunks um beliebige Zusatzinformationen mit den Audiodaten speichern zu k nnen Von dieser M glichkeit machen viele Anwendungen Gebrauch um ein g ngiges Format zu nutzen aber eigene Zusatzdaten wie beispielsweise Looppunkte hinzuf gen zu k nnen 1 2 4 2 MIDI Format Der MIDI Standard beinhaltet auch die Definition eines MIDI Dateiformats Dabei unterscheidet man MIDI Dateien von Typ 0 Typ 1 und Typ 2 Typ 0 umfasst nur die Daten einer Spur also f r ein einzelnes Instrument Typ 1 stellt eine Zusammenfassung mehrerer paralleler Spuren dar wo hingegen Typ 2 mehrere Spuren erlaubt die aber nicht unbedingt zueinander geh ren m ssen Der Typ der MIDI Datei wird im Dateikopf festgelegt Eine MIDI Datei allein sagt noch relativ wenig ber den tats chliche
150. read Klasse urspr nglich f r eine einmalige Verwendung konzipiert ist Ein Thread Objekt wird mit new erzeugt mit start gestartet f hrt eine run Methode aus und wird nach deren Been digung terminiert Das Thread Objekt hat dann keinen Nutzen mehr da ein Thread nach Beendi gung nicht wieder gestartet werden kann Das Erzeugen und Starten von Threads kostet aber um ein vielfaches mehr Zeit als das Erzeugen eines einfachen Objekts Daher kann es sich durchaus lohnen die run Methode von Threads so zu implementieren dass der Thread nach Beendigung einer Aufgabe wartet bis ihm eine neue Aufgabe zugewiesen wird anstatt die run Methode zu verlassen Dies spart die Kosten des Erzeugens und Startens und ist insbesondere dann sinnvoll wenn relativ h ufig relativ kurze Aufgaben von einem zus tzlichen Thread ausgef hrt werden sol len Dokumentation und Quellcode lesen Die Wahrheit steht im Code Und kein ernstzunehmender Entwickler kann es sich leisten die Wahrheit zu igno rieren Oft finden sich in der Dokumentation oder im Quellcode Details die helfen k nnen die aus Performancesicht beste L sung f r ein Problem zu finden Daher ist es wichtig soweit ver f gbar stets Zugriff auf den Quellcode und die Dokumentation Javadoc der verwendeten Bib liotheken zu haben Ansonsten wird oft der k rzeste Code als der performanteste angeschen was durchaus nicht immer zutreffend sein muss Java unabh ngige Ma
151. ren Im Verlauf meines Studiums erlernte ich wichtige Grundlagen allerdings konzentrierten sich diese meistens entweder auf Informatik oder Medieninhalte Da mich insbesondere die Kombination dieser beiden Bereiche interessiert bot sich ein Diplomarbeitsthema an das diese Kombination beinhaltet Ich konnte im Rahmen dieser Arbeit feststellen dass ich an dieser Thematik Freude finde und werde mich daher auch ber den Rahmen der Diplomarbeit hinaus damit besch ftigen Herzlich bedanken m chte ich mich bei Florian B mers f r das Interview und die Unterst tzung bei Matthias Pfisterer f r die kompetente Hilfe bei meinen Korrektoren Prof Dr Fridtjof Toen niessen und Dipl Ing FH Tobias Frech f r die Betreuung sowie bei meiner Freundin meinen Freunden und meiner Familie f r Geduld und Hilfe In dieser Arbeit werden folgende Elemente durch besondere Schriftarten hervorgehoben H Codeteile Datei und Verzeichnisnamen e Tasten Internetadressen Texte auf dem Bildschirm e Buttons auf dem Bildschirm 1 Application Programming Interface 2 Musical Instrument Digital Interface 3 Java 2 Standard Edition I Einleitung 11 I Einleitung L ngst hat Java den Ruf abgesch ttelt eine reine Internetprogrammiersprache zu sein und vor nehmlich auf die Programmierung von Applets ausgerichtet zu sein Zwar liegt der Haupteinsatzbe reich nach wie vor nicht bei Desktopanwendungen sondern viel
152. rnative zur Sun Implementierung da sie einige Schw chen der Sun Implementierung nicht aufwies Im brigen wurde die neue Sun Implementierung von den Entwicklern des Tritonus Projekts Florian B mers und Matthias Pfisterer erstellt Tritonus basiert auf der GNU LGPL und kann daher auch von JVM Implementierungen von Drittanbietern genutzt werden die keine Lizenznehmer von Sun sind wie beispielsweise das Kaffe Projekt 147 http www cems uwe ac uk Irlang plumstone 148 Lesser General Public License http www gnu org copyleft lesser html 149 http www kaffe org V Java Sound 67 5 Bestehende Projekte auf Basis von Java Sound Die Anzahl gr erer Projekte die auf Java Sound basieren ist derzeit noch berschaubar und nur die wenigsten davon haben bereits einen stabilen Status erreicht Es finden sich darunter auch kaum Anwendungen die den Anspruch erheben studiotauglich zu sein 50 Gerade aufgrund der erw hnten Schw chen der Java Sound Implementierung verwundert es nicht dass diese Projekte fast ausschlie lich nichtkommerziell sind und meist eigene Workarounds f r die M ngel in der Implementierung einsetzen und somit das Java Sound API umgehen Bestes Beispiel hierf r ist die Synthesizer Editor und Librarian Software SyuthLib gt f r die eine eigene MIDI Wrapper Architektur entwickelt wurde Diese erfordert zwar eine eigene Implementierung f r jede unterst tzte Plattform ist dann aber nicht mehr zw
153. rs und Time signature sowie der L nge der aktuellen Auswahl in der Wellenformdarstellung errechnet werden 1 2 2 3 Samples Im und Exportieren Unterhalb der Sample Eigenschaften befindet sich der Import Exporl Button f r den Austausch von Samples zwischen Editor und MC 909 Beim Dr cken dieses Buttons ffnet sich der Im port Export Dialog siehe Abbildung 25 Te Export samples to MC909 Please specify a destination folder Then select the samples you want to export and add them at the position you want Destination fhe USB Select Ic Internal Ze Memory Card groovy gt2 Abbildung 25 Der Import Export Dialog Um Samples mit der MC 909 austauschen zu k nnen muss diese am Ger t in den USB Modus versetzt werden Dabei wird die MC 909 automatisch als eigenes Laufwerk zum Betriebssystem gemountet Den Pfad zu diesem Laufwerk muss man in dem Dialog unter Destination angeben damit der Sampleeditor auf das Ger t zugreifen kann Beim Versetzen der MC 909 in den USB Modus muss angegeben werden ob auf den internen Flash ROM Speicher oder auf die Smart Media Karte zugegriffen werden soll Diese Auswahl soll te im Dialog unter USB Select wiederholt werden da sonst das automatische Erstellen eines Patches nicht korrekt funktioniert 161 Um den Editor ohne MC 909 zu testen gen gt es ein Verzeichnis anzulegen das die Unterverzeichnisse ROLAND SMPL enth lt Dieses Verzeichnis kann dann unter Destination
154. rung zu lange zu schlecht und immer noch nicht perfekt e Probleme der Vereinheitlichung auf Java Ebene von v llig unterschiedlichen Treibermo dellen auf Betriebssystem Ebene Windows MME DirectSound Solaris Mixer Linux AL SA OSS e Viele neue Technologien nicht erh ltlich 3D ASIO SoundFont Effekte etc MR Ist es m glich vorhandene SPIs in neuere Java Sound Versionen zu integrieren O der anders gefragt Warum ben tigt man trotz Version 1 5 immer noch den Tritonus PCM2PCMConverter um beispielsweise 32 Bit Unterst tzung zu bekommen FB Leider scheitert das an den Lizenzen Tritonus ist LGPL Sun benutzt grunds tzlich weder GPL noch LGPL in Java Selbst bei Public Domain code muss eine interne Pr fung stattfinden die h ufig aufw ndiger ist als die Implementierung selbst MR Wie sch tzt Du die Konkurrenzsituation f r Java Sound als plattform bergreifendes Lowlevel Audio Framework sowohl innerhalb als auch au erhalb von Java ein Wie steht es z B mit PortAudio FB Java Sound hat den gro en Vorteil fester Bestandteil eines wichtigen Plattformstandards zu sein Der gr te Nachteil ist die mangelnde Durchsetzung siehe oben MR Wie gut ist Java Sound Deiner Meinung nach derzeit JDK 1 5 f r die Entwicklung studiotauglicher Audioanwendungen geeignet Wo siehst Du Grenzen FB 1 5 ist die erste Version die studiotaugliche Anwendungen erm glicht Manche Bereiche sind allerdings ungeeignet
155. s Stop Buttons beendet wurde kann in diese Datei nicht mehr weiter aufgenommen werden Stattdessen muss daf r eine neue Datei angelegt werden Die Inhalte k nnen dann mit Copy Paste zusammengef gt werden Beim Bet tigen des Rec Buttons wird in dem Format aufgenommen das beim Anlegen der neuen Datei angegeben wurde Ist dies nicht m glich wird eine entsprechende Konvertierung in den Aufnahmeprozess integriert Ist auch das nicht m glich wird der Aufnahmevorgang mit einer Fehlermeldung abgebrochen Es sollte beachtet werden dass die aufgenommenen Daten zun chst im tempor ren Ordner des Betriebssystems gespeichert und erst beim Beenden gel scht werden Eine Auswahl des Tempor r verzeichnisses w re w nschenswert ist aber derzeit noch nicht implementiert 1 2 1 5 Scroll und Zoom Bereich Um den sichtbaren Bereich anzupassen existieren verschieden M glichkeiten Zun chst kann mit den Zoom Buttons rechts unten die Zoom Stufe bestimmt werden Dabei steht Zoom Sell f r das Zoomen zur aktuellen Auswahl und Zoom All f r das Anzeigen der gesamten Datei Befindet man sich in einer Zoom Stufe in der nicht der gesamte Dateiinhalt sichtbar ist kann mit der Scrollbar unterhalb der Wellenform an die gew nschte Stelle gescrollt werden Die Buttons Zoom und Zoom J erm glichen das Hinein bzw Herauszoomen was alternativ auch mit den Tasten Hl bzw H erreicht werden kann VI Praktischer Teil 83
156. s gen gt es eine Subklasse von com groovemanager sampled fx Effect zu implementieren in den Classpath einzubinden und diese in der Datei META Inf Services com groovemanager sampled fx Effect bekannt zu machen Beim Erstellen des Men s wird nach allen Effekt Implementierungen gesucht und jede wird in das Effect Men als Option mit eingebunden Ein Effekt wird stets auf die aktuelle Auswahl angewandt Ist kein Bereich ausgew hlt wird er auf die gesamte Datei angewandt Beim Aufrufen eines Effekts erscheint zun chst ein Dialog mit allen vom gew hlten Effekt gebotenen Einstellungsm glichkeiten Sind hier die gew nschten Einstellun gen vorgenommen kann der Effekt angewandt werden Auch das Anwenden der Effekte erfolgt nichtdestruktiv Hierf r wird das Ergebnis der Verarbeitung in eine tempor re Datei gespeichert Durch das Hinzuf gen einer neuen Schnittliste wird dann im gew hlten Bereich die urspr ngliche Quelle durch diese Datei ersetzt Effekte k nnen daher ebenso durch Entfernen der letzten VI Praktischer Teil 80 Schnittliste schnell und einfach r ckg ngig gemacht werden Die derzeit implementierten Effekte Normalize Pseudo Echo und Chorus Flanger haben eher experimentellen Charakter Options Das Options Men beinhaltet derzeit lediglich den Eintrag Settings zum Aufrufen einer Konfigura tionsseite Im Settings Dialog siehe Abbildung 20 kann der Wiedergabe und Aufnahmetreiber gew hlt werden Dar ber
157. snnsnnssnnssnnsessnee OD Audio A PIs an Java a essentiell hrs 39 2 Echtzeit und Performance in Java scccccccssssssssccecscscssssscccecscvssensuccevceseessnsuccevsecvcsssesevsesosssrsnsecees 40 2 1 Bytecode Ausf hrung eege nes nenn nis au nennen 42 2 2 Garbage Collection ss At Hase eee i ea hata aha eis 44 22A EE el 82 20 22 rer Reederei 44 2 2 2 Optimierung der Garbage Collecpon ie noecor e E EEEE E ERARA A AE EEE A 45 2 2 3 Beeinflussung der Garbage Collecton a A a E EER 46 Inhaltsverzeichnis 6 2 3 Konzepte zum Berformancegewinn ccc sessecssesecseesscesseecssecetesecaeesecsaeeecsaseeeseeaeceesaesaeeseeners 46 2A Zusammenfassung shi sisi wicks heh ia Rae hoki Hua oes Mohit 49 2 5 Exkurs SWT JFace als Alternative zu AWTfSuwmg nennen 49 3 Das Java Native Interface u en ea a a a ar a aa 50 V Java Sound T E A A E A E E 52 UAA ADAN ROI brun A reg as EAEE E E EE E E 52 Tels Wa sist Jaya e KEE 52 1 2 Zielsetzung und Entwicklung von Java Sound 52 2 K rzbeschteibuns des APl Hs22 32 torrie seen ee 53 2 1 Das Package Iovax sound sample 54 2 2 Das Package jayax sound midi 2 s2 mV reatar a Eea a EE aaar a E E Aa aE TS EEEa 59 2 3 Die Ee ie GE 60 3 Theoretische F higkeiten und Grenzen von Java Sound 61 4 Stand der Entwicklung eege AE Ee EEN Essen 65 4 1 Die Referenzimplementierung von Sun nennen 65 4 2 Java Sound auf dem Macmntoeh nennen 66 4 3 Ke UE 66 5 Bestehende Projekte
158. so da die Verarbeitung somit viel schneller erfolgen kann als wenn die Daten f r jeden Zugriff von der Festplatte gelesen und wieder geschrieben werden m ssten Im Studiobereich wird aber oft mit so gro en Datenmengen hantiert dass der Arbeitsspeicher fr her oder sp ter f r diese Vorgehensweise zu klein w re und teure Seitenfehler oder Out of Memory Fehler die Folge w ren Abbildung 9 zeigt das Ergebnis des Versuchs eine 95 MB gro e WAVE Datei im Windows Soundrecorder auf einem Rechner mit 512 MB Arbeitsspeicher auf halbe Geschwindigkeit zu ver ringern Man denke nur an eine 5 1 Surround Mischung eines Kinofilms Die Datenmenge f r solch ein Projekt kann sehr schnell einige Gigabyte erreichen wof r derzeit kein Hauptspeicher ausgelegt ist 86 Unter Seitenfehlern versteht man die Notwendigkeit zum Nachladen nicht im RAM befindlicher Speicherseiten aus dem virtuellen Speicher 87 Das entspricht ca 9 30 Minuten Audio in CD Qualit t III Audioprogrammierung 37 Datei Bearbeiten Effekte A beac ee j gt e x A Nicht gen gend Arbeitsspeicher um den Befehl auszuf hren Beenden Sie eine oder mehrere Anwendungen und wiederholen Sie den Vorgang E Abbildung 9 Bearbeiten einer 95 MB gro en Datei im Windows Soundrecorder Um mit so gro en Datenmengen umgehen zu k nnen muss die Audiosoftware Streamingmecha nismen unterst tzen um jederzeit nur die aktuell ben tigten Daten im Hauptspeicher
159. soll bereits eine Bewertung von Java und Java Sound im Speziellen als Plattform f r die pro fessionelle Audioprogrammierung vorgenommen werden allerdings nur anhand der bis dahin ge wonnenen theoretischen Erkenntnisse Im praktischen Teil werden die Anwendungen die im Rahmen dieser Diplomarbeit realisiert wur den kurz vorgestellt und Besonderheiten herausgestellt die sich im Bezug auf Java Sound ergeben haben L sungen f r aufgetretene Probleme sollen ebenso aufgezeigt werden wie die teils be triebssystem oder hardwareabh ngigen Ursachen f r diese Probleme Zum Schluss werden die Ergebnisse aus theoretischer und praktischer Betrachtung der Java Sound Technologie zusammengefasst und kritisch auf die Tauglichkeit f r den Studiobereich hin bewertet Schlie lich sollen noch die Zukunftsperspektiven von Java Sound in den Blick genommen werden III Audioprogrammierung 13 lll Audioprogrammierung Zun chst werden einige Grundlagen der Audioprogrammierung aufgezeigt um darauf aufbauend das Konzept sowie die St rken und Schw chen von Java Sound erl utern zu k nnen 1 Von analog zu digital 1 1 Analoge Audiotechnik Was Menschen als Klang empfinden ist nichts anderes als sich ver ndernder Luftdruck Die Mo lek le der in der Luft vorhandenen Gase werden von einer Klangquelle in Bewegung versetzt so dass Wellen von st rkerem und schw cherem Druck entstehen vgl Abbildung 1 Diese Wellen versetzen das Tromm
160. ss Im letzten Moment wurde entschlossen dass Java Sound in den core aufgenommen wird also als ein fester Bestandteil der Java Laufzeitumgebung Leider hat der Internet Boom 1998 2000 dazu gef hrt dass nach und nach alle Java Sound Ent wickler Sun verlie en und es eine L cke von einem Jahr gab in der niemand f r Java Sound ver antwortlich war Ich stie zu Sun einen Monat vor der Deadline f r 1 4 so dass ich nur wenig ausrichten konnte Da man nur in gro en Versionen die API ndern kann ging das dann erstmalig in 1 5 Ich hatte eine Menge vor Als ich zu Sun kam hatte ich eine Liste mit ca 50 API nderungen Umgesetzt wurden davon letztendlich ca 25 f r 1 5 ein kleines Expertengremium aus Sun Internen und externen Anhang A Emailinterview mit Florian B mers A 2 Entwicklern diskutierte im Sommer 2003 die genauen Spezifikationen f r die neuen API Elemente Die Entwicklung wurde durch Matthias Pfisterer unterst tzt der f r 3 Monate als Praktikant bei Sun t tig war Sonst lag die gesamte Entwicklung f r 1 4 bis 1 5 bei mir allein 1 5 ist die erste Ver sion von Java Sound die grunds tzlich alle Features implementiert Nur Profifeatures wie Synchro nisation sind nicht verf gbar MR Wie kamst Du zu dem Job als Chefentwickler von Java Sound bei Sun FB Durch meine Arbeit an Tritonus und mein Engagement in der Java Sound Mailingliste lag es nah dass ich gefragt wurde ob ich die Stelle bernehmen
161. ss zu nehmen z B Wahl der Qualit t Abbruch langer Aktionen etc Entscheidend f r die Performance einer Java Anwendung kann die Art der Bytecode Ausf hrung sein Ebenso spielt die Garbage Collection eine gro e Rolle insbesondere auch f r das Echtzeit verhalten Daher werden im Folgenden zun chst die unterschiedlichen M glichkeiten zur Byteco deausf hrung und anschlie end unterschiedliche Garbage Collection Algorithmen besprochen 2 1 Bytecode Ausf hrung F r die Art des Kompilierens und Ausf hrens von Java Bytecode existieren verschiedene Varian ten die zum Teil erheblichen Einfluss auf die Performance haben Daf r soll noch einmal kurz das Prinzip des Java Bytecodes vor Augen gef hrt werden vgl Abbildung 12 Java Quellcode Java Virtual Machine Bytecode Ausf hrung Java Compiler Betriebssystem Treiber C gt javac MeineKlasse java native Ausf hrung Java Bytecode Hardware MeineKlasse class Umsetzung der Treiber Befehle Plattformunabhangig Plattformabh ngig Abbildung 12 Prinzip von Java Bytecode Beim Erzeugen der class Dateien aus Java Quellcode wird vom javac Compiler ein plattformu nabh ngiger Bytecode erzeugt der von jeder Java Virtual Machine JVM gelesen werden kann Zur Ausf hrung auf dem Zielsystem muss die dortige JVM diesen Bytecode dann so bersetzen dass er auf dem Zielsystem ausgef hrt werden kann F r diese bersetzung existieren die folgenden M g lichkeiten
162. stallation manuell durchzuf hren siehe Anhang C Die auf der CD Rom befindlichen Dateien sind auch online unter http www groovemanager com manudiplom CDRom verf gbar Die Verzeichnisstruktur ist folgenderma en aufgebaut Quellcode Samtliche Quellcodes des praktischen Teils Quellcode Java Java Quellcode aller Packages Quellcode Nativ C Quellcode der JNI Anbindungen Quellcode Nativ jsasio C Quellcode der JNI Anbindung f r den ASIOMixerProvider Quellcode Nativ jsrex C Quellcode der JNI Anbindung f r den REXFileReader Javadoc Javadoc aller Packages PlugIns Kompilierte Versionen der PlugIns PlugIns jsasio Kompilierte Version des ASIOMixerProvider PlugIns jsrex Kompilierte Version des REXFileReader PlugIns floatconverson Kompilierte Version des FloatConversionProvider Sampleeditor Kompilierte Versionen der Sampleeditoren Sampleeditor Grundversion Kompilierte Version der Grundversion des Sample editors Sampleeditor MC 909 Version Kompilierte Version der MC 909 Version des Sam pleeditors Beispielsounds Einige Beispielsamples in unterschiedlichen Formaten Anhang C Installationsanleitung Sampleeditor C 1 Anhang C Installationsanleitung Sampleeditor Auf der beiliegenden CD Rom siehe Anhang B befinden sich im Verzeichnis Sampleeditor Installationsdateien f r Windows und Linux sowie s mtliche f r eine manuelle
163. t Die Klasse Port Info enth lt einige statische Felder wie z B Port Info MICROPHONE um Anschlusstypen zu identifizieren Bis Zeile 5 wird die Port Instanz ermittelt die zum Mikrophonanschluss geh rt und in Zeile 8 wird dieser Anschluss ge ffnet 1 Mixer instanziieren 2 Mixer mixer 3 if mixer isLineSupported Port Info MICROPHONE 4 Port Instanz vom Mixer holen 5 Port mic Port mixer getLine Port Info MICROPHONE 6 try 7 Anschluss ffnen 8 mic open 9 catch LineUnavailableException e 10 Fehlermeldung 11 12 else 13 Fehlermeldung 14 Codebeispiel 2 Offnen des Mikrophonanschlusses einer Soundkarte Allerdings k nnen Port Instanzen nicht verwendet werden um Daten ber diese Anschl sse zu senden oder aufzunehmen Vielmehr tauschen Mixer und Anwendung ber DataLine Instanzen Audiodaten aus der Mixer stellt dann die Verbindung zur Hardware bzw zum Treiber her Um Mixer Instanzen zu bekommen bietet die Klasse AudioSystem die statischen Methoden getMixerInfo zur Auflistung aller installierten Mixer sowie getMixer Mixer Info an Aufnehmen bzw Abspielen von Audiodaten ist also lediglich ber Subinterfaces von DataLine m glich Das Aufnehmen erfolgt mit TargetDataLine Instanzen das Abspielen kann ber SourceDataLine oder Clip Instanzen geschehen Der Unterschied von SourceDataLine zu Clip besteht darin dass ein Clip die abzuspielenden Daten
164. t muss sich Java Sound diese Punkte noch als Kritik gefallen lassen Allerdings zeigt die Liste der Verbesserungen in 1 5 0 auch dass im Bereich Java Sound viel getan wurde und die verf gbare Beta Version zeigt auch dass sich diese M he gelohnt hat Zwar l sst sich schwer einsch tzen wie gut die Implementierung derzeit ist da die Beta Version von J2SE 1 5 0 erst seit kurzem verf gbar ist In der Java Sound Mailingliste JS INTEREST und auch bei den Erfahrungen die im Rahmen des praktischen Teils dieser Arbeit mit der neuen Versi on gesammelt wurden entsteht jedoch der Eindruck dass Java Sound durch diesen Versionssprung gerade erwachsen geworden ist Die Implementierung von Sun funktioniert jetzt weitestgehend so wie vom API vorgesehen und es wird versucht die im System vorhandene Hardware bestm g lich zu unterst tzen Jedoch gibt es auch in Version 1 5 0beta noch einige Punkte die nicht implementiert sind So un terst tzt Java Sound nach wie vor standardm ig nur Audioformate bis 16 Bit Samplegr e 2 Ka n le und Ganzzahlkodierung Da in professionellen Umgebungen oft mit 24 oder 32 Bit Mehrka nal und oder Flie zahlkodierung gearbeitet wird ist das nicht ganz nachvollziehbar Allerdings lassen sich diese Funktionen relativ einfach per Service Provider Interface nachr sten Ein wichtiges Kriterium das auch noch nicht den Weg in Version 1 5 0 gefunden hat ist die Im plementierung der Methode Mixer sync
165. t input and output channels Es gelang Steinberg mit ASIO einen Quasi Standard zu etablieren der sich schnell durchsetzte Hersteller professioneller Mehrkanalsoundkarten boten ASIO Treiber an und f r die g ngigen Applikationen wurde ASIO Unterst tzung implementiert ASIO unterst tzt sowohl Windows als auch Mac Betriebssysteme ASIO hat allerdings auch den Nachteil dass zu jeder Zeit nur ein ASIO Treiber aktiv sein kann und dabei nur von einem Programm genutzt werden darf An dieser Stelle sollte das Projekt ASIO4A1 Erw hnung finden ASIO4All ist ein ASIO Treiber der mit s mtlichen Consumer Soundkarten funktioniert deren Treiber WDM 5 unterst tzen Die Hersteller dieser Soundkarten bieten blicherweise keine ASIO Treiber an Der kleine Treiber der sich zwischen WDM Treiber und Softwareanwendung schiebt kann nat rlich aus einer Stereokarte keine Mehrkanalkarte machen funktioniert aber sonst erstaunlich gut und erm glicht niedrige La tenzen auch mit einfachen Onboard Soundkarten EASI Steinbergs gr ter Konkurrent die Firma Emagic ver ffentlichte 1999 einen hnlichen Treiber Standard namens EAST der einfacher aufgebaut und leistungsf higer als ASIO sein sollte und zudem im Gegensatz zu ASIO ohne Lizenzierung offen f r alle Entwickler und gut dokumen tiert EASI konnte sich aber nicht entscheidend gegen ber ASIO durchsetzen Sp testens seit Ema 6 Allgemein bezeichnet der Begriff Latenz in
166. t werden soll Darunter stehen die drei folgenden Optionen zur Auswahl e Export single slices until end of file Diese Option gibt an dass jedes Einzelsample bis zum Dateiende gehen soll Ist sie nicht selektiert endet das Sample dort wo das nachste Sample anfanet e Create sequence as Standard MIDI File Mit dieser Option kann die MIDI Sequenz die sich aus der Abfolge der Einzelsamples er gibt in einer MIDI Datei gespeichert und auf die MC 909 bertragen werden Diese kann dann sp ter am Ger t in ein Pattern importiert werden e Play sequence for Realtime Rec Wird diese Option ausgew hlt so wird die MIDI Sequenz der Einzelsamples ber den MIDI Anschluss an die MC 909 bertragen Erst wenn eine USB Verbindung hergestellt und der richtige Pfad unter MC 909 Location angegeben wurde kann zum n chsten Schritt gesprungen werden Schritt 2 Verlassen des USB Modus Nun werden alle Einzelsamples an die MC 909 exportiert Wurde ein bertragen der MIDI Sequenz als Datei eingestellt so wird diese Datei auch exportiert und der Speicherort wird ausgege VI Praktischer Teil 88 ben Der Benutzer wird dann aufgefordert den USB Modus auf der MC 909 zu beenden Au er dem muss eine MIDI Verbindung mit der MC 909 hergestellt werden damit das Rhythm Set er zeugt werden kann Schritt 3 bertragen der Sequenz Der Benutzer wird nun aufgefordert das erzeugte Rhythm Set zu speichern und die exportierten Samples in den RAM zu
167. tionieren Diese Funktionalit t k nnte Java3D f r Surround oder Mastering Anwendungen interessant machen allerdings erscheint allein dieser beiden Punkt als etwas mageres Argument f r die Verwendung von Java3D zur Pro grammierung professioneller Audioanwendungen zumal eine Surround Unterst tzung f r Spiele ganz anders ausschen kann als beispielsweise f r die Vertonung eines Kinofilms Java Media Framework Das Java Media Framework J MF ist ein von Sun als Zusatzmodul zum JDK angebotene Multi mediaframework das einen plattformunabh ngigen und stark abstrahierten Zugriff auf Medienin halte erm glichen soll Es unterst tzt das Abspielen Aufnehmen Verarbeiten Streamen und Spei chern zeitabh ngiger Daten wie Audio und Videostr me Das JMF liegt sowohl in einer reinen Java Version vor die auf allen Plattformen eingesetzt werden kann als auch als optimierte Imple mentierung f r unterschiedliche Plattformen darunter Windows Linux und Max OS X 39 http java sun com products java media speech Wi http java sun com products java media 3D TI hnliche Ans tze werden vom OpenGL Pendant OpenAL http www openal org bzw dem dazugeh rigen Java Binding JOAL https joal dev java net verfolgt 3D Klangeffekte werden auch beim Stereo Mastering eingesetzt um den Klangeindruck zu verbessern 93 http java sun com products java media J MF 92 IV Audioverarbeitung in Java 40 Als kostenloses plattfor
168. tr men F r diese OutputStreams wurde eben falls eine abstrakte Basisklasse AudioFileOutputStream geschaffen die wiederum von OutputStream erbt Die Zentrale f r die Verwaltung der PlugIns stellt parallel zu Audiosystem in Java Sound die Klasse AudioManager dar Im Gegensatz zu AudioSystem sind die meisten Methoden jedoch nicht statisch so dass mehrere AudioManager Instanzen f r unterschiedliche Einsatzwecke parallel ge nutzt werden k nnen VI Praktischer Teil 76 Java Sound register unregister register unregister Abbildung 17 Vergleich der PlugIn Schnittstellen Instanzen vorhandener PlugIns k nnen bei einer AudioManager Instanz ber die register Provider bzw unregister Provider Methoden an bzw abgemeldet wer den Somit kann kontrolliert werden welche PlugIns von welcher AudioManager Instanz verwen det werden Um die unterschiedlichen PlugIns qualitativ unterscheiden zu k nnen existieren die Methoden getSupportedTypes zur Bestimmung der les bzw schreibbaren Audiodateitypen getSupportedFormats zum Ermitteln der unterst tzten Formate sowie getSupportedProperties um zu erfragen welche property keys f r AudioFileFormat getProperty String key dem jeweiligen Provider bekannt sind Letzteres wird insbesondere dann entscheidend wenn mehrere PlugIns f r den gew nschten Datei und oder Formattyp verf gbar sind aber besondere Eigenschaften des Dateiformats genutzt wer
169. u Performanceeinbu en f hren wenn sie ineffizient eingesetzt werden Java bietet die M glichkeit Objektzugriffe von mehreren Threads ber das Schl sselwort synchronized zu synchronisieren Dies ist auch ein sinnvoller Mechanismus da beim unsynchro nisierten Arbeiten mit mehreren Threads fast zwangsl ufig Inkonsistenzprobleme entstehen Aller dings verleitet die einfache Verwendung dazu im Zweifel alles zu synchronisieren um kein Risiko einzugehen Die Ausf hrung von synchronized Bl cken kostet aber Performance weil bestimmte Optimierungen durch den Compiler darin nicht m glich sind Zu viel Synchronisation kann also leicht zu Performanceproblemen f hren Um das zu vermeiden sollten nur die Programmabschnitte in einen synchronized Block gestellt werden die tats chlich Synchronisation erfordern Meist sind das nicht ganze Methoden obwohl es f r den Programmierer nat rlich einfacher ist einer Methodendcklaration ein synchronized hin zuzuf gen als bestimmte Teile in einen synchronized myObject Block zu stellen Ebenso kann es in vielen F llen sinnvoll sein die Synchronisation dem Aufrufer zu berlassen Das ist auch der Grund warum alle Standard Implementierungen des Collection Interfaces im Ge gensatz zur fr her verwendeten Vector Klasse ohne Synchronisation geschrieben sind und diese dem Programmierer berlassen Ein anderer Aspekt der im Zusammenhang mit Threads Beachtung finden sollte ist dass die Th
170. uf der Welt verwendet wird um Musikkompositionen niederzuschreiben 1983 wurde von einem Zusammenschluss verschiedener f hrender Keyboardhersteller der MIDI Standard ins Leben gerufen urspr nglich mit dem Ziel von einem sog Masterkeyboard aus andere Keyboards fernsteuern zu k nnen Hierf r wurde vereinfacht ausgedr ckt die Notenschrift in eine digitale Form gebracht und um einige Elemente erweitert Der MIDI Standard definiert folgende Elemente e Ein Nachrichtenformat zur Kommunikation zwischen elektronischen Musikinstrumenten e Ein Dateiformat zum Abspeichern von Sequenzen dieser Nachrichten e Kabel Stecker und eine digitale Form der Kodierung f r die physikalische bertragung dieser Nachrichten 9 Vel MUSICLINE 20 Mehr Informationen zum MIDI Standard unter MIDI III Audioprogrammierung 18 Dieser Standard verschaffte dann auch sehr schnell den ersten Musikcomputern Einzug in die Stu dios denn die M glichkeit den Ger tepark ber Sequenzer und Editorsoftware fernsteuern zu k nnen er ffnete bis dahin undenkbare Anwendungsszenarien Au erdem konnten die relativ schlanken MIDI Daten im Gegensatz zu samplingbasierten Daten auch von damaligen Prozessoren in Echtzeit verarbeitet und von damaligen Speichermedien gehalten werden Die Computer der Atari ST Serie wurden beispielsweise serienm ig mit MIDI Schnittstelle ausgeliefert was ihnen lange Zeit eine besondere Stellung auf dem noch jungen Musik
171. umer Soundkarten auch den vollen Zugriff auf die Besonderheiten professioneller Audiokarten Ziel von ALSA ist au erdem eine Minimierung der Latenz Seit der Kernel Version 2 6 ist ALSA die Standard Schnittstelle f r Sound auf Linux Systemen Im Gegensatz zu den propiet ren Treiberschnittstellen auf anderen Systemen profitiert ALSA von der hohen Aktivit t der Open Source Gemeinde und es ist st ndig mit neuen Versionen und Verbes serungen zu rechnen 77 Giga Sampler Interface 78 Bis Mac OS 9 gab es mit SoundManager bereits eine ordentliche Treiberschnittstelle die aber noch einige W nsche offen lies 79 Aus COREAUDIO HI http www alsa project org 81 http www opensound com OSS existiert als free sowie als commercial Version Letztere bietet mehr Profifeatures kann aber nicht mit ALSA mithalten 2 Zum Vergleich ASIO 2 0 wurde seit 1999 nicht mehr weiterentwickelt III Audioprogrammierung 34 Zusammenfassung Momentan ergibt sich eine Situation in der Linux und Mac Entwickler mit ALSA bzw CoreAudio auf Treiberarchitekturen zur ckgreifen k nnen die auf die Anforderungen aus dem Studiobereich reagieren und die von Soft und Hardwareherstellern gro e Unterst tzung erfahren Auf Windows ist nach wie vor ASIO vorherrschend auch wenn ASIO Treiber meist nur f r pro fessionelle Soundkarten angeboten werden ASIO4AN bietet hier eine M glichkeit um auch das Potential weniger professioneller Karten f r Profi
172. unbekannt oder variabel ist Ein weiterer Unterschied zu herk mmlichen InputStreams ist dass das Lesen nur in Bl cken von ganzen Frames m glich ist Hierdurch wird sichergestellt ist dass der Beginn eines gelesenen Blocks immer mit dem Beginn eines Sample Frames zusammenf llt Zum Erzeugen eines AudioInputStreams existieren zahlreiche M glichkeiten entweder ber einen der beiden Kon 141 Unter Endianess big endian oder little endian versteht man die Reihenfolge der Bytes innerhalb eines Samples Bei big endian wird das Most Significant Byte MSB an erster Stelle gespeichert bei little endian dagegen das Least Signifi cant Byte LSB vgl SRESOURCES V Java Sound 59 struktoren oder durch Aufruf einer der von AudioSystem zur Verf gung gestellten statischen Me thoden Eine Parallele f r das Schreiben von Audiodaten man w rde einen AudioOutputStream erwat ten existiert nicht Das Schreiben von Audiodateien kann zwar der Methode AudioSystem write berlassen werden diese gen gt jedoch bei weitem nicht f r alle denkba ren Anwendungsf lle da sie nur einen Pull Ansatz erm glicht Oft wird aber ein Push Ansatz ge w nscht um detaillierter auf den Schreibprozess einwirken zu k nnen Das Open Source Projekt Tritonus bietet hierf r mit der AudioOutput St ream Architektur eine Alternative an Auch im prak tischen Teil dieser Arbeit wurde ein hnlicher Ansatz gew hlt siehe VI 1 1 4 2 2 Das Package
173. und Interfaces innere In o Klassen die zus tzliche Informationen ber einzelne Objekte geben Diese sind dann hilfreich wenn dem Benutzer eine Liste von verf gbaren Objekten eines bestimmten Typs zur Auswahl angeboten werden soll Auch k nnen Format und Puffergr e f r Aufnahme und Wiedergabe im Rahmen der von Hardware und Treiber unter st tzten Werte bestimmt werden Allerdings offenbart das Java Sound API in punkto Konfigurierbarkeit auch einige Schw chen So ist beispielsweise f r Mixer Objekte keine Unterscheidung nach deren Typ vorgesehen F r profes sionelle Anwendungen ist es jedoch sehr wichtig unterschiedliche Treiber nach den von ihnen verwendeten Treibermodellen unterscheiden zu k nnen Eine Mixer Type Klasse k nnte sich hier in das Java Sound API gut einf gen Bisher steht dagegen nur die Mixer Info Klasse zur Verf gung die au er Name Hersteller Version und Beschreibung keine weiteren Informationen ber ein Mixer Objekt enth lt Ansonsten k nnen lediglich aus den vom Mixer angebotenen Lines R ckschl sse auf den Typ des Mixers gewonnen werden eine unzureichende Entscheidungshilfe Viele Audiotreiber bieten au erdem einen eigenen Konfigurationsdialog an der wichtige Einstel lungen enthalten kann Es w re durchaus denkbar Methoden wie Mixer hasControlPanel und Mixer showControlPanel in das Java Sound API mit aufzunehmen um Anwendungsentwick lern Zugriff auf diese Dialoge zu gew hre
174. ungstyp in Java Sound eingef hrt werden Der Name PCM_FLOAT soll dem Umstand Rechnung tragen dass die Kodierung nach wie vor in PCM Form stattfindet jedoch die Haltung der kodierten Daten im Float Format geschieht 155 http www steinberg de Steinberg Developers asp Langue_ID 4 VI Praktischer Teil 72 Weiterhin wurde eine Subklasse von InputStream implementiert die die eigentliche Konvertie rung bernimmt Abbildung 15 zeigt am Beispiel der Konvertierung von 16 Bit Integer little endian zu 32 Bit Float big endian wie die Konvertierung gel st wurde unkonvertierter AudioInputStream 4 Integer Samples a a a m Float Samples Abbildung 15 Ablauf der Konvertierung von 16 Bit Integer little endian zu 32 Bit Float big endian Zun chst wird die ben tigte Datenmenge vom unkonvertierten AudioInputStream gelesen 1 Anschlie end werden die Bytes innerhalb jedes Samples umgekehrt gereiht um von little endian zu big endian zu konvertieren 2 Im n chsten Schritt werden 0 Bytes eingef gt um auf die Sample gr e von 32 Bit zu kommen 3 wonach im letzten Schritt die Konvertierung jedes Samples von Integer in Float erfolgt 4 Abschlie end wurde noch das eigentliche PlugIn eine Subklasse des SPI FormatConversionProvider implementiert die es erm glicht ber die definierten API Schnittstellen von Java Sound den Service der Konvertierung in Anspruch zu nehmen Ergebnis Der FloatConversionProvider
175. usgereift ist wohl das Open Source Projekt PortMusic PORTMUSIC ein Lowlevel Framework f r Audioverarbeitung in C Es be steht aus den Unterprojekten PortAudio Sampling PortMidi MIDI sowie PortSoundFile Zugriff auf Audiodateien derzeit noch in der Planungsphase PortMusic is open source and runs on Windows Mac intosh and Linux Damit hnelt es in seinem Ansatz und Umfang dem Java Sound API Laut PORTMUSIC wird PortMusic schon von einigen bemerkenswerten Projekten eingesetzt interessanterweise auch von Java basierten In punkto Zuverl ssigkeit und Ausgereiftheit der Imp lementierung war PortMusic abgesehen von PortSoundFile Java Sound offensichtlich bis zu letzt berlegen Mit Version 1 5 hat Java Sound allerdings einiges an Boden gut gemacht 150 Eine stets aktuelle und umfangreiche Linksammlung von Java Sound Projekten findet sich auf SRESOURCES 151 http www jsynthlib org 152 Aus PORTMUSIC VI Praktischer Teil 68 VI Praktischer Teil Ziel des praktischen Teils dieser Arbeit war es eine Anwendung zu entwickeln mit der die Studio tauglichkeit von Java Sound in einigen Bereichen berpr ft werden kann Entstanden sind zwei Versionen eines Sampleeditors sowie einige Java Sound PlugIns Dort wo Java Sound Schw chen offenbarte wurde versucht Alternativl sungen aufzuzeigen Ein Gro teil der praktischen Arbeit wurde in Form von wiederverwendbaren Paketen realisiert die unabh ngig vo
176. utlich Sun hat kaum Einfluss auf die Qualit t der Java Sound Implementierung f r diese Plattform Zwar kann davon ausgegangen werden dass Apple den von Sun vorgelegten plattformunabh ngigen Code bernehmen wird aber der platt formspezifische Teil muss von Apple implementiert werden Der Vorteil der Plattformunabh ngig keit droht dadurch verloren zu gehen dass Java Sound auf unterschiedlichen Plattformen unter schiedlich gut implementiert wird Das derzeit geringe Interesse von Apple an einer sinnvollen Unterst tzung von Java Sound zeigt sich auch daran dass f r das CoreAudio Framework auf Mac OSX zwar eine Java Schnittstelle bereitgestellt wird diese aber mit Java Sound nichts zu tun hat Allerdings er ffnet diese Java Anbindung in Kombination mit dem SPI Konzept von Java Sound Drittanbietern die M glichkeit eine Anpassung von CoreAudio f r Java Sound zu schreiben Mit solch einer Anpassung k nnte Java Sound auch auf dem Mac voll ausgereizt werden Das Plumstone Projekt hat genau diesen Weg eingeschlagen und eine SPI Implementierung f r eine Anbindung an das CoreAudio MIDI System entwickelt W rde eine solche Anbindung auch f r den Sampling Bereich von CoreAudio realisiert s he die Situation f r Java Sound auf dem Mac bedeutend besser aus 4 3 Tritonus Neben der Implementierung von Sun existiert f r die Linux Plattform noch eine Java Sound Imp lementierung des Tritonus Projekts Vor JDK 1 5 0 bot sie eine echte Alte
177. ver bzw Transmitter nicht mehr ben tigt muss er explizit mit close freigegeben werden damit er wieder anderen Interessenten zur Verf gung steht V Java Sound 61 2 3 Die SPI Schnittstellen Um Java Sound erweiterbar zu machen was gerade in der sich schnell ndernden Audiowelt eine unverzichtbare Eigenschaft ist wurden acht abstrakte Klassen in den Packages javax sound sampled spi und javax sound midi spi integriert Diese k nnen von Drittan bietern implementiert werden um im Rahmen von Java Sound Zugriff auf bestimmte Ger te oder Formate zu erm glichen die standardm ig von der gew hlten Implementierung nicht unterst tzt werden Folgende Services k nnen als SPI von Drittanbietern zu Java Sound Implementierungen hinzuge f gt werden e Lesen von Dateien AudioFileReader MidiFileReader SoundbankReader e Schreiben von Dateien AudioFileWriter MidiFileWriter e Zur Verf gung Stellen von Soft oder Hardwareger ten MixerProvider MidiDeviceP rovider e Formatkonvertierungen FormatConve rsionProvide r Um solche implementierten Services f r andere Benutzer von Java Sound verf gbar zu machen m ssen diese zun chst in eine jar Datei gepackt werden Innerhalb dieser Datei werden im Ver zeichnis META INF Services die implementierten Services angegeben F r jede abstrakte Klasse aus den beiden spi Packages f r die eine oder mehrere Implementierungen erstellt wurden muss eine Datei mit dem vollqua
178. was wir hoffentlich nie von Java Sound h ren werden ist Stille 173 Aus INTERVIEW 174 Aus INTERVIEW Literaturverzeichnis 95 Literaturverzeichnis Buchquellen BORN Born G 2001 Dateiformate Die Referenz Galileo Press Bonn BRUNS Bruns K amp Neidhold B 2003 Audio Video und Grafikprogrammie rung Fachbuchverlag Leipzig BR SE Br se C 1999 Audio im Computer Wizoo Verlag K ln DAUM Daum B 2003 Java Entwicklung mit Eclipse 2 dpunkt verlag Heidel berg EIDENBERGER Eidenberger H M amp Divotkey R 2003 Medienverarbeitung in Java dpunkt verlag Heidelberg HAIN Hain R 2001 Der Musiker PC Voggenreiter Verlag Bonn HORSTMANN Horstmann C S amp Cornell G 2000 Core Java Band 2 Expertenwis sen Markt Technik Verlag M nchen LINDLEY Lindley C A 1999 Digital Audio with Java Prentice Hall New Jersey SCHREIBER Schreiber H 2002 Performant Java programmieren Addison Wesley M nchen SHIRAZI Shirazi J 2000 Java Performance Tuning O Reilly Sebastopol WATKINSON Watkinson J 2001 The Art of Digital Audio Third Edition Focal Press Oxford Zeitschriften STEWART Stewart I 2003 Ein Viertehahrhundert Mathematik Spektrum der Wis senschaft Mai 2003 S 24 29 Internetquellen BURK Burk P Polansky L Repetto D Roberts M Rockore D Music and Computers http music dartmouth edu book index html
179. will als meine Vorg ngerin Sun verlie Nachdem ich San Francisco und Umgebung und Sun s Athmosph re auf der JavaOne Konferenz 2000 kennenlernte fiel mir die Entscheidung leicht Es dauerte dann noch genau ein Jahr bis ich den Job im Juni 2001 tats chlich begann vor allem durch den Visumsantrag verz gert MR Wie oftenbarte sich die Situation rund um Java Sound als Du den Job antratst FB Im Gro en und Ganzen wusste ich nat rlich genau was auf mich zukam ber 200 offene Bugs eine Implementierung die seit 1 Jahr nicht mehr gepflegt wurde keine weiteren Entwickler die mir helfen k nnen und jede Menge offener W nsche von mir und der Community Ich wusste mehr als ein Dutzend Wege Java ber Java Sound abst rzen zu lassen Auch war die Portierung von Java Sound auf Linux sehr schlampig gemacht MR Welche Bedeutung Priorit t hat und hatte die Weiterentwicklung von Java Sound bei Sun im Vergleich zu anderen Medientechnologien JMF MMAPI und im Vergleich zu komplett anderen Java Technologien FB Aus offensichtlichen Gr nden bleibe ich hier ein wenig vage Grunds tzlich hatte Java Sound auf 3 Ebenen zu leiden e Die urspr nglichen Entwickler verlie en Sun nach Fertigstellung der ersten ffentlichen Version von Java Sound in JDK 1 3 e Da Java Sound in 1 3 f r viele Bereiche nicht einsetzbar war gab es wenige zahlende Java Sound Lizenznehmer die f r Sun die Priorit t erh ht h tten e Sinkende Re
180. zeigt wie in Java Sound eine Audiodatei als Stream abgespielt wird Zun chst wird ein AudioInputStream Objekt s u ben tigt Zeilen 5 6 Im n chsten Schritt muss ein DataLine Info Objekt erzeugt werden das die gew nschte DataLine identifiziert In diesem Fall soll es sich um eine DataLine zum gestreamten Abspielen SourceDataLine class handeln die das Format der Audiodatei stream getFormat unterst tzt Zeilen 8 9 Dieses Objekt wird nun in Zeile 10 dem Mixer bergeben um von ihm eine passende SourceDataLine Instanz zum Abspielen zu erhalten Beim ffnen der SourceDataLine Zeile 11 kann das gew nschte Format sowie die Puffergr e angegeben werden In den Zeilen 15 19 werden nun in einer Schleife Audio daten aus der Datei in einen tempor ren Puffer und von dort auf die SourceDataLine geschrieben und damit abgespielt und zwar so lange bis das Dateiende erreicht ist und die read Methode 1 zur ckgibt Das starten der SourceDataLine in Zeile 18 wird nur beim ersten Schleifendurchlauf ben tigt Es empfiehlt sich aber die SourceDataLine erst zu starten nachdem sich schon Daten in deren Puffer befinden um einen buffer underrun zu Beginn des Abspielvorgangs zu verhindern Nach dem Erreichen des Dateiendes wird die Methode drain aufgerufen Zeile 21 die erst zur ckkehrt wenn s mtliche im Puffer der SourceDataLine befindlichen Daten tats chlich abge spielt wurden In Abbildung 14 wird die Bedeutung der gerade vorgestel
181. zeit noch an der mangelnden Unterst tzung der Hard und Softwarehersteller Seine Bedeutung f r Audiosoftware sollte aber gerade mit Blick in die Zukunft nicht untersch tzt werden Das Projekt Agnula ist bei spielsweise eine Linux Distribution speziell f r Multimedia Systeme BeOS spielt zwar derzeit keine Rolle auf dem Audiosoftwaremarkt es ist jedoch nicht auszuschlie Ben dass es in Zukunft doch noch den Durchbruch schafft 2 3 Audiotreibermodelle F r Audiohardware gibt es zahlreiche Treibermodelle mit verschiedenen Ausrichtungen und f r verschiedene Betriebssystemplattformen Im Folgenden soll eine Auswahl der f r professionelle Audiosoftware bedeutendsten Modelle vorgestellt werden Direct Sound Direct Sound ist Teil der DirectX Programmierbibliothek von Microsoft f r die Windows Betriebssysteme ab Windows 95 die sich dort zum Standard f r die Programmierung von Multi mediaanwendungen und Spielen entwickelt hat Wie das gesamte DirectX Framework bietet auch Direct Sound bestimmte Funktionen unabh ngig davon an ob sie von der darunterliegenden Hard ware unterst tzt werden Insbesondere sind das Funktionen die gerade f r Spiele brauchbar sind wie z B 3D Sound eine Optimierung f r Studiotauglichkeit wird hingegen nicht angestrebt 66 Im Gegensatz zu Microsoft plant Apple eigenen Angaben zufolge in Zukunft verst rkt f r den Audioproduktions markt Damit wurde auch der Kauf des wichtigen Audiosoftwarcherst
182. zu verwenden Man muss dabei allerdings bedenken dass der in der Exception enthaltene Stack Trace dann seine G ltigkeit verliert Eine weitere Ma nahme zur Vermeidung unn tiger Neuerzeugungen von Exceptions ist der Einsatz einer sinnvollen Vererbungshierarchie f r die Implementierung eigener Exception Klassen So empfiehlt es sich wo immer es angebracht erscheint von den im JDK enthaltenen Exception Klassen zu erben Dieses Vorgehen verhindert in vielen F l len dass Exceptions abgefangen werden m ssen nur um eine neue Exception cines an deren Typs zu werfen Threads bewusst einsetzen Auf der einen Seite kann der Einsatz von Threads dazu f hren die Performance einer Applikation insbesondere die empfundene Performance zu erh hen da sie die quasi parallele auf Mehrpro zessormaschinen sogar tats chlich parallele Ausf hrung von Programmteilen erm glichen Die gut realisierte Thread Unterst tzung ist daher auch eine der St rken von Java Durch die h here Kom 121 Vor der Implementierung eigener Except ion Klassen sollte zun chst gepr ft werden ob nicht bereits im JDK enthaltene Exception Klassen verwendet werden k nnen Ist dies m glich sollten diese selbstimplementierten Klassen vorgezogen werden 122 Vel SCHREIBER S 141ff IV Audioverarbeitung in Java 48 plexit t und die in vielen F llen erforderliche Synchronisation zwischen Threads k nnen sie auf der anderen Seite aber auch z
Download Pdf Manuals
Related Search
Related Contents
HTC S310 User's Manual Lightning User Manual Engine Models - Canaline Engines Modelo de Gestão da Afectação de Recursos Humanos a Projectos サーボモータ仕様 Tecumseh AEA5470EXA Drawing Data FLENDER gear units - Service, Support STL87-RT A Brief User's Guide to Hspice Copyright © All rights reserved.
Failed to retrieve file