Table of Contents

Program Changes

Some ideas for new Program Change features.

"All Numbers" Mode

All Numbers mode will give the user full control over the banks and program changes sent for a track. The MIDI Instrument Parameter Panel within the Instrument Parameters box (MIPP) will provide widgets for changing bank select msb, lsb, and program change. Checkboxes will also be provided to turn on/off the sending of bank selects and program changes.

Note: There are at least three main ways we can implement the bank select and program change widgets. The first would be as label widgets (QLabel/Label) that can be clicked to edit. That's the approach used for the Segment Label in the SegmentParameterBox. Second would be to use comboboxes with a complete list of values from 0 to 127 (1 to 128 for program changes). This would be similar to the approach normally used for banks and programs in the MIPP. The last would be to use edit boxes (QLineEdit/LineEdit) to allow the user to make modifications directly. This last approach is not used anywhere in the main window, so it makes me wonder if there is a reason. Perhaps it would interfere with keyboard shortcuts like Enter? But Enter is already interfered with whenever a widget has focus. It would be nice to have some insight as to why LineEdit is not used on the main window.

To get to “All Numbers” mode, we'll need to modify the bank editor (“Manage MIDI Banks and Programs” window). One approach would be to add a “device page”. When the user selects a device in the tree on the left, the page on the right will show device-level information, such as:

1. Program Change Mode
2. Author
3. Author email

click for larger version

Program Change Mode would be a combobox providing the following options:

1. All Numbers (the default?)
2. Bank Selects and Program Changes (the usual)
3. Variations by LSB
4. Variations by MSB

#1 is the new All Numbers mode. It could be the default when creating a new device. This would give the user full control at first. Then they can switch to mode #2 (or import a device) and reduce the amount of control as they wish.

#2 is the original banks and program changes mode. This is another candidate for the default as it will be most familiar to veteran users.

#3 is the “Show Variation list based on LSB” option that was on the various non-device pages in this editor. That checkbox and combobox can be removed once this is in place.

#4 is the “Show Variation list based on MSB” option that was on the various non-device pages in this editor. See #3.

Implementation Thoughts: This sure smacks of polymorphism. Too bad I hate polymorphism. It's really hard to read. The main advantage would be the untangling of the variations code from all the rest. Variations mode is an evil beast. If we could pull a MIPPVariations out of MIDIInstrumentParameterPanel, that would actually increase readability significantly. Put some thought into pulling the Bank/Program/Variation widgets out of MIPP and into separate classes for each mode (maybe MIPPBankProgram, MIPPVariations, and MIPPAllNumbers).

Hiding the Checkboxes

Once the above is in place, we could add a checkbox (on the device page) that would hide/show the bank/program checkboxes on the MIPP:

Program Change Mode            [Bank Selects and Program Changes  v]
Show Bank/Program Checkboxes   [X]
Author                         [                                   ]
Author email                   [                                   ]

This would simplify the MIPP for synths that have no need for disabling Bank Selects and Program Changes.

Bank    [Variation 1            v]
Program [1. Wide Acoustic Grand v]

Program Changes Only

We could also add a “Program Changes Only” mode for older synths that can't handle Bank Selects. This would get rid of the Bank line on the MIPP:

Percussion                 [ ]
Program    [1. Voice 1      v]
Channel    [Fixed           v]

Program Organization

Farther into the future, it might be a good idea to provide some more options for organizing program changes in a more user-friendly manner. Banks aren't necessarily organized logically. We might want to offer the ability to organize program changes arbitrarily. Perhaps something like a grid widget:

Name           Category  MSB  LSB  Program Change
Grand Piano 1  Piano      0   122       1
Grand Piano 2  Piano      0   112       1
E. Piano 1     Piano      0   122       6
E. Piano 2     Piano      0   123       6
E. Piano 3     Piano      0   122       5
E. Piano 4     Piano      0   123       5
Jazz Organ     Organ      0   122      17
Pipe Organ     Organ      0   123      20
Rock Organ     Organ      0   122      19
Vibraphone     Misc       0   122      12
Strings        Misc       0   122      49
Harpsichord    Misc       0   122       7
Wood Bass      Bass       0   122      33
E. Bass        Bass       0   122      34

That would then be transformed on the MIPP into a category combobox for selecting one of the categories, and a Program combobox for selecting one of the programs within that category. This allows arbitrary reorganization of programs by the device file author.

Category  [Piano          v]
Program   [Grand Piano 2  v]

For a synth as simple as the above (Yamaha P-105) one could leave the Category column empty and then only the Program line would appear with all 14 programs.

Note: The microKORG device file uses the fact that the microKORG ignores bank selects to organize its patches into categories.