=========================================================================
Hier eine Zusammenstellung von haeufigen Fragen die Midi-Themen betreffen:
=========================================================================

                        Stand 7.8.94

Diese Zusammenstellung erhebt keinen Anspruch auf Vollstaendigkeit!
Es sind Texte aus dem Fido-Netz sowie sonstigen Quellen, die ich Wahl- und 
Wertungsfrei zusammengestellt habe. Sie soll dem MIDI-Einsteiger helfen.
Vielen Dank an die Mithelfer in FIDO/MAUS/uucp/MIDILink/EMC............  

Ob die Aussagen der Texte richtig sind, kann ich im Einzelnen nicht 
nachvollziehen. Also:
                        ALLES OHNE GEWAEHR !

Die Fragen mit den Antworten sind durch ******** von den naechsten Fragen 
getrennt. Bei mehreren Antworten sind diese durch -------- getrennt.
Diese Zusammenstellung enthaelt KEINE Steuerzeichen fuer Drucker.

Viel Spass
Harald Rossner 2:2490/4045.3  Fido-Home-BBS
         oder  2:2480/9999.47 TBUS-BBS (MIDILink-Home-BBS)

Wuensche und Anregungen werden gerne entgegengenommen.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

                                INHALT
                                ======
 1) Welche MIDI-Boxen gibt es ?
 2) Was ist MIDILink ?
 3) Wie ist das MIDI-Format aufgebaut ?
 4) Welche Buecher oder Textquellen gibt es fuer MIDI ?
 5) Info ueber Wert,Funktion und Namen der MIDI-Controller ?
 6) Wie ist die Schaltung eines MIDI-Kabels fuer SoundBlaster/GUS ...-Karte? 
 7) Wie sieht ein MIDI-Kabel aus, wie ist die Belegung?
 8) Wie ist die Belegung der Sounds bei GM/GS ?
 9) Wie sind die Hersteller ID's bei SysEx ?
10) Aufbau des "MIDI Sample Dump" Format.
11) Aufbau des "MIDI Timecode" Format.

*******************************************************************************
Frage: Welche Musik- und Midi-orientierte Boxen gibt es?

Antwort: 


Musik und MIDI-orientierte Mailboxen in Deutschland
--------------------------------------------------------------------------
Name           Ort            Telefon    ggf. Fido-Node
--------------------------------------------------------------------------
Headquarter    Duisburg       02066-7634   (2:2447/124)
               (MusicNet)
--------------------------------------------------------------------------
KEY-Box        Dortmund       0231-7212191 (2:2444/5103.2)
               (Kontakt zur Zeitschrift Keyboards)
--------------------------------------------------------------------------
MES            Leipzig        0341-4795879 (2:241/1101.2)
--------------------------------------------------------------------------
MUSIK-BOX      Bremen         0421-5669337
--------------------------------------------------------------------------
MIDICOM BBS    Oldenburg      0441-74563   (2:2426/2040)
               (MIDILink Musicians Network)
--------------------------------------------------------------------------
Chocolate Hill Stuttgart      07158-60035  (2:2407/36)
               (MIDILink Musicians Network)
--------------------------------------------------------------------------
SoundDiverBox  Markt Schwaben 08121-49912
               (Kontakt zum Programmierer von Soundsurfer /
                Sounddiver)
--------------------------------------------------------------------------
TBUS-BBS       Muenchen       089-293881   (2:2480/9999)
--------------------------------------------------------------------------
MusicBox       Muenchen       089-3163154
               (Mac Telefinder BBS)
--------------------------------------------------------------------------
KEYS-BBS       Muenchen       089-6518679  (2:2480/620)
               (MIDILink Musicians Network, Kontakt zur Zeitschrift
                Keys)
--------------------------------------------------------------------------
MIDIGITAL Box                 09396-2113
--------------------------------------------------------------------------

Diese Liste erhebt keinen Anspruch auf Vollstaendigkeit. Wer in diese
Liste aufgenommen werden moechte kontaktiert Florian Anwander in der KEYS-
BBS. Bitte immer die komplette Liste zwischen den beiden doppelt
gestrichelten Linien weitergeben.
==========================================================================
*******************************************************************************


Frage: Was ist MIDILINK?

Antwort:
======================================================================
MIDILink Musician's Network - Linking Musical Professionals worldwide!
======================================================================
 Info fuer Musiker und MIDI-Anbieter, Deutsche Ausgabe (1. Quartal 94)
 ====================================================================

Worum geht es?
==============

[...]
Der MIDILINK verbindet weltweit Musiker und MIDIaner aller Art, welche
die MIDI-Technologie nutzen und/oder vorantreiben. Angefangen hat alles
1987 in den USA, als MIDI-Anwender ein Telekommunikationsnetz unter
Gleichgesinnten aufbauten, um es speziell fuer ihren Erfahrungsaustausch
und ihre Zusammenarbeit zu nutzen. Nachrichten (Fragen, Infos, News,
Datenfiles, etc.) wurden in verschiedenen StAedten gesammelt und ueber
Nacht automatisch per BBS's (Bulletin Board Systems) in andere StAedte
weitergeleitet. Heute sind weltweit mehr als 20.000 Teilnehmer im MIDILINK
verbunden. In zahlreichen fachspezifischen Konferenzen werden musikalische,
technische und organisatorische Fragen rund um die MIDI-Technologie
diskutiert und Erfahrungen auch in Form von Datenfiles und Programmen
ausgetauscht. Mehr als 50 BBS's bilden dabei das weltweite Kommunikations-
netz, auf welches jeder Teilnehmer durch Anwahl des ihm naechstgelegenen
MIDILINK-BBS's leicht zugreifen kann.

Anbieter von MIDI-Produkten haben inzwischen den MIDILINK auch als
schnellen Draht zu ihren Kunden entdeckt, um Fragen zu Produkten und deren
Anwendung auf direktem Wege zu beantworten. Einige Hersteller haben sich
sogar mit einem eigenen BBS dem MIDILINK angeschlossen, um so seine
Infrastruktur zu nutzen.


Was bringt Ihnen das?
=====================

Als MIDILINK-Teilnehmer koennen Sie weltweit Erfahrungen mit Anwendern
Aehnlichen Equipments austauschen, Fragen stellen, von Herstellern direkten
Support bekommen, etc./pp. Dafuer stehen Ihnen fachspezifische Konferenzen
fuer alle MIDI-relevanten Computer (z.B. IBM, Macintosh, Atari, Amiga)
sowie entsprechende Anwendungsgebiete (z.B. SoundProgramming, Sampler,
Recording, MultiMedia, Video, SoundCards, Komposition, Karriere, etc.) zur
Verfuegung, und zahlreiche Hersteller (z.B. Kurzweil, Music Quest, Turtle
Beach, Twelve Tone, Steinberg/Jones, uam.) bieten Ihnen einen direkten
24h-Service in ihren Factory-Support Konferenzen. Zudem koennen Sie auf
die reichhaltige File-Sammlung der EMC ("European MIDI Connection")
zugreifen und sich Demos, frei verfuegbare Programme, Patches, Sequenzer-
Dateien etc. in ihren Computer laden.

Als MIDI-Anbieter koennen Sie die MIDILINK-Infrastruktur dazu nutzen, ihren
Kunden einen 24h Support-Service zu bieten und gezielt beim Fachpublikum
fuerIhre Produkte zu werben. Unter Verweis Ihrer Kunden auf den MIDILINK
koennen Sie sich dann den Aufbau einer entsprechenden eigenen Infrastruktur
ersparen.


[... Die Teilnahme kostet nichts (ausser Telefongebuehr) ...]

+---------------------------------------------------------------------------+
| "MIDILink Musician's Network" (MMN)  &  "European Midi Connection" (EMC)  |
|    Fach-Konferenzen und File-Areas fuer  ca. 20.000  MIDIaner weltweit    |
|    Konferenzen & FileAreas verfuegbar bei den folgenden FidoNet-Boxen:    |
+---------------------------------------------------------------------------+
|MUENCHEN: TBUS-BBS        (2:2480/9999),+49-89-293881,  SO Rudolf Stricker |
|MUENCHEN: KEYS-BBS        (2:2480/620) ,+49-89-6518679, SO Florian Anwander|
|OLDENBURG:MIDICOM BBS     (2:2426/2040),+49-441-74563,  SO Oliver Ried     |
|STUTTGART:Chocolate Hill  (2:2407/36),  +49-7158-60035, SO Michael Lederer |
+---------------------------------------------------------------------------+


Und was erwartet Sie im Detail bei diesen deutschen MIDILINK-BBS's? Hier
zunAechst eine Liste der Fachkonferenzen:

===============================================================
=============== MIDILINK: Liste der MESSAGE-Areas =============
===============================================================
=============== MIDI & MIDILink Musicians' Network (MMN) ======
===============================================================
=======deutschsprachige Areas (in ganz Europa verfuegbar)======
===============================================================
MIDILINK.MLG         allgemeine Area des deutschsprachigen MIDILink
MMUSIKER.MLG         Uebers Musikhoeren und Musikmachen
HARDSOFT.MLG         MIDI Hard und Software; deutsches MIDILink
RECORDING.MLG        Aufnahme und Studiotechnik; deutsches MIDILink
SNDCARDS.MLG         Soundkarten fuer IBM-Kompatible
MBAZAR.MLG           Musiker Flohmarkt; deutsches MIDILink
KEYS.MLG             Diskussions- und Informationsforum, der Zeitschrift Keys
===============================================================
=========englischsprachige Areas (weltweit verfuegbar)=========
===============================================================
M_MAIN-BOARD         general topics of MIDILink interntl.(english!)
M_COLLAB             Area for songwriters collaboration(english!)
M_CAREERS            Area for musicians carreers and education (english!)
M_GENERICS           generic MIDI questions (english!)
M_PROGRAM            conference on MIDI programming (english!)
M_RECORDING          about recording and studio engineering (english!)
M_SAMPLING           about sampler / sampling (english!)
M_VIDSOUND           about video and sound (english!)
M_SOUNDCRD           about pc-soundcards (english!)
M_ST-ATARI           ATARI and MIDI (english!)
M_APPLE              APPLE/MAC and MIDI (english!)
M_COMMODORE          AMIGA / C64 and MIDI (english!)
M_IBM                IBM-compatibles and MIDI (english!)
M_KURZWEIL           MMN-Factory support for  KURZWEIL MUSICAL PRODUCTS(engl.)
M_12TONE             MMN-Factory support for  TWELVE TONE SYSTEMS (english!)
M_STEINBERG          MMN-Factory support for STEINBERG (english!)
M_TURTLEBEACH        MMN-Factory support for  TURTLE BEACH SYSTEMS (english!)
M_MACKIE             MMN-Factory support for  MACKIE RECORDING GEAR (english!)
M_VOYETRA            MMN-Factory support from VOYETRA TECHNOLOGIES (english!)
M_MQUEST             MMN-Factory support from MUSIC QUEST INC (english!)
M_KEY                MMN-Factory support for  KEY MEDIATOR (english!)
M_PWRCHORD           MMN-Factory support for POWERCHORDS (english!)
M_COOLSHOES          MMN-Factory support from COOL SHOES INC. (english!)
M_JAMMER             MMN-Factory support for SOUNDTREK's JAMMER (english!)
M_TAP                MMN-Factory support for MUSIC PRINTER PLUS (english!)
M_TEACH              MMN-Factory support from TEACH SERVICES LMP (english!)
===============================================================
=============== MIDI & Musik aus dem UseNet ===================
RMM.COMPOSE     - Usenet conf on composers & composing
RMM.GUITAR      - Usenet conf on guitars & playing them
RMM.GUITAR.TAB  - Usenet conf on guitar tabs, chords & lyrics
RMM.BASS        - Usenet conf on basses & playing them
RMM.PERCUSSION  - Usenet conf on drums & percussions
RMM.SYNTH       - Usenet conf on synths & samplers
===============================================================

[...Jede Box hat dann noch jede Menge musikorientierte Fido-Areas...]

Die beiden wesentlichsten Elemente am MIDILink duerften die internationale
Vernetzung sein, und die Tatsache, dass innerhalb des Netzes eine
kommerzielle Nutzung zulaessig ist - das gilt aber definitiv nur fuers
MIDILink nicht fuer Netmails ins oder aus dem FIDO (!!!).

******************************************************************************


Frage: Wie ist das Midi-Format aufgebaut?
Antwort:

Physikalisch gesehen eine Stromschleife,
Lowlevel-logisch 8N1, 31250 Bit/s (31,25 KBit/s)

                    MIDI 1.0 Specification:

Status       Data Byte(s)     Description
D7----D0     D7----D0
-------------------------------------------------------------------------
Channel Voice Messages
-------------------------------------------------------------------------
1000cccc     0nnnnnnn         Note Off event.
             0vvvvvvv         This message is sent when a
                              note is released (ended).
                              (nnnnnnn) is the note number.
                              (vvvvvvv) is the velocity.

1001cccc     0nnnnnnn         Note On event.
             0vvvvvvv         This message is sent when a
                              note is depressed (start).
                              (nnnnnnn) is the note number.
                              (vvvvvvv) is the velocity.

1010cccc     0nnnnnnn         Polyphonic Key Pressure (After-touch).
             0vvvvvvv         This message is sent when the pressure
                              (velocity) of a previously
                              triggered note changes.
                              (nnnnnnn) is the note number.
                              (vvvvvvv) is the new velocity.

1011cccc     0ccccccc         Control Change.
             0vvvvvvv         This message is sent when a controller
                              value changes.  Controllers include devices
                              such as pedals and levers.
                              Certain controller numbers are reserved
                              for specific purposes. See Channel Mode Messages.
                              (ccccccc) is the controller number.
                              (vvvvvvv) is the new value.

1100cccc     0ppppppp         Program Change.
                              This message sent when the patch number changes.
                              (ppppppp) is the new program number.

1101nnnn     0ccccccc         Channel Pressure (After-touch).
                              This message is sent when the channel pressure
                              changes. Some velocity-sensing keyboards do not
                              support polyphonic after-touch. Use this
                              message to send the single greatest velocity
                              (of all te current depressed keys).
                              (ccccccc) is the channel number.

1110nnnn     0lllllll         Pitch Wheel Change.
             0mmmmmmm         This message is sent to indicate a change in the
                              pitch wheel.  The pitch wheel is measured by a
                              fourteen bit value. Center (no pitch change) is
                              2000H.  Sensitivity is a function of the
                              transmitter.
                              (llllll) are the least significant 7 bits.
                              (mmmmmm) are the most significant 7 bits.
-------------------------------------------------------------------------
Channel Mode Messages  (See also Control Change, above)
-------------------------------------------------------------------------
1011nnnn     0ccccccc         Channel Mode Messages.
             0vvvvvvv         This the same code as the Control
                              Change (above), but implements Mode
                              control by using reserved controller
                              numbers.  The numbers are:

                              Local Control.
                              When Local Control is Off, all devices
                              on a given channel will respond only to
                              data received over MIDI.  Played data, etc.
                              will be ignored.  Local Control On
                              restores the functions of the normal
                              controllers.
                              c = 122, v =   0: Local Control Off
                              c = 122, v = 127: Local Control On

                              All Notes Off.
                              When an All Notes Off is received,
                              all oscillators will turn off.
                              c = 123, v =   0: All Notes Off

                              (See text for description of actual
                              mode commands.)
                              c = 124, v =   0: Omni Mode Off
                              c = 125, v =   0: Omni Mode On
                              c = 126, v =   M: Mono Mode On (Poly Off)
                              where M is the number of channels
                              (Omni Off) or 0 (Omni On)
                              c = 127, v =   0: Poly Mode On (Mono Off)
                              (Note: These four messages also cause
                              All Notes Off)

-------------------------------------------------------------------------
System Common Messages
-------------------------------------------------------------------------
11110000     0iiiiiii         System Exclusive.
             0ddddddd         This message makes up for all that MIDI
                ..            doesn't support.  (iiiiiii) is a seven
                ..            bit Manufacturer's I.D. code.  If the
             0ddddddd         synthesizer recognizes the I.D. code as
             11110111         its own, it will listen to the rest of
                              the message (ddddddd).  Otherwise, the
                              message will be ignored.  System Exclusive
                              is used to send bulk dumps such as patch
                              parameters and other non-spec data.
                              (Note: Real-Time messages ONLY may be
                              interleaved with a System Exclusive.)

11110001                      Undefined.

11110010     0lllllll         Song Position Pointer.
             0mmmmmmm         This is an internal 14 bit register that
                              holds the number of MIDI beats (1 beat=
                              six MIDI clocks) since the start of
                              the song.  l is the LSB, m the MSB.

11110011     0sssssss         Song Select.
                              The Song Select specifies which sequence
                              or song is to be played.

11110100                      Undefined.

11110101                      Undefined.

11110110                      Tune Request.
                              Upon receiving a Tune Request, all analog
                              sythesizers should tune their oscillators.

11110111                      End of Exclusive.
                              Used to terminate a System Exclusive
                              dump (see above).

-------------------------------------------------------------------------
System Real-Time Messages
-------------------------------------------------------------------------
11111000                      Timing Clock.
                              Sent 24 times per quarter note when
                              synchronization is required (see text).

11111001                      Undefined.

11111010                      Start.
                              Start the current sequence playing.
                              (This message will be followed with
                              Timing Clocks).

11111011                      Continue.
                              Continue at the point the sequence was
                              Stopped.

11111100                      Stop.
                              Stop the current sequence.

11111101                      Undefined.

11111110                      Active Sensing.
                              Use of this message is optional.  When
                              initially sent, the receiver will expect
                              to receive another Active Sensing message
                              each 300ms (max), or it will be assume
                              that the connection has been terminated.
                              At termination, the receiver will turn off
                              all voices and return to normal (non-
                              active sensing) operation.

11111111                      Reset.
                              Reset all receivers in the system to
                              power-up status.  This should be used
                              sparingly, preferably under manual
                              control.  In particular, it should not
                              be sent on power-up.

