Provided by: midicsv_1.1+dfsg.1-1build1_amd64 bug

NAME

       midicsv - MIDI Comma-Separated Value (CSV) file format

DESCRIPTION

       The  midicsv  and  csvmidi  programs permit you to intertranslate standard MIDI files and comma-separated
       value (CSV) files.  These CSV files preserve all information in the MIDI file, and  may  be  loaded  into
       spreadsheet  and  database  programs  or  easily  manipulated  with text processing tools.  This document
       describes the CSV representation of MIDI files written by midicsv  and  read  by  csvmidi.   Readers  are
       assumed  to understand the structure, terminology, and contents of MIDI files-please refer to a MIDI file
       reference for details.

RECORD STRUCTURE

       Each record in the CSV representation of a MIDI contains at least three fields:

       Track     Numeric field identifying the track to which this record belongs.   Tracks  of  MIDI  data  are
                 numbered  starting  at  1.   Track  0 is reserved for file header, information, and end of file
                 records.

       Time      Absolute time, in terms of MIDI clocks, at which this event occurs.  Meta-events for which time
                 is  not meaningful (for example, song title, copyright information, etc.) have an absolute time
                 of 0.

       Type      Name identifying the type of the record.  Record types are text consisting of upper  and  lower
                 case  letters  and  the underscore (``_''), contain no embedded spaces, and are not enclosed in
                 quotes.  csvmidi ignores upper/lower case in the Type field; the specifications  ``Note_on_c'',
                 ``Note_On_C'', and ``NOTE_ON_C'' are considered identical.

       Records in the CSV file are sorted first by the track number, then by time.  Out of order records will be
       discarded with an error message from csvmidi.  Following the three required fields are  parameter  fields
       which  depend  upon  the  Type;  some  Types  take  no parameters.  Each Type and its parameter fields is
       discussed below.

       Any line with an initial nonblank character of ``#'' or ``;'' is ignored; either delimiter may be used to
       introduce comments in a CSV file.  Only full-line comments are permitted; you cannot use these delimiters
       to terminate scanning of a regular data record.  Completely blank lines are ignored.

   File Structure Records
       0, 0, Header, format, nTracks, division
            The first record of a CSV MIDI file is always the Header record.  Parameters are  format:  the  MIDI
            file type (0, 1, or 2), nTracks: the number of tracks in the file, and division: the number of clock
            pulses per quarter note.  The Track and Time fields are always zero.

       0, 0, End_of_file
            The last record in a CSV MIDI file is always an End_of_file record.  Its Track and Time  fields  are
            always zero.

       Track, 0, Start_track
            A  Start_track  record marks the start of a new track, with the Track field giving the track number.
            All records between the Start_track record and the matching  End_track  will  have  the  same  Track
            field.

       Track, Time, End_track
            An  End_track  marks  the  end  of  events  for the specified Track.  The Time field gives the total
            duration of the track, which will be identical to the Time in the last event before the End_track.

   File Meta-Events
       The following events occur within MIDI tracks and specify various kinds of information and actions.  They
       may  appear  at any time within the track.  Those which provide general information for which time is not
       relevant usually appear at the start of the track with Time zero, but this is not a requirement.

       Many of these meta-events include a text string  argument.   Text  strings  are  output  in  CSV  records
       enclosed  in ASCII double quote (") characters.  Quote characters embedded within strings are represented
       by two consecutive quotes.  Non-graphic characters in the  ISO  8859/1  Latin  1  set  are  output  as  a
       backslash  followed  by  their  three  digit  octal character code.  Two consecutive backslashes denote a
       literal backslash in the string.  Strings in MIDI files can be extremely long, theoretically as  many  as
       2**28-1  characters;  programs which process MIDI CSV files should take care to avoid buffer overflows or
       truncation resulting from lines containing long string items.  All meta-events which take a text argument
       are identified by a suffix of ``_t''.

       Track, Time, Title_t, "Text"
              The  Text  specifies  the  title of the track or sequence.  The first Title meta-event in a type 0
              MIDI file, or in the first track of a type 1 file gives the name of the  work.   Subsequent  Title
              meta-events in other tracks give the names of those tracks.

       Track, Time, Copyright_t, "Text"
              The  Text  specifies  copyright information for the sequence.  This is usually placed at time 0 of
              the first track in the sequence.

       Track, Time, Instrument_name_t, "Text"
              The Text names the instrument intended to play the contents of this track, This is usually  placed
              at  time 0 of the track.  Note that this meta-event is simply a description; MIDI synthesisers are
              not required (and rarely if ever) respond to  it.   This  meta-event  is  particularly  useful  in
              sequences  prepared  for  synthesisers  which  do not conform to the General MIDI patch set, as it
              documents the intended instrument for the track when the sequence is used on a synthesiser with  a
              different patch set.

       Track, Time, Marker_t, "Text"
              The   Text  marks  a  point  in  the  sequence  which  occurs  at  the  given  Time,  for  example
              "Third Movement".

       Track, Time, Cue_point_t, "Text"
              The Text identifies synchronisation point  which  occurs  at  the  specified  Time,  for  example,
              "Door slams".

       Track, Time, Lyric_t, "Text"
              The  Text  gives a lyric intended to be sung at the given Time.  Lyrics are often broken down into
              separate syllables to time-align them more precisely with the sequence.

       Track, Time, Text_t, "Text"
              This meta-event supplies an arbitrary Text string tagged to the Track and Time.  It  can  be  used
              for textual information which doesn't fall into one of the more specific categories given above.

       Track, 0, Sequence_number, Number
              This  meta-event  specifies a sequence Number between 0 and 65535, used to arrange multiple tracks
              in a type 2 MIDI file, or to identify the sequence in which a collection of type 0 or 1 MIDI files
              should  be  played.  The Sequence_number meta-event should occur at Time zero, at the start of the
              track.

       Track, Time, MIDI_port, Number
              This meta-event specifies that subsequent events in the Track should be sent to  MIDI  port  (bus)
              Number,  between  0  and  255.   This meta-event usually appears at the start of a track with Time
              zero, but may appear within a track should the need arise to change the port while  the  track  is
              being played.

       Track, Time, Channel_prefix, Number
              This meta-event specifies the MIDI channel that subsequent meta-events and System_exclusive events
              pertain to.  The channel Number specifies a MIDI channel from 0 to 15.  In fact, the Number may be
              as  large  as  255,  but  the  consequences  of  specifying  a  channel number greater than 15 are
              undefined.

       Track, Time, Time_signature, Num, Denom, Click, NotesQ
              The time signature, metronome click rate, and number of 32nd notes per MIDI quarter note (24  MIDI
              clock times) are given by the numeric arguments.  Num gives the numerator of the time signature as
              specified on sheet music.  Denom specifies the denominator as a negative power of two, for example
              2  for  a  quarter  note,  3  for  an eighth note, etc.  Click gives the number of MIDI clocks per
              metronome click, and NotesQ the number of 32nd notes in the nominal MIDI quarter note time  of  24
              clocks (8 for the default MIDI quarter note definition).

       Track, Time, Key_signature, Key, Major/Minor
              The  key  signature is specified by the numeric Key value, which is 0 for the key of C, a positive
              value for each sharp above C, or a negative value for each flat below C,  thus  in  the  inclusive
              range -7 to 7.  The Major/Minor field is a quoted string which will be "major" for a major key and
              "minor" for a minor key.

       Track, Time, Tempo, Number
              The tempo is specified as the Number of microseconds per quarter note, between 1 and 16777215.   A
              value  of  500000  corresponds  to  120  quarter notes ("beats") per minute.  To convert beats per
              minute to a Tempo value, take the quotient from dividing 60,000,000 by the beats per minute.

       Track, 0, SMPTE_offset, Hour, Minute, Second, Frame, FracFrame
              This meta-event, which must occur with a zero Time at the start of a track,  specifies  the  SMPTE
              time  code  at which it should start playing.  The FracFrame field gives the fractional frame time
              (0 to 99).

       Track, Time, Sequencer_specific, Length, Data, ...
              The Sequencer_specific meta-event is used to store vendor-proprietary data in a  MIDI  file.   The
              Length  can be any value between 0 and 2**28-1, specifying the number of Data bytes (between 0 and
              255) which follow.  Sequencer_specific records may be very long; programs which process  MIDI  CSV
              files should be careful to protect against buffer overflows and truncation of these records.

       Track, Time, Unknown_meta_event, Type, Length, Data, ...
              If  midicsv  encounters  a  meta-event  with  a  code  not  defined  by  the  standard  MIDI  file
              specification, it outputs an unknown meta-event record in which Type gives the numeric  meta-event
              type code, Length the number of data bytes in the meta-event, which can be any value between 0 and
              2**28-1, followed by the Data bytes.  Since meta-events include their own length, it  is  possible
              to  parse them even if their type and meaning are unknown.  csvmidi will reconstruct unknown meta-
              events with the same type code and content as in the original MIDI file.

   Channel Events
       These events are the ``meat and potatoes'' of MIDI files: the actual notes and modifiers that command the
       instruments  to play the music.  Each has a MIDI channel number as its first argument, followed by event-
       specific parameters.  To permit programs which process CSV files to easily distinguish  them  from  meta-
       events, names of channel events all have a suffix of ``_c''.

       Track, Time, Note_on_c, Channel, Note, Velocity
              Send  a command to play the specified Note (Middle C is defined as Note number 60; all other notes
              are relative in the MIDI specification, but most instruments conform to the  well-tempered  scale)
              on the given Channel with Velocity (0 to 127).  A Note_on_c event with Velocity zero is equivalent
              to a Note_off_c.

       Track, Time, Note_off_c, Channel, Note, Velocity
              Stop playing the specified Note on the given Channel.  The Velocity should be zero, but you  never
              know what you'll find in a MIDI file.

       Track, Time, Pitch_bend_c, Channel, Value
              Send  a pitch bend command of the specified Value to the given Channel.  The pitch bend Value is a
              14 bit unsigned integer and hence must be in the inclusive range from 0 to 16383.

       Track, Time, Control_c, Channel, Control_num, Value
              Set the controller Control_num on the given Channel to the specified Value.  Control_num and Value
              must  be in the inclusive range 0 to 127.  The assignment of Control_num values to effects differs
              from instrument to instrument.  The General MIDI specification defines the meaning of  controllers
              1  (modulation),  7 (volume), 10 (pan), 11 (expression), and 64 (sustain), but not all instruments
              and patches respond to these controllers.  Instruments which support  those  capabilities  usually
              assign reverberation to controller 91 and chorus to controller 93.

       Track, Time, Program_c, Channel, Program_num
              Switch the specified Channel to program (patch) Program_num, which must be between 0 and 127.  The
              program or patch selects which instrument and associated settings that channel will emulate.   The
              General  MIDI  specification  provides a standard set of instruments, but synthesisers are free to
              implement other sets of instruments and many permit the user to create custom patches  and  assign
              them to program numbers.

              Apparently  due  to instrument manufacturers' skepticism about musicians' ability to cope with the
              number zero, many instruments number patches from 1 to 128 rather than the 0 to  127  used  within
              MIDI  files.   When interpreting Program_num values, note that they may be one less than the patch
              numbers given in an instrument's documentation.

       Track, Time, Channel_aftertouch_c, Channel, Value
              When a key is held down after being pressed, some synthesisers send the pressure, repeatedly if it
              varies,  until  the  key  is  released,  but  do not distinguish pressure on different keys played
              simultaneously and held down.  This is referred to as  ``monophonic''  or  ``channel''  aftertouch
              (the  latter  indicating it applies to the Channel as a whole, not individual note numbers on that
              channel).  The pressure Value (0 to 127) is typically taken to apply to the last note played,  but
              instruments are not guaranteed to behave in this manner.

       Track, Time, Poly_aftertouch_c, Channel, Note, Value
              Polyphonic  synthesisers  (those  capable  of  playing  multiple  notes simultaneously on a single
              channel), often provide independent aftertouch for each note.  This event specifies the aftertouch
              pressure Value (0 to 127) for the specified Note on the given Channel.

   System Exclusive Events
       System  Exclusive  events  permit  storing vendor-specific information to be transmitted to that vendor's
       products.

       Track, Time, System_exclusive, Length, Data, ...
              The Length bytes of Data (0 to 255) are sent at the specified Time to the MIDI channel defined  by
              the  most  recent  Channel_prefix  event  on  the Track, as a System Exclusive message.  Note that
              Length can be any value between 0 and 2**28-1.  Programs which process MIDI CSV  files  should  be
              careful to protect against buffer overflows and truncation of these records.

       Track, Time, System_exclusive_packet, Length, Data, ...
              The  Length bytes of Data (0 to 255) are sent at the specified Time to the MIDI channel defined by
              the most recent Channel_prefix event on the Track.  The Data bytes are simply blasted out  to  the
              MIDI  bus  without  any  prefix.   This message is used by MIDI devices which break up long system
              exclusive message into small packets, spaced  out  in  time  to  avoid  overdriving  their  modest
              microcontrollers.   Note  that  Length  can  be  any  value between 0 and 2**28-1.  Programs which
              process MIDI CSV files should be careful to protect against buffer  overflows  and  truncation  of
              these records.

EXAMPLES

       The following CSV file defines the five-note motif from the film Close Encounters of the Third Kind using
       an organ patch from the General MIDI instrument set.  When processed by midicsv and sent to a synthesiser
       which conforms to General MIDI, the sequence will be played.

            0, 0, Header, 1, 2, 480
            1, 0, Start_track
            1, 0, Title_t, "Close Encounters"
            1, 0, Text_t, "Sample for MIDIcsv Distribution"
            1, 0, Copyright_t, "This file is in the public domain"
            1, 0, Time_signature, 4, 2, 24, 8
            1, 0, Tempo, 500000
            1, 0, End_track
            2, 0, Start_track
            2, 0, Instrument_name_t, "Church Organ"
            2, 0, Program_c, 1, 19
            2, 0, Note_on_c, 1, 79, 81
            2, 960, Note_off_c, 1, 79, 0
            2, 960, Note_on_c, 1, 81, 81
            2, 1920, Note_off_c, 1, 81, 0
            2, 1920, Note_on_c, 1, 77, 81
            2, 2880, Note_off_c, 1, 77, 0
            2, 2880, Note_on_c, 1, 65, 81
            2, 3840, Note_off_c, 1, 65, 0
            2, 3840, Note_on_c, 1, 72, 81
            2, 4800, Note_off_c, 1, 72, 0
            2, 4800, End_track
            0, 0, End_of_file

BUGS

       The  CSV  representation of a MIDI file is simply a text-oriented encoding of its contents.  If the input
       to midicsv contains errors which violate the MIDI  standard,  the  resulting  CSV  file  will  faithfully
       replicate  these  errors.   Similarly,  the  CSV  input to csvmidi must not only consist of records which
       conform to the syntax given in this document, the input as a whole must also be  a  semantically  correct
       MIDI  file.   Programs which wish to use csvmidi to generate MIDI files from scratch should be careful to
       conform to the structure required of MIDI  files.   When  in  doubt,  use  midicsv  to  dump  a  sequence
       comparable to the one your program will create and use its structure as a template for your own.

       Please report errors to bugs@fourmilab.ch.

SEE ALSO

       csvmidi(1), midicsv(1)

AUTHOR

                                                      John Walker
                                               http://www.fourmilab.ch/

       This software is in the public domain.  Permission to use, copy, modify, and distribute this software and
       its documentation for any  purpose  and  without  fee  is  hereby  granted,  without  any  conditions  or
       restrictions.  This software is provided ``as is'' without express or implied warranty.