Top Secret Teil 3

Die Tricks der Profis: Soundprogrammierung

Beim Stichwort Musik auf dem ST fällt einem wohl als erstes der Begriff MIDI ein. In diesem Fach ist er ja auch ein ganz Großer. Aber wenn es um das Thema Soundchip-Musik geht, wird der vermeintliche Riese ganz schnell zum Zwerg. Warum? Nun, in der ganzen Euphorie, in der sich die Entwickler des ST befanden, als sie die MIDI-Schnitt-stelle fest einplanten, haben sie die armen Anwender vergessen, die sich keine teure MI Di-Anlage leisten können. Und genau hier liegt ein Schwachpunkt des ST: Er hat - abgesehen von den »P«ocket »C«alculators - den schlechtesten Soundchip aller gängigen Heimcomputer.

Der Soundchip YM-2149F besitzt drei Tonkanäle mit einem Umfang von etwa acht Oktaven und einen Rauschgenerator, der sage und schreibe 32 verschiedene Frequenzen beherrscht. Für die Regelung der Lautstärke der einzelnen Kanäle ist je ein Register vorgesehen. Die Abstufung erfolgt in 16 Schritten. Durch Setzen von Bit 4 eines Lautstärkeregisters ordnet man dem entsprechenden Kanal eine der eingebauten Hüllkurven zu. Allerdings kann man so nicht für jeden Kanal irgendeine Hüllkurve einstellen, sondern immer nur die aktuelle. Den drei Tonkanälen ist lediglich eine Rechteckschwingung zugeordnet.

Baß-Groove

Wer sich den herkömmlichen ST-Sound (verschiedene Stücke von D. Whittaker) genauer vornimmt, dem fällt wahrscheinlich als erstes auf, daß die Baß-Stimme ziemlich verkorkst klingt. Der Grund hierfür ist die harte Rechteckschwingung. Für einen richtig »groovigen« Baß muß die Schwingung sehr viel weicher sein. Die weichste aller Schwingungen ist die Sinusschwingung. Diese aber ließe sich nur als Sample realisieren. Wenn wir uns die wenigen Register des YM-2149 ein bißchen genauer ansehen, fallen einem die eingebauten Lautstärke-Hüllkurven auf, deren Frequenz ja beliebig einstellbar ist. Zugegeben, die Lautstärkeverläufe, die sich mit den verschiedenen Kurven erzeugen lassen, sind bis auf ein paar Ausnahmen absolut schwachsinnig. Man betrachte in diesem Zusammenhang nur Nr.4 oder Nr.11 (Bild 1). Aber da man mittels der Lautstärkeregister sowieso beliebige Hüllkurven erzeugen darf, kommt ja wohl hoffentlich niemand auf die Idee, die eingebauten zu benutzen. Schon eher sinnvoll scheint es, die periodischen Kurven zu benutzen, und zwar mit einer höheren Frequenz als sonst. Die Kurve Nr. 14 hat die Form einer Dreiecksschwingung. Diese ist zwar nicht so weich wie besagte Sinusschwingung, kommt dem Ideal aber schon relativ nah. Wenn man nun noch die Frequenz eines Tonkanals auf 0, die Frequenz der Hüllkurveauf 60, und das Bit 4 im Lautstärkeregister des Kanals setzt, ertönt ein sauberes, tiefes C in einer Dreiecksschwingung. Voilä!

Dasselbe Spielchen kann man nun auch mit einer Sägezahnschwingung (Nr. 12) anstellen, nur sollte man hierbei die Frequenz verdoppeln. Wem solch ein Baß vielleicht etwas zu langweilig erscheint, der sollte die Frequenz des Tonkanals statt auf 0 auf das 8-oder 16-fache der Hüllkurvenfrequenz minus 1 (oder etwas mehr) einstellen. Dabei überlagert sich nämlich die Rechteckschwingung des Tonkanals mit der Schwingung des Hüllkurvengenerators. Nun noch einmal zurück zum einfachen Baß ohne Überlagerung: Es fallt auf, daß diese Variante ziemlich leise ist. Auch hier ein Trick: Man maskiert den betreffenden Kanal einfach im Register 7 aus. Mit dieser Methode erreichen wir auf einfache Weise eine Anschlagdynamik. Ein weiteres Manko an ST-Sounds waren bis vor einiger Zeit noch die relativ miesen Drumkits. So gab es bei einigen Songs nichts weiter als ein wildes und stotterndes »Herumgerausche«. Meine Drums klingen zwar auch nicht wie digitalisiert, aber mit ein paar effektiven und auch einfachen Tricks läßt sich die Qualität hörbar steigern.