---------------------------------------------------------------------------- 
Weitere Infos:

To get your copy of the 1.0 spec, send a $2 check to:

International Midi Association
5316 West 57th Street
Los Angeles, CA 90056
(415) 321-MIDI

Make your checks payable to the IMA.  BYW, the 1.0 spec is technically
identical to the .06 spec, but the description has been re-written.
Since the spec has been offically approved, there shouldn't be any
problem with posting this summary of the .06 spec:


[This document is Dave Oppenheim's current version of the MIDI file
specification, as sent to those who have participated in its
development.  The consensus seems to be to submit this to the MIDI
Manufacturers' Association as version 1.0.  I apologize for any loss of
clarity that might have occurred in the conversion from a Microsoft Word
document to this pure text file.  I have removed some of the discussion
about recent changes to the specification in order to keep the file size
reasonable.--Doug Wyatt]



Standard MIDI Files 0.06        March 1, 1988
=============================================

0  Introduction

This describes a proposed standard MIDI file format.  MIDI files contain
one or more MIDI streams, with time information for each event.  Song,
sequence, and track structures, tempo and time signature information,
are all supported.  Track names and other descriptive information may be
stored with the MIDI data.  This format supports multiple tracks and
multiple sequences so that if the user of a program which supports
multiple tracks intends to move a file to another one, this format can
allow that to happen.

This spec defines the 8-bit binary data stream used in the file.  The
data can be stored in a binary file, nibbleized, 7-bit-ized for
efficient MIDI transmission, converted to Hex ASCII, or translated
symbolically to a printable text file.  This spec addresses what's in
the 8-bit stream.


1  Sequences, Tracks, Chunks:  File Block Structure

Sequence files are made up of chunks.  Each chunk has a 4-character type
and a 32-bit length, which is the number of bytes in the chunk.  On the
Macintosh, data is passed either in the data fork of a file, or on the
Clipboard.  (The file type on the Macintosh for a file in this format
will be "Midi".)  On any other computer, the data is simply the contents
of the file.  This structure allows future chunk types to be designed
which may easily be ignored if encountered by a program written before
the chunk type is introduced.   Your programs should expect alien chunks
and treat them as if they weren't there.

This proposal defines two types of chunks:  a header chunk and a track
chunk.  A header chunk provides a minimal amount of information
pertaining to the entire MIDI file.  A track chunk contains a sequential
stream of MIDI data which may contain information for up to 16 MIDI
channels.  The concepts of multiple tracks, multiple MIDI outputs,
patterns, sequences, and songs may all be implemented using several
track chunks.

A MIDI file always starts with a header chunk, and is followed by one or
more track chunks.

MThd  <length of header data>
<header data>
MTrk  <length of track data>
<track data>
MTrk  <length of track data>
<track data>
 ...

Track Data Format (MTrk chunk type)

The MTrk chunk type is where actual song data is stored.  It is simply a
stream of MIDI events (and non-MIDI events), preceded by delta-time
values.

Some numbers in MTrk chunks are represented in a form called a variable-
length quantity. These numbers are represented 7 bits per byte, most
significant bits first.  All bytes except the last have bit 7 set, and
the last byte has bit 7 clear.  If the number is between 0 and 127,  it
is thus represented exactly as one byte.

Here are some examples of numbers represented as variable-length
quantities:

        Number (hex)    Representation (hex)
        00000000        00
        00000040        40
        0000007F        7F
        00000080        81 00
        00002000        C0 00
        00003FFF        FF 7F
        00004000        81 80 00
        00100000        C0 80 00
        001FFFFF        FF FF 7F
        00200000        81 80 80 00
        08000000        C0 80 80 00
        0FFFFFFF        FF FF FF 7F


The largest number which is allowed is 0FFFFFFF so that the variable-
length representation must fit in 32 bits in a routine to write
variable-length numbers.  Theoretically, larger numbers are possible,
but 2 x 108 96ths of a beat at a fast tempo of 500 beats per minute is
four days, long enough for any delta-time!

Here is the syntax of an MTrk chunk:

<track data> = <MTrk event>+

<MTrk event> = <delta-time> <event>

