Beast Overview 2003 DE

= BEAST - Musiksynthese unter Linux = Authoren: Tim Janik, Stefan Westerfeld

Abstract
Während Linux in verschiedenen Bereichen Desktopsoftware hervorbringt, die von vielen Endusern produktiv eingesetzt wird, ist dies bei Musiksoftware zur Zeit eher nicht der Fall. Fast alle kommerziell und nichtkommerziell gemachte Musik wird entweder ohne Softwareunterstützung oder mit proprietärer Software erstellt. BEAST versucht, diesen Zustand im Bereich der Musiksynthese zu verbessern. Da praktisch alles, was man mit Hardwaregeräten machen kann mittlerweile in Echtzeit auf einem normalen PC berechenbar ist, ist es nur eine Frage einer geeigneten Implementation, um auch mit freier Software professionell Musik produzieren zu können.

Bei der Entwicklung von BEAST galt es daher, mehrere Entwurfsziele zu beachten. So wurden sehr hohe Maßstäbe an die mathematischen Eigenschaften der Synthese gestellt, und neben einer durchgängigen Signalverarbeitung auf 32-Bit-Basis im gesamten Programm fand auch konsequente Echtzeitfähigkeit in allen Aspekten der Implementation Berücksichtigung. In die Synthesearchitektur eingeplant wurde ebenfalls die Skalierbarkeit auf mehrere Prozessoren. Ein weiteres Designziel ist die Interoperabilität, was zum Beispiel heißt, daß der Synthesekern von anderen Anwendungen (beispielsweise freien Sequencern wie Rosegarden) genutzt werden kann, aber auch aus Programmiersprachen wie Scheme angesteuert werden kann. Außerdem wurde beim Entwurf aller Komponenten ein sehr grosser Wert auf die grafische Oberfläche gelegt um einfache und nach möglichkeit intuitive Bedienung zu erlauben.

So gerüstet sollte BEAST in die Lage kommen die Zielsetzung, mit proprietären Produkten wie Native Instruments Reaktor, Propellerheads Reason und der Cubase/VST Technologie zu konkurrieren, und diese dank offener Entwicklung zu überholen.

[ Dieses Dokument wurde als Begleitmaterial zu einem Vortrag im Rahmen des LinuxTag 2003 verfaßt.]

