TEMPO
TEMPO | |
Syntax: | TEMPO <n> |
Parameter | |
<n>: numerischer Ausdruck im Wertebereich von 1 bis 255 | |
Einordnung | |
Typ: | Anweisung |
Kontext: | Tonerzeugung |
Aufgabe: | Spieltempo für das Abspielen von Musiknoten festlegen |
Abkürzung: | teM |
Token: | $fe $05 (254 5) |
Verwandte Befehle | |
ENVELOPE, FILTER, PLAY, VOL |
Anmerkung: Dieser Artikel beschreibt den BASIC-Befehl TEMPO ab Commodore BASIC V7.0 oder höher.
Die Anweisung TEMPO gibt das Spieltempo für das Abspielen bzw. Anschlagen einer Musiknote mittels PLAY vor.
Der Parameter n wird als ganzzahliger Wert aufgefasst und kann Werte von 1 (lang anhaltender Ton) bis 255 (kurz angeschlagen) annehmen. Voreingestellt ist der Wert 16. Parameterwerte außerhalb dieses Bereichs führen zur BASIC-Fehlermeldung ?ILLEGAL QUANTITY ERROR. Eine von der Programmiersyntax abweichende Parameteranzahl löst einen ?SYNTAX ERROR aus.
Die Dauer eines Volltons bei TEMPO N kann wie folgt berechnet werden (in Sekunden):
Videostandard Dauer exakt Dauer näherungsweise PAL (INT(1152/N)+1)/50
23.06/N
NTSC (INT(1152/N)+1)/60
19.22/N
Beispiele[Bearbeiten | Quelltext bearbeiten]
Tondauer nach einem Systemstart herstellen[Bearbeiten | Quelltext bearbeiten]
100 TEMPO 16: PLAY "Q" Zustand nach Systemstart: Tempo 16 und 1/4 Noten 110 T0=TI Zeitmessung beginnen 120 PLAY "CM" einen Ton anschlagen und abwarten 130 D=TI-T0 Messung Ende, Zeitdauer 140 PRINT D, D/60 Zeitdauer in Ticks und Sekunden
Zum Vergleich mit den Systemstarteinstellungen Zeile 100 auskommentieren bzw. weglassen. In beiden Fällen sollte folgendes Ergebnis aufscheinen (für PAL-Systeme):
23 0.383333333 |
Tondauer messen und berechnen[Bearbeiten | Quelltext bearbeiten]
100 N=1 : REM TEMPO PARAMETER 110 L=1 : REM TONLAENGE: 1=VOLL, 120 : REM 2=HALB, 4=VIERTEL, 130 : REM 8=ACHTEL, 16=SECHZEHNTEL 135 VF=60 140 PRINT USING ">##########: ###### #####";"","TICKS","SEK." 150 TEMPO 255 160 PLAY "U0CM" : REM IRQ-SYNCHRON: KURZEN TON ANSCHLAGEN UND WARTEN 170 TEMPO N 180 T0=TI: PLAY "W.CM": T1=TI : REM VOLLTON, HALBTON LAENGER, C-TON MIT WARTEN 190 D=T1-T0 200 PRINT USING ">##########: #### ##.###";"GEMESSEN", D, D/60 210 B=INT(1152*1.5/L/N)+1 220 PRINT USING ">##########: ####.# ##.###";"BERECHNET", B/VF*60, B/VF 230 BM=INT((B+(VF-1)/60)/VF*60) 240 PRINT USING ">##########: #### ##.###";"BERECH.MAX", BM, BM/60
- Die gemessene Dauer liegt zwischen der berechneten Dauer und dem berechneten Maximumwert.
- Der Basiswert für einen Vollton ist $0480 = 1152, der für einen Zähler (je Stimme) verwendet wird, der bei jedem Rasterzeilen-Interrupt (einer pro Bild) um n (den TEMPO-Parameter) herunter gezählt wird bis er kleiner 0 wird.
Videostandard ermitteln[Bearbeiten | Quelltext bearbeiten]
Eine etwas ungewöhnliche Anwendung unter Ausnutzung der vermischten Implementierung von Grafik und Musik, um den Videostandard auf einem C128 zu erkennen:
100 GOSUB 1000 110 IF VN THEN PRINT "NTSC": ELSE PRINT "PAL" 999 END 1000 TEMPO 100: PLAY "SRM": VN=TI: PLAY "WRM": VN=(TI-VN)<13 1010 RETURN
Unterprogramm ab Zeile 1000 liefert in Variable VN für NTSC -1 und für PAL 0.
Der erste PLAY-Befehl synchronisiert mit einer 1/16tel-Pause auf den den Rasterzeilen-IRQ, um dann das 2. PLAY mit der Volltonpause möglichst genau zu messen.
Fehler im Bedienungshandbuch zum Commodore 128 und 128D[Bearbeiten | Quelltext bearbeiten]
Deutsche Ausgabe, Frankfurt 1985 auf den Seiten 4-128 und 4-159:
- TEMPO-Parameter n soll auf 8 voreingestellt sein.
Richtig: Voreingestellt ist 16, nachprüfbar laut o.g. BASIC-Beispiel. - Der Wertebereich für den Parameter wird mit 0 bis 255 angegeben, wobei 0 den Ton halten soll.
Richtig: Ein Aufruf mitTEMPO 0
führt zur Fehlermeldung "?ILLEGAL QUANTITY ERROR". Der gültige Wertebereich ist von 1 bis 255. - Die Berechnung der Tondauer wird mit 19.22/n angegeben, was lediglich näherungsweise und nur für Geräte mit NTSC gilt.
Richtig: Die Formel hängt vom Videostandard ab, da die Tondauer über die Rasterzeilen-Interrupt implementiert ist. Siehe Tabelle oben.
APPEND | BANK | BEGIN | BEND | BLOAD | BOOT | BSAVE | BUMP | CATALOG | COLLISION | COLOR | CONCAT | DCLEAR | DCLOSE | DOPEN | DVERIFY | ENVELOPE | FAST | FETCH | FILTER | GO64 | MOVSPR | (OFF) | PEN | PLAY | POINTER | POT | (QUIT) | RECORD | RREG | RSPCOLOR | RSPPOS | RSPRITE | RWINDOW | SLEEP | SLOW | SOUND | SPRCOLOR | SPRDEF | SPRITE | SPRSAV | STASH | SWAP | TEMPO | WIDTH | WINDOW | XOR