<delta-time> is stored as a variable-length quantity.  It represents the
amount of time before the following event.  If the first event in a
track occurs at the very beginning of a track, or if two events occur
simultaneously, a delta-time of zero is used.  Delta-times are always
present.  (Not storing delta-times of 0 requires at least two bytes for
any other value, and most delta-times aren't zero.)  Delta-time is in
some fraction of a beat (or a second, for recording a track with SMPTE
times), as specified in the header chunk.

<event> = <MIDI event> | <sysex event> | <meta-event>

<MIDI event> is any MIDI channel message.  Running status is used:
status bytes may be omitted after the first byte.  The first event in a
file must specify status.  Delta-time is not  considered an event
itself:  it is an integral part of the specification.  Notice that
running status occurs across delta-times.

<meta-event> specifies non-MIDI information useful to this format or to
sequencers, with this syntax:

        FF <type> <length> <bytes>

All meta-events begin with FF, then have an event type byte (which is
always less than 128), and then have the length of the data stored as a
variable-length quantity, and then the data itself.  If there is no
data, the length is 0.  As with sysex events, running status is not
allowed.  As with chunks, future meta-events may be designed which may
not be known to existing programs, so programs must properly ignore
meta-events which they do not recognize, and indeed, should expect to
see them.  New for 0.06:  programs must never ignore the length of a
meta-event which they do recognize, and they shouldn't be surprised if
it's bigger than they expected.  If so, they must ignore everything past
what they know about.  However, they must not add anything of their own
to the end of a meta-event.

<sysex event> is used to specify a MIDI system exclusive message, or as
an "escape" to specify any arbitrary bytes to be transmitted.
Unfortunately, some synthesizer manufacturers specify that their system
exclusive messages are to be transmitted as little packets.  Each packet
is only part of an entire syntactical system exclusive message, but the
times they are transmitted at are important.  Examples of this are the
bytes sent in a CZ patch dump, or the FB-01's "system exclusive mode" in
which microtonal data can be transmitted.  To be able to handle
situations like these, two forms of  <sysex event> are provided:

        F0 <length> <bytes to be transmitted after F0>
        F7 <length> <all bytes to be transmitted>

In both cases, <length> is stored as a variable-length quantity.  It is
equal to the number of bytes following it, not including itself or the
message type (F0 or F7), but all the bytes which follow, including any
F7 at the end which is intended to be transmitted.  The first form, with
the F0 code, is used for syntactically complete system exclusive
messages, or the first packet an a series Q that is, messages in which
the F0 should be transmitted.  The second form is used for the remainder
of the packets within a syntactic sysex message, which do not begin with
F0.  Of course, the F7 is not considered part of the system exclusive
message.  Of course, just as in MIDI, running status is not allowed, in
this case because the length is stored as a variable-length quantity
which may or may not start with bit 7 set.

(New to 0.06)  A syntactic system exclusive message must always end with
an F7, even if the real-life device didn't send one, so that you know
when you've reached the end of an entire sysex message without looking
ahead to the next event in the MIDI file.  This principle is repeated
and illustrated in the paragraphs below.

The vast majority of system exclusive messages will just use the F0
format.  For instance, the transmitted message F0 43 12 00 07 F7 would
be stored in a MIDI file as F0 05 43 12 00 07 F7.  As mentioned above,
it is required to include the F7 at the end so that the reader of the
MIDI file knows that it has read the entire message.

For special situations when a single system exclusive message is split
up, with parts of it being transmitted at different times, such as in a
Casio CZ patch transfer, or the FB-01's "system exclusive mode", the F7
form of sysex event is used for each packet except the first.  None of
the packets would end with an F7 except the last one, which must end
with an F7.  There also must not be any transmittable MIDI events in-
between the packets of a multi-packet system exclusive message.  Here is
an example:  suppose the bytes F0 43 12 00 were to be sent, followed by
a 200-tick delay, followed by the bytes  43 12 00 43 12 00, followed by
a 100-tick delay, followed by the bytes  43 12 00 F7, this would be in
the MIDI File:

        F0 03 43 12 00
        81 48                                   200-tick delta-time
        F7 06 43 12 00 43 12 00
        64                                      100-tick delta-time
        F7 04 43 12 00 F7

The F7 event may also be used as an "escape" to transmit any bytes
whatsoever, including real-time bytes, song pointer, or MIDI Time Code,
which are not permitted normally in this specification.  No effort
should be made to interpret the bytes used in this way.  Since a system
exclusive message is not being transmitted, it is not necessary or
appropriate to end the F7 event with an F7 in this case.


2    Header Chunk

The header chunk at the beginning of the file specifies some basic
information about the data in the file.  The data section contains three
16-bit words, stored high byte first (of course).  Here's the syntax of
the complete chunk:

        <chunk type> <length> <format> <ntrks> <division>

As described above, <chunk type> is the four ASCII characters 'MThd';
<length> is a 32-bit representation of the number 6 (high byte first).
The first word, format, specifies the overall organization of the file.
Only three values of format are specified:

        0       the file contains a single multi-channel track
        1       the file contains one or more simultaneous tracks (or MIDI
outputs) of a sequence
        2       the file contains one or more sequentially independent
single-track patterns

The next word, ntrks, is the number of track chunks in the file.  The
third word, division,  is the division of a quarter-note represented by
the delta-times in the file.  (If division is negative, it represents
the division of a second represented by the delta-times in the file, so
that the track can represent events occurring in actual time instead of
metrical time.  It is represented in the following way:  the upper byte
is one of the four values -24, -25, -29, or -30, corresponding to the
four standard SMPTE and MIDI time code formats, and represents the
number of frames per second.  The second byte (stored positive) is the
resolution within a frame:  typical values may be 4 (MIDI time code
resolution), 8, 10, 80 (bit resolution), or 100.  This system allows
exact specification of time-code-based tracks, but also allows
millisecond-based tracks by specifying 25 frames/sec and a resolution of
40 units per frame.)

Format 0, that is, one multi-channel track, is the most interchangeable
representation of data.  One application of MIDI files is a simple
single-track player in a program which needs to make synthesizers make
sounds, but which is primarily concerned with something else such as
mixers or sound effect boxes.  It is very desirable to be able to
produce such a format, even if your program is track-based, in order to
work with these simple programs.  On the other hand, perhaps someone
will write a format conversion from format 1 to format 0 which might be
so easy to use in some setting that it would save you the trouble of
putting it into your program.

Programs which support several simultaneous tracks should be able to
save and read data in format 1, a vertically one-dimensional form, that
is, as a collection of tracks.  Programs which support several
independent patterns should be able to save and read data in format 2, a
horizontally one-dimensional form.  Providing these minimum capabilities
will ensure maximum interchangeability.

MIDI files can express tempo and time signature, and they have been
chosen to do so for transferring tempo maps from one device to another.
For a format 0 file, the tempo will be scattered through the track and
the tempo map reader should ignore the intervening events; for a format
1 file, the tempo map must (starting in 0.04) be stored as the first
track.  It is polite to a tempo map reader to offer your user the
ability to make a format 0 file with just the tempo, unless you can use
format 1.

All MIDI files should specify tempo and time signature.  If they don't,
the time signature is assumed to be 4/4, and the tempo 120 beats per
minute.  In format 0, these meta-events should occur at least at the
beginning of the single multi-channel track.  In format 1, these meta-
events should be contained in the first track.  In format 2, each of the
temporally independent patterns should contain at least initial time
signature and tempo information.

We may decide to define other format IDs to support other structures.  A
program reading an unfamiliar format ID should return an error to the
user rather than trying to read further.


3    Meta-Events

A few meta-events are defined herein.  It is not required for every
program to support every meta-event.  Meta-events initially defined
include:

FF 00 02 ssss   Sequence Number
This optional event, which must occur at the beginning of a track,
before any nonzero delta-times, and before any transmittable MIDI
events, specifies the number of a sequence.  The number in this track
corresponds to the sequence number in the new Cue message discussed at
the summer 1987 MMA meeting.  In a format 2 MIDI file, it is used to
identify each "pattern" so that a "song" sequence using the Cue message
to refer to the patterns.  If the ID numbers are omitted, the sequences'
locations in order in the file are used as defaults.  In a format 0 or 1
MIDI file, which only contain one sequence, this number should be
contained in the first (or only) track.  If transfer of several
multitrack sequences is required, this must be done as a group of format
1 files, each with a different sequence number.

FF 01 len text  Text Event
Any amount of text describing anything.  It is a good idea to put a text
event right at the beginning of a track, with the name of the track, a
description of its intended orchestration, and any other information
which the user wants to put there.  Text events may also occur at other
times in a track, to be used as lyrics, or descriptions of cue points.
The text in this event should be printable ASCII characters for maximum
interchange.  However, other character codes using the high-order bit
may be used for interchange of files between different programs on the
same computer which supports an extended character set.  Programs on a
computer which does not support non-ASCII characters should ignore those
characters.

(New for 0.06 ).  Meta event types 01 through 0F are reserved for
various types of text events, each of which meets the specification of
text events(above) but is used for a different purpose:

FF 02 len text  Copyright Notice
Contains a copyright notice as printable ASCII text.  The notice should
contain the characters (C), the year of the copyright, and the owner of
the copyright.  If several pieces of music are in the same MIDI file,
all of the copyright notices should be placed together in this event so
that it will be at the beginning of the file.  This event should be the
first event in the first track chunk, at time 0.


FF 03 len text  Sequence/Track Name
If in a format 0 track, or the first track in a format 1 file, the name
of the sequence.  Otherwise, the name of the track.

FF 04 len text  Instrument Name
A description of the type of instrumentation to be used in that track.
May be used with the MIDI Prefix meta-event to specify which MIDI
channel the description applies to, or the channel may be specified as
text in the event itself.

FF 05 len text  Lyric
A lyric to be sung.  Generally, each syllable will be a separate lyric
event which begins at the event's time.

FF 06 len text  Marker
Normally in a format 0 track, or the first track in a format 1 file.
The name of that point in the sequence, such as a rehearsal letter or
section name ("First Verse", etc.).


FF 07 len text  Cue Point
A description of something happening on a film or video screen or stage
at that point in the musical score ("Car crashes into house", "curtain
opens", "she slaps his face", etc.)

FF 2F 00        End of Track
This event is not optional.  It is included so that an exact ending
point may be specified for the track, so that it has an exact length,
which is necessary for tracks which are looped or concatenated.

FF 51 03 tttttt         Set Tempo, in microseconds per MIDI quarter-note
This event indicates a tempo change.  Another way of putting
"microseconds per quarter-note" is "24ths of a microsecond per MIDI
clock".  Representing tempos as time per beat instead of beat per time
allows absolutely exact long-term synchronization with a time-based sync
protocol such as SMPTE time code or MIDI time code.  This amount of
accuracy provided by this tempo resolution allows a four-minute piece at
120 beats per minute to be accurate within 500 usec at the end of the
piece.  Ideally, these events should only occur where MIDI clocks would
be located Q this convention is intended to guarantee, or at least
increase the likelihood, of compatibility with other synchronization
devices so that a time signature/tempo map stored in this format may
easily be transferred to another device.

FF 54 05 hr mn se fr ff SMPTE Offset  (New in 0.06 - SMPTE Format
specification)
This event, if present, designates the SMPTE time at which the track
chunk is supposed to start.  It should be present at the beginning of
the track, that is, before any nonzero delta-times, and before any
transmittable MIDI events.  The hour must be encoded with the SMPTE
format, just as it is in MIDI Time Code.  In a format 1 file, the SMPTE
Offset must be stored with the tempo map, and has no meaning in any of
the other tracks.  The ff field contains fractional frames, in 100ths of
a frame, even in SMPTE-based tracks which specify a different frame
subdivision for delta-times.

FF 58 04 nn dd cc bb    Time Signature
The time signature is expressed as four numbers.  nn and dd represent
the numerator and denominator of the time signature as it would be
notated.  The denominator is a negative power of two:  2 represents a
quarter-note, 3 represents an eighth-note, etc.  The cc parameter
expresses the number of MIDI clocks in a metronome click.  The bb
parameter expresses the number of notated 32nd-notes in a MIDI quarter-
note (24 MIDI Clocks).  This was added because there are already
multiple programs which allow the user to specify that what MIDI thinks
of as a quarter-note (24 clocks) is to be notated as, or related to in
terms of, something else.

Therefore, the complete event for 6/8 time, where the metronome clicks
every three eighth-notes, but there are 24 clocks per quarter-note, 72
to the bar, would be (in hex):

        FF 58 04 06 03 24 08

That is, 6/8 time (8 is 2 to the 3rd power, so this is 06 03), 32 MIDI
clocks per dotted-quarter (24 hex!), and eight notated 32nd-notes per
MIDI quarter note.

FF 59 02 sf mi  Key Signature
        sf = -7:  7 flats
        sf = -1:  1 flat
        sf = 0:  key of C
        sf = 1:  1 sharp
        sf = 7: 7 sharps

        mi = 0:  major key
        mi = 1:  minor key

FF 7F len data  Sequencer-Specific Meta-Event

        Special requirements for particular sequencers may use this
event type:  the first byte or bytes of data is a manufacturer ID.
However, as this is an interchange format, growth of the spec proper is
preferred to use of this event type.  This type of event may be used by
a sequencer which elects to use this as its only file format;
sequencers with their established feature-specific formats should
probably stick to the standard features when using this format.

4   Program Fragments and Example MIDI Files

Here are some of the routines to read and write variable-length numbers
in MIDI Files.  These routines are in C, and use getc and putc, which
read and write single 8-bit characters from/to the files infile and
outfile.

WriteVarLen (value)
register long value;
{
        register long buffer;

        buffer = value & 0x7f;
        while ((value >>= 7) > 0)
        {
                buffer <<= 8;
                buffer |= 0x80;
                buffer += (value & 0x7f);
        }

        while (TRUE)
        {
                putc(buffer,outfile);
                if (buffer & 0x80)
                        buffer >>= 8;
                else
                        break;
        }
}

doubleword ReadVarLen ()
{
        register doubleword value;
        register byte c;

        if ((value = getc(infile)) & 0x80)
        {
                value &= 0x7f;
                do
                {
                        value = (value << 7) + ((c = getc(infile)) & 0x7f);
                } while (c & 0x80);
        }
        return (value);
}

As an example, MIDI Files for the following excerpt are shown below.
First, a format 0 file is shown, with all information intermingled;
then, a format 1 file is shown with all data separated into four tracks:
one for tempo and time signature, and three for the notes.  A resolution
of 96 "ticks" per quarter note is used.  A time signature of 4/4 and a
tempo of 120, though implied, are explicitly stated.


The contents of the MIDI stream represented by this example are broken
down here:

Delta Time(decimal)  Event Code (hex)   Other Bytes (decimal)
        Comment
        0       FF 58   04 04 02 24 08  4 bytes: 4/4 time, 24 MIDI
clocks/click,
                                8 32nd notes/24 MIDI clocks
        0       FF 51   03 500000       3 bytes: 500,000 5sec per quarter-note
        0       C0      5       Ch. 1, Program Change 5
        0       C0      5       Ch. 1, Program Change 5
        0       C1      46      Ch. 2, Program Change 46
        0       C2      70      Ch. 3, Program Change 70
        0       92      48  96  Ch. 3 Note On C2, forte
        0       92      60  96  Ch. 3 Note On C3, forte
        96      91      67  64  Ch. 2 Note On G3, mezzo-forte
        96      90      76  32  Ch. 1 Note On E4, piano
        192     82      48  64  Ch. 3 Note Off C2, standard
        0       82      60  64  Ch. 3 Note Off C3, standard
        0       81      67  64  Ch. 2 Note Off G3, standard
        0       80      76  64  Ch. 1 Note Off E4, standard
        0       FF 2F   00      Track End

The entire format 0 MIDI file contents in hex follow.  First, the header
chunk:

                4D 54 68 64     MThd
                00 00 00 06     chunk length
                00 00   format 0
                00 01   one track
                00 60   96 per quarter-note

Then, the track chunk.  Its header, followed by the events (notice that
running status is used in places):

                4D 54 72 6B     MTrk
                00 00 00 3B     chunk length (59)

        Delta-time      Event   Comments
        00      FF 58 04 04 02 18 08    time signature
        00      FF 51 03 07 A1 20       tempo
        00      C0 05
        00      C1 2E
        00      C2 46
        00      92 30 60
        00      3C 60   running status
        60      91 43 40
        60      90 4C 20
        81 40   82 30 40        two-byte delta-time
        00      3C 40   running status
        00      81 43 40
        00      80 4C 40
        00      FF 2F 00        end of track

A format 1 representation of the file is slightly different.  Its header
chunk:

                4D 54 68 64     MThd
                00 00 00 06     chunk length
                00 01   format 1
                00 04   four tracks
                00 60   96 per quarter-note

First, the track chunk for the time signature/tempo track.  Its header,
followed by the events:

                4D 54 72 6B     MTrk
                00 00 00 14     chunk length (20)

        Delta-time      Event   Comments
        00      FF 58 04 04 02 18 08    time signature
        00      FF 51 03 07 A1 20       tempo
        83 00   FF 2F 00        end of track

Then, the track chunk for the first music track.  The MIDI convention
for note on/off running status is used in this example:

                4D 54 72 6B     MTrk
                00 00 00 10     chunk length (16)

        Delta-time      Event   Comments
        00      C0 05
        81 40   90 4C 20
        81 40   4C 00   Running status: note on, vel = 0
        00      FF 2F 00        end of track

Then, the track chunk for the second music track:

                4D 54 72 6B     MTrk
                00 00 00 0F     chunk length (15)

        Delta-time      Event   Comments
        00      C1 2E
        60      91 43 40
        82 20   43 00   running status
        00      FF 2F 00        end of track

Then, the track chunk for the third music track:

                4D 54 72 6B     MTrk
                00 00 00 15     chunk length (21)

        Delta-time      Event   Comments
        00      C2 46
        00      92 30 60
        00      3C 60   running status
        83 00   30 00   two-byte delta-time, running status
        00      3C 00   running status
        00      FF 2F 00        end of track

5   MIDI Transmission of MIDI Files

Since it is inconvenient to exchange disks between different computers,
and since many computers which will use this format will have a MIDI
interface anyway, MIDI seems like a perfect way to send these files from
one computer to another.  And, while we're going through all the trouble
to make a way of sending MIDI Files, it would be nice if they could send
any files (like sampled sound files, text files, etc.)

Goals
The transmission protocol for MIDI files should be reasonably efficient,
should support fast transmission for computers which are capable of it,
and slower transmission for less powerful ones.  It should not be
impossible to convert a MIDI File to or from an arbitrary internal
representation on the fly as it is transmitted, but, as long as it is
not too difficult, it is very desirable to use a generic method so that
any file type could be accommodated.

To make the protocol efficient, the MIDI transmission of these files
will take groups of seven 8-bit bytes and transmit them as eight 7-bit
MIDI data bytes.  This is certainly in the spirit of the rest of this
format (keep it small, because it's not that hard to do).  To
accommodate a wide range of transmission speeds, files will be
transmitted in packets with acknowledge -- this allows data to be stored
to disk as it is received.  If the sender does not receive a response
from a reader in a certain amount of time, it can assume an open-loop
situation, and then just continue.

The last edition of MIDI Files contained a specialized protocol for
sending just MIDI Files.  To meet a deadline, unfortunately I don't have
time right now to propose a new generalized protocol.  This will be done
within the next couple of months.  I would welcome any proposals anyone
else has, and would direct your attention to the proposal from Ralph
Muha of Kurzweil, available in a recent MMA bulletin, and also directly
from him.
--
Michael S. Czeiszperger         | "The only good composer is a dead composer"
Systems Analyst                 | Snail: 2015 Neil Avenue         (614)
The Ohio State University       |        Columbus, OH 43210          292-
ARPA:czei@accelerator.eng.ohio-state.edu  PAN:CZEI



*******************************************************************************


Frage: Welche Buecher und Unterlagen gibt es ueber Midi?

Antwort:

Steve De Furia & Joe Scacciaferro,   Anmerkung:"Dieses Buch ist scheinbar die
"MIDI Programmer's Handbook"                    Bibel fuer MIDI" 
M&T Books
ISBN 1-55851-068-0

P.Gorges und A.Merck
"Keyboards,MIDI,Homerecording"
Muenchen, 1989, GC Carstensen Verlag
ISBN 3-90802026-3-1

[1] Siegfried Just:  <MIDITALK - Standard  MIDI-Files>.   ST-Computer   12/90.
    Heim-Verlag, S. 144ff,

[2] Michael Cxelperger:  <Introducing Standard MIDI File>. Electronic Musican,
    April 1989, S. 50ff

[3] <Standard-MIDI-File in C / Babylon  entschlsselt>.   68000er   ST-magazin
    10/91 - 11/91. Markt & Technik.

[4] Kai Schwirzke:  <MIDI macht die Musik - Standard MIDI-File-Format>. c't -
     magazin fr computer technik 07/93, S.232ff Heise Verlag



This is a bibliography on synthesizers, midi, computer and electronic music
that I have collected from various sources. I have tried to bring some
structure into it, but not all books will fit into a single subject.
NOTE: I haven't read these books, and the comments are from other people.
On some of them I lost the original commentor's name. Sorry about that. If
you have additions or correction to this information, please mail me.  The
latest version of this file can be obtained by ftp from ftp.cs.ruu.nl
[131.211.80.17] in MIDI/DOC/bibliography or by mail from
mail-server@cs.ruu.nl (send a message with HELP in the body).

There is a more scientifically-oriented bibliography available in the
Computer Music Journal archives, on the ftp sites mitpress.mit.edu
/pub/Computer-Music-Journal/EdNotes or ccrma-ftp.stanford.edu
/pub/Publications/cmj/EdNotes. Some references in this file that belong in
that category will be removed in the future.

------------------------------ MIDI ------------------------------

The most-up-to-date printed specs for General MIDI, MIDI, and the MIDI
file format can also be obtained for a few bucks from:

        International MIDI Association
        23634 Emelita Street
        Woodland Hills, California 91367  USA
------------------------------------------------------------------------
    Title: Computer music in C / Phil Winsor & Gene DeLisa.
Publisher: Blue Ridge Summit, PA : TAB Books (Windcrest label), c1991.
 Subjects: Computer sound processing.
           Computer composition.
           C (Computer program language)
           Midi programming
     ISBN: 0-8306-3637-4 (p) : $22.95
It has a C source disk for the PC available for $25.
------------------------------------------------------------------------
    Title: Mind over MIDI / edited by Dominic Milano ; by the editors
            of Keyboard magazine.
Publisher: Milwaukee, WI : H. Leonard Books, c1987.
Series Name: The Keyboard magazine basic library
Other Series Names: Keyboard synthesizer library.
 Subjects: MIDI (Standard)
           Computer sound processing.
     ISBN: 0-88188-551-7 (pbk.) : $12.95

  The book consists mostly of reprints of KEYBOARD magazine
  articles from the early-mid '80s plus several appendixes containing
  the MIDI 1.0 specification, a list of references, a glossary, etc.
------------------------------------------------------------------------
    Title: MIDI- und sound-buch zum Atari ST. English
    Title: MIDI and sound book for the Atari ST / Bernd Enders and
            Wolfgang Klemme.
Publisher: Redwood City, Calif. : M & T Pub., c1989.
 Subjects: Computer music--Instruction and study.
           Computer sound processing.
           MIDI (Standard)
           Atari ST computers--Programming.
     ISBN: 1-55851-042-7 : $17.95
------------------------------------------------------------------------
  Atari ST Introduction to MIDI Programming
  Len Dorfman and Dennis Young
  ISBN 0-916439-77-1

        Bantam Books,Inc.
        666 5th Avenue
        New York,New York
        10103
------------------------------------------------------------------------
    Title: Music through MIDI : using MIDI to create your own
            electronic music system / Michael Boom.
Publisher: Redmond, Wash. : Microsoft Press, c1987.
 Subjects: MIDI (Standard)
 Subjects: Musical instruments, Electronic.
 Subjects: Electronic music--Instruction and study.
 Subjects: Computer sound processing.
     ISBN: 1-55615-026-1 (pbk.) : $19.95
------------------------------------------------------------------------
    Title: The MIDI drummer : by a drummer for a drummer-- / by David
            Crigger.
Publisher: Newbury Park, CA : Alexander Pub., c1987.
 Subjects: Electronic percussion instruments--Instruction and study.
           MIDI (Standard)
------------------------------------------------------------------------
    Title: MIDI for guitarists / by Bob Ward and Marty Cutler ;
Publisher: London ; New York : Amsco Publications ; New York, NY, USA
            : Exclusive distributors Music Sales Corp., c1988.
 Subjects: Electric guitar--Instruction and study.
           MIDI (Standard)
     ISBN: 0-8256-1126-1 (U.S.)
------------------------------------------------------------------------
    Title: MIDI for musicians / by Craig Anderton.
Publisher: New York : Amsco Publications, c1986.
 Subjects: MIDI (Standard)
           Computer sound processing.
     ISBN: 0-8256-1050-8 (pbk.)
     ISBN: 0-8256-2214-X (pbk. : cover)
------------------------------------------------------------------------
    Title: MIDI guitar : a complete applications directory for the
            modern guitarist / [by Rey Sanchez ; forward [sic] by
            Randy Bernsen].
Publisher: Miami, FL : CPP/Belwin, c1988.
 Subjects: MIDI (Standard)
           Computer sound processing.
           Electric guitar.
     ISBN: 0-89898-544-7 : $15.95
------------------------------------------------------------------------
    Title: Midi guitar and synthesis : the basics of guitar synthesis
            / by Paul Youngblood.
Publisher: Milwaukee, WI : H. Leonard Pub. Co., c1989.
 Subjects: MIDI (Standard)
           Computer sound processing.
           Electric guitar.
     ISBN: 0-88188-886-9 : $14.95
------------------------------------------------------------------------
    Title: The MIDI home studio / by Howard Massey.
Publisher: London ; New York : Amsco Publications ; New York, NY, USA
            : Music Sales Corp. [distributor], c1988.
     ISBN: 0-8256-1127-X (U.S.)
------------------------------------------------------------------------
    Title: The MIDI manual / David Miles Huber.
Publisher: Carmel, Ind., USA : Howard W. Sams, c1991.
     ISBN: 0-672-22757-6, 250pp.
------------------------------------------------------------------------
    Title: The MIDI programmer's handbook / Steve De Furia and Joe
            Scacciaferro, Ferro Technologies.
Publisher: Redwood City, Calif. : M&T Pub., c1989.
     ISBN: 1-55851-068-0, 250 pp.  Paperback. $24.95 Mix Bookshelf part # 3539C

*** This book is now out of print ***

New, advanced MIDI desk reference is perfect for programmers and MIDI power
users.  The heart of the book is a summary and explanation of every MIDI
command, in hex, binary, decimal and English.  Also features detailed
discussion of software design concerns, synchronization formats, MTC,
sample dump, MIDI files and system exclusive processing.

It discusses writing software to handle MIDI information at the application
level.  In other words, they assume you have already written or otherwise
obtained access to the necessary code to talk to your hardware to send and
receive the MIDI data.  This approach frees the entire discussion from
being tied to any particular hardware or programming approach.  Instead, it
spends its time on that which is valuable to the experienced programmer.
Issues such as MIDI file format, timing (SMPTE, MTC, etc), parsing MIDI
data and processing it, MIDI sample dump standard, etc. are all handled in
fine detail.
------------------------------------------------------------------------
THE MIDI IMPLEMENTATION BOOK, Defuria & Scacciaferro
Contains complete documentation of MIDI commands implemented by more than
200 instruments.  This data has come directly from hardware manufacturers
and allows you to find MIDI functions of specific instruments, compare
features of similar instruments and choose equipment to meet specific
applications.  A standard, one-page implementation chart is used for each
product.  ISBN ISBN 0-88188-558-4, 1986, 216 pp. $19.95

Mix Bookshelf, 1-800-233-9604 (US & Canada).  Doesn't say who publishes
it, and its terribly out-dated (1986), but they might have published
another addition by now.

The MIDI System Exclusive Book by Steve De Furia and Joe Scacciaferra,
Third Earth Productions, Pompton Lakesm N.J. Distributed by Hal
Leonard Books. ISBN ISBN 0-88188-586-x (1987)

The MIDI Resource Book.  Same guys. ISBN 0-88188-587-8
------------------------------------------------------------------------
    Title: MIDI programming for the Macintosh / Steve De Furia and Joe
            Scacciaferro.
Publisher: Redwood City, CA : M&T Books, 1988.
 Subjects: MIDI (Standard)
           Computer sound processing.
           Macintosh (Computer)--Programming.
     ISBN: 1-55851-021-4 : $22.95
     ISBN: 1-55851-022-2 (book & disk) : $39.95
     ISBN: 1-55851-023-0 (disk) : $20.00
------------------------------------------------------------------------
    Title: C Programming for MIDI / Jim Conger.
Publisher: Redwood City, Calif. : M&T Books, 1989.
                501 Galveston Drive Redwood City, CA 94063
 Subjects: MIDI, C, sequencing
This book shows how to use the basic features of an MPU-401 interface.
Includes a disk with MS-DOS code.
------------------------------------------------------------------------
    Title: MIDI sequencing in C / Jim Conger.
Publisher: Redwood City, Calif. : M&T Books, 1989.
                501 Galveston Drive Redwood City, CA 94063
 Subjects: MIDI (Standard)
           C (Computer program language)
           Sequential processing (Computer science)
     ISBN: 1-55851-045-1 (book) : $24.95
     ISBN: 1-55851-047-8 (disk) : $20.00
     ISBN: 1-55851-046-X (set) : $39.95
This book continues where the provious one lefts off.
------------------------------------------------------------------------
    Title: MIDI systems and control / Francis Rumsey.
Publisher: London ; Boston : Focal Press, 1990.
 Subjects: MIDI (Standard)
           Computer sound processing.
     ISBN: 0-240-51300-2 : $14.95 (U.S.)
------------------------------------------------------------------------
    Title: MIDI, the ins, outs & thrus / by Jeff Rona ; edited by
            Ronny S. Schiff.
Publisher: Milwaukee, Wis. : H. Leonard Books, c1987.
    Notes: "A complete guide to the understanding, use, and buying of
            MIDI instruments"--Cover.
 Subjects: MIDI (Standard)
           Computer sound processing.
     ISBN: 0-88188-560-6 (pbk.) : $12.95
------------------------------------------------------------------------
    Title: MIDI : a comprehensive introduction / Joseph Rothstein.
Publisher: Madison, Wis. : A-R Editions, c1992.
 Subjects: MIDI (Standard)
   Series: The Computer music and digital audio series ; v. 7
     ISBN: 0-89579-258-3 : $39.95
------------------------------------------------------------------------
   Microsoft Press put out a book on midi programming.  I
   think that this is rather a weak book, but it might serve
   as an introduction for non-computer folk.
------------------------------------------------------------------------
   Several other books are out that were written by musicians.
   They are interesting as a intro to using midi, but contain
   a dearth of info from my perspective.  As a programmer, I
   have the wrong perspective to sort these out.
----------------------------------------------------------------------------

Die offiziziellen Spezifikationen zu MIDI gibt es mittlerweile
bei M3C Systemtechnik in Berlin (in Englisch). Die Dokumente sind vergleichbar
den DIN Blaettern zu den einzelnen DIN Vorschriften. Sehr technisch ohne
zusaetzliche Erlaeuterungen, englisch.

M3C Systemtechnik
GrossbeerenstraBe 51
10965 Berlin

     MIDI 1.0 Spec+Addenda...79.- DM
         General MIDI Spec...25.- DM
   Standard MIDI File Spec...25.- DM
 MIDI Machine Control Spec...58.- DM
    MIDI Show Control Spec...25.- DM

Jeweils (etwa) DIN A4 , erster Titel geheftet, die anderen geklammert.

----------------------------------------------------------------------------

Fast vergessen haette ich:

ONLINE HELP (fuer ATARI - PC - MAC)
MIDI Xplained
Sprache Englisch (Zetterquist Software)
Vertrieb Steinberg   DM 69,--

----------------------------------------------------------------------------

WEITERE INFOS IN ANDEREN MAILBOXEN:
 
Wende Dich am besten an Alexander Weis(2:2464/112.108). Er hat eine
hervorragende MIDI-Dokumentation geschrieben (MIDITALK). Da steht alles drin,
was Du wissen musst!
.........................................

  In der Maus S3, 0711 2368367 (bitte nicht von 21:10-21:35 Uhr, Netz) unter 
  dem Namen MIDILIT.LZH, da sind neben Buechern ueber MIDI dann auch noch
  Quellen zu Synthesizer-Grundlagen und Computer-Musik allgemein dabei.

  Oder fuer die FTPler: ftp.cs.ruu.nl /pub/MIDI/DOC/bibliography


*******************************************************************************


Frage: Welche Funktion, Wert und Namen haben die MIDI-Controller ?

Antwort:

Hier die neueste Liste aus dem TSBB #18 vom Juli 92:

Defined Continuous Controllers:

14-Bit Controllers (MSB/LSB):
dec     hex     Function:
00/32   00/20   Bank Select
01/33   01/21   Modulation
02/34   02/22   Breath
03/35   03/23   (undefined) (formerly Aftertouch)
04/36   04/24   Foot Pedal
05/37   05/25   Portamento Time
06/38   06/26   Data Entry
07/39   07/27   Main Volume
08/40   08/28   Balance
09/41   09/29   (undefined)
10/42   0A/2A   Pan
11/43   0B/2B   Expression
12/44   0C/2C   Effect Control 1
13/45   0D/2D   Effect Control 2
14/46   0E/2E   (undefined)
15/47   0F/2F   (undefined)
16/48   10/30   General Purpose #1 (formerly Joystick X Axis)
17/49   11/31   General Purpose #2 (formerly Joystick Y Axis)
18/50   12/32   General Purpose #3
19/51   13/33   General Purpose #4
20/52   14/34   (undefined)
21/53   15/35   (undefined)
22/54   16/36   (undefined)
23/55   17/37   (undefined)
24/56   18/38   (undefined)
25/57   19/39   (undefined)
26/58   1A/3A   (undefined)
27/59   1B/3B   (undefined)
28/60   1C/3C   (undefined)
29/61   1D/3D   (undefined)
30/62   1E/3E   (undefined)
31/63   1F/3F   (undefined) (formerly Damp, Pitch Bend Sensitivity)

7-Bit Controllers (formerly switches):
dec hex Function:
64  40  Damper/Sustain/Hold #1
65  41  Portamento On/Off
66  42  Sustenuto
67  43  Soft Pedal
68  44  Legato Footswitch
69  45  Hold #2
70  46  Sound Controller #1 (default: Sound Variation) (formerly Velocity
                             Replace)
71  47  Sound Controller #2 (default: Timbre/Harmonic Intensity)
72  48  Sound Controller #3 (default: Release Time)
73  49  Sound Controller #4 (default: Attack Time)
74  4A  Sound Controller #5 (default: Brightness)
75  4B  Sound Controller #6 (default: undefined)
76  4C  Sound Controller #7 (default: undefined)
77  4D  Sound Controller #8 (default: undefined)
78  4E  Sound Controller #9 (default: undefined)
79  4F  Sound Controller #10 (default: undefined)
80  50  General Purpose #5
81  51  General Purpose #6
82  52  General Purpose #7
83  53  General Purpose #8
84  54  Portamento Control
85  55  (undefined)
86  56  (undefined)
87  57  (undefined)
88  58  (undefined)
89  59  (undefined)
90  5A  (undefined)
91  5B  Effect 1 Depth (formerly External Effects Depth)
92  5C  Effect 2 Depth (formerly Tremolo Depth)
93  5D  Effect 3 Depth (formerly Chorus Depth)
94  5E  Effect 4 Depth (formerly Celeste Depth)
95  5F  Effect 5 Depth (formerly Phaser Depth)
96  60  Data Increment
97  61  Data Decrement
98  62  Non-Registered Parameter LSB
99  63  Non-Registered Parameter MSB
100 64  Registered Parameter LSB
101 65  Registered Parameter MSB
102 66  *Mono Pitch (proposed; pending MMA & JMSC)
103 67  (undefined)
104 68  (undefined)
105 69  (undefined)
106 6A  (undefined)
107 6B  (undefined)
108 6C  (undefined)
109 6D  (undefined)
110 6E  (undefined)
111 6F  (undefined)
112 70  (undefined)
113 71  (undefined)
114 72  (undefined)
115 73  (undefined)
116 74  (undefined)
117 75  (undefined)
118 76  (undefined)

Channel Mode Messages:
dec hex Function:
119 77  *Mute Channel (proposed; pending JMSC)
120 78  All Sound Off
121 79  Reset All Controllers
122 7A  Local Control On/Off
123 7B  All Notes Off
124 7C  Omni Mode Off
125 7D  Omni Mode On
126 7E  Mono Mode Off
127 7F  Mono Mode On

Registered Parameters (MSB/LSB):
dec hex Function:
00/00   00/00   Pitch bend Sensitivity
00/01   00/01   Fine Tuning
00/02   00/02   Coarse Tuning
00/03   00/03   Tuning Program Select
00/04   00/04   Tuning Bank Select
127/127 7F/7F   *Null Controller (proposed; pending MMA)
------------------------------------------------------------------------------


Oder in anderer Form (schon etwas aelter... muss also nicht mehr stimmen):
     
     Table 3: Status Bytes 176-191; Control and Mode Changes (per channel)
  (adapted from "MIDI by the Numbers" by D. Valenti-Electronic Musician 2/88)
------------------------------------------------------------------------------
    2nd Byte Value |              Function                  |  3rd Byte
  Binary  |Hex|Dec |                                        | Value  |  Use
 - - - - -|- -|- - | - - - - - - - - - - - - - - - - - - - -|- - - - | - - - -
 00000000= 00=   0 | Continuous controller #0               | 0-127  |  MSB
 00000001= 01=   1 | Modulation wheel                       | 0-127  |  MSB
 00000010= 02=   2 | Breath control                         | 0-127  |  MSB
 00000011= 03=   3 | Continuous controller #3               | 0-127  |  MSB
 00000100= 04=   4 | Foot controller                        | 0-127  |  MSB
 00000101= 05=   5 | Portamento time                        | 0-127  |  MSB
 00000110= 06=   6 | Data Entry                             | 0-127  |  MSB
 00000111= 07=   7 | Main Volume                            | 0-127  |  MSB
 00001000= 08=   8 | Continuous controller #8               | 0-127  |  MSB
 00001001= 09=   9 | Continuous controller #9               | 0-127  |  MSB
 00001010= 0A=  10 | Continuous controller #10              | 0-127  |  MSB
 00001011= 0B=  11 | Continuous controller #11              | 0-127  |  MSB
 00001100= 0C=  12 | Continuous controller #12              | 0-127  |  MSB
 00001101= 0D=  13 | Continuous controller #13              | 0-127  |  MSB
 00001110= 0E=  14 | Continuous controller #14              | 0-127  |  MSB
 00001111= 0F=  15 | Continuous controller #15              | 0-127  |  MSB
 00010000= 10=  16 | Continuous controller #16              | 0-127  |  MSB
 00010001= 11=  17 | Continuous controller #17              | 0-127  |  MSB
 00010010= 12=  18 | Continuous controller #18              | 0-127  |  MSB
 00010011= 13=  19 | Continuous controller #19              | 0-127  |  MSB
 00010100= 14=  20 | Continuous controller #20              | 0-127  |  MSB
 00010101= 15=  21 | Continuous controller #21              | 0-127  |  MSB
 00010110= 16=  22 | Continuous controller #22              | 0-127  |  MSB
 00010111= 17=  23 | Continuous controller #23              | 0-127  |  MSB
 00011000= 18=  24 | Continuous controller #24              | 0-127  |  MSB
 00011001= 19=  25 | Continuous controller #25              | 0-127  |  MSB
 00011010= 1A=  26 | Continuous controller #26              | 0-127  |  MSB
 00011011= 1B=  27 | Continuous controller #27              | 0-127  |  MSB
 00011100= 1C=  28 | Continuous controller #28              | 0-127  |  MSB
 00011101= 1D=  29 | Continuous controller #29              | 0-127  |  MSB
 00011110= 1E=  30 | Continuous controller #30              | 0-127  |  MSB
 00011111= 1F=  31 | Continuous controller #31              | 0-127  |  MSB
 00100000= 20=  32 | Continuous controller #0               | 0-127  |  LSB
 00100001= 21=  33 | Modulation wheel                       | 0-127  |  LSB
 00100010= 22=  34 | Breath control                         | 0-127  |  LSB
 00100011= 23=  35 | Continuous controller #3               | 0-127  |  LSB
 00100100= 24=  36 | Foot controller                        | 0-127  |  LSB
 00100101= 25=  37 | Portamento time                        | 0-127  |  LSB
 00100110= 26=  38 | Data entry                             | 0-127  |  LSB
 00100111= 27=  39 | Main volume                            | 0-127  |  LSB
 00101000= 28=  40 | Continuous controller #8               | 0-127  |  LSB
 00101001= 29=  41 | Continuous controller #9               | 0-127  |  LSB
 00101010= 2A=  42 | Continuous controller #10              | 0-127  |  LSB
 00101011= 2B=  43 | Continuous controller #11              | 0-127  |  LSB
 00101100= 2C=  44 | Continuous controller #12              | 0-127  |  LSB
 00101101= 2D=  45 | Continuous controller #13              | 0-127  |  LSB
 00101110= 2E=  46 | Continuous controller #14              | 0-127  |  LSB
 00101111= 2F=  47 | Continuous controller #15              | 0-127  |  LSB
 00110000= 30=  48 | Continuous controller #16              | 0-127  |  LSB
 00110001= 31=  49 | Continuous controller #17              | 0-127  |  LSB
 00110010= 32=  50 | Continuous controller #18              | 0-127  |  LSB
 00110011= 33=  51 | Continuous controller #19              | 0-127  |  LSB
 00110100= 34=  52 | Continuous controller #20              | 0-127  |  LSB
 00110101= 35=  53 | Continuous controller #21              | 0-127  |  LSB
 00110110= 36=  54 | Continuous controller #22              | 0-127  |  LSB
 00110111= 37=  55 | Continuous controller #23              | 0-127  |  LSB
 00111000= 38=  56 | Continuous controller #24              | 0-127  |  LSB
 00111001= 39=  57 | Continuous controller #25              | 0-127  |  LSB
 00111010= 3A=  58 | Continuous controller #26              | 0-127  |  LSB
 00111011= 3B=  59 | Continuous controller #27              | 0-127  |  LSB
 00111100= 3C=  60 | Continuous controller #28              | 0-127  |  LSB
 00111101= 3D=  61 | Continuous controller #29              | 0-127  |  LSB
 00111110= 3E=  62 | Continuous controller #30              | 0-127  |  LSB
 00111111= 3F=  63 | Continuous controller #31              | 0-127  |  LSB
 01000000= 40=  64 | Damper pedal on/off (Sustain)          | 0=off  | 127=on
 01000001= 41=  65 | Portamento on/off                      | 0=off  | 127=on
 01000010= 42=  66 | Sustenuto on/off                       | 0=off  | 127=on
 01000011= 43=  67 | Soft pedal on/off                      | 0=off  | 127=on
 01000100= 44=  68 | Undefined on/off                       | 0=off  | 127=on
 01000101= 45=  69 | Undefined on/off                       | 0=off  | 127=on
 01000110= 46=  70 | Undefined on/off                       | 0=off  | 127=on
 01000111= 47=  71 | Undefined on/off                       | 0=off  | 127=on
 01001000= 48=  72 | Undefined on/off                       | 0=off  | 127=on
 01001001= 49=  73 | Undefined on/off                       | 0=off  | 127=on
 01001010= 4A=  74 | Undefined on/off                       | 0=off  | 127=on
 01001011= 4B=  75 | Undefined on/off                       | 0=off  | 127=on
 01001100= 4C=  76 | Undefined on/off                       | 0=off  | 127=on
 01001101= 4D=  77 | Undefined on/off                       | 0=off  | 127=on
 01001110= 4E=  78 | Undefined on/off                       | 0=off  | 127=on
 01001111= 4F=  79 | Undefined on/off                       | 0=off  | 127=on
 01010000= 50=  80 | Undefined on/off                       | 0=off  | 127=on
 01010001= 51=  81 | Undefined on/off                       | 0=off  | 127=on
 01010010= 52=  82 | Undefined on/off                       | 0=off  | 127=on
 01010011= 53=  83 | Undefined on/off                       | 0=off  | 127=on
 01010100= 54=  84 | Undefined on/off                       | 0=off  | 127=on
 01010101= 55=  85 | Undefined on/off                       | 0=off  | 127=on
 01010110= 56=  86 | Undefined on/off                       | 0=off  | 127=on
 01010111= 57=  87 | Undefined on/off                       | 0=off  | 127=on
 01011000= 58=  88 | Undefined on/off                       | 0=off  | 127=on
 01011001= 59=  89 | Undefined on/off                       | 0=off  | 127=on
 01011010= 5A=  90 | Undefined on/off                       | 0=off  | 127=on
 01011011= 5B=  91 | Undefined on/off                       | 0=off  | 127=on
 01011100= 5C=  92 | Undefined on/off                       | 0=off  | 127=on
 01011101= 5D=  93 | Undefined on/off                       | 0=off  | 127=on
 01011110= 5E=  94 | Undefined on/off                       | 0=off  | 127=on
 01011111= 5F=  95 | Undefined on/off                       | 0=off  | 127=on
                                                             -----------------
 01100000= 60=  96 | Data entry +1                          |       127
 01100001= 61=  97 | Data entry -1                          |       127
 01100010= 62=  98 | Undefined                              |        ?
 01100011= 63=  99 | Undefined                              |        ?
 01100100= 64= 100 | Undefined                              |        ?
 01100101= 65= 101 | Undefined                              |        ?
 01100110= 66= 102 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01100111= 67= 103 | Undefined                              |        ?
 01101000= 68= 104 | Undefined                              |        ?
 01101001= 69= 105 | Undefined                              |        ?
 01101010= 6A= 106 | Undefined                              |        ?
 01101011= 6B= 107 | Undefined                              |        ?
 01101100= 6C= 108 | Undefined                              |        ?
 01101101= 6D= 109 | Undefined                              |        ?
 01101110= 6E= 110 | Undefined                              |        ?
 01101111= 6F= 111 | Undefined                              |        ?
 01110000= 70= 112 | Undefined                              |        ?
 01110001= 71= 113 | Undefined                              |        ?
 01110010= 72= 114 | Undefined                              |        ?
 01110011= 73= 115 | Undefined                              |        ?
 01110100= 74= 116 | Undefined                              |        ?
 01110101= 75= 117 | Undefined                              |        ?
 01110110= 76= 118 | Undefined                              |        ?
 01110111= 77= 119 | Undefined                              |        ?
 01111000= 78= 120 | Undefined                              |        ?
 01111001= 79= 121 | Undefined                              |        ?
 01111010= 7A= 122 | Local control on/off                   | 0=off    127=on
 01111011= 7B= 123 | All notes off (!!)                     |        0
 01111100= 7C= 124 | Omni mode off (includes all notes off) |        0
 01111101= 7D= 125 | Omni mode on (includes all notes off)  |        0
 01111110= 7E= 126 | Poly mode on/off(includes all notes off)|       **
 01111111= 7F= 127 | Poly mode on(incl mono=off&all notes off)|      0

 **Note: This equals the number of channels, or zero if the number of channels
         equals the number of voices in the receiver.


*******************************************************************************


Frage: Wie ist die Beschaltung eines MIDI-Kabels fuer SoundBlaster/GUS ?

Antwort:
Vorschlag 1:        
             ͻ
               Soundblaster - Card - Midi - Interface  
             ͼ

           Ŀ
            + 5 Volt    Ŀ                _____
               O           Ŀ              |_____|O + 5 Volt
                  ĳĳĿ                     R5
                 Ŀ    Ŀ                     Ŀ
            Ŀ         Ŀ    
             14 13 12 11 10 09 08            6  5  4      
            o      IC 1                       OC 1       Gnd
             01 02 03 04 05 06 07            1  2  3  
                     
                                 
RXD  15 o Gnd               
     14 o                Ŀ
     13 o                   + 5 Volt                   
TXD  12 o                    O                |<Ĵ
     11 o   Ĵ                  D1  
     10 o                      | |    | |        | |    | |
+5V   9 oĴ                 R4| |  R3| |      R1| |  R2| |
      8 o      Ŀ     |_|    |_|        |_|    |_|
      7 o                                          
      6 o       Gnd     O      O      O          O      O
Gnd   5 oĳ        (2)    (4)    (5)        (4)    (5)
      4 o                  Midi OUT             Midi IN
      3 o   
      2 o   
      1 o
  Game-Port

Stueckliste:


              R1 - R4 = 220 Ohm
              R5      = 4.7 kOhm
              D1      = 1 N 4148
              IC1     = 74LS00
              OC1     = CNY 17

Mehr ist nicht zum Bau der Midi - Schnittstelle fuer
die Soundblaster-Card noetig.
Natuerlich fehlen in der Stueckliste jetzt noch die diversen Stecker und
Sockel.
Diese Schnittstelle laeuft seit geraumer Zeit bei Guido Schulze (2:245/32.2)
und bei mir ohne Probleme. Die Stromversorgung fuer diese Schnittstelle
kann man getrost vom Game-Port der SB-Card abnehmen.
Diese Schaltung ist nach der Vorlage des Buches 'Midi auf dem PC XT/AT'
aus dem Markt & Technik - Verlag entwickelt worden.

Insgesamt kosten die Bauteile ca. 10 DM

           Viel Spass beim Basteln ....

                                Ruediger Fuchs (2:245/32.0)

--------------------------------------------------------------------------
Vorschlag 2:

Die folgende Schaltung funktioniert fuer meine Gravis Ultrasound.
Ich ueber nehme keine Garantie, wenn nach dem Anschluss
an deine Soundkarte sich bei dir die Festplatte verbiegt,
deine Freunding schwanger wird oder sonst was passiert...


15 pin D connector
                                          220R
pin-1 +5v ----+--------------------------/\/\/\---------------\
              |                                                \ 4
              |                                          Gnd--2      MIDI OUT
              |      |\      |\            220R                / 5
pin-12 tr >---|------| o-----| o----------/\/\/\--------------/
              |    14|/ 13 12|/ 10
              |                            220R
              +---------------------------/\/\/\-------------\
              |                                               \ 4
pin-15 rx <---|--------------------+                    Gnd--2      MIDI THRU
              |      |\      |\    |        220R              / 5
              |   +--| o-----| o---+-------/\/\/\------------/
              |   | 1|/ 2   3|/ 4
              |   |
              |   +------+
              |   270R*  |                       220R
              +--/\/\/\--+    +------+----------/\/\/\--------\
              |B         |C   |A     |                         \  4
            +-|----------|----|-+    |                                MIDI IN
            |  8        6     2 |  -----                       /  5
            |                   |   / \ IN914 or IN4148     +-/
            |      6N138**      |   ---                     |
            |                   |    |                      |
            |           5     3 |    |                      |
            +------------|----|-+    |                      |
                         |    |K     |                      |
pin-5 Gnd  --------------+    +------+----------------------+


Inverters are LS7404
Leave pin 2 of the MIDI IN unconnected (Don't connect to ground)

* this resistor was 5.6K in the original post, I used a the 6N138 optoisolator
  and found that this value was too high as not enough current was allowed
  to sink into the collector of the output transistor.

**In the original post this was 6N135, I could not readily find this here
  (Australia) so I used 6N138 which I think is funcionally the same,
  one of the catalogues stated that this is a "high speed MIDI standard"
  device.


Das ganze hat mich ca. 10,- DM gekostet, ein Gehaeuse hatte ich
noch ueber.

_______________________________________________________________________________

Vorschlag 3:

Da muss etwas Elektronik zwischen. Die Teile kann man aber in den Steckern
unterbringen, weil es nur wenig Bauteile sind. Am Computer ist der 15pol Sub-D
Stecker. Am Keyboard sind zwei 5pol DIN-Stecker. Der Computer ist links
gezeichnet:


Computer --> Keyboard:


                   150 Ohm
Pin 12 O-----------[===]---------+----O Pin 5
                                 |
                          220pF ===
                                 |
Pin 9  O-----------[===]---------+----O Pin 4
                   150 Ohm


Computer <-- Keyboard:

               Cny 17
                ___
Pin 4  O-------|   |
Pin 15 O--+----|   |--------------+
          |    |_*_|-----+--|<|---+------+------O Pin 5
         |~|             | 1N4148        |
         |_|             |              === 220pF
          | 2,2k Ohm     |               |
Pin 8  O--+              +----[===]------+------O Pin 4
                              220 Ohm



Vie Spass beim Basteln. PS: Mach keinen Kurzschluss, das koennte die Soundarte
nicht moegen.

-------------------------------------------------------------------------------

Vorschlag 4:

  DO IT YOURSELF:  SOUND BLASTER MIDI INTERFACE
  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

The following text explains how to build a MIDI interface for the
Sound Blaster. The circuit is my own design, but works just like
the commercially available interfaces that retails for $60-$90.

Here is the list of parts necessary:

Qty.           Part

 1    Sharp PC900 or HP 6N138 opto-isolator
 1    DB15P (15 pin 'D' connector, male. like joystick connector)

 3    220 ohm resistors (2 for input, 1 for EACH output you need)
 1    3 conductor shielded cable (length is up to you)
 2    Female 5 pin DIN connector (1 for input, 1 for each output you need)
 1    PC board with pre-drilled holes (about 2" x 2" from Radio Shack)
      A few short lengths of hook-up wire

All of these parts, except the first 2, are available from Radio Shack.

Here is a diagram of the DB15P connector (looking at the solder side).
                                          gesehen von der Loetseite
    1       5     8
    o o o o o o o o
     o o o o o o o
     9     12     15

Here is the 5 pin FEMALE DIN plug (solder side).
            5 polige DIN-Buchse-/(-nstecker) von der Loetseite gesehen
       2
   5   o   4
     o   o
  3  o   o  1


This is the circuit for the MIDI INPUT.


                                     +-----> To pin 5 of 'D' connector
                                     |
To pin 15 of 'D' connector <---+     |     +-------+-----> To pin 9 of 'D' con.
                               |     |     |       |
                               | 6   |5    |4      \
                             +---------------+     /  220 ohm
                             |     PC900     |     \  resistor
                             |      or       |     /
                             |   HP 6N138    |     |
                             +---------------+     +------> To pin 6 of PC 900
                               |1    |2    |3
                               |     |     |
                               \     |     +----->  No connection
                       220 ohm /     |
                      resistor \     |
                               /     +-----> To pin 5 of DIN connector
                               |
To pin 4 of DIN connector <----+


Don't overlook the two 220 ohm resistors.

Also, for cables longer than a few feet, connect pin 2 of the DIN to pin
5 of the 'D' connector.


The output circuit is much simpler.

                                  220 ohm resistor
To pin 12 of 'D' connector <---------/\/\/\/\/---------> To pin 5 of DIN con.

To pin 15 of 'D' connector <---------------------------> To pin 4 of DIN con.

Also, for cables longer than a few feet, connect pin 2 of the DIN to pin
5 of the 'D' connector.


This circuit has been built and tested by me, using Voyetra's SPJr, and
a cheap-o Casio keyboard. The input and output do work as shown here, but I
don't have any other MIDI devices to use to test using more than 1 output
device. Theoretically, it should work fine, but it has not been tested.

The chances of hurting anything by trying is slim and none.

This circuit DOES work, but I make no guarantees, nor will I be
held responsible for any damages you may cause from your use of
this information.

Diese Schaltung ist noch nicht ausprobiert.

*******************************************************************************

Frage: Wie sieht ein MIDI-Kabel aus und wie ist die Belegung?

Antwort:

Ein MIDI-Kabel besteht aus zwei 5-poligen DIN-Steckern (180 Grad) und soll
nicht laenger als 15m sein. Das Kabel ist 2 adrig mit Abschirmung. (je  
dicker - je besser....). Will man mehr als 15m ueberbruecken so muss eine
MIDI-THRU-BOX oder ein MIDI-LINE-DRIVER zwischengeschaltet werden. 

Belegung des Steckers auf die Loetseite gesehen:
                                                 +--------+
                   +----------  Abschirmung -----I-----+  I
                   2                             I     2  +
   +-Signal ----+5   4 +------- Signal ----------+   5    4
   I            3     1                           3  +      1
   I                                                 I
   +-------------------------------------------------+

1 und 3 sind NICHT belegt. 2 geht nach 2, 4 nach 4 und 5 nach 5 des anderen
Steckers.

*******************************************************************************


Frage: Wie ist die Belegung der Sounds bei GM/GS ?

Antwort:

****    Brief Overview of Proposed General MIDI Level 1 Spec   ****

  The heart of General MIDI (GM) is the _Instrument Patch Map_, shown in
Table 1 (see below). This is a list of 128 sounds, with corresponding
MIDI program numbers. Most of these are imitative sounds, though the
list includes synth sounds, ethnic instruments and a handful of sound
effects.
  The sounds fall roughtly into sixteen families of eight variations
each. Grouping sounds makes it easy to re-orchestrate a piece using
similar sounds. The Instrument Map isn't the final word on musical
instruments of the world, but it's pretty complete
  General MIDI also includes a _Percusssion Key Map_, show in Table 2
(see below). This mapping derives from the Roland/Sequential mapping
used on early drum machines. As with the Instrument Map, it doesn't
cover every percussive instrument in the world, but it's more than
adequate as a basic set.
  To avoid concerns with channels, GM restricts percussion to MIDI
Channel 10. Theoretically, the lower nine channels are for the
instruments, but the GM spec states that a sound module must respond
to all sixteen MIDI channels, with dynamic voice allocation and a
minimum of 24 voices.
  General MIDI doesn't mention sound quality of synthesis methods.
Discussions are under way on standardizing sound parameters such as
playable range and envelope times. This will ensure that an arrangement
that relies on phrsing and balance can play back on a variety of
modules.
  Other requirements for a GM sound module include response to velocity,
mod wheel, aftertouch, sustain and expression pedal, main volume and
pan, and the All Notes Off and Reset All Controllers messages. The
module  also must respond to both Pitch Bend and Pitch Bend Sensitivity
(a MIDI registered parameter). The default pitch bend range is +-2
semitones.
  Middle C (C3) corresponds to MIDI key 60, and master tuning must be
adjustable.  Finally, the MIDI Manufacturers Association (MMA) created a
new Universal System Exclusive message to turn General MIDI on and off
(for devices that might have "consumer" and "programmable" settings).
Table 3 (see below) summarizes these requirements.
  General MIDI has room for future expansion, including additional drum
and instrument assignments and more required controllers. Also under
discussion is an "authorizing document" that would standardize things
such as channel assignments (e.g., lead on 1, bass on 2, etc.) and setup
information in a MIDI file.

Copies of the Level 1 Specification documents for General MIDI ($5 each
at last notice) are available from the Internation MIDI Association,
5316 West 57th Street Los Angeles, CA 90056, (213) 649-6434. The first
issue of the Journal of the MMA (back issues, $15 each) contains an
article by PassPort Designs and Stanley Junglieb about General MIDI.


Roland's GS Standard

  When Warner New Media first proposed a General MIDI standard, most MMA
members gave it little thought. As discussions proceeded, Roland
listened and developed a sound module to meet the proposed
specification. At the same NAMM show where the MMA ratified General MIDI
Level 1, Roland showed their Sound Brush and Sound Canvas, a Standard
MIDI File player and GM-compatible sound module.
  Some companies feel that General MIDI doesn't go far enough, so Roland
created a superset of General MIDI Level 1, which they call GS Standard.
It obeys all the protocols and sound maps of General MIDI and adds many
extra controllers and sounds. Some of the controllers use Unregistered
Parameter Numbers to give macro control over synth parameters such as
envelope attack and decay rates.
  The new MIDI Bank Select message provides access to extra sounds
(including variations on the stock sounds and a re-creation of the MT-32
factory patches). The programs in each bank align with the original 128
in General MIDI's Instrument Patch Map, with eight banks housing related
families. The GS Standard includes a "fall back" system. If the Sound
Canvas receives a request for a bank/program number combination that
does not exist, it will reassign it to the master instrument in that
family. A set of Roland System Exclusive messages allows reconfiguration
and customization of the sound module.
  This means that a Roland GS Standard sound module will correctly play
back any song designed for General MIDI. In addition, if the song's
creator wants to create some extra nuance, they can include the GS
Standard extensions in their sequence. None of these extensions are so
radical as to make the song unplayable on a normal GM sound module.
After all, compatibility is what MIDI - and especially General MIDI - is
all about.
  Music authors interested in the GS Standard should contact Tom White
at RolandCorp USA, 7200 Dominion Circle, Los Angeles, CA 90040, (213)
685-5141.

****     TABLE 1  -  General MIDI Instrument Patch Map      ****
(groups sounds into sixteen families, w/8 instruments in each family)

Prog#     Instrument               Prog#     Instrument

   (1-8        PIANO)                   (9-16      CHROM PERCUSSION)
1         Acoustic Grand             9        Celesta
2         Bright Acoustic           10        Glockenspiel
3         Electric Grand            11        Music Box
4         Honky-Tonk                12        Vibraphone
5         Electric Piano 1          13        Marimba
6         Electric Piano 2          14        Xylophone
7         Harpsichord               15        Tubular Bells
8         Clav                      16        Dulcimer

   (17-24      ORGAN)                      (25-32      GUITAR)
17        Drawbar Organ             25        Acoustic Guitar(nylon)
18        Percussive Organ          26        Acoustic Guitar(steel)
19        Rock Organ                27        Electric Guitar(jazz)
20        Church Organ              28        Electric Guitar(clean)
21        Reed Organ                29        Electric Guitar(muted)
22        Accoridan                 30        Overdriven Guitar
23        Harmonica                 31        Distortion Guitar
24        Tango Accordian           32        Guitar Harmonics

   (33-40      BASS)                        (41-48     STRINGS)
33        Acoustic Bass             41        Violin
34        Electric Bass(finger)     42        Viola
35        Electric Bass(pick)       43        Cello
36        Fretless Bass             44        Contrabass
37        Slap Bass 1               45        Tremolo Strings
38        Slap Bass 2               46        Pizzicato Strings
39        Synth Bass 1              47        Orchestral Strings
40        Synth Bass 2              48        Timpani

   (49-56     ENSEMBLE)                      (57-64      BRASS)
49        String Ensemble 1         57        Trumpet
50        String Ensemble 2         58        Trombone
51        SynthStrings 1            59        Tuba
52        SynthStrings 2            60        Muted Trumpet
53        Choir Aahs                61        French Horn
54        Voice Oohs                62        Brass Section
55        Synth Voice               63        SynthBrass 1
56        Orchestra Hit             64        SynthBrass 2

   (65-72      REED)                         (73-80      PIPE)
65        Soprano Sax               73        Piccolo
66        Alto Sax                  74        Flute
67        Tenor Sax                 75        Recorder
68        Baritone Sax              76        Pan Flute
69        Oboe                      77        Blown Bottle
70        English Horn              78        Skakuhachi
71        Bassoon                   79        Whistle
72        Clarinet                  80        Ocarina

   (81-88      SYNTH LEAD)                   (89-96      SYNTH PAD)
81        Lead 1 (square)           89        Pad 1 (new age)
82        Lead 2 (sawtooth)         90        Pad 2 (warm)
83        Lead 3 (calliope)         91        Pad 3 (polysynth)
84        Lead 4 (chiff)            92        Pad 4 (choir)
85        Lead 5 (charang)          93        Pad 5 (bowed)
86        Lead 6 (voice)            94        Pad 6 (metallic)
87        Lead 7 (fifths)           95        Pad 7 (halo)
88        Lead 8 (bass+lead)        96        Pad 8 (sweep)

   (97-104     SYNTH EFFECTS)                (105-112     ETHNIC)
 97        FX 1 (rain)              105       Sitar
 98        FX 2 (soundtrack)        106       Banjo
 99        FX 3 (crystal)           107       Shamisen
100        FX 4 (atmosphere)        108       Koto
101        FX 5 (brightness)        109       Kalimba
102        FX 6 (goblins)           110       Bagpipe
103        FX 7 (echoes)            111       Fiddle
104        FX 8 (sci-fi)            112       Shanai

   (113-120    PERCUSSIVE)                  (121-128     SOUND EFFECTS)
113        Tinkle Bell              121       Guitar Fret Noise
114        Agogo                    122       Breath Noise
115        Steel Drums              123       Seashore
116        Woodblock                124       Bird Tweet
117        Taiko Drum               125       Telephone Ring
118        Melodic Tom              126       Helicopter
119        Synth Drum               127       Applause
120        Reverse Cymbal           128       Gunshot


****    TABLE 2  -  General MIDI Percussion Key Map    ****
(assigns drum sounds to note numbers. MIDI Channel 10 is for percussion)

MIDI   Drum Sound                MIDI    Drum Sound
Key                              Key

35     Acoustic Bass Drum        59      Ride Cymbal 2
36     Bass Drum 1               60      Hi Bongo
37     Side Stick                61      Low Bongo
38     Acoustic Snare            62      Mute Hi Conga
39     Hand Clap                 63      Open Hi Conga
40     Electric Snare            64      Low Conga
41     Low Floor Tom             65      High Timbale
42     Closed Hi-Hat             66      Low Timbale
43     High Floor Tom            67      High Agogo
44     Pedal Hi-Hat              68      Low Agogo
45     Low Tom                   69      Cabasa
46     Open Hi-Hat               70      Maracas
47     Low-Mid Tom               71      Short Whistle
48     Hi-Mid Tom                72      Long Whistle
49     Crash Cymbal 1            73      Short Guiro
50     High Tom                  74      Long Guiro
51     Ride Cymbal 1             75      Claves
52     Chinese Cymbal            76      Hi Wood Block
53     Ride Bell                 77      Low Wood Block
54     Tambourine                78      Mute Cuica
55     Splash Cymbal             79      Open Cuica
56     Cowbell                   80      Mute Triangle
57     Crash Cymbal 2            81      Open Triangle
58     Vibraslap


****     TABLE 3  -   General MIDI minimum sound module specs    ****

Voices:
A minimum of either 24 fully dynamically allocated voices
available simultaneously for both melodic and percussive sounds or 16
dynamically allocated voices for melody plus eight for percussion.

Channels:
General MIDI mode supports all sixteen MIDI channels. Each channel can
play a variable number of voices (polyphony). Each channel can play a
different instrument (timbre). Keybased Percussion is always on
Channel 10.

Instruments:
A minimum of sixteen different timbres playing various instrument
sounds. A minimum of 128 preset for Intruments (MIDI program numbers).

Note on/Note off:
Octabe Registration: Middle C(C3) = MIDI key 60. All Voices including
percussion respond to velocity.

Controllers:
Controller #   Description
  1             Modulation
  7             Main Volume
 10             Pan
 11             Expression
 64             Sustain
121             Reset All Controllers
123             All Notes Off

Registered      Description
Parameter #
0               Pitch Bend Sensitivity
1               Fine Tuning
2               Coarse Tuning

Additional Channel Messages:
Channel Pressure (Aftertouch)
Pitch Bend

Power-Up Defaults:
Pitch Bend Amount = 0
Pitch Bend Sensitivity = +-2 semitones
Volume = 90
All Other Controllers = reset

(after Electronic Musician, 8/91 issue)
-------------------------------------------------------------------------------

Der General Midi (GM) Standard und seine Sounds mit Klangbeschreibung:

01-08 Piano

Nr.    Name                       Beschreibung

O1     Acoustic Grand Piano       normaler akustischer Fluegel
02     Bright Acoustic Piano      hellerer Fluegelsound
03     Electric Grand Piano       elektrischer Fluegel
04     Honky-tonk                 verstimmtes Honky-Tonk-Piano
05     Electric Piano 1           voller E-Piano-Sound
06     Electric Piano 2           brillanter E-Piano-Sound
07     Haxpsichord                Cembalo
08     Clavi                      Clavinet

09-16 Chromatic Percussion - Gestimmte Percussion

09     Celesta                    Celesta
10     Glockenspiel               Glockenspiel
11     Music Box                  Spieluhr
12     Vibraphone                 Vibraphon
13     Marimba                    Marimba
14     Xylophone                  Xylophon
15     Tubular Bells              Roehrenglocken
16     Dulcimer                   Laute

17-25 Organ - Orgeln und Akkordeons

17     Drawbar Organ              normaler Hammond-Sound
18     Percussive Organ           perkussiver Hammond-Sound
19     Rock Organ                 rockiger, leicht angezerrter Hammond-Sound
20     Church Organ               Kirchenorgel, volles Werk
21     Reed Organ                 Harmonium
22     Accordion                  Akkordeon
23     Harmonica                  Mundharmonika
24     Tango Accordion            Musette-Akkordeon

25-32 Guitar - Gitarren

25     Acoustic Guitar (nylon)    akustische Gitarre mit Nylonsaiten
26     Acoustic Guitar (steel)    akustische Gitarre mit Stahlsaiten
27     Electric Guitar (jazz)     Jazz-Gitarre
28     Electric Guitar (clean)    normaler E-Gitarrensound
29     Electric Guitar (muted)    E-Gitarre,abgedaempft
30     Overdrive Guitar           verzerrte Gitarre (Roehrenverzerrung)
31     Distortion Guitar          verzerrte Gitarre (Transistorverzerrung)
32     Guitar harmonics           E-Gitarre,Flageolet-Toene

33-40 Bass - Baesse

33     Acoustic Bass              gezupfter Kontrabass
34     Electric Bass (finger)     gezupfter E-Bass
35     Electric Bass (pick)       E-Bass mit Plektrum
36     Fretless Bass              bundloser Bass
37     Slap Bass 1                E-Bass,mit dem Daumen gespielt
38     Slap Bass 2                E-Bass,mit dem Daumen gespielt
39     Synth Bass 1               metallischer Sequenzerbass
40     Synth Bass 2               analoger Sequenzerbass

41-48 Strings - Streichinstrumente

41     Violin                     Geige
42     Viola                      Bratsche
43     Cello                      Cello
44     Contrabass                 gestrichener Kontrabass
45     Tremolo Strings            tremolierende Streicher
45     Pizzicato Strings          Pizzicato-Streicher
47     Orchestral Harp            Harfe
48     Timpani                    Pauken

49-56 Ensemble - Orchester und Ensembles

49     String-Ensemble 1          helle,staccato spielbare Streicher
50     String Ensemble            Legato-Streicher
51     SynthStrings 1             Synthesizer-Strings
52     SynthStrings 2             Synthesizer-Strings mit Phaser
53     Choir Aahs                 Ah-Chor
54     Voice Oohs                 Ohh-Stimme
55     Synth Voice                Synthesizer-Chor
56     Orchestra Hit              Orchester-Abschlag

57-64 Brass - Blechblasinstrumente

57     Trumpet                    Trompete
58     Trombone                   Posaune
59     Tuba                       Tuba
60     Muted Trumpet              gestopfte Trompete
61     French Horn                Horn
62     Brass Section              Blechblaeser
63     SynthBrass 1               Oberheim-Brass
64     SynthBrass 2               Prophet-Brass

65-72 Reed - Holzblasinstrumente

65     Soprano Sax                Sopransaxophon
66     Alto Sax                   Altsaxophon
67     Tenor Sax                  Tenorsaxophon
68     Baritone Sax               Baritonsaxophon
69     Oboe                       Oboe
70     English Hom                Englischhorn
71     Bassoon                    Fagott
72     Clarinet                   Klarinette

73-80 Pipe - Floeten und Pfeifen

73     Piccolo                    Piccolofloete
74     Flute                      Querfloete
75     Recorder                   Blockfloete
76     Pan Flute                  Panfloete
77     Blown Bottle               angeblasene Flasche
78     Shakuhachi                 asiatische Floete
79     Whistle                    Pfeifen
80     Ocarina                    Ocarina

81-88 Synth Lead - Synthesizer-Solosounds

81     Lead 1 (square)            Synthesizer-Solosound (Rechteck)
82     Lead 2 (sawtooth)          Synthesizer-Solosound (Saegezahn)
83     Lead 3 (calliope)          Synthesizer-Solosound (panfloetenaehnlich)
84     Lead 4 (Chiff)             Synthesizer-Solosound
85     Lead 5 (charang)           Synthesizer-Solosound
86     Lead 6 (voice)             Synthesizer-Solosound (Yo-Voice)
87     Lead 7 (fifths)            Synthesizer-Solosound (Quinten)
88     Lead 8 (Bass + lead)       Synthesizer-Solosound (Bass + Solo)

89-96 Synth Pad - Flaechensounds

89     Pad 1 (new age)            sphaerischer Flaechensound
90     Pad 2 (warm)               warmer Flaechensound
91     Pad 3 (polysynth)          Synthesizer-Flaeche
92     Pad 4 (choir)              Flaechensound: Chor
93     Pad 5 (bowed)              Flaechensound (glasharfenartig)
94     Pad 6 (metallic)           metallischer Flaechensound
95     Pad 7 (halo)               Synthesizer-Flaeche
96     Pad 8 (sweep)              Synthesizer-Flaeche

97-104 Synth Effects - Synthesizereffekte

97     FX 1 (rain)                Effekt: Regen
98     FX 2 (soundtrack)          Effekt: Soundtrack-Sound (D-50)
99     FX 3 (crystal)             Effekt: Klirren
100    FX 4 (atmosphere)          atmosphaerischer Sound
101    FX 5 (brightness)          heller Digitalsound
102    FX 6 (goblins)             Effekt: Gnome
103    FX 7 (echoes)              Effekt: Echos
104    FX 8 (sci-fi)              Effekt: Computersound

105-112 Ethnic - Ethnische Instrumente

105    Sitar                      Sitar
106    Banjo                      Banjo
107    Shamisen                   Shamisen
108    Koto                       harfenaehnliches Instrument
109    Kalimba                    Kalimba
110    Bag pipe                   Dudelsack
111    Fiddle                     Fiedel
112    Shanai                     Shanai

113-120 Percussive - Percussion-Instrumente

113    Tinkle Bell                metallischer Gloeckchensound
114    Agogo                      Agogo-Bell
115    Steel Drums                Oelfaesser
116    Woodbloek                  Holzblock
117    Taiko Drum                 paukenaehnlicher Drumsound
118    Melodic Tom                gestimmtes Tom
119    Synth Drum                 Simmons-Tom
120    Reverse Cymbal             Crash-Becken mit Rueckwaerts-Effekt

121-128 Sound Effects - Soundeffekte

121    Guitar Fret Noise          Griffgeraeusche der Gitarre
122    Breath Noise               Atemgeraeusch
123    Seashore                   Wellenrauschen
124    Bird Tweet                 Vogelzwitschern
125    Telephone Ring             Telefonsignal
126    Helicopter                 Hubschrauber
127    Applause                   Applaus
128    Gunshot                    Gewehrschuss

*******************************************************************************

Frage: Wie sind die Hersteller ID's bei SysEx ?

Antwort:

        >>>>>>>>>>>>>>>>>>>>>>>>>>>
        > SysEx - Hersteller ID's >
        >>>>>>>>>>>>>>>>>>>>>>>>>>>

        Amerikanische Hersteller
        ************************

        ID(hex)         Hersteller      
        -------         ----------
        01              Sequential
        02              IDP
        03              Voyetra/Octave-Plateau
        04              Moog
        05              Passport Desings
        06              Lexicon
        07              Kurzweil
        08              Fender
        09              Gulbransen
        0A              AKG Acuostics
        0B              Voyce Music
        0C              Waveframe Corp.
        0D              ADA Signal Processors
        0E              Garfield Electronics (good morning monday)
        0F              Ensoniq
        10              Oberheim
        11              Apple
        12              Grey Matter Response
        13              Digidesign
        14              Palm Tree Instruments
        15              JL Cooper
        16              Lowrey
        17              Adams-Smith
        18              Emu Systems
        19              Harmony Systems
        1A              ART
        1B              Baldwin
        1C              Eventide
        1D              Inventronics
        1F              Clarity
        00 00 01        Warner New Media
        00 00 07        Digital Music Corp.        
        00 00 08        IOTA Systems        
        00 00 09        New England Digital        
        00 00 0A        Artisyn
        00 00 0B        IVL Technologies
        00 00 0C        Southern Music Systems
        00 00 0D        Lake Butler Sound Company
        00 00 0E        Alesis
        00 00 10        DOD Electronics
        00 00 11        Studer - Editech
        00 00 14        Jeff Tripp/Perfect Fretworks
        00 00 15        KAT
        00 00 16        Opcode
        00 00 17        Rank Corp.
        00 00 18        Spatial Sound / Anadi Inc.
        00 00 19        KMX (Ken Yprilla)
        00 00 1A        Allen & Heath Brenell
        00 00 1B        Peavy Electronics
        00 00 1C        360 Spectrum
        00 00 1D        Spectrum Design and Development
        00 00 1E        Marquis Musi
        00 00 1F        Zeta Systems
        00 00 20        Axxes (Brian Parsonett)
        00 00 21        Orban
        00 00 24        KTI
        00 00 25        Breakaway Technilogies
        00 00 26        CAE        
        00 00 29        Rocktron Corp.
        00 00 2A        PianoDisc
        00 00 2B        Cannon Research Group
        00 00 2D        Rogers Instrument Corp.
        00 00 2E        Blue Sky Logic
        00 00 2F        Encore Electronics
        00 00 30        Uptown
        00 00 31        Voce
        00 00 32        CTI Audio Inc.
        00 00 33        S&S Research
        00 00 34        Brotherbound Software Inc.
        00 00 35        Allen Organ Co.
        00 00 37        Music Quest
        00 00 38        APHEX
        00 00 39        Gallien Krueger
        00 00 3A        Big Brother..........
        00 00 3C        Hotz Instruments Technologies
        00 00 3D        ETA Lightning
        00 00 3E        NSI Corporation
        00 00 3F        Ad Lib Inc.
        00 00 40        Richmond Sound Design
        00 00 41        Microsoooooooooooooooft
        00 00 42        Theo Software Toolworks (Anne Graham)
        00 00 43        RJMG / Niche
        00 00 44        Intonic
        00 00 47        GT Electronics / Groove Tubes
        00 00 4F        InterMIDI Inc.
        00 00 55        Lone Wolf
        00 00 64        Musonix


        Europaeische Hersteller
        ***********************
        
        ID(hex)         Hersteller
        -------         ----------
        20              Passac
        21              Siel (I)
        22              Synthaxe (GB)
        24              Hohner (D)
        25              Twister
        26              Solton
        27              Jellinghaus (D)
        28              Southworth Music Systems
        29              PPG (D)
        2A              JEN
        2B              SSL Limited (GB)
        2C              Audio Vertrieb P.Struven
        2F              Elka / General Music
        30              Dynacord (D)
        33              Clavia Digital Instruments
        34              Audio Architecture
        35              General Music Corp.
        39              Soundcraft Electronics
        3B              WERSI
        3C              Avab Electrinik AB (S)
        3D              Digigram
        3E              Waldorf Electronics GmbH (D)
        3F              Quasimidi
        00 20 00        Dream
        00 20 01        Strand Lightning
        00 20 02        Amek Systems Ltd.
        00 20 04        Dr. Bhm / Musican International
        00 20 06        Trident Audio
        00 20 07        Real World Studio
        00 20 09        Yes Technoligy
        00 20 0A        Audiomatica
        00 20 0B        Bontempi / Farfisa
        00 20 0C        FBT Elettronica
        00 20 0E        LA Audio (Larking Audio)
        00 20 0F        Zero 88 Lighting Ltd.
        00 20 10        Micon Audio Electronics GmbH
        00 20 11        Forefront Technology
        00 20 13        Kenton Electronics
        00 20 15        ADB
        00 20 16        Jim Marshall Procducts Ltd.
        00 20 17        DDA
        00 20 1F        TC Electronics


        Japanische Hersteller
        *********************

        ID(hex)         Hersteller
        -------         ----------
        40              Kawai
        41              Roland
        42              Korg
        43              Yamaha
        44              Casio
        46              Kamiya Studio
        47              Akai
        48              Japan Victor
        49              Mesosha
        4A              Hoshino Gakki
        4B              Fujitsu Electric
        4C              Sony
        4D              Nisshin Onpa
        4E              TEAC
        50              Matsushita Electric
        51              Fostex
        52              Zoom
        53              Midori Electronics
        54              Mtsushita Communication Industrial
        55              Suzuki Musical Instrument Manufact.


-------------------------------------------------------------------------------

Das Ganze noch in anderer Form:

Die 1-Byte-IDs haben die Werte $01 (1) bis $7F (127). Wenn das
Manufacturer-Byte $00 (0) ist, folgen zwei weitere Bytes.
Somit hat man 127 + 128*128 moegliche ID's.

Hier die Liste, die in SoundDiver eingebaut ist:

01 Sequential
02 IDP
03 Voyetra/Octave-Plateau
04 Moog
05 Passport Designs
06 Lexicon
07 Kurzweil
08 Fender
09 Gulbransen
0A AKG
0B Voyce Music
0C Waveframe
0D ADA
0E Garfield
0F Ensoniq
10 Oberheim
11 Apple
12 Grey Matter Response
13 Digidesign
14 Palm Tree Instruments
15 JL Cooper
16 Lowrey
17 Adams-Smith
18 Emu
19 Harmony Systems
1A ART
1B Baldwin
1C Eventide
1D Inventronics
1E Key Concepts
1F Clarity
20 Passac
21 Siel
22 Synthaxe
23 Stepp
24 Hohner
25 Crumar
26 Solton
27 Jellinghaus
28 Southworth
29 PPG
2A JEN
2B SSL Limited
2C P. Strueven
2D Neve
2E Soundtracs
2F Elka/General Music
30 Dynacord
31 Intercontinental
32 Drawmer
33 t.c. electronic
34 Audio Architecture
35 General Music
36 Cheetah
37 C.T.M.
38 Simmons
39 Soundcraft
3A Steinberg
3B Wersi
3C Avab Electronik Ab
3D Digigram
3E Waldorf
3F Quasimidi
40 Kawai
41 Roland
42 Korg
43 Yamaha
44 Casio
45 Moridaira
46 Kamiya Studio
47 Akai
48 Japan Victor
49 Meisosha
4A Hoshino Gakki
4B Fujitsu
4C Sony
4D Nisshin Onpa
4E TEAC
4F System Product
50 Matsushita
51 Fostex
52 Zoom
53 Midori
54 Matsushita
55 Suzuki
7D Non-Commercial SysEx
7E Non-Real-Time SysEx
7F Real-Time SysEx

Mb: *** 3-Byte
00 01 Warner New Media
00 02 Music Logic Systems
00 03 PAIA
00 04 Othertech
00 05 K-Muse
00 06 Stypher
00 07 Digital Music
00 08 IOTA Systems
00 09 New England Digital
00 0A Artisyn
00 0B IVL
00 0C Southern Music Systems
00 0D Lake Butler Sound
00 0E Alesis
00 0F Sound Creation
00 10 DOD/Digitech
00 11 Studer-Editech
00 12 Sonus
00 13 Temporal Acuity Prod.
00 14 Jeff Tripp/Perfect Fretworks
00 15 KAT
00 16 Opcode
00 17 Rane Corp.
00 18 Spatial Sound/Anadi Inc.
00 19 KMX
00 1A Allen & Heath Brenell
00 1B Peavey Electronics
00 1C 360 Systems
00 1D Spectrum Design and Dev.
00 1E Marquis Music
00 1F Zeta Systems
00 20 Axxes (Brian Parsonett)
00 21 Orban
00 22 Indian Valley Mnfg.
00 23 Triton
00 24 KTI
00 25 Breakaway Technologies
00 26 CAE
00 27 Harrison
00 28 Future Lab
00 29 Rocktron
00 2A PianoDisc
00 2B Cannon Research Group
00 2D Rogers Instrument Corp.
00 2E Blue Sky Logic
00 2F Encore Electronics
00 30 Uptown
00 31 Voce
00 33 S&S Research
00 34 Broderbund
00 35 Allen Organ Co.
00 37 Music Quest
00 38 APHEX
00 39 Gallien Krueger
00 3A IBM
00 3C Hotz
00 3D ETA Lighting
00 3E NSI
00 3F Ad Lib
00 40 Richmond Sound Design
00 41 Microsoft
00 42 The Software Toolworks
00 43 RJMG/Niche
00 44 Intone
00 47 GT Electronics/Groove Tubes
00 55 Lone Wolf
00 64 Musonix
20 00 Dream
20 01 Strand Lighting
20 02 Amek Systems, Ltd.
20 04 Dr. Boehm/Musican International
20 06 Trident Audio
20 07 Real World Studio
20 0A Audiomatica
20 0B Bontempi/Farfisa
20 10 Micon Audio
20 16 Marshall


******************************************************************************

Frage: Wie ist der MIDI Sample Dump Standard ?

Antwort:
                           
                           MIDI SAMPLE DUMP STANDARD

1) INTRODUCTION

     The  MIDI  SDS  was  adopted  in  January  1986   by   the   MIDI
Manufacturers  Association  and the Japanese MIDI Standards Committee.
The SDS defines the standard method for transfer of sound sample  data
between  MIDI-equipped devices.  Sample dumps may be accomplished with
either an 'open loop' or 'closed loop' system.  The open  loop  method
simply  involves  the straight dump of all sample data from its source
to the destination, with no timeouts, packet acknowledgements,  or any
other form of handshaking, much as in the manner of a sysex bulk dump,
usually intiated at the source.  The closed loop method allows the use
of handshaking messages between the dump source and  destination,  and
usually  places  the  dump process under the control of the slave,  to
allow it time to process the incoming data as necessary.  As with  any
standard, it can not be assumed that a device adheres to it unless the
accompanying documentation specifically indicates it. Even then, it is
best to check its conformity with non-critical data.

2) SPEC: SAMPLE DUMP FORMATS

     DUMP HEADER:

F0 7E cc 01 ss ss ee ff ff ff gg gg gg hh hh hh ii ii ii jj F7

where

cc       =     channel number
ss ss    =     sample number (LSB first)
ee       =     sample format (number of significant bits; 8->28)
ff ff ff =     sample period (1/sample rate) in nanoseconds (LSB first)
gg gg gg =     sample length, in words
hh hh hh =     sustain loop start point (word number) (LSB first)
ii ii ii =     sustain loop end point (word number) (LSB first)
jj       =     loop type (00:forwards only; 01:alternating)

     DATA PACKET:

F0 7E cc 02 kk <120 bytes> mm F7

where

cc       =     channel number
kk       =     running packet count (00->7F)
mm       =     checksum (XOR of 7E, cc, 02, kk <120 bytes>)

     The  total  size of a data packet is 127 bytes.  This is to avoid
overflow of the MIDI input buffer of a device that may want to receive
an entire packet before processing it.
     A data packet consists of its own header,  a packet  number,  120
bytes of data, a checksum, and an EOX.  The packet number begins at 00
and increments with each new packet.  It resets to 00 after it reaches
7F, and continues counting.  The packet number is used by the receiver
to distinguish between a new data packet,  or a resend of  a  previous
packet. The packet number is followed by 120 bytes of data, which form
60,  40,  or 30 words (MSB first for multiword samples),  depending on
the length of a single data sample.
     Each data byte hold seven bits,  with the msb in each byte set to
0,  in order to conform to the requirements of MIDI data transmission.
Information is left justified within the 7-bit bytes,  and unused bits
are filled with 0.
     Example:  Assume  a data point in the memory of a 16-bit sampler,
with the value 87E5. In binary, that would be

                          1000 0111 1110 0101

and would be encoded as the following MIDI data stream:

                      01000011 01111001 00100000

     The checksum is the running XOR of all the data after  the  SYSEX
byte, up to but not including the checksum itself.

3) SPEC: SAMPLE DUMP MESSAGES

     DUMP REQUEST:

