ANSI music
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) |
BBS-Clients und ANSI-Treiber
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]
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 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
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.
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:
- 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 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
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.
←[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
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
Weblinks
- ANSI Music + SMILE Viewer im Webarchive (englisch)
- ANSI MUSIC FILES (englisch)
Einzelnachweise
- fileformat.info
- Mime types for ANSI graphics – der MIME-Typ war nur ein Vorschlag und wurde nicht übernommen.
- 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).