shazware.com - ditty ...Deal with it!

intro
download
did
do
design
tut_Config
tut_Play
tut_View
tut_Metronome
tut_Record
tut_Edit
tut_Print
tut_SFont
ref_MidiPath
ref_MidiCfg <=
ref_Ditty
ref_Tinker
ref_DrumTrak
ref_Txt2Trak
ref_SF2Lst
ref_SF2SFont
ref_SFontBank
ref_PsetEdit
ref_EdiSn
MidiCfg edits your midi configuration...
   Windows knows VERY little about your MIDI devices.
   Just a usually laaame description set by the midi device driver.

MidiCfg is just an editor for the {MidiPath}\Dev\* files.
   You could do that yourself with a text editor...
   But if you really wanna do that, go get linux...  KIDDING! :)

MidiCfg edits...
   Midi input,output device list
   global controller list
   each deviceType's
      input controller list                 (for input devices)
         mappings from controller in->out   (for input devices)
      output controller list                (for output devices)
      sound list                            (for output devices)
________________________________________________________________________________

MIDI Input,Output Device List:

   Hover over the buttons for tooltip help.

   

   Ditty programs need to know:
   - a short descriptive NAME for each midi in and out device.
   - the TYPE of each midi device.
        I have "tweaker", an EdiRol PCR-800 and "rockin88", a Yamaha CP-33.
        My Creative Audigy has 2 output devices.
        both are type "SFont", but seperate devices with distinct names.
        Note that rk88 is both a midi input AND an output.
        Twkr is input only (a midi controller).
   - the order to use them in                 (which output device to use first)
   - whether to use some of the devices at all            (see the "off" stuff?)


   So your main jobs in this screen are to
   - reorder the lines so that the first lines will be
     the devices to use by DEFAULT

   - turn off the lame devices
     (Microsoft GS Wavetable SW Synth is lame - unless it's all ya got)

   - give your devices decent (SHORT!) names.  (My GUIs only show 8 chars max:)

   - set the Type field to a SHORT name describing the synth model.
     It'll automatically be set to "SFont" for
        Creative Soundblaster Live and Audigy devices.
     Use "GenMidi" if you don't want to treat it special and
        just want to mess with controls LATER.

   - tweak the EditKey field (in the top right) to the top note for
        live keyboard editing in ditty.  (8 note keys to tweak stuff with)
        We're talking about the FIRST MidiIn device in your list.
        The default (not shown) is for a full 88 key keyboard.
        Set to 8g for 76 keys;  8c for 60 keys.
        EditKeys are described in the Ditty reference docs.
________________________________________________________________________________

Global Controller List:

   Hit the toolbar button with the red square to get to this screen:

   

   - Name          standard name Ditty/Tinker will use
   - Type          tells Tinker how to display it...
        s - signed -64..0..63
        u - unsigned 0..127
        o - on/off
        . - no value
   - DefaultValue  value at the beginning of a track with no events
   - Init          means it's sent out to initialize a device's channel
   - Description   is well, you can figure THAT one out...


   Don't worry - you don't have to type all that in.  I already did it for ya :)

   This screen describes the "nailed down" outbound controls stored in a track.
   General Midi has SOME controls defined pretty well.  They're these.

   But General Midi doesn't give STANDARD names for these controls.
   Only "sort of standard" names.

   This screen gives all the standard outbound controller numbers
      standard NAMES.

   You won't have to remember that Pan is controller #10, (not #8 !)
      because THIS screen nails that down.  You just say "Pan"

   When a midi file comes into Ditty/Tinker,
      this table is consulted for the controller#.  cc10 becomes "Pan".
      (Recording live midi is a little different - we'll get to that shortly.)

   Any ID#s leftover stay as cryptic strings in this format:
      cc#           regular control
      rp# and rp#L  RPN control (high and low byte)
      np# and np#L  NRPN control
      us#           universal sysex control
   Although these don't have nice names, at least they're STRINGS.
      (and won't be just tossed out)
      You can give the ones you actually USE names in this list.
      That's it's job.
________________________________________________________________________________

DeviceType's Input Controller List:

   From MidiCfg's main screen, click a MidiIn: device and
      hit the toolbar button with the HUGE description
      (to the right of the red square one)
      to see...

   

   This screen is pretty cool.
   As you play notes and tweak controllers on the keyboard,
      (or drumkit or whatever midi input device)
      You'll see the events show up in the "Inbound Events" list on the right.
   If a control comes in that's not already in the list on the left,
      it'll be added.
   Then, YOU give it a nice (short) NAME.

   For example...
      - tweak the first slider on your keyboard.
      - does anything show up in the Inbound Events?
        It could be that slider doesn't go out midi - RATS!  Check the manual :(
      - If you get a new RawCtrl in the list (SWEEEET!),
            look on the panel of your keyboard and give it THAT Name.
            (for me, it's S1 - first slider of 9:)
            If there's no panel label,
               come up with something short and descriptive.

   If you're lucky, you may not even have to crack the device's manual !!

   You've now got JUST the controls THIS devicetype can do all NAMED
      according to what it says RIGHT there in front of you on the panel.
   So if you've got 2 PCR-800s (YOU SCUM!), they're both all done now.

   You're ready to start making MAPS!
________________________________________________________________________________

DeviceType's Control Mappings List:

   From MidiCfg's main screen,
      pick a MidiIn: device's CCMap: (defaulting to .) and
      hit the toolbar button with the arrow.
      to see...

   

   This screen sets up a set of mappings saying
      which panel controls record which output controls into the track.

   MENU
      Note that my program change control on Tweaker sends the "MENU" control.
      Ditty considers "MENU" special and
         changes the "live editing" category droplist.
   TRAK
      There's also TRAK which will choose the default track in ditty.
      (that little > that picks the current track to mess with)

   The rest of the controls are recorded into the track.

   Note that anything not mapped is filtered.

   When you first create a map,
      JUST the controls a devicetype HAS are listed off (by panel NAME).

   You can create several maps and reuse your panel controls to record other
      whole sets of outbound controls into the track.

   ModifyCommand is still "in work"...
      The idea being that you can
      - modify the channel of an inbound control, maybe device too
      - scale or otherwise alter the control's value

      Currently, the only thing you can put in there that actually DOES
      something is:
         FLIP
            This will take the usual 0..127 values of the controller and flip
                           them into 127..0
            This is handy since not all controls have TOP=0 and BOTTOM=127.
            For example:
               slider_vert      0..127 => bot..top
               slider_horiz     0..127 => top..bot
               modwheel,        0..127 => bot..top
               modwheel_spring, 0..127 => bot..top  ret to bot??
               prss             0..127 => top..bot
               breath,          0..127 => top..bot ??  ret to top?
               knob,            0..127 => top..bot
               pedal,           0..127/64 => top..bot  ret to top
               progch,          0..15/99/127/etc => top..bot
               pbnd,            -64..0..63 => bot..mid..top     ret to mid
               pbnd_sideways,   -64..0..63 => top..mid..bot ??  "

               So for the ones with 0..127 => bot..top, try putting
               FLIP into the ModifyCommand column

      Since I did that screenshot, I've changed MENU and TRAK to
         Mod | MENU | FLIP        (on my cp33)
         s1  | TRAK | FLIP        (on my pcr800)

   Ok, your midi input config is complete !!

   Time for the midi output stuff...
________________________________________________________________________________

DeviceType's Output Controller List:

   From MidiCfg's main screen, click a MidiOut: device and
      hit the toolbar button with the HUGE description
      (to the right of the red square one)
      to see...

   

   This screen maps the names of output controls this device is capable of
      back to ID#s for midi.
   Yep, you're going to have to read that dang manual after all.
   Add in lines for each of the output controls this device is capable of
   responding to.

   And put in the ID# for each one:
      cc#           regular control
      rp# and rp#L  RPN control (high and low byte)
      np# and np#L  NRPN control
      us#           universal sysex control
   Note: the way I set up RPN and NRPNs #s is in the range
      0..8191
      with an L tacked on if it's the low byte.
________________________________________________________________________________

DeviceType's Sound List:

   From MidiCfg's main screen,
      pick a MidiOut: device and hit the toolbar button with the note.
      to see...

   

   I'm kind of hoping you won't need to use this screen.
       But, should you need to, it's here.
       (Like for my cp-33 with it's whoppin' =32= sounds)

   This screen gives each sound on your sound module a name and maps it
      to the ProgramChange, BankSelect, and BankSelectLowbyte combination
      that midi needs to pick it.

   If you're using a Creative Soundblaster Live or Audigy,
      sounds are handled completely by NAME.
      All the program changes, etc are handled transparently by Ditty and
                                                    SF2SFont/PSetEdit/SFontBank.
   If you already have this mapping in SOME sort of file, I can turn it into
      the type of file this screen is editing FOR you.  (With a bit of perl.)
      Just email it to
      ME.

   If I get enough of these, I'll put em on my website so others won't have to
      experience your pain...:/

Updated: ; stephen.hazel over at gmail.com