Grundlagen der Ton- und Musikprogrammierung

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.

Rund um das Thema Frequenz

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.

Die temperierte Tonleiter von Johannes Sebastian Bach

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.

Der Tondauer-Parameter bei SOUND

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.

Musik mit PLAY erzeugen

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:

Beispiele von PLAY finden Sie in den Spielen Wurmi, Zelda 2 sowie Pong.

Nur Amiga: WAVE-Befehl

Siehe Artikel 8-stimmige Musik.


Wieder zurück zur Übersicht


© 2000 by Andreas Meile