F0 7E cc 03 ss ss F7

where

cc       =     channel number
ss ss    =     sample number requested (LSB first)

     Upon receiving the request,  the sampler checks the sample number
to see if it is within legal range.  If it  is  not,  the  request  is
ignored. If it is, the sample dump is started. One packet at a time is
sent, under control of the handshaking messages outlined below.

     HANDSHAKING MESSAGES:

     For all below:

cc       =     channel number
pp       =     packet number

     Packet  numbers  are  included  in  the  handshaking  messages to
accomodate machines that have the intelligence to re-transmit specific
packets after an entire dump is finished,  or  if  synchronization  is
lost.

     ACK :     F0 7E cc 7F pp F7

     Means  last  packet  was  recieved correctly (checksum OK,  etc),
please send next one.  Packet number is packet being  acknowledged  as
correct.

     NAK :     F0 7E cc 7E pp F7

     Means  last  packet  not  received correctly,  please send again.
Packet number is packet being rejected.

     CANCEL :  F0 7E cc 7D pp F7

     Means abort dump immediately.  Packet number is packet  on  which
abort occurs.

     WAIT   :  F0 7E cc 7C pp F7

     Means pause dump indefinitely, until next message is sent. Allows
the  unit  recieving the dump to perform other functions (disk access,
etc), before receiving the remainder of the dump.  The next message it
sends (eg ACK, ABORT) will determine if the dump continues or aborts.