Ein Überblick über BEAST und BSE
BEAST ist ein graphisches Frontend zu BSE, einem Synthese- und Sequenzingkern, der in eine extra Bibliothek ausgelagert ist. Beides wird seit mehreren Jahren als Freie Software entwickelt und unter der GPL freigegeben. Seit der ersten öffentlichen Release Ende 1999, sind bereits einige Teile wieder ausgelagert und in andere Projekte integriert wurden, wie zum Beispiel das BSE Objektsystem, daß als GObject in GLib Einzug fand. Der Funktionsumfang von BSE ist von einem Gluelayer ummantelt, das verschiedene Sprachanbindungen ermöglicht. Zur Zeit existieren ein C Interface zu BSE, benutzt zur Implementation von BEAST, sowie ein Scheme Interface auf dem basierend eine Schemeshell BSESH implementiert wurde. Weitere Sprachanbindungen (C++, C#) sind zur Zeit in der Planungsphase.

BEAST ermöglicht flexible Klangsynthese und Liedkomposition unter Benutzung von Syntheseinstrumenten oder Audiosamples. Zum Abspeichern von Liedern und Syntheseeinstellungen wird das BSE Dateiformat benutzt, welches volle Integration von Audiosamples, Syntheseinstrumenten und Sequenzinginformationen bietet, ähnlich dem Funktionsumfang bekannter Trackerformate wie z.B. MOD oder S3M.

Im Audiosamplebereich existiert Unterstützung für die Formate MP3, WAV, OGG/VORBIS und BSEWAVE. Letzteres ist ein hybrides Text-/Binärformat zum Erstellen von Multisamples mit Loopinformationen. Verschiedene Werkezeuge zum Erstellen und Bearbeiten von BSEWAVE Dateien sind im Moment in der Fertigstellung um mit den nächsten BEAST Versionen zusammen freigegeben zu werden.



Im 0.5er Entwicklungszweig bietet BEAST Zeitbereichsanzeige für Audiosamples mit Zoomfunktion und Vorhörmöglichkeiten. Audiosamples werden zur Laufzeit dekodiert und nur stückweise bei Bedarf in den Speicher geladen, selbst bei stark komprimierten Formaten wie OGG/VORBIS oder MP3. Dies ermöglicht die Verwendung von sehr großen Dateien wie zum Beispiel 80 Megabyte MP3 Daten (bzw. 600 Megabyte WAV), respektive einer Stunde Audiomaterial.

An der BEAST Oberfläche können mehrere Audioprojekte zur gleichen Zeit bearbeitet werden, und es gibt unbegrenzte Undo/Redo Funktionen für alle Editiermöglichkeiten. Zum einfachen Ausprobieren und interaktivem Verändern der Synthesefunktionen wird MIDI-Eingabe in Echtzeit unterstützt, die es ermöglicht BEAST direkt als MIDI Synthesizer nutzen zu können.

Die eigentliche Soundberechnung erfolgt 32-Bittig im Fließkommaformat und wird asynchron zum Hauptprogram ausgeführt. Die Architektur ist darauf ausgelegt, Synthesemodule auf mehrere Prozessoren verteilen zu können, sofern Multiprozessormaschinen zur Verfügung stehen und der Kernel eine Prozessorbindung zu läßt. Die Samplingrate ist frei einstellbar und wird nur durch die Ein-/Ausgabemöglichkeiten des Kernelsoundtreibers limitiert. Parallel zur Audioausgabe durch eine Soundkarte, kann auch ein Mitschnitt des generierten Audiomaterials in eine WAV Datei erfolgen.

Da sämtliche Editierfunktionen des Audiokerns ebenfalls in Scheme verfügbar sind, ist über ein Registriersystem die Möglichkeit gegeben, durch Scripte den Funktionsumfang von BEAST zu erweitern, oder komplizierte Vorgänge vollständig zu automatisieren. Hier hat das Script-Fu Plugin von Gimp Pate gestanden.

Erstellen von Liedern
Lieder sind in BEAST in Spuren (Tracks) unterteilt, wobei jeder Spur ein Instrument zugeordnet ist und eine Spur mehrere Parts enthält. Ein Part bestimmt die Noten die in einem bestimmten zeitlichen Abschnitt gespielt werden. Als Instrument sind innerhalb der Spuren entweder Syntheseinstrumente oder AudioSamples verwendbar. Syntheseinstrumente sind Teil des selben Projekts und müßen separat erstellt werden. Zur Nachbearbeitung von Liedern oder einzelnen Spuren, können sogenannte "Postprocessing" Synthesizer angegeben werden, um beispielsweise den Klang zu komprimieren oder einzelne Spuren zu verhallen.



Zum Editieren von Parts existiert eine zoombare "Piano Roll"-Ansicht, in der Noten durch klicken und Drag-and-Drop relativ zu einer Klaviertastatur erstellt bzw. verändert werden können. Die Klaviertastatur ermöglicht ein Vorhöhren der zu spielenden Noten, um die zu editierenden Noten auch klanglich zuordnen zu können. Funktionen zum Selektieren von Notengruppen, Ausschneiden, Einfügen und Quantisieren stehen hier, einfach erreichbar über eine Werkzeugleiste, zur Verfügung.

Die einzelnen Parts werden in der zoombaren Spuransicht ebenfalls per Drag-and-Drop zugeordnet und erlauben Verknüpfungen, um einen Part in verschiedenen Spuren mehrmals verwenden zu können. Um die klangliche Editierung zu erleichtern, können Spuren einzeln an und abgeschaltet und mit Kommentaren versehen werden.

Syntheseeigenschaften
Die Synthesemöglichkeiten der Standard BEAST Distribution in der 0.5er Version entsprechen in etwa dem Funktionsumfang die einfache Modulare Synthesizer anbieten, am Umfang der Synthesemodule und an der Qualität einzelner Module wird allerdings ständig weiterentwickelt.

Als Audioquellen stehen zur Zeit ein analoger Oszillator, ein Waveoszillator zum Abspielen von Audiosamples, ein Noisemodul, eine Orgel und ein Gitarrensaitenmodul zur Verfügung. fürs Routing gibt es Module wie Addierer, Multiplizierer, Mixer, Konstantwerte, ADSR Hüllkurve und einen Minisequenzer. Im Effektbereich stehen mehrere rekursive Filter, ein Reverb und ein Distortionmodul zur Verfügung. Darüberhinaus giebt es noch verschiedene Verbindungsmodule, zum Beispiel für die Instrumenten Ein- und Ausgabe, sowie MIDI Eingabe und Verbinden von ganzen Synthese Netzwerken. Außer den Synthesemodulen der Standarddistribution wird auch die Verwendung von LADSPA-Modulen (www.ladspa.org) unterstützt, die Beschränktheit der Informationen zu LADSPA-Modulparametern verhindert allerdings eine nahtlose Eingliederung in die BEAST Oberfläche.

Die Module sind im Allgemeinen aliasingfrei implementiert, und hoch laufzeitoptimiert um konsequente Echtzeitfähigkeit zu ermöglichen. Pro Modul gibt es mehrere Eigenschaften (Phase beim Oszillator, Finetune zu Frequenzeingängen in Centschritten u.a.) die verändert werden können um das Syntheseverhalten zu beeinflußen. Ein Großteil der veränderlichen Parameter sind als separate Ein-/Ausgänge an den Modulen ausgeführt, um größtmögliche Flexibilität bei der Erstellung von Synthesenetzwerken zu erlauben. BEAST macht hier prinzipiell keinen Unterschied zwischen Kontroll- und Audiokanälen, vielmehr ergibt sich die Funktion eines Signals als Audio- oder Kontrollsignal aus der Benutzerdefinierten Verwendung.



An der Oberfläche gestaltet sich das Erstellen von Synthesenetzwerken relativ einfach. Module werden aus einer Palette oder einem Menü ausgewählt und auf einer zoombaren Arbeitsfläche frei plaziert. Sie können dann an Ein- und Ausgabeschnittstellen miteinander durch einfaches Klicken und Ziehen verbunden werden. Zu jedem Modul gibt es einen Informationsdialog und zum Einstellen der modulspezifischen Parameter existieren ebenfalls Dialoge. Beide Dialogarten sind über ein Kontextmenü erreichbar. In den Parameterdialogen sind Parameter zu funktionellen Gruppen zusammen gefaßt, und zu praktisch jeder numerischen Eingabe stehen sowohl Nummerneditierfelder, als auch einfache zu bedienende Fader zur Verfügung. Sämtliche Parameter- und Verbindungseditiermöglichkeiten binden sich konsequent in das projektlokale Undo/Redo-Konzept mit ein, so daß praktisch keine endgültig destruktiven Veränderungen vorgenommen werden können.

Sowohl zum Abspielen von Liedern, als auch für die MIDI gesteuerte Synthese werden an der Oberfläche die maximale Anzahl von abspielbaren Stimmen angegeben. Ein Erhöhen der Anzahl abspielbarer Stimmen führt aber nicht zwingend zu einer höheren Prozessorlast, die Anzahl setzt nur Grenzwerte innerhalb derer mehrstimmige Synthese abgewickelt wird. Die eigentliche Stimmenvergabe erfolgt zur Laufzeit um die zu einem bestimmten Zeitpunkt auftretende Prozessorlast optimal zu reduzieren. Ermöglicht wird dies durch den asynchronen Synthesekern, welcher einen globalen Plan zur zeitgleichen Berechnung aller Stimmen aufstellt, und an dieser Stelle Verbindungsabhängigkeiten berechnet die ein Verteilen der Synthesemodulberechnungen auf mehrere Prozessoren erlaubt. Die Ausführung einzelner Äste dieses Plans kann mit Sampleratengenauigkeit gestartet und unterbunden werden, wodurch Äste die ungenutzten Stimmen entsprechen nicht ausgeführt werden brauchen. Durch das sampleratengenaue Timing, mit dem das Einsetzen von Noten eines Liedes nicht auf Berechnungsblockgrenzen beschränkt ist, können liedspezifisches Zeitvorgaben bestmöglich eingehalten werden.

Benutzerführung und Dokumentation
Wie bei den meisten Audiosynthese- und Sequenzingapplikationen, erfordert auch BEAST eine gewisse Einarbeitung seitens des Benutzers, die allerdings durch vorherige Erfahrung mit verwandten Applikation beträchtlich verkürzt werden kann. Es gibt im momentanen Stadium der BEAST Entwicklung noch kein umfassendes Manual, allerdings steht ein "Quick Start"-Handbuch zur Verfügung, das die grundsätzlichen Editierfunktionen erläutert, und die Oberfläche ist konsequent mit Werkzeugtipps (Tooltips) ausgestattet, die die jeweiligen Funktionen erläutern. Eine FAQ und einige Designdokumente stehen ebenfalls zur Verfügung, sowie Dokumentation zur Programmierung der Syntheseschnittstelle BSE, sowohl für C als auch für Scheme.

Zukunftspläne
Auch wenn BEAST bereits in der Lage ist gute Funktionalität zur Liedkomposition bereitzustellen, so gibt es doch eine lange Liste an Merkmalen die es in BEAST und BSE noch zu implementieren gilt. Ohne Anspruch auf Vollständigkeit seien hier einige aufgeführt:


 * Filter zur Manipulation von Frequenzsignalen (Transponieren)
 * Bereitstellen von Standardinstrumenten
 * Anspruchsvollere Filter und Distortion Module
 * Ein einfacher GUI Editor für Synthese Netzwerke (Rack Editor)
 * Aufnahme von externen MIDI Events in Parts
 * Erweiterte Soundtreiberanbindung, z.B. an Jack
 * Verschiedene Detailoptimierungen an Modulen im Prototypstadium
 * Erweiterte Dateiformatunterstützung z.B. für Timidity Samples
 * Velocity und MIDI Control Event Editierung in der "Piano Roll"-Ansicht
 * Erweiterte Sprachanbindung und Interoperabilität

Internetpräsenz
Die Homepage des BEAST Projekts befindet sich auf http://beast.testbit.eu/. Weitere Kontakte, Links zur Mailingliste u.a. sind unter http://beast.testbit.eu/contact.html zu finden.