Die Microsoft-BASIC-Familie stellt zur Programmierung von Tönen den
SOUND
-Befehl zur Verfügung. Speziell PC-seitig stehen noch
PLAY
zur Verfügung, beim Amiga ist es WAVE
.
Dieser Artikel vermittelt Ihnen einige Grundlagen dazu, allerdings
beschränkt sich dieses Kapitel nur auf die Möglichkeiten des
internen PC-Lautsprechers, da für eine Soundkarte direkte
Hardware-Ansteuerung nötig ist.
Unser menschliches Ohr nimmt Frequenzen im Bereich 20 Hz bis 20 kHz wahr. Interessant ist dabei der Aspekt Musik: Damit Sie eine bekannte Musikmelodie erkennen, ist nicht die absolute Tonhöhe massgebend, sondern nur die Frequenzverhältnisse: Einfache Verhältnisse (z.B. 2:3) werden vom Ohr als Harmonien wahrgenommen, komplizierte Verhältnisse als Disharmonien. Die ganz alten Musikinstrumente wurden auch seinerzeit harmonisch gestimmt. Als Vorteil ergaben sich gegenüber den heutigen Musikinstrumenten wesentlich schönere Klangharmonien, da die Frequenzverhältnisse waren wirklich rationale Zahlen, d.h. als Bruch zweier ganzer Zahlen darstellbar. Der Nachteil dafür war, dass keine Transponierung (Wechsel der Tonart) möglich war, ohne die Musikinstrumente neu zu stimmen. So waren damals ein Es und ein Dis (D#) auch tatsächlich zwei verschiedene Töne.
Als Abhilfe gegen das vorhin erwähnte Problem wurde von Johannes
Sebastian Bach die temperierte Tonleiter eingeführt. Mit etwas
Mathematik können wir dies sogar selber herleiten: Wie vorhin
erwähnt, interessiert sich das Ohr nur für Frequenzverhältnisse,
also müssen wir eine Zahlenreihe bilden, welche logarithmisch
gesehen eine gleichmässige Teilung aufweist. Wir wissen ferner noch, dass
das Frequenzverhältnis bei der Oktave 1:2 beträgt, ferner
wissen Sie, falls Sie ein Musikinstrument spielen, dass die Oktave in 12
Halbtonschritte unterteilt wurde: c c# d d# e f f# g g# a b h c'.
Daraus ergibt sich die in BASIC-Schreibweise geschriebene Gleichung
x^12 = 2
, was aufgelöst x = 2^(1/12)
ergibt.
Als Basis wurde international der Kammerton a auf die bekannten 440 Hz
festgelegt. Mit all diesem Wissen sind wir nun in der Lage, die Frequenz zu
jedem beliebigen Musikton selber berechnen zu können:
' Temperierte Tonleiter von c bis c' FOR note% = -9 TO 3 SOUND 440! * 2! ^ (CSNG(note%) / 12!), 9! NEXT note%
Mit etwas Phantasie können Sie damit Ihren PC bereits in ein primitives Keyboard-Klavier umwandeln:
' Mini-Klavier PRINT "Ende mit Esc" DO ' Warten auf Taste DO t$ = INKEY$ LOOP WHILE t$ = "" ' Taste auswerten IF LEN(t$) = 1 THEN h% = INSTR(CHR$(9) + "1q2we4r5t6zu8i9op'ü^¨" + CHR$(8) + CHR$(13), t$) ' h% entspricht einer Durchnummerierung von 1=c(Tab), 2=cis(1), 3=d(q) usw. IF h% <> 0 THEN ' nur falls gefunden SOUND 440! * 2! ^ (CSNG(h% + 2) / 12!), 3! END IF END IF LOOP UNTIL t$ = CHR$(27)
Die normalen C-Dur-Tasten finden Sie auf der Reihe Tab (c), Q (d), W (e), E (f), R (g) usw., die Halbtöne entsprechend der Anordnung am Klavier auf 1 (c#), 2 (d#), 4 (f#), 5 (g#) usw.. Im Prinzip könnten Sie die Tasten Ihrer PC-Tastatur schwarz und weiss anmalen... :-) Für den legendären Commodore 64 gab es sogar früher spezielle solche Klavier-Tastaturaufsätze.
Sicherlich haben Sie sich auch schon gefragt, warum man die Tondauer statt
einfach in Sekunden in dieser merkwürdigen Einheit von ungefähr
55 ms angeben muss. Die Ursache dazu liegt beim seinerzeit von IBM
gewählten Uhrenbaustein, welcher pro Stunde genau 2^16
=65'536
Takte ausführt (siehe dazu auch Flimmerfreie Animationen), so dass
3600 / 2^16
diese bekannten 54,931640625 ms ergibt oder der
Kehrwert (2^16 / 3600
) davon diese berühmten 18,20444444..
Einheiten ergeben. Der grosse Vorteil bei der Verwendung ist die
Unabhängigkeit der Abspielgeschwindigkeit zur CPU-Leistung.
Was bei Grafik das DRAW
-Kommando für komplexere
Befehlsfolgen darstellt, ist bei Musik bekanntlich das
PLAY
-Kommando. In der Hilfe-Datei QBASIC.HLP ist
dieses Kommando recht gut beschrieben, daher beschränke ich mich hier nur
auf das Erwähnen einiger Fallstricke und Tips:
"OnLkTt.."
beginnen. d.h. Sie sollten zumindest diese drei Parameter
Oktave (n), Tonlänge (k) und Tempo (t) zu
Beginn absolut festlegen, erst danach können Sie nach Belieben
mit <
und >
relativ zu vorher
erhöhen und erniedrigen.Beispiele von PLAY
finden Sie in den Spielen Wurmi, Zelda
2 sowie Pong.
Siehe Artikel 8-stimmige Musik.