4) DUMP PROCEDURE: MASTER (DUMP SOURCE)

     Once  a  dump has been requested,  either via MIDI or through the
front panel,  the DUMP HEADER is sent.  After sending the header,  the
master  must time out for at least two seconds,  to allow the receiver
to decide if it will accept this sample (has enough memory, etc).
     If it receives a  CANCEL,  within  this  time,  it  should  abort
immediately.  If  it  receives  an CAK,  it will start sending packets
immediately. If it receives a WAIT, it pauses until another message is
received,  and then processes that  mesage  normally.  If  nothing  is
recieved  within  the timeout,  an open loop is assumed,  and the dump
starts with the first packet.
     After sending each packet,  the master should  time  out  for  at
least 20 milliseconds and watch its MIDI In. If an ACK is received, it
sends  the  next  packet immediately.  If it receives an NAK,  and the
packet number matches the number of the last packet  sent,  it  resend
that  packet  If  the  packet  numbers don't match,  and the device is
incapable of sending packets out of order, the NAK will be ignored.
     If a WAIT is received,  the master should watch its MIDI In  port
indefinitely for another ACK,  NAK, or CANCEL message, which it should
then process normally.
     If no  messages  are  received  within  20  milliseconds  of  the
transmission  of  a  packet,  the  master  may  assume  an  open  loop
configuration, and send the next packet.
     This process continues until there are less than 121  data  bytes
