Mechanical Music Digest  Archives
You Are Not Logged In Login/Get New Account
Please Log In. Accounts are free!
Logged In users are granted additional features including a more current version of the Archives and a simplified process for submitting articles.
Home Archives Calendar Gallery Store Links Info
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

Home    Archives    Calendar    Gallery    Store    Links    Info   


Enter text below to search the MMD Website with Google



CONTACT FORM: Click HERE to write to the editor, or to post a message about Mechanical Musical Instruments to the MMD

Unless otherwise noted, all opinions are those of the individual authors and may not represent those of the editors. Compilation copyright 1995-2024 by Jody Kravitz.

Please read our Republication Policy before copying information from or creating links to this web site.

Click HERE to contact the webmaster regarding problems with the website.

Please support publication of the MMD by donating online

Please Support Publication of the MMD with your Generous Donation

Pay via PayPal

No PayPal account required

                                     
Translate This Page