WAVE

Aus C64-Wiki
Zur Navigation springenZur Suche springen
WAVE
Syntax: WAVE <stimme>, <bitmuster>[,<puls> (nur TSB)]
Parameter
stimme: Stimme (1..3)
bitmuster: Muster aus 8 Nullen oder Einsen oder (nur TSB) Byte-Variable
puls: (nur TSB) Pulsbreite (0..4095), optional
Einordnung
Typ: Anweisung
Kontext: Soundkontrolle
Aufgabe: Festlegen einer Wellenform für eine der drei Stimmen
Abkürzung: keine (in TSB: wA)
Token: $64 $26 (100 38)
Verwandte Befehle
VOL - ENVELOPE - MUSIC - PLAY


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort WAVE.

Typ: Anweisung 
Syntax: WAVE <stimme>, <bitmuster> Syntax TSB: WAVE <stimme>, <bitmuster>[,<puls>]

WAVE legt die Wellenform der zu spielenden Töne fest und schaltet sie mit dem Steuerbit (Bit 0, auch Gate-Bit oder Key-Bit) ein oder aus (siehe auch PLAY). Jede Stimme wird individuell angesprochen (erster Parameter), WAVE beeinflusst also die SID-Register $D404 (Stimme 1), $D40B (Stimme 2) und $D412 (Stimme 3).

Das Bitmuster im Parameter <bitmuster> wird als 8-stellige Konstante in Binärdarstellung erwartet, andernfalls wird mit Fehler ?NOT BINARY CHAR ERROR abgebrochen. Der Wert stellt eine Reihe von Schaltern für eines der oben genannten Wellenformregister dar. Eine "1" aktiviert folgende SID-Features für die jeweilige Stimme aus Parameter <stimme>:

Bit SID-Feature
7 Rauschgenerator
6 Rechteck
5 Sägezahn
4 Dreieck
3 Testbit
2 Ringmodulation
1 Sync (Stimme 1 mit 3, 2 mit 1 bzw. 3 mit 2)
0 Steuerbit (Stimme an/aus)

In TSB kann (ab Version 2.20906) die Bitmuster-Konstante durch eine beliebige Variable, die einen 8Bit-Wert transportiert, ersetzt werden.

Für das Setzen der Pulsbreite, die zum Erzeugen einer klingenden Rechteckschwingung (Bit 6) erforderlich ist, bietet Simons' Basic keinen Befehl (in TSB hängt man diesen Wert als dritten Parameter <puls> an WAVE an). Man kann sich mit zwei POKEs behelfen: POKE SOUND+(SN-1)*7+2, PB AND 255: POKE SOUND+(SN-1)*7+3, PB/256, wobei SN eine Variable mit der Stimmennummer im Bereich von 1 bis 3 ist.
Die Pulsbreite ist intern als 12-Bit-Wert realisiert und kann sinnvollerweise nur Werte von 0 bis 4095 annehmen. In der Nähe der Extremwerte (0 oder 4095) wird ein Ton mit Rechteckschwingung stark gedämpft bis unhörbar.

Von den Bits 4 bis 7 (Wellenform) sollte immer nur eines auf "1" gesetzt werden, andernfalls werden die jeweiligen Ausgaben der Töne gegenseitig geANDet.

Die unteren vier Bits haben folgende Bedeutung:

Testbit
Wenn eine Schwingungsform gleichzeitig mit dem Rauschgenerator läuft, kann es vorkommen, dass der Rauschgenerator aussetzt. Das Testbit aktiviert ihn auf jeden Fall. Sollte sonst 0 sein.
Ringmodulation
Die Dreiecksschwingung von Stimme 1 wird durch ein Gemisch aus Stimme 1 und 3 ersetzt (auch wenn Stimme 3 stumm ist). Entsprechendes gilt für die anderen Stimmen.
Synchronisation
Vermeidet Schwebungen, wenn zwei Stimmen parallel erklingen.
Steuerbit
Schaltet eine Stimme ein (1) und führt die ENVELOPE-Parameter Attack, Decay und Sustain aus. Der Wert 0 startet den Release-Parameter von ENVELOPE (was den Ton letztlich abschaltet). Der Befehl PLAY setzt ebenfalls das Steuerbit.

Wenn die Parameteranzahl von 2 (in TSB: 3) abweicht, erscheint die Fehlermeldung ?SYNTAX ERROR. Eine falsche Stimmennummer (kleiner als 1 oder größer als 3) führt zu einem ?BAD MODE ERROR. Andere Zeichen als "0" oder "1" oder zu wenige Zeichen im Bitmuster erzeugen einen ?NOT BINARY CHAR ERROR.

Hinweis: Da WAVE die Einstellungen, die von ENVELOPE vorgenommen werden, steuert, sollte ENVELOPE auf jeden Fall vor WAVE im Programm ausgeführt werden.

Beispiel[Bearbeiten | Quelltext bearbeiten]

100 VOL 15
110 ENVELOPE 1,1,8,10,10
120 WAVE 1, 00100000
130 MUSIC 150, "{clear}1c2{f2}{clr}g"
140 PLAY 1
150 VOL 0

Das Programm spielt mit Stimme 1 mit sehr langsamem Tempo (150) den Sägezahn-Ton c2 als Viertelnote.

Ein komplettes Anwendungsbeispiel beim Simons-Basic Befehl MOB SET Beipiel 2.

Das Beispiel im TSB-Befehl SOUND zeigt den Einsatz von WAVE mit den TSB-Parametern.