MMD > Archives > March 1996 > 1996.03.24 > 06Prev  Next


Re: Useful MIDI Utilities
By George Bogatko

At 11:56 AM 3/24/96 PST, you wrote:

> Subject: Useful MIDI Utilities

I'm cranking on one to allow me to compose new O rolls using many "piano roll views" on Cakewalk and compress all those views into two "channels". The idea is to preview the arrangement using GS MIDI ( with the orchestral drum kit ) and then map all the notes into O roll format. It uses a library of utilities I found on the net..

To specify the mapping you create a map description file. Each line has this format:

       <input channel>, <input note>, <output channel>, <output note>

The first hack takes an example file that came with the library, that converts a MIDI 1 file and converts it into a MIDI 0 file. I've modified it to do this mapping during the conversion. I still have to study the MIDI spec and the examples, and will then be able to filter a MIDI 1 file into a mapped MIDI 1 file, but for now, the results are very usable. One could, for instance, compose a tune destined for a Wurlitzer 150, and then map it into a MIDI file that would have all the "missing" notes mapped out.

Here is the map I'm using currently in my experiments.

file: "oroll.map"
***************************

#OROLL.MAP
#Assumes piano is on channel 1
# xylo is on channel 2 - suppressed during conversion
c=2, suppress

# pipes are on channel 3 - suppressed during conversion
c=3, suppress

# percussion on channel 10 - assumes GS MIDI Orchestral percussion set
# controls on channel 4

#Normal Chromatic scale e3 to a61 (notes 20-61)
c=1, i=e3, c=2, o=e3
c=1, i=f3, c=2, o=f3
c=1, i=f#3, c=2, o=f#3
c=1, i=g3, c=2, o=g3
c=1, i=g#3, c=2, o=g#3
c=1, i=a3, c=2, o=a3
c=1, i=a#3, c=2, o=a#3
c=1, i=b3, c=2, o=b3

c=1, i=c4, c=2, o=c4
c=1, i=c#4, c=2, o=c#4
c=1, i=d4, c=2, o=d4
c=1, i=d#4, c=2, o=d#4
c=1, i=e4, c=2, o=e4
c=1, i=f4, c=2, o=f4
c=1, i=f#4, c=2, o=f#4
c=1, i=g4, c=2, o=g4
c=1, i=g#4, c=2, o=g#4
c=1, i=a4, c=2, o=a4
c=1, i=a#4, c=2, o=a#4
c=1, i=b4, c=2, o=b4

c=1, i=c5, c=2, o=c5
c=1, i=c#5, c=2, o=c#5
c=1, i=d5, c=2, o=d5
c=1, i=d#5, c=2, o=d#5
c=1, i=e5, c=2, o=e5
c=1, i=f5, c=2, o=f5

#SPLIT MIDI CHANNEL HERE AT PIANO MIDDLE C (assume two devtronix devices)

c=1, i=f#5, c=1, o=f#5
c=1, i=g5, c=1, o=g5
c=1, i=g#5, c=1, o=g#5
c=1, i=a5, c=1, o=a5
c=1, i=a#5, c=1, o=a#5
c=1, i=b5, c=1, o=b5

c=1, i=c6, c=1, o=c6
c=1, i=c#6, c=1, o=c#6
c=1, i=d6, c=1, o=d6
c=1, i=d#6, c=1, o=d#6
c=1, i=e6, c=1, o=e6
c=1, i=f6, c=1, o=f6
c=1, i=f#6, c=1, o=f#6
c=1, i=g6, c=1, o=g6
c=1, i=g#6, c=1, o=g#6
c=1, i=a6, c=1, o=a6

#SOLO chromatic scale a#6 to a8
c=1, i=a#6, c=1, o=a#6
c=1, i=b6, c=1, o=b6

c=1, i=c7, c=1, o=c7
c=1, i=c#7, c=1, o=c#7
c=1, i=d7, c=1, o=d7
c=1, i=d#7, c=1, o=d#7
c=1, i=e7, c=1, o=e7
c=1, i=f7, c=1, o=f7
c=1, i=f#7, c=1, o=f#7
c=1, i=g7, c=1, o=g7
c=1, i=g#7, c=1, o=g#7
c=1, i=a7, c=1, o=a7
c=1, i=a#7, c=1, o=a#7
c=1, i=b7, c=1, o=b7

c=1, i=c8, c=1, o=c8
c=1, i=c#8, c=1, o=c#8
c=1, i=d8, c=1, o=d8
c=1, i=d#8, c=1, o=d#8
c=1, i=e8, c=1, o=e8
c=1, i=f8, c=1, o=f8
c=1, i=f#8, c=1, o=f#8
c=1, i=g8, c=1, o=g8
c=1, i=g#8, c=1, o=g#8
c=1, i=a8, c=1, o=a8
c=1, i=a#8, c=1, o=a#8
c=1, i=b8, c=1, o=b8

# Percussion mapping - GS MIDI patch 48 (orchestra drum set)
# 1. timpani - MIDI 36
c=10, i=36, c=2, o=21

