Als ANSI music, 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.

ANSI music
Dateiendung: .ans[1], .ams, .mus
MIME-Type: text/x-ansi[2]
Art: Textdatei
Enthalten in: ANSI-BBS, ANSI-Art
Standard(s): ANSI-Escapesequenz (nicht Teil der Spezifikationen ANSI X3.64, ECMA-48, ISO/IEC 6429)


Ein Beispiel für ANSI-Art.

BBS-Clients und ANSI-Treiber

Bearbeiten

ANSI-Musik war nur auf Bulletin Board Systems, kurz BBS, verbreitet und benötigt einen BBS-Client oder einen ANSI-Treiber, der ANSI music 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 music unter DOS sind A_TYPE, eine Umsetzung von TYPE, der ANSI-Treiber ANSIALL sowie das Abspielprogramm ANSIPLAY.[3]

ANSI-Escapesequenz

Bearbeiten

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 music verwendet dafür Strg+N unter DOS, was ASCII SO an Position 14 dezimal bzw. 0E hexadezimal entspricht. DOS-üblich ist die Schreibweise ^N. Esc 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

Bearbeiten

Für die Tonausgabe ist ANSI music 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 # (englisch sharp) – einfache Erhöhung um einen Halbtonschritt; muss auf eine Note folgen
- (englisch flat) – 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 (englisch length) oder Dauer (englisch duration) des Tons, entspricht dem Verhältnis zwischen Note/Pause; Voreinstellung: 4
MF und MB Musik im Vordergrund (englisch foreground) oder Musik im Hintergrund (englisch background), 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:

  1. mit Setzten einer Tonlänge per Längen-Befehl L oder
  2. 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 Mary Had a Little Lamb, 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

Bearbeiten

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 (englisch column), in der sich der Cursor befindet.
←[8m Unterbindet die Ausgabe auf dem Bildschirm (Zeichenattribut „unsichtbar“, englisch invisibility).
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

Bearbeiten

Der englische Begriff case sensitivity beschreibt, wie ein System mit Groß- und Kleinschreibung umgeht. DOS ist traditionell case insensitive, 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

Bearbeiten
Bearbeiten

Einzelnachweise

Bearbeiten
  1. fileformat.info
  2. Mime types for ANSI graphics – der MIME-Typ war nur ein Vorschlag und wurde nicht übernommen.
  3. Linda R. Bloom: BBS ANSI Music Tutorial 4.1 (BBSAMT41). (ZIP; 50KB) 28. September 1994, abgerufen am 9. März 2019 (englisch, Teil der BBS Documentary Library).