Die Lösung hierfür läßt sich am besten als »Rausch-Arpeggios« umschreiben. Während der Soundchip einen Ton spielt, ändern wir die Rauschfrequenz oder lassen sie zu einem bestimmten Zeitpunkt ganz aussetzen. Durch die Kombination von Rauschfrequenz, Tonfrequenz und Lautstärke lassen sich erstaunlich realistisch Drums simulieren. Damit Sie jetzt nicht extra anfangen müssen, eine eigene Soundroutine zu entwickeln, die die oben genannten Tricks aufweist, habeich Ihnen diese Arbeit abgenommen. Auf der TOS-Disk finden Sie den kompletten Sourcecode inklusive der Sounddaten für ein kleines Demostück. Damit Sie die Soundroutine jetzt auch benutzen können, folgt nun eine Art Betriebsanleitung. Fangen wir am besten mit den Instrumenten an: Sie sind in der Tabelle »instrtab« definiert. Das erste Byte gibt immer die Art des Instruments an. 0 stehl für einen normalen Ton, 1 für einen Baßton mit direkter Angabe der Modulo-Frequenz, 2 für eine Mixtur von Baß- und Normalton und 3 für einen Baßton ohne Modulo-Effekt. In der Word-Tabelle muß hinter jedem Labelnamen »-b« stehen, um den Offset zum Label »b« zu erreichen (siehe auch Quelltext auf der TOS-Diskette). Dies ist notwendig, damit die Soundroutine PC-relativ bleibt. Den Aufbau zu den verschiedenen Tönen entnehmen Sie Tabelle 1.

Aufbau der Instrumente

Normalton [0]

Byte Beschreibung
2 Arpeggionummer
3 Vibratotyp (siehe Abb. 2)
4 Vibratoweite
5 Vibratoinkrement
6
7 Wavegeschwindigkeit
ab 8 Waveform mit Werten von 0-15, abgeschlossen durch $ff

Basston 1

Byte Beschreibung

2 Modulohüllkurve (PSG) (siehe Abb. 1)

3 Rauscharpeggionummer

4 Wavegeschwindigkeit

ab 5 Waveform mit Werten von 0-15. sowie 16 für Überlagerungsbaß und 17 für nicht überlagernden, lauten Baß. Abgeschlossen wird die Wave durch $ff.

Baßton 2

Byte Beschreibung

2 Modulohüilkurve (PSG)

3 Arpeggionr.

4 Vibratotyp (s. oben)

5 Vibratoweite

6 Vibratoinkrement

7 Rauscharpeggionr.

8 Wavegeschwindigkeit ab 9 Wave (wie oben)

Baßton 3

Byte Beschreibung

2 Modulohüllkurve (PSG)

3 Wavegeschwindigkeit ab 4 Wave (s. oben)

Tabelle 1. Mit diesen Effekten erreichen Sie viele Klangfarben

Arpeggios

Arpeggios sind schnelle Folgen von Noten, mit denen sich Akkorde simulieren lassen. Ihre Definition erfolgt nach dem gleichen Schema der Instrumente in der Tabelle »arpeggiotab«. Das erste Byte enthält die Geschwindigkeit des Arpeggios. Das zweite Byte gibt an, ob das Arpeggio nach einem Durchlauf erneut startet. Die restlichen Bytes stehen für die jeweilige Differenz der Arpeggio-Noten zur Basisnote in Halbtonschritten. Negative Werte sind hier nicht erlaubt. Die Reihe wird wieder mit $ff abgeschlossen. Beispiel für einen C-Dur Dreiklang:

Basisnote C ($):

dc.b 0      ; Verzögerung 0
dc.b l      ; Wiederholung nach Durchlauf
            ; wenn nicht wiederholt werden soll, 
			  dann 0 .. , 
dc.b 0,4,7,$ff ; C, C+4=E, C+7=G & Schluß...

Rausch-Arpeggios sind als Folge von Rauschfrequenzen in der Tabelle »noisearp« definiert. Genau wie bei normalen Arpeggios geben Sie zuerst die Geschwindigkeit, das Wiederholungsflag und dann die Rauschfrequenzen an. Ist Bit 5 einer Frequenz gesetzt, wird das Rauschen des betroffenen Kanals ausgeschaltet. Auch hier gilt: Abschluß der Kette mit $ff.