# 2. Bass drum and tap cymbal - MIDI 59 (cymbal only)
c=10, i=59, c=2, o=22

# 3. timpani - MIDI 87
c=10, i=87, c=2, o=23

# 4. wood block - MIDI 62
c=10, i=62, c=2, o=24

# 5. snare drum tap - MIDI 38
c=10, i=38, c=2, o=25

# 6. snare drum roll - MIDI 40 (but you have to reiterate yourself)
c=10, i=40, c=2, o=26

# 7. triangle - MIDI 34
c=10, i=34, c=2, o=27

# 86. tambourine - MIDI 54
c=10, i=54, c=1, o=106

# 88. crash cymbal - MIDI 57
c=10, i=57, c=1, o=108

# CONTROLS
# 50 - forward to play
c=4, i=50, c=2, o=20

# 51 - piano sustain
c=4, i=51, c=2, o=28

# 52 - piano soft pedal on
c=4, i=52, c=2, o=30

# 53 - piano soft off
c=4, i=53, c=2, o=29

# 54 - mandolin on
c=4, i=54, c=2, o=32

# 55 - mandolin off
c=4, i=55, c=2, o=31

# 56 - pipes on
c=4, i=56, c=2, o=33

# 57 - pipes off
c=4, i=57, c=2, o=39

# 58 - drum expression on (soft)
c=4, i=58, c=2, o=35

# 59 - drum expression off (loud)
c=4, i=59, c=2, o=36

# 60 - xylophone on
c=4, i=60, c=2, o=34

# 61 - xylophone off
c=4, i=61, c=2, o=37

# 62 - crescendo
c=4, i=62, c=1, o=87

# 63 - shut off
c=4, i=63, c=2, o=38

# 64 - rewind
c=4, i=64, c=1, o=89

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

If you don't map the note, you don't get it in the output.

I'm still playing with speeding it up. It uses linked lists for storage, which grinds to a slow crawl rather quickly. A btree approach will speed things up.

The other major drawback is that it currently only successfully compiles with the GNU C/C++ compiler for DOS. I do *no* work on DOS or Windows (my major money making job is on UNIX systems), so have never bought the MS C++ compiler. The GNU compiler has the advantage of being incredibly cheap. You can find it on the "Source Code" disk from InfoMagic (info@infomagic.com) which costs $20. A complete C/C++ environment which purports to contain hooks into windows.

JODY: If this is interesting, when I get the b-tree version going I can upload the source and a GNU binary (it runs under DOS, but needs some supporting executables) to wherever you want. Just let me know where to store it. I can also put it on my web page. Everything is covered under the GNU license. If anybody is *really* interested, drop me a line and I'll post/send the current hack now.

GB
*************************************************
George Bogatko - gbogatko@intac.com
http://www.intac.com/~gbogatko

[ George,
[ All of my MIDI programs use a sorted linked list with an array of
[ "hints" to help find the insertion point. A B-Tree would probably
[ be more general (its easy to exceed the size of the hint array).
[ Unfortunately I found that its easy to end up with more data structure
[ "overhead" than actual data, and running under DOS thats a disaster.
[ Perhaps paging portions of the tree out to disk might help.
[
[ There's quite a few subscribers that would be interested in seeing
[ your code. I'd be happy to put any source you want to upload into
[ the .../misc subdirectory in the FTP archive on foxtail. I assume
[ you intend to let people do what they want with this ?
[
[ Being permanently connected to the Internet at 56Kb allows me to
[ download all kinds of goodies pretty quickly, so I've only bought a
[ few CDs containing "free" software. I did buy the entire GNU archive
[ a while back, though. The GNU stuff works really well with all of
[ the Unix clones (BSDI, Free BSD, and Linux). I really like that
[ you get the source code and are encourage to embellish on the programs
[ if you want to. Linux has become quite popular amongst the hobby crowd
[ and is also distributed under a "GNU Style" license (sometimes referred
[ to as a "copyleft"). Linus is available on CD (there are several vendors)
[ and is cheaper than the floppies that it would take to hold all the source.
[ Linux had sound card and MIDI card drivers, supports X Windows and
[ 32 bit virtual addressing. I can process the largest MIDI files
[ imaginable on Linux running on a 386 with 8 Meg of Ram. Of course,
[ I'm now running BSDI on a Pentium with 32 meg, but thats another story.
[
[ For my "commercial" MIDI products that run under DOS on the PC, I use
[ Borland C++ 3.5 with its Integrated Development Environment. I still
[ prefer the Unix "vi" editor, but the Borland IDE does a nice job of
[ integrating the Editor, Compiler, and Debugger in a way that is a lot
[ less mysterious than using the Unix equivalent.
[
[ Jody

(Message sent Sun 24 Mar 1996, 21:51:44 GMT, from time zone GMT-0500.)

Key Words in Subject:  MIDI, Useful, Utilities
Enter text below to search the MMD Website with Google

Please Support Publication of the MMD with your Generous Donation
No PayPal account required
SSL Certificate
by
Let's Encrypt