Als ANSI , englisch für ANSI-Musik, wird eine Erweiterung zu ANSI-BBS bezeichnet, mit der per ANSI-Escapesequenzen einfache Melodien auf dem PC-Lautsprecher ausgeben werden können.
BBS-Clients und ANSI-Treiber ANSI-Musik war nur auf , kurz BBS, verbreitet und benötigt einen BBS-Client oder einen ANSI-Treiber, der ANSI unterstützt. Programme dafür blieben hauptsächlich auf PC-kompatibles DOS wie MS-DOS beschränkt. Nur wenige dieser Programme wurden auch auf Windows 9x und Windows NT portiert. Bekannte DOS-Programme mit ANSI-Musik-Unterstützung: QModem Telemate CI Link Slick Terminal SMT QCom BananaCom
Einfache Programme mit Unterstützung für ANSI unter DOS sind A_TYPE, eine Umsetzung von TYPE, der ANSI-Treiber ANSIALL sowie das Abspielprogramm ANSIPLAY.
Aufbau ANSI-Escapesequenz Der Aufbau der Musik-Funktion ist als Erweiterung für ANSI.SYS angelegt und wird mit der Escapesequenz CSI, Control Sequence Intro, eingeleitet, gefolgt vom Buchstaben N. Die ursprüngliche Einleitung war ←[M, diese ist allerdings in ANSI X3.64 bzw. ECMA-48 bereits für SGR0, Zeichenattribute ausschalten, vergeben, weshalb in späteren Versionen (ab Mitte der 1990er Jahre) die Einleitung ←[N verwendet wird. ANSI-BBS-Programme der späten 1990er Jahre können meist jedoch beide Varianten korrekt interpretieren.
Bei ANSI-CSI-Escapesequenzen wird die Funktion erst mit dem letzten Zeichen festgelegt. ANSI verwendet dafür unter DOS, was ASCII SO an Position 14 dezimal bzw. 0E hexadezimal entspricht. DOS-üblich ist die Schreibweise ^N. wird in DOS in den meisten Texteditoren mit dem Linkspfeil ← dargestellt.
Der gesamte Aufbau von ANSI-Musik folgt damit der ANSI-Escapesequenz CSI: ←[N <Musik-Befehle...> ^N Das entspricht dezimal 027 091 078 <Musik-Befehle...> 014 oder hexadezimal 1B 5B 4E <Musik-Befehle...> 0E.
Musik-Befehle und Syntax Für die Tonausgabe ist ANSI angelehnt an die Funktion PLAY von BASIC. Da in MS-DOS bis Version 4.01 GW-BASIC enthalten ist, kann ein Musikstück relativ einfach vorab erstellt und dann in einem Texteditor in eine ANSI-Escapesequenz übertragen werden. Bei späteren MS-DOS-Versionen ist dessen Nachfolger QBasic enthalten.
+ ANSI-Musik-Befehle A-G Note aus der Tonleiter; Beispiel C-Dur: C D E F G A B P Pause (kein Ton) + oder # ♯ () – einfache Erhöhung um einen Halbtonschritt; muss auf eine Note folgen - ♭ () – einfache Erniedrigung um einen Halbtonschritt; muss auf eine Note folgen . punktierte Note – die Note wird um die Hälfte ihrer Dauer verlängert; muss auf eine Note oder Pause folgen; mehrere Punkte sind möglich Tnnn Tempo, nnn zwischen 32 und 255; Voreinstellung: 120 On Oktave Nummer n; Voreinstellung: Oktave 3 < oder > Oktave um eins erniedrigen (<) oder erhöhen (>). Lnn Länge () oder Dauer () des Tons, entspricht dem Verhältnis zwischen Note/Pause; Voreinstellung: 4 MF und MB Musik im Vordergrund () oder Musik im Hintergrund (), die Voreinstellung ist normalerweise als Hintergrundprozess. MN Musik Normal, setzt die Dauer auf 7/8 per L-Befehl ML Musik Legato, setzt die Dauer auf voll (1/1) per L-Befehl MS Musik Staccato, setzt die Dauer auf 3/4 per L-Befehl
Zum Schreiben der Noten gibt es zwei Methoden: mit Setzten einer Tonlänge per Längen-Befehl L oder mit Tonlängenangabe nach jeder Note. Die Lesbarkeit der programmierten Noten ist bei Verwenden des Tonlängen-Befehls geringer.
Am Beispiel der ersten Zeile des Lieds , nach der 1. Methode mit Längen-Befehl: L4 EDCDEE E2 DD D2 EG G2
Und nach der 2. Methode mit der Tonlänge nach jeder Note: E4 D4 C4 D4 E4 E4 E2 D4 D4 D2 E4 G4 G2
Der vollständige ANSI-Musik-Befehl für diese Liedzeile kann wie folgt aussehen: ←[N T90O2E4D4C4D4E4E4E2D4D4D2E4G4G2 ^N
Teil einer ANSI-Escapesequenz Weil ANSI-Musik sonst die Textausgabe auf dem Monitor unterbricht und eventuell zu Darstellungsproblemen führt, sollten vor der Musik-Ausgabe die aktuelle Zeilen-Position und die Attribute gesichert werden, und danach zurückgesetzt. Das erledigen die ANSI-Escapesequenzen ←[s ←[8m vor dem Musikteil und ←[u ←[a ←[0m danach.
+ ANSI-Escapesequenzen gem. ANSI X3.64 ←[s Speichert die aktuelle Zeile (), in der sich der Cursor befindet. ←[8m Unterbindet die Ausgabe auf dem Bildschirm (Zeichenattribut „unsichtbar“, ). ANSI music... Beispiel: ←[Ncdefgab^N ←[u Setzt den Cursor in die zuvor mit ←[s gespeicherte Zeile zurück. ←[a Setzt den Cursor an den Anfang der aktuellen Zeile. ←[0m Setzt die Zeichenattribute zurück (nicht mehr unsichtbar).
Groß-/Kleinschreibung Der englische Begriff beschreibt, wie ein System mit Groß- und Kleinschreibung umgeht. DOS ist traditionell , es ist also nicht relevant, ob ein Großbuchstabe oder ein Kleinbuchstabe geschrieben wird. Dadurch bedeutet ←[M dasselbe wie ←[m und auch die Noten können sowohl groß als auch klein geschrieben werden.
Siehe auch ANSI-Art
Weblinks ANSI Music + SMILE Viewer im Webarchive (englisch) ANSI MUSIC FILES (englisch)
Einzelnachweise
Ascii Art