to send. The final packet will still consist of 120n bytes, regardless
of  how  many significant bytes actually remain,  and the unused bytes
will be filled  with  zeroes.  The  receiver  should  handshake  after
receiving the last packet.

5) DUMP PROCEDURE: SLAVE (DUMP DESTINATION)

     When  receiving  a  sample  dump,  a device should keep a running
checksum during reception. If its checksum matches the checksum in the
data packet,  it will send an ACK and wait for the next packet.  If it
does  not  match,  it  will  send  an NAK containing the number of the
packet that caused the error, and wait for the next packet.  If, after
sending an NAK, the packet number of the next packet doesn't match the
previous  packet number (the one that was NAK'd),  and the unit is not
capable of accepting packets out of order,  the error is  ignored  and
the dump continues as if the checksums had matched.
     If  a  receiver runs out of memory before the dumpo is completed,
it should send a CANCEL to stop the dump.

6) SDS OVERVIEW

     SAMPLE DUMP DATA FORMAT: DUMP HEADER:

     Sysex
         ID: Universal Non-Real Time
         Channel Number
         Sub ID: Header
         Sample Number (2 bytes, LSB first)
         Sample Format
         Sample Period (3 bytes, LSB first)
         Sample Length (3 bytes, LSB first)
         Sustain Loop Start Point (3 bytes, LSB first)
         Sustain Loop End Point (3 bytes, LSB first)
         Loop Type
     Eox

     SAMPLE DUMP DATA FORMAT: DATA PACKET:

     Sysex
         ID: Universal Non-Real Time
         Channel Number
         Sub ID: Data Packet
         Packet Number
         Sample Data (120 bytes)
         Checksum
     Eox

     SAMPLE DUMP MESSAGES: DUMP REQUEST:

     Sysex
         ID: Universal Non-Real Time
         Channel Number
         Sub ID: Dump Request
         Sample Number (2 bytes, LSB first)
     Eox

     SAMPLE DUMP MESSAGES: HANDSHAKING FLAGS:

     Sysex
         ID: Universal Non-Real Time
         Channel Number
         Sub ID: ACK or NAK or CANCEL or WAIT
         Packet Number
     Eox

