
Java Sound: Studiotaugliche Audio-Apps
Dokumentinformationen
Autor | Manuel René Robledo Esparza |
instructor | Prof. Dr. Fridtjof Toenniessen |
Schule | Fachhochschule Stuttgart – Hochschule der Medien |
Fachrichtung | Informatik/Medieninformatik (vermutlich) |
Dokumenttyp | Diplomarbeit |
Ort | Stuttgart |
Sprache | German |
Format | |
Größe | 5.74 MB |
Zusammenfassung
I.Eignung von Java Sound für professionelle Audioanwendungen
Diese Arbeit bewertet die Java Sound API als Entwicklungsplattform für professionelle Studio-Audioanwendungen. Die Studie untersucht die theoretische und praktische Eignung von Java Sound für die Bearbeitung von Sampling- und MIDI-Daten. Es werden Anforderungen an professionelle Audiosoftware abgeleitet und die Fähigkeiten von Java Sound, diese zu erfüllen, analysiert. Der praktische Teil beinhaltet die Entwicklung von Sample-Editoren und Plug-ins. Die Ergebnisse zeigen Stärken und Schwächen der Java Sound API und ihrer Implementierungen auf verschiedenen Plattformen, insbesondere bezüglich Echtzeitfähigkeit und Performance. Schlüsselthemen sind die Handhabung großer Datenmengen (Skalierbarkeit), der Umgang mit unterschiedlichen Audiodatenformaten, und die Integration von ASIO-Funktionalitäten, welches als konkurrierende Technologie diskutiert wird. Die Studie schließt mit einer Gesamtbewertung der Studiotauglichkeit und einem Ausblick auf zukünftige Entwicklungen.
1. Anforderungen an professionelle Audio Software
Dieser Abschnitt definiert die Anforderungen an professionelle Audio-Software im Studio-Umfeld. Ausgehend von den Grundlagen der Audioprogrammierung, insbesondere Sampling und MIDI-Datenverarbeitung, werden spezifische Bedürfnisse abgeleitet. Dazu gehören die Unterstützung einer Vielzahl von Audio-Formaten und Standards, sowohl für Import als auch Export, sowie die Fähigkeit, mit großen Datenmengen effizient umzugehen (Skalierbarkeit). Die Software muss verschiedene Qualitätsparameter wie Sampling-Frequenz und Samplegröße flexibel handhaben und idealerweise auch mit zukünftigen Formaten kompatibel sein (Erweiterbarkeit). Ein wichtiger Aspekt ist die Echtzeitfähigkeit, sowohl für weiche als auch harte Echtzeitanforderungen. Die Verarbeitung von Datenchunks, die von vielen einfacheren Anwendungen ignoriert werden, und die Unterstützung für verschiedene Treibermodelle werden als wesentliche Kriterien für professionelle Anwendungen hervorgehoben. Die Konfigurierbarkeit der Mixer-Objekte wird als Schwachstelle der Java Sound API identifiziert, da eine Unterscheidung nach Treibertypen fehlt.
2. Theoretische Überprüfung der Java Sound API
Dieser Teil untersucht theoretisch, inwieweit die Java Sound API und ihre Implementierungen die zuvor definierten Anforderungen erfüllen. Die Analyse umfasst die Eignung von Java selbst im Hinblick auf Performance und Echtzeitfähigkeit. Dabei werden die Auswirkungen von Garbage Collection, Multithreading und der Wahl der JVM (z.B. HotSpot) auf die Performance beleuchtet. Die Verwendung von JIT-Compilern und die Möglichkeiten zur Optimierung durch effiziente Programmierung und die Anpassung von JVM-Parametern werden diskutiert. Der Einsatz von JNI (Java Native Interface) zur Verbesserung der Interaktion mit nativer Hardware und die Möglichkeiten der Performance-Steigerung werden ebenfalls betrachtet. Die Studie vergleicht die Performance von Java mit nativer Programmierung (C/C++) und betont, dass die wahrgenommene Performance für den Anwender entscheidend ist. Schwächen der Java Sound API in Bezug auf Konfigurierbarkeit und die unterschiedliche Implementierungsqualität auf verschiedenen Plattformen (insbesondere Mac OS X) werden kritisch beleuchtet. Als Alternative zu AWT/Swing wird SWT/JFace als performantere GUI-Lösung vorgeschlagen.
3. Praktische Evaluierung mit Sample Editoren und Plugins
Im praktischen Teil wurden zwei Sample-Editoren und verschiedene Plugins entwickelt, um die Java Sound API in der Praxis zu testen und weitere Ergebnisse zu erhalten. Die entwickelten Anwendungen dienen der experimentellen Überprüfung der theoretischen Analyse. Die Implementierung eines REX-File-Readers wird als Beispiel für die Erweiterung der Java Sound Umgebung detailliert beschrieben. Herausforderungen bei der Implementierung, z.B. die Einschränkung auf File-Objekte und die Begrenzung der maximalen Dateigröße aufgrund von Speicherverbrauch, werden diskutiert. Die Entwicklung weiterer Plugins (z.B. FloatConversionProvider) zur Verbesserung der Funktionalität und zur Verarbeitung von 32-Bit Fließkommazahlen wird erwähnt. Die Implementierung grundlegender Edit-Funktionen (Copy, Cut, Paste) im Sample-Editor und die Gestaltung eines Options-Menüs mit Einstellungen für Treiber, Puffergrößen und Thread-Prioritäten werden beschrieben. Die Entwicklung von Audioeffekten (Normalize, Pseudo Echo, Chorus/Flanger) wird als experimenteller Ansatz kennzeichnet. Es werden auch die Möglichkeiten zur Echtzeit-Vorhörung von Samples und die Integration von MIDI-Eingaben in den Sample-Editor untersucht.
4. Gesamtbewertung und Ausblick
Dieser Abschnitt fasst die Ergebnisse der theoretischen und praktischen Untersuchung zusammen und bewertet die Eignung von Java Sound für professionelle Studioanwendungen. Die Echtzeitfähigkeit von Java wird als nicht uneingeschränkt gegeben beschrieben, wobei weiche Echtzeitanforderungen eher erfüllt werden können als harte Echtzeitanforderungen. Die Unterstützung der gängigen Audioformate und Standards durch Java Sound wird als ausreichend, aber nicht umfassend bewertet. Das Potenzial durch Plugins wird hervorgehoben, jedoch auch die Schwächen der AudioFileReader/Writer-Schnittstellen. Die späte Reifung der Java Sound API wird als Nachteil genannt, ebenso die Situation auf dem Mac, wo Apple für die Implementierung verantwortlich ist, diese aber als weniger ausgereift eingeschätzt wird. Die Low-Level-Orientierung von Java Sound wird hingegen als Stärke angesehen, da sie Programmierern große Freiheit bei der Entwicklung von Anwendungen bietet. Schließlich wird ein Ausblick auf zukünftige Verbesserungen und Erweiterungen der Java Sound API gegeben, wobei die Schwierigkeiten bei größeren API-Änderungen und die Rolle von Open-Source-Projekten wie Tritonus erwähnt werden.
II.Sampling und MIDI in der Audioprogrammierung
Die Arbeit beschreibt die grundlegenden Prinzipien der digitalen Audioverarbeitung: Sampling zur detailgetreuen Abbildung analoger Klangsignale und MIDI, zur Repräsentation musikalischer Noten und Events. Es wird die Samplingrate (z.B. 44.1 kHz, 48 kHz, höhere Raten für spezielle Anwendungen) und die Bedeutung der Abtastfrequenz für die Audioqualität beleuchtet. Die Vereinbarkeit von Sampling und MIDI wird diskutiert, sowie Herausforderungen bei der Synchronisierung mehrerer Soundkarten und Hardwarekomponenten (Master-Clock, Synchronisation). Effiziente Datenverarbeitung mittels Schnittlisten und Echtzeitberechnung (z.B. mit der Fast Fourier Transformation (FFT)) werden ebenfalls behandelt.
1. Digitale Klangrepräsentation Sampling und MIDI
Der Abschnitt erläutert die zwei grundlegenden Ansätze der digitalen Audio-Repräsentation: Sampling und MIDI. Sampling basiert auf der regelmäßigen Abtastung eines analogen Signals, um es digital möglichst originalgetreu abzubilden. Die Qualität des Ergebnisses hängt dabei maßgeblich von der Sampling-Frequenz (Samplingrate, in Hertz gemessen) ab. Das menschliche Ohr nimmt Frequenzen bis maximal 20 kHz wahr; daher hat sich die Sampling-Frequenz von 44,1 kHz (Audio-CD-Standard) etabliert. In professionellen Studio-Umgebungen werden jedoch auch höhere Samplingraten (96 kHz oder 192 kHz) eingesetzt, um Rundungsfehler zu minimieren und den Aliasing-Effekt zu reduzieren, wobei der zusätzliche Aufwand an Datenmenge kritisch gewürdigt wird. Im Gegensatz zum Sampling beschreibt MIDI (Musical Instrument Digital Interface) Klänge durch Noten und Events, ähnlich einer Partitur. MIDI ist auf musikalisches Material beschränkt und bietet eine kompaktere Datenrepräsentation, was es für die Bearbeitung und Komposition von Musikstücken effizienter macht.
2. Vereinbarkeit von Sampling und MIDI
Trotz der unterschiedlichen Ansätze von Sampling und MIDI gibt es Bestrebungen, beide zu kombinieren, um die Vorteile beider Methoden zu nutzen. Dies geschieht meist durch die Zusammenfassung einzelner Klangsamples mit ihren Steuerdaten. Der Player erzeugt dann beim Abspielen aus diesen Informationen den gewünschten Klang. Dieser Ansatz ermöglicht eine hohe Klangkontrolle bei gleichzeitig begrenztem Datenaufkommen und vereinfacht die Bearbeitung der Komposition. Der Abschnitt erklärt, wie Daten typischerweise in Puffer geschrieben werden, oft abwechselnd für linken und rechten Kanal. Die Synchronisation von Audiosignalen, insbesondere bei Mehrkanal-Systemen oder mehreren Soundkarten, wird thematisiert. Die Rolle der Clock (Taktgeber) in Soundkarten und die Notwendigkeit einer externen Master-Clock zur Synchronisierung verschiedener Hardwarekomponenten werden erörtert. Es wird darauf hingewiesen, dass nicht alle Soundkarten diese Art der Synchronisation unterstützen.
3. Effiziente Datenverarbeitung Schnittlisten und Echtzeitberechnung
Um das hohe Datenaufkommen bei der Audiobearbeitung zu reduzieren, werden Schnittlisten als effizientes Verfahren vorgestellt. Schnittlisten definieren die Reihenfolge von Audiosegmenten und ermöglichen es, Audiomaterial zu arrangieren, zu löschen und zu kopieren, ohne das gesamte Ergebnis speichern zu müssen. Dies spart Speicherplatz und Bearbeitungszeit. Neben Schnittlisten wird die Echtzeitberechnung als alternative Methode behandelt. Hierbei werden Bearbeitungsschritte erst zum Zeitpunkt des Abspielens berechnet, was dem Anwender ein direktes Feedback ermöglicht und dem Arbeiten mit analoger Technik nahekommt. Die Fast Fourier Transformation (FFT) wird als häufig verwendetes Verfahren für Echtzeitberechnungen genannt. Die FFT zerlegt ein periodisches Signal in seine Frequenzbestandteile. Um die FFT auch auf nicht-periodische Signale anzuwenden, wird ein FFT-Window verwendet. Die dabei entstehenden kleinen Fehler gleichen sich in der Regel in der Summe aus. Die CPU-Last der FFT wird als Faktor bei der Echtzeitfähigkeit berücksichtigt. Die Entwicklung von Musikcomputern wird kurz erwähnt, wobei die Rolle des Commodore C64 und des Atari ST in der frühen Entwicklung hervorgehoben wird. Die Herausforderungen der damaligen Hardware und Software-Landschaft hinsichtlich der Echtzeitverarbeitung von Sampling-basierten Daten werden ebenfalls angesprochen.
III.Performance und Echtzeitfähigkeit von Java Sound
Ein kritischer Aspekt der Arbeit ist die Bewertung der Performance von Java Sound. Die Studie untersucht die Auswirkungen von Garbage Collection-Algorithmen und Multithreading auf die Echtzeitfähigkeit. JIT-Compiler und verschiedene JVM-Implementierungen (z.B. Sun's HotSpot) werden im Kontext der Performance analysiert. Die Verwendung von JNI (Java Native Interface) zur Optimierung der Interaktion mit nativer Hardware wird diskutiert, sowie die Auswirkungen von Ineffizienzen in der Programmierung. SWT/JFace wird als Alternative zu den oft als langsam empfundenen AWT/Swing GUI-Frameworks vorgestellt. Der Fokus liegt auf der Frage, ob Java die Anforderungen an Echtzeitaudioverarbeitung in professionellen Studio-Umgebungen erfüllen kann und welche Kompromisse eingegangen werden müssen.
1. Java Performance und Einflussfaktoren
Dieser Abschnitt untersucht die Performance von Java im Kontext von Audioanwendungen. Es wird betont, dass die 'wahrgenommene Performance' für den Benutzer entscheidend ist, und dass Programmierfehler oft schwerwiegendere Auswirkungen haben als die grundsätzlichen Performance-Unterschiede zwischen Java und nativen Sprachen wie C/C++. Die Bedeutung einer kontinuierlichen Benutzerinformation über den Fortschritt von Aktionen wird hervorgehoben, ebenso die Möglichkeit, diese Aktionen aktiv zu beeinflussen (z.B. Qualitätswahl, Abbruchkontrolle). Der Abschnitt beschreibt verschiedene JVM-Implementierungen und deren Auswirkungen auf die Performance. JIT-Compiler werden als Methode zur Beschleunigung der Ausführung vorgestellt; jedoch wird auch auf deren Nachteile, wie erhöhter Speicherbedarf und längere Startzeiten, hingewiesen. Die Bedeutung der Garbage Collection (GC) wird betont. Die Unterbrechungen des Programmflusses durch den Garbage Collector werden als potenzielles Problem für Echtzeitanwendungen identifiziert; die Wahl eines geeigneten GC-Algorithmus und die Anpassung von JVM-Parametern zur Optimierung der Pausenzeiten werden als entscheidend für Audioanwendungen beschrieben. Auch die effiziente Nutzung von Threads wird thematisiert, wobei die Wiederverwendung von Thread-Objekten zur Performance-Steigerung empfohlen wird. Die Verwendung des Schlüsselworts 'synchronized' zur Synchronisierung von Objektzugriffen wird als wichtiger Mechanismus, aber auch als potenzielle Quelle von Performance-Einbußen bei Übernutzung, dargestellt.
2. Java GUI Frameworks AWT Swing vs. SWT JFace
Im Kontext der Performance von Java-basierten Audioanwendungen wird das plattformunabhängige GUI-Framework AWT/Swing kritisch betrachtet. Swing wird als 'Heavyweight-Framework' bezeichnet, da es einen hohen Ressourcenverbrauch hat und oft als langsam wahrgenommen wird, da Rendering und Ereignisverarbeitung größtenteils in Java ablaufen. Im Gegensatz dazu wird SWT/JFace als Alternative vorgestellt, die als 'Lightweight-Framework' konzipiert ist und als transparente Schicht über Betriebssystem-Aufrufen agiert. SWT verzichtet bewusst auf die volle Kontrolle über das Aussehen der GUI-Elemente, um eine verzögerungsfreiere und angenehmere Benutzererfahrung zu gewährleisten. Die Studie argumentiert, dass die Verwendung von SWT/JFace zu einer Verbesserung der wahrgenommenen Performance führen kann.
3. Java Native Interface JNI und Performance
Der Abschnitt befasst sich mit der Verwendung des Java Native Interface (JNI) zur Optimierung der Performance. Es wird anerkannt, dass JNI-Aufrufe einen gewissen Overhead verursachen, aber auch betont, dass Java in bestimmten Fällen Performance-Vorteile gegenüber nativen Anwendungen bieten kann (z.B. durch Code-Optimierungen, die durch Pointer in C/C++ verhindert werden können). Benchmark-Ergebnisse werden kurz erwähnt, welche die Variabilität der Performance zwischen Java und C zeigen. JNI bietet spezielle Funktionen, um auf die Besonderheiten nativen Codes einzugehen, wie das Instanziieren einer neuen JVM von C/C++-Code, die Kopplung von nicht Java-Threads und die effiziente Datenübertragung über java.nio.ByteBuffer. Der Abschnitt unterstreicht die Wichtigkeit einer effizienten Programmierung, um die Performance-Nachteile von Java zu minimieren. Effiziente Speicherverwaltung wird als ebenso wichtig wie die richtige Wahl von JVM und GC-Parametern hervorgehoben. Die Einhaltung von harten Echtzeitanforderungen stellt jedoch eine besondere Herausforderung dar, bei der sorgfältig abgewogen und getestet werden muss, ob diese mit der gewählten Java-Umgebung eingehalten werden können.
IV.Java Sound Implementierung und Alternativen
Die Arbeit analysiert die Implementierung der Java Sound API auf verschiedenen Plattformen, insbesondere auf dem Apple Macintosh, wo die Implementierung durch Apple erfolgt und als weniger ausgereift eingeschätzt wird. Alternativen zu Java Sound, wie JMF und MMAPI, werden betrachtet, wobei betont wird, dass diese oft intern auf Java Sound aufbauen. Die Studie diskutiert auch die Erweiterung von Java Sound um ASIO-Kompatibilität, um die Integration mit professioneller Audiohardware zu verbessern. Es werden die Vor- und Nachteile einer Low-Level-Ansatzes der Java Sound API im Vergleich zu High-Level Frameworks beleuchtet.
1. Implementierung von Java Sound auf verschiedenen Plattformen
Dieser Abschnitt analysiert die Implementierung der Java Sound API auf verschiedenen Betriebssystemen. Es wird hervorgehoben, dass die Plattformunabhängigkeit von Java Sound durch unterschiedliche Implementierungsqualitäten auf verschiedenen Plattformen gefährdet ist. Besonders kritisch wird die Implementierung auf dem Apple Macintosh bewertet, da Sun Microsystems, der Entwickler der Java Sound API, nur geringen Einfluss auf die Qualität der von Apple erstellten Implementierung hat. Die aktuelle Java-Version für Mac OS X (Version 1.4.2 zum Zeitpunkt der Abfassung des Dokuments) wird als vergleichbar lückenhaft wie frühere Versionen der Sun-Implementierung beschrieben und es wird angemerkt, dass auch die Java Sound Audio Engine von Apple übernommen wurde, was die Unabhängigkeit beeinträchtigt. Der Mangel an sinnvoller Unterstützung durch Apple für Java Sound wird mit der fehlenden Integration des CoreAudio-Frameworks in Java Sound belegt. Es bleibt unklar, wann die Mac-Implementierung die Qualität der Sun-Referenzimplementierung (Version 1.5.0) erreichen wird. Die Beiträge von Mac-Nutzern in der Java-Sound-Mailingliste ([JS-INTEREST]) werden als Quelle für diese Informationen genannt.
2. Alternativen zu Java Sound JMF MMAPI und ASIO
Der Abschnitt beleuchtet Alternativen zu Java Sound. Es wird argumentiert, dass eine direkte Konkurrenz zu Java Sound schwer zu definieren ist, da es aufgrund seines Gesamtkonzepts und seiner Integration in die Java-Plattform einmalig ist. JMF (Java Media Framework) und MMAPI (Multimedia API) werden als potenzielle Alternativen innerhalb des Java-Ökosystems genannt, jedoch wird betont, dass Java Sound intern von diesen High-Level-Frameworks zur Soundhardware-Ansteuerung verwendet wird. Die Frameworks ergänzen sich daher eher als dass sie sich gegenseitig ersetzen. ASIO (Audio Stream Input/Output) wird als eine weitere, konkurrierende Technologie vorgestellt, die sich grundlegend von Java Sound unterscheidet. ASIO basiert auf einem Callback-Modell, bei dem der Treiber aktiv Daten an die Anwendung sendet, während Java Sound ein Pull-Modell nutzt. Der Abschnitt analysiert die Unterschiede zwischen Java Sound und ASIO und deren Folgen für die Entwicklung von Audioanwendungen. Es wird die Notwendigkeit hervorgehoben, ASIO-spezifische Funktionen, die in Java Sound fehlen, als zusätzliche Methoden anzubieten, um die Kompatibilität zu verbessern. Die Herausforderungen bei der Integration von ASIO-Funktionalitäten in Java Sound werden im Detail erläutert.
3. Bewertung der Java Sound API Stärken und Schwächen
Zusammenfassend werden die Stärken und Schwächen der Java Sound API bewertet. Die konsequente Low-Level-Orientierung wird als Stärke angesehen, da sie dem Programmierer große Freiheit bei der Entwicklung von Anwendungen bietet. Als Nachteil wird die späte Reifung zu einer relativ vollständigen Referenzimplementierung genannt, wobei die beschränkte Nutzbarkeit früherer Versionen (ca. fünf Jahre lang) auf anspruchsvollere Anwendungen und der daraus resultierende Verlust potentieller Anwender erwähnt werden. Der umständliche und langwierige Verbesserungsprozess von Java Sound, der durch die Notwendigkeit von Major-Releases für API-Änderungen und einen komplizierten Prüfungsprozess entsteht, wird als weiterer Nachteil im Vergleich zu Open-Source-Projekten kritisiert. Die Situation auf dem Mac OS X mit Apples verantwortlichkeit für die Implementierung, und dessen mangelnde Investition in eine ausgereifte Java Sound Implementierung wird als weiteres Problem hervorgehoben. Ein Ausblick auf zukünftige Entwicklungen und mögliche Verbesserungen, inklusive der Diskussion um ein mögliches neues MIDI-Package im Rahmen des Tritonus-Projekts, schließt den Abschnitt.
V.Praktische Umsetzung und Ergebnisse
Der praktische Teil der Arbeit beinhaltet die Entwicklung von zwei Sample-Editoren und mehreren Plug-ins zur Erprobung der Java Sound API. Ein Fokus liegt auf der Entwicklung eines Plugins zur Unterstützung des REX-Formats und weiteren Edit-Funktionen (Copy, Paste, Cut). Die Entwicklung einer FloatConversionProvider Klasse zur Verarbeitung von 32-Bit Fließkommazahlen wird ebenfalls beschrieben. Die Ergebnisse aus den praktischen Tests unterstützen die im theoretischen Teil gewonnenen Erkenntnisse bezüglich der Stärken und Schwächen von Java Sound für professionelle Audioanwendungen. Schlüsselaspekte der entwickelten Software umfassen Features wie Echtzeit-Vorhören, Unterstützung von MIDI, und die flexible Anpassung der Puffergrößen.
1. Entwicklung von Sample Editoren und Plugins
Der praktische Teil der Arbeit beschreibt die Entwicklung von zwei Sample-Editoren und mehreren Plugins, um die Java Sound API im praktischen Einsatz zu evaluieren. Diese Entwicklung dient dazu, die theoretischen Ergebnisse zu überprüfen und zusätzliche Erkenntnisse aus der praktischen Erfahrung zu gewinnen. Die Implementierung eines REX-File-Readers wird detailliert beschrieben. Dabei werden die Herausforderungen und Einschränkungen bei der Arbeit mit dem REX-SDK erläutert, wie die Notwendigkeit, REX-Dateien vollständig in den Speicher zu laden, im Gegensatz zur Möglichkeit des Streamings bei der Java Sound API. Dies führt zu Einschränkungen beim REXFileReader, der nur File-Objekte verarbeiten kann, nicht aber InputStreams oder URLs. Um Out-of-Memory-Fehler zu vermeiden, wurde eine maximale Dateigröße von 4 MB für REX-Dateien festgelegt. Die Implementierung einer AudioFileReader SPI-Klasse wird als weiterer Schritt erwähnt, um den Service einer Java-Sound-Umgebung anbieten zu können.
2. Funktionalitäten der entwickelten Sample Editoren
Die entwickelten Sample-Editoren bieten grundlegende Edit-Funktionen wie Kopieren, Ausschneiden und Einfügen von Audiomaterial (Copy, Cut, Paste). Das Kopieren zu anderen Anwendungen wurde aus Gründen der Plattformunabhängigkeit zunächst nicht implementiert. Die Funktionen sind nur verfügbar, wenn ein Bereich im Editor ausgewählt ist. Der Paste-Befehl überschreibt einen selektierten Bereich oder fügt den Inhalt an der aktuellen Position ein, falls kein Bereich ausgewählt ist. Zusätzlich wurden experimentelle Audioeffekte (Normalize, Pseudo Echo, Chorus/Flanger) implementiert. Ein Options-Menü ermöglicht die Auswahl des Wiedergabe- und Aufnahmetreibers sowie Experimente mit der Puffergröße und der Priorität des Player-Threads. Die Puffergröße beeinflusst die Wahrscheinlichkeit von Aussetzern im Audiodatenstrom und die Reaktionszeit der Anwendung. Für echtzeitkritische Anwendungen sollte die Puffergröße klein gewählt werden, während beim Aufnehmen ein größerer Puffer Timingschwankungen ausgleichen kann. Die Änderung der Thread-Priorität wird als kritischer Aspekt hervorgehoben, da eine höhere Priorität nicht automatisch zu besserem Echtzeitverhalten führt. Es wurde auch eine Funktion zum Exportieren von Rhythm Sets, bestehend aus 16 Klängen, implementiert, mit der Option, zusätzlich eine MIDI-Sequenz zu exportieren.
3. Weitere Implementierungsdetails und Ergebnisse
Der Abschnitt beschreibt weitere Implementierungsdetails der entwickelten Software. Die Integration eines FloatConversionProvider wird genannt. Die meisten modernen Audioanwendungen verarbeiten Audiodaten intern als 32-Bit Fließkommazahlen (normalisiert auf +/- 1,0). Die Vorteile dieses Ansatzes werden erläutert, einschließlich vereinfachter mathematischer Berechnungen und der Vermeidung von digitalen Übersteuerungen. Der Sample-Editor bietet MC-909-spezifische Eigenschaften (Loop Mode, Timestretch Type) für jedes geöffnete Sample. Die MC-909 wird als Referenz für die Funktionalität des Sample-Editors genannt. Die Echtzeitfähigkeit des Vorhörens von Rhythm Sets stellt eine harte Echtzeitanforderung dar, die durch geeignete Treiberwahl und kleine Puffergrößen erreicht werden soll. Das Dokument erwähnt abschließend, dass die Ergebnisse der praktischen Tests die im theoretischen Teil gewonnenen Erkenntnisse unterstützen. Zusätzliche Hinweise auf die experimentelle Natur mancher implementierten Effekte (z.B. Chorus/Flanger) werden gegeben.
Dokumentreferenz
- Nine Language Performance Round-up: Benchmarking Math & File I/O (Cowell-Shah, C. W.)
- Java 2 – Designmuster und Zertifizierungswissen (Esser, F.)
- Java Sound API – Programmer´s Guide (Sun Microsystems, Inc.)