PLAY

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Weitere Bedeutungen finden sich unter PLAY (Begriffsklärung).
PLAY
Syntax: PLAY <n>
Parameter
n: Abspielmodus (0..2)
Einordnung
Typ: Anweisung
Kontext: Soundkontrolle
Aufgabe: Abspielen der Musik
Abkürzung: keine
Token: $64 $21 (100 33)
Verwandte Befehle
WAVE - ENVELOPE - MUSIC - VOL


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

Typ: Anweisung 
Syntax: PLAY <n>

PLAY startet das Abspielen des mit MUSIC definierten Musikstücks (er setzt dazu das Gate-Bit, siehe auch WAVE).

Der Parameter <n> steuert dabei die Art und Weise, wie der Interpreter abspielt:

n = 1 : Simons' Basic wartet, bis das Musikstück zu Ende ist und fährt erst danach im Programm fort. Durch Aneinanderreihung von mehreren MUSIC-Befehlen kann man damit beliebig lange Musikstücke spielen.
n = 2 : Simons' Basic setzt den Programmlauf ohne anzuhalten fort (Interrupt-Betrieb). Das Stück spielt im Hintergrund, während das Programm weiter läuft. Es ist dabei nur ein MUSIC-Befehl anwendbar.
n = 0 : Hiermit beendet Simons' Basic den Interrupt-Betrieb. Entgegen den Angaben im Handbuch läuft die Musik weiter, jedoch nicht mehr parallel zum Programm, sondern wie nach PLAY 1.

Bei einem Programmabbruch endet auch die Abarbeitung des MUSIC-Strings und der zuletzt angeschlagene Ton bleibt aktiv. Mit WAVE <stimme>,00000000 kann man ihn verstummen lassen (in TSB: WAVE <stimme>,0).

Wird kein Parameter eingegeben, so erscheint die Fehlermeldung ?SYNTAX ERROR. Der Interpreter akzeptiert Werte für <n> zwischen 0 und 255, wobei alle Werte außer 1 und 2 wie 0 behandelt werden. Werte außerhalb des Bereichs werden mit dem Fehler ?ILLEGAL QUANTITY ERROR quittiert.

In TSB kann man statt PLAY 0 auch PLAY OFF verwenden. PLAY ON schaltet die Musik wieder im Hintergrund spielend ein (also entsprechend n = 2).

Beachten: Da PLAY davon ausgeht, dass in MUSIC eine abspielende Stimme festgelegt wurde, stürzt Simons' Basic ab, wenn dies nicht erfolgt ist (behoben in TSB).

Beispiele[Bearbeiten | Quelltext bearbeiten]

Ein Anwendungsbeispiel findet sich beim Simons-Basic-Befehl MOB SET Beispiel 2.

Beispiel 1: PLAY 1[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

Der Befehl VOL 0 wird erst durchgeführt, wenn das Abspielen der Musik beendet ist.


Beispiel 2: PLAY 2[Bearbeiten | Quelltext bearbeiten]

Im folgenden Beispiel, das (wenig verändert) aus dem Trainingsbuch zum Simon's Basic stammt, wird die Stimme im Interrupt abgespielt und angepasst dazu der Text am Bildschirm ausgegeben. Der Wert 1815 in Zeile 610 muss daher mitgeändert werden, wenn man das Tempo des Stücks (in Zeile 370 den Wert 10) verändert.

100 REM quelle: das trainingsbuch zum simon's basic s.361
110 REM" korrigiert von A. Dettke

120 REM ### music/play-beispiel ###
190 REM ### ade zur guten nacht ###
220 REM
240 REM
250 REM noten
260 REM
270 a$="{clr}1c4{f3}f4{f7}g4{f3}{cbm-b}4{f3}a4{f3}xa4{f1}g4{f1}f4{f3}g4{f3}a4{f7}{cbm-b}4{f3}d5{f3}c5{f3}xc5{f1}{cbm-b}4{f1}a4{f3}"
280 a$=a$+"c5{f3}xc5{f3}{cbm-b}4{f1}a4{f1}{cbm-b}4{f3}c5{f3}a4{f7}zz{f3}"
290 b$="c5{f3}a4{f7}c5{f3}f5{f3}d5{f3}xd5{f1}c5{f1}{cbm-b}4{f3}x{cbm-b}4{f3}g4{f7}{cbm-b}4{f3}d5{f3}c5{f3}x"
300 b$=b$+"c5{f1}{cbm-b}4{f1}a4{f3}c5{f3}xc5{f3}{cbm-b}4{f1}a4{f1}{cbm-b}4{f3}c5{f3}a4{f7}zz{f3}{clr}g"
320 REM
325 VOL 15 : REM lautstaerke
330 REM dreieck :
340 ENVELOPE 1,4,5,5,9
350 WAVE 1,00010000
360 REM
370 MUSIC 10,a$ + b$ + b$
380 PLAY 2

390 REM" textausgabe (synchronisiert auf Tempo 10)
400 PRINT CHR$(147): CSET 1
410 PRINT "Ade zur gu-ten Nacht,"
420 EXEC warte
430 PRINT "jetzt wird der Schluss gemacht,"
440 REM
450 EXEC warte
460 PRINT " dass ich muss schei-den."
470 EXEC warte
480 FOR x=1 TO 2
490 PRINT
500 PRINT "Im Sommer, da waechst der Klee,"
510 EXEC warte
520 PRINT "im Winter, da schneit's den Schnee,"
530 EXEC warte
540 PRINT " da komm ich wie-der."
550 EXEC warte
560 NEXT x
570 WAVE 1,0: PLAY 0: VOL 0
590 END  

600 PROC warte 
610 FOR w=1 TO 1815 : NEXT w
620 END PROC