*******************************************************************************

Frage: Wie ist der MIDI Time Code aufgebaut?

Antwort:

Detailed Specification
(Supplement to MIDI 1.0)
12 February 1987

Justification For  MIDI Time Code and Cueing
--------------------------------------------

     The merit of implementing the MIDI Time Code proposal within the current
MIDI specification is as follows:

     SMPTE has become the de facto  timing reference standard in the
professional audio world and in almost the entire video world.  SMPTE is also
seeing more and more use in the semi-professional audio area.  We hope to
combine this universal timing reference, SMPTE, with the de facto  standard
for controlling musical equipment, MIDI.

     Encoding SMPTE over MIDI allows a person to work with one timing
reference throughout the entire system.  For example, studio engineers are
more familiar with the idea of telling a multitrack recorder to punch in and
out of record mode at specific SMPTE times, as opposed to a specific beat in a
specific bar.  To force a musician or studio engineer to convert back and
forth between a SMPTE time and a specific bar number is tedious and should not
be necessary (one would have to take into account tempo and tempo changes,
etc.).

     Also, some operations are referenced only as SMPTE times, as opposed to
beats in a bar.  For example, creating audio and sound effects for video
requires that certain sounds and sequences be played at specific SMPTE times.
There is no other easy way to do this with Song Position Pointers, etc., and
even if there was, it would be an unnatural way for a video or recording
engineer to work.

     MIDI Time Code is an absolute timing reference, whereas MIDI Clock and
Song Position Pointer are relative timing references.  In virtually all audio
for film/video work, SMPTE is already being used as the main time base, and
any musical passages which need to be recorded are usually done by getting a
MIDI-based sequencer to start at a pre-determined SMPTE time code.  In most
cases, though, it is SMPTE which is the Master timing reference being used.
In order for MIDI-based devices to operate on an absolute time code which is
independent of tempo, MIDI Time Code must be used. Existing devices merely
translate SMPTE into MIDI Clocks and Song Position Pointers based upon a given
tempo.  This is not absolute time, but relative time, and all of the SMPTE cue
points will change if the tempo changes.  The majority of sound effects work
for film and video does not involve musical passages with tempos, rather it
involves individual sound effect "events" which must occur at specific,
absolute times, not relative to any "tempo".


MIDI Time Code System Components


SMPTE to MTC Converter

     This box would either convert longitudinal (audio-type) or vertical
(video-type) SMPTE time code from a master timing device into MTC. The
function could be integrated into video tape recorders (VTRs) or
syncronization units that control audio tape recorders (ATRs). Alternately, a
stand-alone box would do the conversion, or simply generate MTC directly.
Note that conversion from MTC to SMPTE time code is not envisioned, as it is
of little practical value.


Cue List Manager

     This would be a device or computer program that would maintain a cue list
of desired events, and send the list to the slaves. For performance, the
manager might pass the Time Code from the SMPTE-MTC converter through to the
slaves, or, in a stand-alone system it might generate Time Code itself. This
"central controller" would presumably also contain all library functions for
downloading sound programs, samples, sequences, patterns, and so on, to the
slaves. A Cue List Manager would pre-load intelligent MTC peripherals (see
below) with this data.


MTC Sequencer

     To control existing equipment or any device which does not recognize MTC
in an MTC system, this device would be needed. It would receive the cue list
from the manager, and convert the cues into normal MIDI commands.   At the
specified SMPTE times, the sequencer would then send the MIDI commands to the
specific devices. For example, for existing MIDI equipment it might provide
MIDI messages such as Note On, Note Off, Song Select, Start, Stop, Program
Changes, etc. Non-MIDI equipment (such as CD players, mixing consoles,
lighting, sound effects cartridge units and ATRs) may also be controlled if
such a device had relay controls.


Intelligent MTC Peripheral

     In this category belong devices capable of receiving an MTC Cue List from
the manager, and triggering themselves appropriately when the correct Time
Code (SMPTE or MIDI) has been received.  Above this minimum, the device might
be able to change its programming in response to the Cue List, or prepare
itself for ensuing events.

     For example, an intelligent MTC-equipped analog multitrack tape machine
might read in a list of punch in/punch out cues from the Cue List Manager, and
then alter then to internally compensate for its bias current rise and fall
times. A sampling-based sound effects device might preload samples from its
own disk drive into a RAM buffer, in anticipation of needing them for cues
later on in the cue list.

     It should be mentioned that while these functions are separately
described, actual devices may incorporate a mixture of these functions, suited
to specific applications in their market.


A MIDI Time Code System

     The MIDI Time Code format contains two parts: Time Code and Set Up. Time
Code is relatively straightforward: hours, minutes, seconds and frame numbers
(approximately 1/30 of a second) are encoded and distributed throughout the
MIDI system so that all the units know exactly what time it is.

     Set Up, however, is where MTC gains its power. It is a format for
informing MIDI devices of events to be performed at specific times.
Ultimately, this aspect of MTC will lead to the creation of an entirely new
class of production equipment. Before getting into the nuts and bolts of the
spec itself, let's talk about some of the uses and features of forthcoming
devices that have been envisioned.

     Set Up begins with the concept of a cue list. In video editing, for
example, it is customary to transfer the video master source tapes, which may
be on expensive, two-inch recorders, to less-expensive recorders. The editing
team then works over this copy, making a list of all the segments that they
want to piece together as they are defined by their SMPTE times.

     For example, the first scene starts at time A and ends at time B, the
next scene starts at time C and ends at time D. A third scene may even lie
between the first two. When done, they feed this cue list time information
into the editing system of the master recorder(s) or just give the cue list to
an editor who does the work manually. The editing system or editor then
locates the desired segments and assembles them in the proper sequence.


     Now suppose that instead of one or two video recorders, we have twenty
devices that will play a part in our audio/video or film production:  special
effects generators for fades and superimpositions, additional decks with
background scenery, live cameras, MIDI sequencers, drum machines,
synthesizers, samplers, DDLs, soundtrack decks, CDs, effects devices, and so
on. As it stands now, each of these devices must be handled more or less
separately, with painstaking and time-consuming assembly editing or multitrack
overdubs. And when a change in the program occurs (which always happens),
anywhere from just a few items to the whole system may need to be reprogrammed
by hand.


     This is where MIDI Time Code comes in. It can potentially control all of
these individual production elements so that they function together from a
single cue list. The master controller which would handle this function is
described as a Cue List Manager. On such a console, you would list what you
want each device to do, and when to do it. The manager would then send the cue
list to the various machines via the MTC Set Up protocol. Each unit would then
react as programmed when the designated MIDI Time Code (or conventional SMPTE
Time Code) appears. Changes? No problem. Simply edit the cue list using simple
word-processing functions, then run the tape again.


     MTC thus integrates into a manageable system all of the diverse tools at
our disposal. It would drastically reduce the time, money and frustration
needed to produce a film or video.


     Having covered the basic aspects of a MIDI Time Code system, as well as
examples of how an overall system might function, we will now take a look at
the actual MIDI specification itself.


MIDI Time Code


     For device synchronization, MIDI Time Code uses two basic types of
messages, described as Quarter Frame and Full. There is also a third, optional
message for encoding SMPTE user bits.


Quarter Frame Messages


     Quarter Frame messages are used only while the system is running. They
are rather like the PPQN or MIDI clocks to which we are accustomed. But there
are several important ways in which Quarter Frame messages differ from the
other systems.


     As their name implies, they have fine resolution. If we assume 30 frames
per second, there will be 120 Quarter Frame messages per second. This
corresponds to a maximum latency  of 8.3 milliseconds (at 30 frames per
second), with accuracy greater than this possible within the specific device
(which may interpolate inbetween quarter frames to "bit" resolution).  Quarter
Frame messages serve a dual purpose: besides providing the basic timing pulse
for the system, each message contains a unique nibble (four bits) defining a
digit of a specific field of the current SMPTE time.


     Quarter frames messages should be thought of as groups of eight messages.
One of these groups encodes the SMPTE time in hours, minutes, seconds, and
frames. Since it takes eight quarter frames for a complete time code message,
the complete SMPTE time is updated every two frames.  Each quarter frame
message contains two bytes. The first byte is F1,  the Quarter Frame System
Common byte. The second byte contains a nibble that represents the message
number (0 through 7), and a nibble for one of the digits of a time field
(hours, minutes, seconds or frames).


Quarter Frame Messages (2 bytes):


     F1  <message>


          F1 = Currently unused and undefined System Common status byte

          <message> = 0nnn dddd


               dddd = 4 bits of binary data for this Message Type

               nnn =  Message Type:

                    0 = Frame count LS nibble

                    1 = Frame count MS nibble

                    2 = Seconds count LS nibble

                    3 = Seconds count MS nibble

                    4 = Minutes count LS nibble

                    5 = Minutes count MS nibble

                    6 = Hours count LS nibble

                    7 = Hours count MS nibble and SMPTE Type


     After both the MS nibble and the LS nibble of the above counts are
assembled, their bit fields are assigned as follows:


FRAME COUNT:  xxx yyyyy


               xxx = undefined and reserved for future use.  Transmitter

                    must set these bits to 0 and receiver should ignore!

               yyyyy = Frame number (0-29)


SECONDS COUNT:  xx yyyyyy


               xx = undefined and reserved for future use.  Transmitter

                     must set these bits to 0 and receiver should ignore!

               yyyyyy = Seconds Count  (0-59)


MINUTES COUNT:  xx yyyyyy


               xx = undefined and reserved for future use.  Transmitter

                     must set these bits to 0 and receiver should ignore!

               yyyyyy = Minutes Count  (0-59)


HOURS COUNT:  x yy zzzzz


               x = undefined and reserved for future use.  Transmitter

                     must set this bit to 0 and receiver should ignore!


               yy = Time Code Type:

                    0 = 24 Frames/Second

                    1 = 25 Frames/Second

                    2 = 30 Frames/Second (Drop-Frame)

                    3 = 30 Frames/Second (Non-Drop)


               zzzzz = Hours Count  (0-23)



     When time code is running in the forward direction, the device producing
the MIDI Time Code will send Quarter Frame messages at quarter frame intervals
in the following order:


                    F1 0X

                    F1 1X

                    F1 2X

                    F1 3X

                    F1 4X

                    F1 5X

                    F1 6X

                    F1 7X


