120 lines
6.4 KiB
Plaintext
120 lines
6.4 KiB
Plaintext
ANSI Music - The Technical Details
|
|
|
|
ANSI is an acronym for "American National Standards Institute" and
|
|
actually has little to do with this "ANSI music" stuff. However, the
|
|
American National Standards Institute defined a set of codes for
|
|
terminals to provide a standard for cursor control. This was expanded to
|
|
include graphics modes and color with the release of the ANSI.SYS device
|
|
driver. It wasn't actually ANSI who expanded the set of codes to include
|
|
the graphics, which are specific to IBM compatible computers with
|
|
certain video adapters, but the name ANSI stuck. The original purpose of
|
|
ANSI cursor control was to give mainframes a way to control the cursor
|
|
on various terminals connected to them. The purpose of the ANSI.SYS
|
|
driver was to give programs a simple and compatible way of controlling
|
|
the video screen. However, it seems that the only real use for ANSI has
|
|
been to give BBS's the ability to control the screen colors and cursor
|
|
positioning. This even led to a new artform, but let's not even think
|
|
about that. It's too much like Art Deco. In CGA color, no less.
|
|
The ANSI.SYS driver also includes provisions for redefining keys
|
|
on the keyboard. This can be used for character translation or to create
|
|
simple macros. It has even been used to create trojan text files that
|
|
redefined your keys to destroy data (i.e. your enter key becomes "DEL
|
|
*.* <return> Y <return>"). Watch out for this kind of thing. It's not
|
|
hard to do.
|
|
|
|
Now I said that the actual "ANSI" organization had little to do
|
|
with "ANSI music." The reason that the music codes were given the name
|
|
"ANSI" is because they start with the same escape sequences. All ANSI
|
|
codes start with <esc>[ as do the music codes. What I mean by <esc>[ is
|
|
the escape character (27 decimal, 1E hex) and the open-bracket
|
|
character. Now, on to the REAL details of ANSI music.
|
|
|
|
As I just got through saying, ANSI music starts with the
|
|
characters <esc><open-bracket>. An ANSI music sequence ends with the
|
|
character <control-N> (14 decimal, 0E hex). In between, the commands are
|
|
exactly the same as those used for the "PLAY" command in BASIC. Now you
|
|
can just look up the PLAY command and you know most everything you need
|
|
to know about ANSI music. But for those of you still confused, I'll
|
|
summarize the PLAY commands and give a few examples and pointers. Here
|
|
we go:
|
|
|
|
The PLAY commands are pretty simple. This info was taken from the Tandy
|
|
BASIC reference manual, but the Tandy-specific commands are not
|
|
recognized by ANSI music and will be left out. Here we go again:
|
|
|
|
A - G Plays the notes corresponding to the notes A-G on the musical
|
|
scale. A # or + after the note makes it sharp, and a - makes
|
|
it flat.
|
|
|
|
Ln Sets the duration of the notes that follow. n is a number from
|
|
1 to 64. 1 is a whole note, 2 is a half note, 4 is a quarter
|
|
note, 8 is an eighth note, etc.
|
|
|
|
On Sets the current octave. There are 7 octaves, 0 through 6. The
|
|
default octave is 4. Each octave starts with C and ends with B.
|
|
Octave 3 starts with middle C.
|
|
|
|
Nn Plays a note. n is in the range 0 to 84. Instead of specifying
|
|
the note's letter and octave, you may specify the note's number.
|
|
Note zero is a rest.
|
|
|
|
Pn Plays a rest (if that's the right terminology). n is the same as
|
|
for the L command, but specifies the length of the rest.
|
|
|
|
. Plays the note as a dotted note. You music buffs know that means
|
|
that the note is one half it's length longer when dotted. Place
|
|
the dot after the note, not before it. More than one dot may be
|
|
used after a note, and dots may be specified for rests.
|
|
|
|
MF, MB I'm not sure these options work. Music Foreground and Music
|
|
Background. Supposedly these options will let you specify
|
|
MF and have the computer stop whatever it's doing and play
|
|
the note, while MB lets the computer do whatever it was doing
|
|
and play the note at the same time, kind of lo-tech multitasking.
|
|
The default (for BASIC anyway, and it seems for ANSI-music) is
|
|
Music Background.
|
|
|
|
MN "Music Normal." Each note plays 7/8 of the duration set by the
|
|
L command.
|
|
|
|
ML "Music Legato." Each note plays the full duration as set by the
|
|
L command.
|
|
|
|
MS "Music Staccato." Each note plays 3/4 of the duration set by the
|
|
L command.
|
|
|
|
That's it for the basic set of commands. There are other options
|
|
in BASIC that are unusuable in the ANSI music, such as the X command
|
|
which lets you include a variable name in the play command, where a
|
|
string variable name is given and the string contains a series of play
|
|
commands. Another command which is usable only on a Tandy or other
|
|
computer with the TI sound chip (the PCjr, for instance) is the V
|
|
command, for setting the volume of the sound. Now for some examples.
|
|
|
|
<esc>[cdefgab<control-n> plays the notes "cdefgab" (the entire octave) on
|
|
the default octave 4.
|
|
|
|
<esc>[l4al2cl8e<control-n> plays a quarter-note A, a half note C, and an
|
|
eighth-note E. Not too musical, but an
|
|
example nonetheless.
|
|
|
|
I'm not one for giving too many examples, I think that's plenty
|
|
for you to get the basic idea. Try it in BASIC before you try it as an
|
|
ANSI code in a message/picture. Just type PLAY "ABCDE" <return> and put
|
|
whatever you like in the quotes. That's the easiest way to work out the
|
|
notes and get the timing right before you blast it up to your favorite
|
|
BBS.
|
|
*********** Closing Comments ***********
|
|
|
|
I only know of two major comm programs that support ANSI music:
|
|
TeliMate and Qmodem. I personally prefer TeliMate. If we (the collective
|
|
we, that is) spread the use of ANSI music, hopefully the makers of other
|
|
comm programs will incorporate this feature. If the makers of Telix and
|
|
Procomm included this, that would cover 95% of IBM compatible BBS'ers. A
|
|
new version of Telix is due out in a few months and I'm hoping this new
|
|
version will add ANSI music. I gave up Procomm years ago, so I don't
|
|
really know when a new version of that's due out, but it still seems to
|
|
be the most common terminal program around. Still, TeliMate is gaining
|
|
popularity for its mouse support and multitasking ablility (I wrote most
|
|
of this document while downloading a 371k file at 1200 baud), and Qmodem
|
|
is pretty popular already. |