Zu der Entstehung dieses Programmes ist zu sagen, daĂ ich mich mit den Möglichkeiten der Soundprogrammierung auf dem Atari ST vertraut machen wollte. Dabei ist es am Anfang doch recht schwer gewesen, mit den Anweisungen SOUND und WAVE ein vernĂŒnftiges Ergebnis zu bekommen. Deshalb habe ich mich hingesetzt und ein Basicprogramm geschrieben, welches erlaubt, die Parameter mittels Maus auf dem Bildschirm zu Ă€ndern und den Sound, den der Chip im Computer erzeugt, gleich nach der Ănderung zu hören. Ebenfalls wird als Ergebnis eine Basiczeile ausgegeben, die den gerade eingestellten Sound auch zu einem anderen Zeitpunkt in einem anderen Programm durch diese Zeile einfach erzeugen lĂ€Ăt. Bevor ich aber jetzt auf das Programm zu sprechen komme, werde ich erst einmal die SOUND-und WAVE-Anweisung nĂ€her erklĂ€ren.
Unser Computer besitzt zur Sound-Erzeugung einen Sound-Chip mit der Bezeichnung YM-2149. Dieser hat eine Vielzahl an Registern, die erst entsprechend gesetzt werden mĂŒssen, bevor ein Ton erklingen kann. Die Alarmglocke und das Tastatur klicken sind ebenfalls vom Betriebssystem erzeugte Soundkommandos mittels des ICs. Wenn wir nun mit SOUND- und WAVE-Befehl einige Register setzen und danach die Alarmglocke oder das Tastaturklicken ertönt, sind die Register mit anderen Werten verĂ€ndert worden. Der SOUND-Befehl in Basic hat maximal 5 Parameter, das heiĂt, wenn wir nur die ersten zwei Parameter angeben, bleiben die anderen unverĂ€ndert. Der SOUND-Befehl lautet also:
SOUND Kanal, LautstÀrke, Tonhöhe, Oktave, Dauer
Wir haben drei KanĂ€le, mit denen wir gleichzeitig einen Sound erzeugen können. Daraus folgt, daĂ der Parameter âKanalâ die Werte 1, 2 und 3 annehmen kann. Bei dem Parameter âLautstĂ€rkeâ ergibt 15 volle LautstĂ€rke und 0 entspricht âganz leiseâ. Der Parameter âTonhöheâ kann die Werte von 1 bis 12 annehmen, da eine Oktave aus 12 Tonstufen (einschlieĂlich den Halbtönen) besteht.
C, C#, D, D#, E, F, F#, G, G#,A, A#, H
Dies ist fĂŒr einen Nichtmusiker nicht ganz klar, da dieser die Tonleiter vielleicht nur mit 8 Tönen kennt. Der Frequenzbereich von 30 Hz bis fast in den unhörbaren Bereich erlaubt eine Unterteilung in 8 Oktaven. Die Werte fĂŒr diesen Parameter liegen also zwischen 1 und 8. Die Tondauer bestimmt die Zeit, wie lange das Programm an dieser Anweisung verweilt, bevor es weitere Anweisungen abarbeitet. Diese Zeitdauer wird in 1/50 sec gemessen. Das heiĂt, fĂŒr eine Pause nach dem Einschalten des Tons fĂŒr 5 Sekunden muĂ man den Wert 250 angeben. Es leuchtet auch ein, wenn man die SOUND-Anweisung als exakte Zeittiming Anweisung in sein Programm einbauen kann, indem man die LautstĂ€rke gleich Null setzt. Der Parameter âDauerâ kann Wert zwischen 0 und 255 annehmen.
Man kann die Dauer auch entfallen lassen, dann fÀhrt das Programm sofort weiter. Der Ton wird erst wieder durch eine neue SOUND-, WAVE-Anweisung, Tastatur klicken oder durch die Alarmglocke verÀndert.
Der WAVE-Befehl hat ebenfalls fĂŒnf Parameter. Diese sind aber etwas schwieriger zu verstehen, da hier mit Dualzahlen gearbeitet wird. Aber keine Angst, ich habe es auch verstanden.
Dies sind die Parameter. Der erste dient zum Mischen der einzelnen KanÀle. Soll zum Beispiel Kanal 1 und Kanal 2 erklingen und aus Kanal drei Rauschen ertönen, so muà eine 35 gesetzt werden. An einer Tabelle wird es vielleicht deutlicher:
WAVE Ton Osz./Rausch Osz.,HĂŒllkurve,HĂŒllkurvenform,Periode,Dauer
Tongenerator fĂŒr KanĂ€le ein/aus: K3 K2 K1 Unser
Rauschgeneratorf. KanÀle ein/aus: K3 K2 Kl : : : Parameter
Dual: 1 0 0 0 1 1
Dezimal: 32 + 0 + 0 + 0 + 2+1=35
Jede 1 bedeutet ein gesetztes Bit. Wer sich ein wenig mit BinĂ€rzahlen auskennt, kann die Dezimalzahl direkt ablesen. Man kann aber auch einfach das Ergebnis mittels Tabelle schnell errechnen. Der Maximale Zahlenbereich fĂŒr diesen Parameter liegt also zwischen 0 und 63. Null schaltet somit alles aus. Der zweite Parameter wird ebenfalls nach gleichem Schema errechnet, nur diesmal liegen hier die Werte von 0 bis 7. Dieser Parameter gibt dem Chip die Anweisung fĂŒr welchen Kanal die HĂŒllkurvenform oder die LautstĂ€rke (bei SOUND-Befehl) gelten soll.
Eine gesetzte Null bedeutet: dieser Kanal erhĂ€lt das Volumen ĂŒber den letzten SOUND-Befehl, eine Eins bedeutet, daĂ die LautstĂ€rke ĂŒber die HĂŒllkurvenform geregelt wird. Wie aus der Tabelle ersichtlich, liegen die Werte zwischen 0 und 7. Der Parameter âHĂŒllkurvenformâ bestimmt eine Form, nach der die LautstĂ€rke vom IC geregelt wird. Dies ist eine 4-stellige Dualzahl, wobei jedes Bit fĂŒr Continue, Attack, Alternate und Hold zustĂ€ndig ist. Damit ist der Wertebereich auf 0 bis 15 beschrĂ€nkt. Allerdings ergibt nicht jede Zahl eine sinnvolle HĂŒllkurvenform. Der sinnvolle Bereich liegt von 8 bis 15.
Dies sollte man einfach einmal mit dem Programm testen und vor allem hören. Der nĂ€chste Parameter beeinfluĂt ebenfalls die HĂŒllkurve. Jede HĂŒllkurve wird periodisch wiederholt, dies geschieht in einer ganz bestimmten Dauer - der Periodendauer. Diese Zahl kann Werte von 0 bis 65 535 annehmen. 65 535 bedeutet hierbei eine lange Periode. Bei Perioden unter 500 kann man feststellen, daĂ die HĂŒllkurve durch eine sehr schnelle Schwingung ebenfalls eine hörbare Frequenz erzeugt. Der letzte Parameter bestimmt ebenfalls - wie bei SOUND â eine Wartezeit, bevor das Programm weiter arbeitet (s. Dauer unter SOUND).
Und nun zu dem Programm. Ich habe versucht, die Möglichkeiten der Werte fĂŒr das SOUND- und WAVE-Kommando zu vereinfachen, indem ich die Berechnung der Dualzahlen ĂŒbernehme. Der Benutzer kann einfach Rauschen des 1. Kanals einschalten, ohne zu ĂŒberlegen, welchen Wert der WAVE-Befehl nun bekommt. Dies kann er dann in der unteren Zeile sehen.
Nachdem Sie das Programm hoffentlich fehlerfrei eingetippt haben, sollten Sie es erst einmal speichern, da falsche POKE-Anweisungen schnell zu einem Absturz fĂŒhren können. Danach kann man es mit RUN starten. Es sollte nun ein Bildschirmaufbau wie in der Abb. zu sehen sein. FĂŒr jeden Kanal existiert eigens ein Einstellfeld. Durch Anklicken des jeweiligen Begriffes wird sich dieser Ă€ndern. Klicken Sie mit der linken Taste, so wird die Zahl des zugehörigen Begriffes erniedrigt, mit der rechten um eins addiert. Die HĂŒllkurvenform und die Periodendauer gelten fĂŒr alle drei KanĂ€le, somit stehen sie in einem gesonderten Kasten. Da die Periode einen relativ groĂen Bereich mit ihren Zahlen abdeckt, habe ich mich entschlossen, hier den Faktor 100 fĂŒr das Andern zu nehmen. Um das Programm zu verlassen, mĂŒssen beide Maustasten gleichzeitig betĂ€tigt werden. Hierbei muĂ der Mauszeiger natĂŒrlich auf âProgrammendeâ stehen.
Mir war das Programm recht hilfreich, man kann schnell einige Effekte programmieren. Zum Beispiel:
ein Hubschrauber beim Fliegen
: sound 1,15,10,4:sound 2,15,l,l:sound 3,15,12,8:wave 56,7,10,400
einmaliges AnschlÀgen eines Glöckchens
: sound 1,15,10,6:wave 1,1,9,65500
einmaliges AnschlÀgen eines tiefen Gongs
: sound 1,15,8,3:wave 1,1,9,65500
Pfeifton
: sound 1,15,12,8,:wave 0,1,10,0
gleichmĂ€Ăiges Motorendröhnen
: sound 1,15,2,2:wave 1,1,10,100
ungleichmĂ€Ăiges MotorengerĂ€usch
: sound 1,15,1,2:wave 1,1,10,100
MotorengerÀusch, FahrgerÀusch und Wasserrauschen
: sound 1,15,1,3:sound 2,11,1,2:sound 3,11,1,1:wave 35,1,10,300
Diese Beispiele finden Sie im Listing âSOUNDSâ. Nach dem Starten können Sie die Sounds hören, durch DrĂŒcken einer Taste kommt der nĂ€chste.