after which the sequence repeats itself, at a rate of one complete 8-message
sequence every 2 frames (8 quarter frames).  When time code is running in
reverse, the quarter frame messages are sent in reverse order, starting with
F1 7X and ending with F1 0X.  Again, at least 8 quarter frame messages must be
sent.  The arrival of the F1 0X and F1 4X messages always denote frame
boundaries.


     Since 8 quarter frame messages are required to definitely establish the
actual SMPTE time, timing lock cannot be achieved until the reader has read a
full sequence of 8 messages, from first message to last.  This will take from
2 to 4 frames to do, depending on when the reader comes on line.


     During fast forward, rewind or shuttle modes, the time code generator
should stop sending quarter frame messages, and just send a Full Message once
the final destination has been reached.  The generator can then pause for any
devices to shuttle to that point, and resume by sending quarter frame messages
when play mode is resumed.  Time is considered to be "running" upon receipt of
the first quarter frame message after a Full Message.


     Do not send quarter frame messages continuously in a shuttle mode at high
speed, since this unnecessarily clogs the MIDI data lines.  If you must
periodically update a device's time code during a long shuttle, then send a
Full Message every so often.


     The quarter frame message F1 0X (Frame Count LS nibble) must be sent on a
frame boundary.  The frame number indicated by the frame count is the number
of the frame which starts on that boundary.  This follows the same convention
as normal SMPTE longitudinal time code, where bit 00 of the 80-bit message
arrives at the precise time that the frame it represents is actually starting.
The SMPTE time will be incremented by 2 frames for each 8-message sequence,
since an 8-message sequence will take 2 frames to send.


     Another way to look at it is:  When the last quarter frame message (F1
7X) arrives and the time can be fully assembled, the information is now
actually 2 frames old.  A receiver of this time must keep an internal offset
of +2 frames for displaying. This may seem unusual, but it is the way normal
SMPTE is received and also makes backing up (running time code backwards) less
confusing - when receiving the 8 quarter frame messages backwards, the F1 0X
message still falls on the boundary of the frame it represents.


     Each quarter frame message number (0->7) indicates which of the 8 quarter
frames of the 2-frame sequence we are on.  For example, message 0 (F1 0X)
indicates quarter frame 0 of frame #1 in the sequence, and message 4 (F1 4X)
indicates quarter frame 1 of frame #2 in the sequence.  If a reader receives
these message numbers in descending sequence, then it knows that time code is
being sent in the reverse direction.  Also, a reader can come on line at any
time and know exactly where it is in relation to the 2-frame sequence, down to
a quarter frame accuracy.


     It is the responsibility of the time code reader to insure that MTC is
being properly interpreted.  This requires waiting a sufficient amount of time
in order to achieve time code lock, and maintaining that lock until
synchronization is dropped. Although each passing quarter frame message could
be interpreted as a relative quarter frame count, the time code reader should
always verify the actual complete time code after every 8-message sequence (2
frames) in order to guarantee a proper lock.


     For example, let's assume the time is 01:37:52:16 (30 frames per second,
non-drop).  Since the time is sent from least to most significant digit, the
first two Quarter Frame messages will contain the data 16 (frames), the second
two will contain the data 52 (seconds), the third two will represent 37
(minutes), and the final two encode the 1 (hours and SMPTE Type).  The Quarter
Frame Messages description defines how the binary data for each time field is
spread across two nibbles. This scheme (as opposed to simple BCD) leaves some
extra bits for encoding the SMPTE type (and for future use).


     Now, let's convert our example time of 01:37:52:16 into Quarter Frame
format, putting in the correct hexadecimal conversions:


     F1 00

     F1 11     10H = 16 decimal


     F1 24

     F1 33     34H = 52 decimal


     F1 45

     F1 52     25H = 37 decimal


     F1 61

     F1 76     01H = 01 decimal (SMPTE Type is 30 frames/non-drop)


     (note:  the value transmitted is "6" because the SMPTE Type (11 binary) is
encoded in bits 5 and 6)


     For SMPTE Types of 24, 30 drop frame, and 30 non-drop frame, the frame
number will always be even.  For SMPTE Type of 25, the frame number may be
even or odd, depending on which frame number the 8-message sequence had
started.  In this case, you can see where the MIDI Time Code frame number
would alternate between even and odd every second.


     MIDI Time Code will take a very small percentage of the MIDI bandwidth.
The fastest SMPTE time rate is 30 frames per second.  The specification is to
send 4 messages per frame - in other words, a 2-byte message (640
microseconds) every 8.333 milliseconds.  This takes 7.68 % of the MIDI
bandwidth - a reasonably small amount.  Also, in the typical MIDI Time Code
systems we have imagined, it would be rare that normal MIDI and MIDI Time Code
would share the same MIDI bus at the same time.


Full Message


     Quarter Frame messages handle the basic running work of the system. But
they are not suitable for use when equipment needs to be fast-forwarded or
rewound, located or cued to a specific time, as sending them continuously at
accelerated speeds would unnecessarily clog up or outrun the MIDI data lines.
For these cases, Full Messages are used, which encode the complete time into a
single message. After sending a Full Message, the time code generator can
pause for any mechanical devices to shuttle (or "autolocate") to that point,
and then resume running by sending quarter frame messages.


Full Message - (10 bytes)


     F0 7F <chan> 01 <sub-ID 2> hr mn sc fr F7


          F0 7F = Real Time Universal System Exclusive Header

          <chan> = 7F (message intended for entire system)

          01 = <sub-ID 1>, 'MIDI Time Code'

          <sub-ID 2> = 01, Full Time Code Message

          hr = hours and type: 0 yy zzzzz

               yy = type:

                    00 = 24 Frames/Second

                    01 = 25 Frames/Second

                    10 = 30 Frames/Second (drop frame)

                    11 = 30 Frames/Second (non-drop frame)

               zzzzz = Hours (00->23)

          mn = Minutes (00->59)

          sc = Seconds (00->59)

          fr = Frames (00->29)

          F7 = EOX


      Time is considered to be "running" upon receipt of the first Quarter
Frame message after a Full Message.


User Bits


     "User Bits" are 32 bits provided by SMPTE for special functions which
vary with the application, and which can be programmed only from equipment
especially designed for this purpose. Up to four characters or eight digits
can be written. Examples of use are adding a date code or reel number to the
tape.  The User Bits tend not to change throughout a run of time code.


User Bits Message - (15 bytes)


     F0 7F <chan> 01 <sub-ID 2> u1 u2 u3 u4 u5 u6 u7 u8 u9 F7


          F0 7F = Real Time Universal System Exclusive Header

          <chan> = 7F (message intended for entire system)

          01 = <sub-ID 1>, MIDI TIme Code

          <sub-id 2> = 02, User Bits Message

          u1 = 0000aaaa

          u2 = 0000bbbb

          u3 = 0000cccc

          u4 = 0000dddd

          u5 = 0000eeee

          u6 = 0000ffff

          u7 = 0000gggg

          u8 = 0000hhhh

          u9 = 000000ii

          F7 = EOX


     These nibble fields decode in an 8-bit format:  aaaabbbb ccccdddd
eeeeffff gggghhhh ii.  It forms 4  8-bit characters,  and a 2 bit Format Code.
u1 through u8 correspond to SMPTE Binary Groups 1 through 8.  u9 are the two
Binary Group Flag Bits, as defined by SMPTE.


     This message can be sent whenever the User Bits values must be
transferred to any devices down the line.  Note that the User Bits Message may
be sent by the MIDI Time Code Converter at any time.  It is not sensitive to
any mode.


     MIDI Cueing uses Set-Up Messages to address individual units in a system.
(A "unit" can be be a multitrack tape deck, a VTR, a special effects
generator, MIDI sequencer, etc.)


     Of 128 possible event types, 19 are currently defined.


Set-Up Messages (13 bytes plus any additional information):


     F0 7E <chan> 04 <sub-ID 2> hr mn sc fr ff sl sm <add. info> F7


          F0 7E = Non-Real Time Universal System Exclusive Header

          <chan> = Channel number
          04 = <sub-ID 1>, MIDI Time Code

          <sub-ID 2> = Set-Up Type
               00 = Special
               01 = Punch In points
               02 = Punch Out points
               03 = Delete Punch In point
               04 = Delete Punch Out point
               05 = Event Start points
               06 = Event Stop points
               07 = Event Start points with additional info.
               08 = Event Stop points with additional info.
               09 = Delete Event Start point
               0A = Delete Event Stop point
               0B = Cue points
               0C = Cue points with additional info
               0D = Delete Cue point
               0E = Event Name in additional info

          hr = hours and type: 0 yy zzzzz

               yy = type:
                    00 = 24 Frames/Second
                    01 = 25 Frames/Second
                    10 = 30 Frames/Second drop frame
                    11 = 30 Frames/Second non-drop frame
               zzzzz = Hours (00-23)

          mn = Minutes (00-59)

          sc = Seconds (00-59)

          fr = Frames (00-29)

          ff = Fractional Frames (00-99)

          sl, sm = Event Number (LSB first)

          <add. info.>

          F7 = EOX


Description of Set-Up Types:


     00          Special refers to the set-up information that affects a unit
                 globally (as opposed to individual tracks, sounds, programs,
                 sequences, etc.). In this case, the Special Type takes the
                 place of the Event Number. Five are defined.  Note that types
                 01 00 through 04 00 ignore the event time field.


          00 00     Time Code Offset refers to a relative Time Code offset for
each unit. For example, a piece of video and a piece of music that are
supposed to go together may be created at different times, and more than
likely have different absolute time code positions - therefore, one must be
offset from the other so that they will match up. Just like there is one
master time code for an entire system, each unit only
needs one offset value per unit.


          01 00     Enable Event List means for a unit to enable execution of
events in its list if the appropriate MTC or SMPTE time occurs.


          02 00     Disable Event List means for a unit to disable execution
of its event list but not to erase it. This facilitates an MTC Event Manager
in muting particular devices in order to concentrate on others in a complex
system where many events occur simultaneously.


          03 00     Clear Event List means for a unit to erase its entire
event list.


          04 00     System Stop refers to a time when the unit may shut down.
This serves as a protection against Event Starts without matching Event Stops,
tape machines running past the end of the reel, and so on.


          05 00     Event List Request is sent by a master to an MTC
peripheral. If the device ID (Channel Number) matches that of the peripheral,
the peripheral responds by transmitting its entire cue list as a sequence of
Set Up Messages, starting from the SMPTE time indicated in the Event List
Request message.


     01/02     Punch In and Punch Out refer to the enabling and disabling of
record mode on a unit. The Event Number refers to the track to be recorded.
Multiple punch in/punch out points (and any of the other event types below)
may be specified by sending multiple Set-Up messages with different times.


     03/04     Delete Punch In or Out deletes the matching point (time and
event number) from the Cue List.


     05/06     Event Start and Stop refer to the running or playback of an
event, and imply that a large sequence of events or a continuous event is to
be started or stopped. The event number refers to which event on the targeted
slave is to be played. A single event (ie. playback of a specific sample, a
fader movement on an automated console, etc.) may occur several times
throughout a given list of cues.  These events will be represented by the same
event number, with different Start and Stop times.


     07/08     Event Start and Stop with Additional Information refer to an
event (as above) with additional parameters transmitted in the Set Up message
between the Time and EOX. The additional parameters may take the form of an
effects unit's internal parameters, the volume level of a sound effect, etc.
See below for a description of additional information.


     09/0A     Delete Event Start/Stop means to delete the matching (event
number and time) event (with or without additional information) from the Cue
List.


     0B          Cue Point refers to individual event occurences, such as
marking "hit" points for sound effects, reference points for editing, and so
on.  Each Cue number may be assigned to a specific reaction, such as a
specific one-shot sound event (as opposed to a continuous event, which is
handled by Start/Stop).  A single cue may occur several times throughout a
given list of cues.  These events will be represented by the same event
number, with different Start and Stop times.


     0C          Cue Point with Additional Information is exactly like Event
Start/Stop with Additional Information, except that the event represents a Cue
Point rather than a Start/Stop Point.


     0D          Delete Cue Point means to Delete the matching (event number
and time) Cue Event with or without additional information from the Cue List.


     0E          Event Name in Additional Information.  This merely assigns a
name to a given event number.  It is for human logging purposes.  See
Additional Information description.


Event Time


     This is the SMPTE/MIDI Time Code time at which the given event is
supposed to occur.  Actual time is in 1/100th frame resoultion, for those
units capable of handling bits or some other form of sub-frame resolution, and
should otherwise be self-explanatory.


Event Number


     This is a fourteen-bit value, enabling 16,384 of each of the above types
to be individually addressed. "sl" is the 7 LS bits, and "sm" is the 7 MS
bits.


Additional Information description


     Additional information consists of a nibblized MIDI data stream, LS
nibble first.  The exception is Set-Up Type OE, where the additional
information is nibblized ASCII, LS nibble first.  An ASCII newline is
accomplished by sending CR and LF in the ASCII. CR alone functions solely as a
carriage return, and LF alone functions solely as a Line-Feed.


     For example, a MIDI Note On message such as 91 46 7F would be nibblized
and sent as 01 09  06 04 0F 07.  In this way, any device can decode any
message regardless of who it was intended for.  Device-specific messages
should be sent as nibblized MIDI System Exclusive messages.


Potential Problems


     There is a possible problem with MIDI merger boxes improperly handling
the F1 message, since they do not currently know how many bytes  are
following. However, in typical MIDI Time Code systems, we do not anticipate
applications where the MIDI Time Code must be merged with other MIDI signals
occuring at the same time.


     Please note that there is plenty of room for additional set-up types,
etc., to cover unanticipated situations and configurations.


     It is recommended that each MTC peripheral power up with its MIDI
Manufacturer's System Exclusive ID number as its default channel/device ID.
Obviously, it would be preferable to allow the user to change this number from
the device's front panel, so that several peripherals from the same
manufacturer may have unique IDs within the same MTC system.


Signal Path Summary


     Data sent between the Master Time Code Source (which may be, for example,
a Multitrack Tape Deck with a SMPTE Synchronizer) and the MIDI Time Code
Converter is always SMPTE Time Code.


     Data sent from the MIDI Time Code Converter to the Master Control/Cue
Sheet (note that this may be a MTC-equipped tape deck or mixing console as
well as a cue-sheet) is always MIDI Time Code.  The specific MIDI Time Code
messages which are used depend on the current operating mode, as explained
below:


      Play Mode:  The Master Time Code Source (tape deck) is in normal PLAY
                  MODE at normal or vari-speed rates.  The MIDI Time Code
                  Converter is transmitting Quarter Frame ("F1") messages to
                  the Master Control/Cue Sheet.  The frame messages are in
                  ASCENDING order, starting with "F1 0X" and ending with "F1
                  7X". If the tape machine is capable of play mode in REVERSE,
                  then the frame messages will be transmitted in REVERSE
                  sequence, starting with "F1 7X" and ending with "F1 0X".


      Cue Mode:   The Master Time Code Source is being "rocked", or "cued" by
                  hand.  The  tape is still contacting the playback head so
                  that the listener can cue, or preview the    contents of the
                  tape slowly. The MIDI Time Code Converter is transmitting
                  FRAME ("F1") messages to the Master Control/Cue Sheet.  If
                  the tape is being played in the FORWARD direction, the frame
                  messages are sent in ASCENDING order, starting with "F1 0X"
                  and ending with "F1 7X". If the tape machine is played in
                  the REVERSE direction, then the frame messages will be
                  transmitted in REVERSE sequence, starting with "F1 7X" and
                  ending with "F1 0X".


                  Because the tape is being moved by hand in Cue Mode, the
                  tape direction can change quickly and often.  The order of
                  the Frame Message sequence must change along with the tape
                  direction.


       Fast-Forward/Rewind Mode:  In this mode, the tape is in a
                  high-speed wind or  rewind, and is not touching the playback
                  head.  No "cueing" of the taped material is going on.  Since
                  this is a "search" mode, synchronization of the Master
                  Control/Cue Sheet is not as important as in the Play or Cue
                  Mode.  Thus, in this mode, the MIDI Time Code Converter only
                  needs to send a "Full Message" every so often to the Cue
                  Sheet.  This acts as a rough indicator of the Master's
                  position.  The SMPTE time indicated by the "Full Message"
                  actually takes effect upon the reception of the next "F1"
                  quarter frame message (when "Play Mode" has resumed).


      Shuttle Mode:  This is just another expression for "Fast-Forward/Rewind
                  Mode".


References and Credits


     SMPTE 12M (ANSI V98.12M-1981).


     MIDI Time Code specification created by Chris Meyer and Evan Brooks of
Digidesign. Thanks to Stanley Jungleib of Sequential for additional text.
Also many thanks to all of the MMA and JMSC members for their suggestions and
contributions to the spec.


*********** Addition: MIDI bar numbers ********************


F0 7F <dev-id> ni 01 aa aa F7

  FO 7F     Universal real-time sys-ex header
  <dev-id>  ID of target device (default=7f=all)
  ni        sub ID #1 = Notation information (03)
  01        sub ID #2 = Bar Marker Message
  aa aa     bar number; LSB first
             [00 40] = not running
             [01 40] .. [00 00] = count in
             [01 00] .. [7E 3F] = bar number in song
  F7        End of sys-ex

A maximum neg number indicates not running
A maximum positive value indicates running (but no idea about bar number)


F0 7F <dev-id> ni ts ln nn dd cc bb [nn dd ...] F7

  F0 7F     Universal real-time sys-ex header
  <dev-id>  ID of target machine (see above)
  ni        SUB ID #1 = Notation info (03)
  ts        SUB ID #2 = Time signature message
             02=change now; 42=change next bar
  ln        Number of data bytes following
  nn        Numerator of time signature
  dd        Denumiroator (neg. power of 2)
  cc        Number of notated 32 notes in a MIDI quarter note
  [nn cc..] Additional pairs of num/denom (to define a
            compound time signature within the same bar)
   F7       End of sys-ex


Gruss, Carsten
* Origin: MAUS Koeln-Porz: 02203-962008 (2:2452/101.6)

*******************************************************************************
