home *** CD-ROM | disk | FTP | other *** search
- MidiCat v1.0 Copyright 1994 Ron Dippold - Quick Docs
- All Rights Reserved
-
- INFO BLURB
-
- MidiCat looks through your MIDI files and summarizes the important
- information in a one-line-per-file mode for cataloging or a more verbose
- informational mode. It also tracks General MIDI Instrument and Drum usage
- within the file for analysis.
-
- PC only, runs under DOS. This is 100% free software. The only requirement
- is that you must distribute the executable only along with this
- documentation.
-
- If you're going to distribute this as part of a package or like/use the
- program, please let me know at rdippold@qualcomm.com. I'm not going to ask
- for money, I'd just like to know. If I think there's enough interest, I'll
- update this to handle Cakewalk .WRK files and make some other improvements.
-
-
- I. INTRODUCTION
-
- The entire purpose of this program is to look at a MIDI file and give you a
- quick "dump" of the important contents. I looked all over the Internet for
- such a program for the purposes of managing my collection, and didn't find
- one, so, being a programmer, I grabbed the MIDI spec and wrote one.
-
- MidiCat Operates in two modes - single line and informational modes. By
- default, single line mode is used: each MIDI file processed is reduced to a
- single line of information. If you specify additional data to be shown,
- then the single line of info is still shown, but the additional data
- follows. Typically, you might use the single line mode to produce a
- catalog of a whole directory of MIDI files, and the informational modes
- when you're looking at an individual file, for instance prior to playing
- it.
-
- Once you've got your list of files, then you can use a good text editor
- like QEdit or Sprint to massage your "database."
-
- Note: MidiCat doesn't recognize Cakewalk WRK files, but I'm working on
- getting the specs...
-
- If you have more information or suggestions, feel free to email them to
- rdippold@qualcomm.com (Internet).
-
-
- II. SINGLE LINE MODE
-
- Single line usage is easy:
-
- midicat <filename> [<filename> <filename> ...]
-
- <filename> can be the name of a MIDI file, or can include wildcards. You
- can specify multiple filenames with wildcards, so you could do
-
- midicat my.mid c:\midi\*.mid d:\mididata\*.mmf
-
- midicat doesn't assume anything about extensions - no ".mid" is implied.
-
- You'll get something like this:
-
- Filename Size F #T Time Midi Name
- ----------------------------------------------------------------------------
- ACKER-GS MID 42,355 1 22 4:43
- ADAGIO MID 17,180 1 10 3:47 WinJammer Demo
- ADAMSFAM MID 2,141 1 6 0:52
- ADDCTDGS MID 42,315 1 21 3:51
- AGENTMAN MID 42,874 1 33 3:23
- ALLATRCA MID 17,563 1 5 4:27 Alla Turca - Wolfgang A Mozart
- ALMONDS MID 49,889 0 1 1:56
- ALNITLNG MID 28,160 - 0 1:56 ** unknown type
- ANCHOR MID 6,591 0 1 1:36 Anchors Aweigh
- ...
-
- Filename: The actual name of the file on disk
- Blank Space: For your use...
- Size: Size of file in bytes
- F: Midi Format 0, 1, or 2
- 0 = single track
- 1 = multiple instruments on multiple tracks
- 2 = multiple songs on multiple tracks
- W = Cakewalk WRK file (in future)
- - = I can't figure it out
- #T: Number of tracks in file
- Time: Estimate of length in minutes and seconds
- Midi Name: Name of composition
-
- The Midi Name is filled in less often than you might think... there's no
- standard "composition name" metaevent except for Sequence Name of Track 0,
- but many people don't use this, and just stick the composition name in as
- an instrument. Since others just stick general commentary in as
- instruments, I couldn't come up with a reasonable rule for extracting the
- name from the instruments. Sorry...
-
- If there are any errors interpreting the file, you'll see a "** error" type
- comment where the Midi Name is. In this case, ALNITLNG.MID is "** unknown
- type". A quick look at ALNITLNG.MID reveals that it's a compressed file
- masquerading as a Midi file. Shame! Another one you might see is
- "** unknown MIDI status 123456:78". The first number is the hexidecimal
- position in the file where the unknown status was found, the second number
- is the status in hex. I've run several hundred MIDI files through, but
- you might have some that use statuses not in the MIDI 1.0 standard.
- MidiCat will try to find the next known status and keep going.
-
-
- III. INFORMATIONAL MODES
-
- MidiCat keeps track of some other informational items as it cruises through
- the MIDI program. You can choose which of this information you want to
- display, with information overload being your only real concern. Just add
- some parameters to the command line:
-
- midicat -1234567?+* -t -di -h -v <filename> [<filename> ...]
-
- The options can be stacked together in one parameter if you want, like
- "-+tdiv", they're just grouped by function here for convenience.
-
- -1234567?: Print text fields found
- 1 = Text Event (Text) 2 = Copyright (Copy)
- 3 = Seq/Track Name (Name) 4 = Instrument Name (Inst)
- 5 = Lyric (Lyri) 6 = Marker (Mark)
- 7 = Cue Point (Cue ) ? = Other unknown text (????)
- -+: Equivalent to -12346
- -*: Equivalent to -1234567?
-
- The MIDI standard defines several Meta Events, and reserves 1-15 for
- different text events. 8 and up are undefined, but may be defined in the
- future, or used by your MIDI program, so you can use ? to see all the
- unrecognized text types.
-
- Since I've found that people use fields 1, 2, 3, 4, and 6 for instruments
- and/or comments without rhyme or reason, they're probably the most
- interesting from an overview perspective so the "+" option is the same as
- "12346". MidiCat will print any text events one per line.
-
- -t: Print time from start of track for text events
-
- MidiCat tries to keep track of the time as it goes through the midi file -
- when it prints one of the text fields above, it'll add the time to it if
- you use this option.
-
- -h: Don't print MIDI info header
-
- This turns off the "Filename..." and "-----" printing, in case you don't
- need another set of headers.
-
- -v: Only print info for valid MIDI files
-
- If you use this, MidiCat won't print anything for files that it can't
- recognize as MIDI files.
-
- -d: Keep track of drums. Only valid for General MIDI.
- -i: Keep track of instruments. Only valid for General MIDI.
-
- See INSTUMENT ANALYSIS below.
-
- If I do a "midicat -*t action4.mid" I get the following:
-
- Filename Size F #T Time Midi Name
- ----------------------------------------------------------------------------
- ACTION4 MID 36,635 1 15 1:26
- 0:00 0 Copy: Copyright (C) 1992 by Voyetra Technologies
- 0:00 1 Name: Copyright (C) 1992
- 0:00 2 Name: Voyetra Technologies
- 0:00 3 Name: B Melody
- 0:00 4 Name: B Bass
- 0:00 5 Name: B Melody 2
- 0:00 6 Name: B Drums
- 0:00 7 Name: X Rhythm Synth
- 0:00 8 Name: X Bass 1
- 0:00 9 Name: X Bass 2
- 0:00 10 Name: X Melody 1
- 0:00 11 Name: X Melody 2
- 0:00 12 Name: X Hi-Hat
- 0:00 13 Name: X Bass Drum
- 0:00 14 Name: X Snare Drum
-
- The numbers on the left are the times, the next numbers are the track
- numbers. You can see there are 15 tracks, numbered 0 through 14, though
- only 3-14 appear to have instrument tracks. Next is a 4-character event
- code:
-
- Text: Text Event Copy: Copyright
- Name: Seq/Track Name Inst: Instrument Name
- Lyri: Lyric Mark: Marker
- Cue : Cue Point ????: Other marker
-
- Following that is the actual text contained in the file. They used the
- Copyright event, but also included it as 2 sequence names. They didn't
- bother to give it a name. All the sequence names come right at the starts
- of the tracks. This is a fairly typical display, although it's more tracks
- than normal.
-
-
- IV. INSTRUMENT ANALYSIS
-
- MidiCat has two instrument analysis modes. -i watches all the MIDI Program
- Change messages as they go by and reports them. Usually this will be done
- only once or maybe twice a track. -d watches all the MIDI Note On messages
- for a Note being sent to channel 10, the percussion channel.
-
- MidiCat assumes that the MIDI file is a General MIDI file. General MIDI
- defines a specific set of instruments and drums, so that if you do a
- program change to 110, you can guarantee that you're getting a bagpipe
- sound. It also specifies that channel 10 is percussion, and which
- instrument goes with each note. 52 (Eb3), for instance, is a Ride Cymbal.
-
- If the MIDI file wasn't written for General MIDI, you can't guarantee that
- the instrument getting played is the instrument the composer intended, so
- things sound weird. For example, the Roland MT-32 has a different set
- of patches, so a file composed for that won't sound right on a General MIDI
- instrument. There's nothing in a MIDI file that tells you whether it's
- General MIDI or not.
-
- MidiCat can help here. It can show you all the program changes. If the
- instrument names the composer used match with the instruments you're
- seeing, it's probably a General MIDI file. If not, you'll have to reassign
- the instruments for your General MIDI device. Here's an example:
-
- D:\MIDI> midicat -*ti dasboot.mid
-
- Filename Size F #T Time Midi Name
- ----------------------------------------------------------------------------
- DASBOOT MID 50,191 1 9 11:11
- 0:00 1 Text: Strings
- 0:01 1 Midi Channel 1 set String Ensemble 1
- 0:00 2 Text: OrchesHit
- 0:01 2 Midi Channel 2 set Orchestra Hit
- 0:00 3 Text: Brass
- 0:01 3 Midi Channel 3 set SynthBrass 1
- 0:00 4 Text: Bimmel
- 0:01 4 Midi Channel 4 set Glockenspiel
- 0:00 5 Text: Echolot
- 0:01 5 Midi Channel 5 set FX 3 (crystal)
- 0:00 6 Text: Bass2
- 0:01 6 Midi Channel 6 set Synth Bass 2
- 0:00 7 Text: Bass
- 0:01 7 Midi Channel 7 set Synth Bass 1
- 0:00 8 Text: Drums
- 0:01 8 Midi Channel 10 set Standard Drum Set
-
- This looks pretty good... the "Midi" lines tell you the which MIDI channel
- was changed to what instrument. Comparing them with the "Text" events the
- composer entered, you can see we're pretty well matched. This MIDI file
- should play well on a General MIDI device.
-
- Here's another one (I'm deleting some unnecessary lines for brevity):
-
- D:\MIDI> midicat -*ti danube.mid
-
- Filename Size F #T Time Midi Name
- ----------------------------------------------------------------------------
- DANUBE MID 19,041 1 34 2:17
- 0:00 2 Name: for Voyetra's
- 0:00 3 Name: Sequencer Plus ver.4
- 0:00 5 Name: 1st Violin
- 0:00 5 Midi Channel 1 set Music Box
- 0:00 6 Name: Bass
- 0:00 6 Midi Channel 2 set Lead 2 (sawtooth)
- 0:00 7 Name: French Horn
- 0:00 7 Midi Channel 3 set Percussive Organ
- 0:00 8 Name: 1st Piano
- 0:00 8 Midi Channel 4 set FX 8 (sci-fi)
- 0:00 9 Name: 2nd Violin
- 0:00 9 Midi Channel 5 set Baritone Sax
- 0:00 10 Name: Cello
- 0:00 10 Midi Channel 6 set Vibraphone
- 0:00 11 Name: 2nd Cello
- 0:00 11 Midi Channel 7 set Vibraphone
- 0:00 12 Name: Flute
- 0:00 12 Midi Channel 8 set Reed Organ
- 0:00 13 Name: Trumpet
- 0:00 13 Midi Channel 9 set Dulcimer
- 0:00 14 Name: 3rd Violin
- 0:00 14 Midi Channel 10 set Unknown Drum Set
-
- Obviously, this isn't going to play very well... A Percussive Organ is
- nothing like a French Horn. This one will need hand conversion, unless you
- have a "Voyetra to General MIDI" converter of some sort.
-
- Sometimes the composer doesn't put ANY useful text information in the MIDI
- file. In this case, MidiCat can tell you what instruments are on what tracks.
-
-
- V. DRUM ANALYSIS
-
- MidiCat also watches for General MIDI drum events. Since each note is a
- different instrument, it wouldn't be reasonable to list every one as it's
- found in the file. Instead, it keeps track of each event as it happens,
- then lists them all after everything else.
-
- It _does_ keep track of drum channel program changes. There is really no
- standard for this, so I'm using the drum set table from my Roland SC-7.
-
- Program Change # UsedCode Drum Set
- ----------------------------------------------------
- 0x00 - 0x0F S Standard Drum Set
- 0x10 - 0x17 P Power Drum Set
- 0x18, 0x1A-0x27 E Electric Drum Set
- 0x19 T TR-808 Drum Set
- 0x28-0x2F B Brush Percussion Set
- 0x30-0x37 O Orchestra Percussion Set
- other U Unknown
-
- You'll see these as they occur in the tracks, like this:
-
- 0:00 8 Text: Drums
- 0:01 8 Midi Channel 10 set Standard Drum Set
-
- Don't panic if you see Unknown Drum Set, your MIDI device/program will
- probably just use the Standard set anyway.
-
- Once all the other information is listed, the used drums will be shown:
-
- D:\MIDI> midicat -*d eleanor2.mid
-
- Filename Size F #T Time Midi Name
- ----------------------------------------------------------------------------
- ELEANOR2 MID 65,725 1 10 6:15
- 1 Name: bass | eleanor rigby
- 2 Name: bass | eleanor rigby
- 3 Name: brite celeste | lead
- 4 Name: brite celeste | lead
- 5 Name: chords
- 6 Name: chords
- 7 Name: drums | retrograde
- 8 Name: drums
- 9 Name: POP1 rhythm
- Drums Used (General Midi):
- S35:Ac. Bass [Kick 2] S36:Bass Drum 1 [Kick 1] S38:Ac. Snare [Snare 1]
- S39:Hand Clap S42:Closed Hi-Hat S43:Hi Floor Tom [Lo 1]
- S46:Open Hi-Hat S47:Lo-Mid Tom [Mid 1] S48:Hi-Mid Tom [Hi 2]
- S49:Crash Cymbal 1 S51:Ride Cymbal 1 S69:Cabasa
-
- Here we can see that all the drums used are from the standard set, because
- of the "S" prefix. The [bracket] names are the Roland versions of the
- names. Since there are so many of them out there, I decided to show both.
- Drum "note" 47, for instance, is called Lo-Mid Tom by some General MIDI
- docs, but Mid Tom 1 by the Roland SC-7 General MIDI device. Oh well.
-
- This feature isn't as generally useful as the Instrument Analysis, but can
- be interesting.
-