Das Grundkonzept stammt aus einem einstigen Programmierhandbuch für den Commodore 64. Ausserdem spielte ich eine Zeit lang ein Musikinstrument und hatte dabei das Bedürfnis, den Rechner als Ersatzspieler sowie als perfekter Vorspieler einzusetzen. Alle Stücke sind übrigens in Stereoton gesetzt.
Aufgrund der bereits am Commodore 64 hervorragenden Soundfähigkeiten
war für mich mehrstimmige Musik von Anfang an eine
Selbstverständlichkeit, weshalb ich mich eigentlich nie mit
PLAY
und SOUND
von GWBASIC.EXE
anfreunden konnte und daher gar nicht erst Versuche unternahm. Falls Sie aber
nur einen PC mit Windows besitzen, lassen sich die Stücke auch wunderbar
mit UAE, einem hervorragenden
und kostenlosen Amiga-Emulator anhören.
Die Musikbox entstand übrigens erst viel später aus einem anderen Anlass heraus.
Für diese Programme erübrigt sich eine lange Erkärung: Starten Sie lediglich das jeweilige Programm und lehnen Sie sich zurück :-). Bei einigen Stücken ist lediglich ein Tastendruck nach der Berechnung nötig, um das Abspielen zu starten.
Einige Stücke sind recht umfangreich, so dass Sie mit clear ,262144 den BASIC-Speicher vorher vergrössern müssen.
Bei WinUAE müssen Sie in den Sound-Einstellungen die bestmögliche Stufe einstellen, dafür können Sie die Grafik-Wiederholrate extrem tief einstellen.
Die Programme bestehen im wesentlichen immer aus zwei Teilen; einem Abspieler und einem Musiknoten-Datenteil. Im folgenden gehe ich auf die verschiedenen Abspieler-Versionen ein, denn ich optimierte das Programm im Laufe der Zeit fortlaufend.
Bei dieser Versionen werden die DATA
-Zeilen
während des Abspielens verarbeitet. Dabei wird jeweils die
Rechenzeit zwischen zwei Takten ausgenutzt. Stücke mit
Online-Verarbeitung:
Die Online-Verarbeitung stösst rasch an ihre Grenze, sobald Achtel-
oder gar Sechszehntelnoten ins Spiel kommen, da der MC 68000 mit 7 MHz nicht
unbegrenzte Rechenleistung anbot. Gleichzeitig war auch eine weitere
Anforderung, erfasste Musikstückpartien mehrfach wiederverwenden
zu können, woraus das Blockkonzept entstand. Ausserdem war noch
eine tontechnische Optimierung notwendig, um zerhackte Töne zu vermeiden:
Rythmus durch TIMER
steuern anstelle von stillen
SOUND
-Aufrufen. Stücke mit diesem Prinzip:
Die vorhergehende Version bietet schon recht viele Einsatzmöglichkeiten, dennoch stösst man bei Partituren an die Grenzen, sobald man Orchestermusik mit mehreren Spielerstimmen setzen wollte. Mit der im Artikel über achtstimmige Musik beschriebenen Programmiertechnik konnte dieser Rahmen an Möglichkeiten erweitert werden. Stücke in dieser Abspieltechnologie:
Der grosse Nachteil der achtstimmigen Version ist die mittlerweile recht
aufwendig gewordene Vorberechnung. Etwas später schaffte ich mir den
BASIC-Compiler von Maxon Computer GmbH an.
Dabei stellte sich eine kleine Inkompatibilität beim
WAVE
-Befehl heraus: Die MaxonBASIC-Implementation dieses Befehls
erlaubt keinen Startindex, was die Verwendung von WAVE 0, wf%(0)
und WAVE 0, wf%(256)
verunmöglichte. Die MaxonBASIC-Version
ist daher lediglich eine reine Anpassung an den Compiler, funktionell ist sie
mit derjenigen für den AmigaBASIC-Interpreter identisch.
Um die MaxonBASIC-Musikstücke auch mit dem
AmigaBASIC-Interpreter anhören zu können, genügt es, den
Abspieler einer AmigaBASIC-Version mit den DATA
-Zeilen einer
MaxonBASIC-Version zu kombinieren (Copy&Paste im
Quelltext-Editor). Das Umgekehrte ist selbstverständlich auch
möglich.
Stücke für den Compiler:
In diesem Abschnitt wird das DATA
-Zeilenformat im Detail
beschrieben, damit Sie selber Musikstücke erfassen können.
Die DATA
-Zeilen sind vom Grundaufbau her gesehen wie dem
Papierband einer Drehorgel aufgebaut. Im Sinne der konstanten Geschwindigkeit
dieses Bandes werden auch in diesem Programm die DATA
-Zeilen in
einem regelmässigen Takt verarbeitet, dessen Geschwindigkeit Sie zu
Beginn einstellen. Daher kommen keine Notenlängen in Form von expliziten
Zahlen vor, sondern stattdessen die Vorschrift, ob der Ton weiterklingen soll
(***
) oder ob ein neuer Ton bzw. Pause (---
) folgen soll.
Bevor Sie gleich mit der Musiknoten-Erfassung loslegen, sollten Sie das gesamte Notenblatt durchsehen nach den kürzesten Noten. Sie müssen dabei den grösstmöglichen Mikrotakt suchen, wo der Beginn eines Ton immer auf einen Taktschlag erfolgen kann. Im Mikrotaktsystem können also die Notenlängen immer ganzzahlig dargestellt werden. Bei Triolen müssen Sie wie beim Bruchrechnen arbeiten: Suchen Sie dort gewissermassen den »gemeinsamen Nenner«. Beispiel: Ein Stück hat Achtelnoten sowie Viertelnoten lang dauernde Triolen => in diesem Fall müssen Sie also einen 1/24-Noten-Mikrotakt verwenden, wo dann ein Triolenton 2 Mikrotakte dauert und die Achtelnote 3 Mikrotakte.
Zu Beginn geben Sie die Startlautstärken (0-255) von jedem Tongeneratoren an, anschliessend die vorhin diskutierte Notenauflösung (für das obige Beispiel wäre dies 24) das Tempo in Anzahl Viertelnoten pro Minute (=Metronom-Takt!) sowie die Pausenlücke: 0 würde alles legato-mässig wie mit einem Bindebogen spielen. Je grösser die Pauenlücke gewählt wird, desto staccato-mässiger wird das Stück gespielt. Diese Pausenlücke wird übrigens in 55 ms-Einheiten wie im Grundlagenartikel über die Tonprogrammierung beschrieben, angegeben.
Die eigentlichen Musiknoten-Daten sind als Zeichenketten für jeden Mikrotakt dargestellt, jeder 24 Zeichen lang. Je 6 Zeichen beschreiben das weitere Vorgehen für eine Stimme. Bedeutung der ersten drei Zeichen einer solchen 6er-Gruppe:
ttO
: neue Note anspielen, dabei für
tt den Notennamen wie gewohnt als C, D,
E, F, F# (Fis) usw. angeben, anschliessend die Oktavnummer in
O, wobei sich der Kammerton a mit 440 Hz in Oktave 4
befindet.***
: Zustand beibehalten, also Ton weiterklingen lassen oder
Pause fortsetzen---
: Pause ansetzenIn den drei verbleibenden Zeichen der 6er-Gruppe folgt die
Lautstärkenveränderung, so dass Sie auch die Dynamik,
also forte und piano umsetzen
können. Ganz am Schluss folgt noch das Ende-Kennzeichen
Ende
.
***
im
ersten Takt angebenSOUND
beschrieben und geben
folglich die Stimmen in der Reihenfolge links-rechts-rechts-links ein.Diese Version wurde etwas vereinfacht: Gemeinsame Lautstärke
für alle Stimmen, daher nur noch 15 Zeichen lange Notentakte. Daher
enthält die erste DATA
-Zeile nur noch 4 Werte:
Notenauflösung, Metronom-Tempo, Startlautstärke und Lücke.
Die Noten sind wie bei der Interpreterversion aufgebaut, wobei für jede Stimme nur noch je drei Zeichen die Note beschreiben und die letzen drei Zeichen die für alle Kanäle gültige Lautstärkenveränderung.
Dagegen neu ist das Blockkonzept: Wiederholungen müssen Sie nur noch
einmalig erfassen, was die Anzahl DATA
-Zeilen markant reduziert.
Zu diesem Zweck sollten Sie das gesamte Musikstück auch wieder vorranging
analysieren und dabei in Blockelemente aufteilen. Sie geben die Daten jeweils
als Blockpaket ein, so dass EndBlock
jeweils den Block
abschliesst. Am Schluss nach Ende
-Eintrag folgt die Reihenfolge,
wie die Blöcke abgespielt werden sollen. Dabei können Sie einen
Block auch mehrfach nennen und so Wiederholungen erzeugen. Dabei werden die
Blöcke ab 1 aufsteigend numeriert. Der Eintrag 0 schliesst die
Blocksequenzliste ab.
READ
-Gang selber ermittelt wird.Nebst den acht Stimmen wurde auch das Lautstärkenkonzept überarbeitet, damit es sich besser an die übliche Notation der Musik anlehnt.
Code | Notation | Bedeutung |
---|---|---|
S | pppp | pianissimo |
s | ppp | pianissimo |
P | pp | pianissimo |
p | p | piano |
m | mf | mezzo-forte |
f | f | forte |
F | ff | fortissimo |
x | fff | fortefortissimo |
X | ffff | fortefortissimo |
Zwei weitere Codes sind <
und >
, mit welchen
Sie ein kontinuierliches Ansteigen und Abschwellen der Lautstärke
bewirken. Zu Beginn geben Sie auch wieder die Notenauflösung, Tempo und
staccato-Lücke an. Bezüglich Stereo folgt
anschliessend eine Zuordung der Stimmen zu den Tongeneratoren, sodass Sie also
nicht mehr die L-R-R-L-Reihenfolge beachten müssen und ausserdem auch
einzelne Stimmen mit 0 ausschalten können.
Die Notendaten sind als Blöcke wie bei der vorhin beschriebenen Version aufgebaut und haben ausserdem denselben Aufbau. Bedingt durch das im Artikel über 8-stimmige Musik beschriebene Prinzip können Sie die Stimmen nicht mehr beliebig asynchron ausgestalten; innerhalb eines Stimmpaares müssen immer beide Stimmen synchron aufgebaut sein, d.h. entweder einen neuen Ton/Pause ansetzen oder den Ton halten. Diese Einschränkung fällt in der Praxis kaum ins Gewicht, da die Mehrheit aller Musikstücke aus Akkorden zusammengesetzt sind.
Version für AmigaBASIC herunterladen
Umfang: 23 KB
Version für MaxonBASIC herunterladen
Umfang: 36 KB