Sequenzen

Sequenzen sind die Bauteile, aus denen sich ein Song zusammensetzt. Sie finden Sie in der Tabelle »seqtab« - wieder als Word-Offset zu dem Label -b. In welcher Kombination sie nun auf welchem Kanal abgespielt werden, steht in den Tabellen »trackl/2/3«. In diesen Tabellen stehen jeweils die Nummern der Sequenzen hintereinander, wobei eine Null der ersten Sequenz der seqtab entspricht. Ist das Bit 7 einer Sequenznummer gesetzt, geben die untersten 6 Bit die Transponierung an. Das Programm transponiert alle nachfolgenden Sequenzen um diese Anzahl an Halbtonschritten, bis ein weiteres »Transpose-Byte« folgt. Ist zusätzlich zu Bit 7 das 6. Bit gesetzt, geben die unteren sechs Bits ebenfalls die Transponierung und die unteren 4 Bit des folgenden Bytes die maximale Lautstärke des Kanals an. Somit lassen sich auf einfache Weise Ausblendeffekte realisieren. Am Anfang eines Songs sollten Sie immer zuerst die Lautstärke einstellen, da diese zunächst immer Null ist. Dies läßt sich zum Beispiel _ durch die Kombination »$CO,1!i,seq« erreichen. Hier beträgt die Lautstärke 15 und tue Sequenzen bleiben untransponiert. Die Noten der einzelnen Sequenzen sind wie folgt aufgebaut: Das erste Byte einer Note gibt ihre Länge minus 1 an. Bei gesetztem Bit 7 gilt das nächste Byte vorzeichenrichtig als Wert für Pitch Bending. Der Ton wird je nach Vorzeichen dieses Wertes mit eben dieser Geschwindigkeit nach oben oder nach unten »verbogen«. Dies entspricht in etwa dem Pitch-Bend-Rad eines Keyboards. Ist das Bit 6 der Länge gesetzt, so wird danach kein weiterer Wert erwartet - eine entsprechende Pause findet statt. Ist Bit 5 gesetzt, muß bereits eine Note vorausgegangen sein, die jetzt einfach gehalten wird, ohne die Note erneut anzuschlagen. Die Hüllkurve der alten Note bleibt dabei aktuell, während der neue Wert die Tonhöhe bestimmt. Das zweite Byte hat verschiedene Funktionen. Wenn sein Bit 7 gesetzt ist, wechseln Sie das Instrument, dessen Nummer die unteren sieben Bit angeben. Ist das Bit 7 nicht gesetzt, muß bereits ein Instrument vorgegeben sein. Deshalb zu Beginn jeder Sequenz ein Instrument einstellen! In diesem Fall repräsentiert dieses Byte die Tonhöhe der Notein Halbtonschritten. Den Anfang bildet C1 ($0), demzufolge steht $0c (12) für C2. Ab der Tonhöhe 96 ($60) entspricht die Frequenz dem Wert 0, so daß sich diese Werte gut für ein reines Rauschen verwenden lassen. Bei einem normalen Ton und einem Baßton 3 ist jetzt schon Schluß. Verwenden Sie einen Baßton 2, folgt jetzt noch eine zweite Tonhöhe, die die Modulations-frcquenz nach gleichem Schema angibt. Bei einem Baßton 3 gibt die erste Tonhöhe die tatsächliche Frequenz des Tons an, die direkt in den Soundchip gelangt. Darauf folgen noch zwei Bytes, die ebenfalls die tatsächliche Modulationsfrequenz angeben. Dabei ist das erste das Highbyte und das zweite das Lowhyte.

center

Zum besseren Verständnis hier ein paar Beispiele:

dc.b $83,$fe,$30;

normaler Ton ohne Instrumentenwechsel mit Länge 4, Tonhöhe C5 ($30) mit
Pitchbend nach unten mit Geschwindigkeit 2 (-3=$fe)

dc.b 7,$80,$18,$18; Baßton 2 mit Instrument 0, Tonhöhe C3,
Modulationstonhöhe C3 und Länge 8 
dc.b 7, $83,60,7,129; Baßton l mit
Instruments, Frequenz 60 (entspricht C3), Modulationsfrequenz 1921
(7x256+129 oder 60x32+1), und Länge 8

Der Wert $ff schließt Sequenz ab. (ah)



Aus: TOS 04 / 1992, Seite 94

Links

Copyright-Bestimmungen: siehe Über diese Seite