Mid (MIDI) Module

Controls 4 channels of MIDI output. A control panel with inputs to the MIDI module is accessed by clicking on the upper right blue button, which shows the MIDI channel(s) and port it is assigned to. The row of blue LEDs along the top show MIDI activity. They will highlight when the channel sends a Note-On message. The 4 sets of dual bars display MIDI Velocity (light blue) and MIDI Volume (green). Red LEDs along the bottom are Mute buttons. Click to mute the channel (highlights to bright red) click again to allow sound.

To the right of the MIDI module is a list of the currently selected Bank and Program names. The blue text is the current Bank name, and the white text is the Program name. These names come from a file in the BankStep\Names directory; the default is the General MIDI Bank and GM Program names, but you can change the text files in the Names directory to work with whatever Bank and Program names your sound card, synth, or soft synth uses. See the readme.txt file in the Names directory for additional information.

MIDI Output Control Panel

The MIDI control panel looks intimidating because there are so many buttons, but most can be ignored initially as they are either preset to default values or not used at all most of the time. In fact, all you really need to connect to get sound is Clock and Note. Pulses in the Clock input will cause the Note value to be sent out as MIDI Note On messages; when the Clock pulse falls to Off, a corresponding Note Off message is sent.

MIDI Mode Buttons: Selects between Notes (default) and Drum mode. In Notes mode, 4 MIDI channels are available per simultaneous note (per MIDI module). This gives the ability to send separate channel messages - such as Volume, Pan, and Program - for each Note channel. In Drum mode, only one MIDI channel is used for up to 4 simultaneous notes, and you cannot specify channel specific MIDI parameters such as Volume and Pan for each individual note.

MIDI Channel Buttons: Selects the MIDI channel the module will use for MIDI output. If MIDI Mode is Notes, this selects the first of the module's 4 channels, with the other channels being assigned consecutively. Note that while you may overlap MIDI channels with different MIDI modules, this is not a good idea as the MIDI channel messages (Volume, Pan, Program, etc.) should be only one set per MIDI channel.

MIDI Port Buttons: Selects which of the 4 available MIDI ports to use for sending MIDI messages. MIDI Ports are selected by choosing among your computer's available MIDI drivers, with the Options pop up.

Use PB Tuning Checkbox: When this option is checked, BankStep will use MIDI Pitch Bend along with Note messages to allow microtone tuning, not normally allowed in MIDI. When checked, a drop down menu will become visible that shows the available alternate tuning tables. Additionally, the Note input parameters are changed somewhat. For details see the discussion of Alternate Tunings using MIDI Pitch Bend, below.

OK Button: Exit the MIDI control panel and return to BankStep. Same as the upper right "x" exit button. Note that you do not need to exit to adjust inputs to other MIDI modules. You can simply click on the blue button of the MIDI module you want to work on - the active MIDI module is indicated by its blue button turning red.

Input Buttons: These are the same input buttons found throughout BankStep, as module inputs. The MIDI panel has one set of Logical inputs (Clock); all others are Value inputs. In order to keep from clogging your MIDI channels with unnecessary MIDI traffic, MIDI messages are only sent when the value at the MIDI input button changes, or upon startup, file load, and Run/Stop set to Run.

Note Control Inputs

The MIDI Input buttons are in two groups. The top group controls the Note messages, and is essentially the algorithmic equivalent of a keyboard. There are always four channels of these inputs - when in Notes mode, they are the actual 4 MIDI channels, when in Drum mode they are 4 sets of polyphonic notes on the same channel.

MIDI values are 0-127. Any values that are outside of this range are trimmed to the legal range. Values < 0 are set to 0; values > 127 are set to 127.

Mute (Logical): When True the MIDI channel is Muted, and no notes will pass out to MIDI. If the blue button to the left of the Mute label is depressed, then a False input will cause the channel to Mute. When channels are muted by these outputs, the MIDI module Mute LED turns orange instead of red as when it is muted by clicking on the LEDs.

Clock (Logical): A pulse in this input starts the next MIDI note by sending a Note-On message. The action of the Clock input is modified by the Width setting:

Width: The Width input controls how the Note On works, as well as its duration. When set to any number > 0, it will cause the note to play for that number of ticks. If the duration runs over to the next clock cycle, the note will go off for 1 tick, then go on with the next clock tick. In this mode, with Width > 0, you can use Delay to delay note onset by the number of ticks set. Makes nice arpeggios.

With Width set to 0 (the default), the note On and note Off is set by the Clock input gate. The On edge of the clock sends a Note On, and the Off edge of the clock sends a Note Off.

With Width set to -1 (any <0), the Clock input is ignored, and a new note is generated when the note value changes. You can set the Delay input to turn the note off before the note changes, which is most useful for killing that last Note-On.

Delay: When Width is 1 or greater, Delay sets the delay in ticks between the start of a new Clock pulse, and the actual sending of the MIDI Note On message; when Width is -1 or less, if Delay is greater than 0 it sets the maximum time in ticks the note will remain on.

Note: The MIDI note value, 0-127. The actual value sent to MIDI is the sum of the Note input and the two Transp inputs (or when in PB Tuning mode, the Note, Root and Octave inputs (see below for details).

Transp: Two identical inputs. They simply add to the note value. Negative values are allowed. If the total of the two Transp inputs is -9999 (such as one set to -9999 and the other set to 0), Note Off messages will be inhibited. This is a special mode intended mainly for use with MIDI control equipment such as light bars, that blink when receiving Note Off messages.

When in PB Tuning mode, the two Transp inputs are changed to Root and Octave. For details see the discussion of Alternate Tunings using MIDI Pitch Bend, below.

Veloc: Velocity. This is the part of the MIDI Note On message that determines how forceful the note will sound. On most synths and sound cards it is essentially a note by note loudness control.

MIDI gives two ways to control loudness, the note by note Velocity, and the channel specific Volume. Typically, the Velocity is used for note dynamics, and the Volume is used for fade in and fade out. The Velocity value is graphically displayed on the MIDI module as a four light blue bars, one for each channel; Volume is displayed as the green bar to the right of each Velocity bar.

The MIDI protocol specifies that a Note On message with a Velocity of 0 is the same as a Note Off message. In BankStep, when Velocity is set to 0, no Note messages will be sent.

Channel Control Inputs

The larger, lower group of MIDI input buttons control various channel messages. When in Notes Mode, there are 4 columns of input buttons, one for each channel; when in Drum Mode, there is only one column of buttons, for the channel the MIDI module has been set to.

MIDI channel controls come in two flavors, general and specific. General MIDI messages are called Control messages, or Channel Control ("CC") messages. They have two parts, the identifier, which is an assigned number (such as 10 for Pan, or 7 for Volume), followed by the control value. Specific MIDI messages are messages that are specific to the function, such as Pitch Bend. Usually this is a detail you do not need to track in BankStep because the control messages are simply identified by name and function, however you also have the ability to create custom MIDI Control messages, so it is a good idea to know what control messages are reserved for specific functions.

The following descriptions will indicate when an input is a general control message, and which identifier is assigned to it and thus should not be used for other purposes, with (as for Volume): CC#7.

Volume: CC#7. Overall volume of the channel, independent of the individual note Velocity. Volume is displayed graphically on the MIDI module with a green bar to the right of each blue Velocity bar. When in Drum Mode, only one Volume bar is active, as the same Volume controls all 4 note channels.

V Lag: Volume Lag. This is not a MIDI message input, rather it controls the lag of the Volume input. When set to 0, the default, Lag is disabled and changes in the Volume input are sent immediately; when set to any positive value, changes in Volume are sent incrementally as specified by the Lag value. Lag is useful for automatic fade in and fade out. Lag values are in milliseconds * 5 for each lag step, with larger values having slower lag. This control is essentially identical to the Lag module, but specific to the Volume input value.

Pan: CC#10. 0-63 pans left, 64 (default) is center, and 65-127 pans right.

Prog: Program Change. Selects the instrument to play. Many synths and virtually all sound cards use General MIDI values to specify instruments. General MIDI values are available on the value input pop up, as the drop down menu located under the OK button.

Bank: Bank Change. Some synths contain more than 128 instruments, the maximum you can reach with the Program Change alone. For these, there is a Bank change, which sets one of several available sets of instruments to be available to the Program Change. The exact number of banks is dependent of the synthesizer, and some synthesizers do not respond to standard Bank change messages at all, although most modern synths do. While Program Change is a specific MIDI message and does not use a CC#, Bank Change uses a combination of two CC#'s, 0 and 32.

PBend: Pitch Bend. This is the MIDI message that is sent out when you move the Pitch Bend wheel on a MIDI keyboard. Center, or no Bend (the default) is 64. Values below 64 bend pitch down, values above 64 bend pitch up. The exact amount of bend is set on your synthesizer. When using PB Tuning, the PBend input is ignored.

ModWh: Modulation Wheel, CC#1. Usually adds tremolo to the sound, although this varies greatly with the synth and with the instrument selected.

Porta: Portamento, CC#5 & CC#65. Synths that support portamento usually have a switch that enables it plus a value that determines the amount. When the portamento value goes above 0, BankStep will automatically set the enable switch on by sending CC#65 with a value of 127 , followed by the portamento value on CC#5. When the amount goes from non zero to 0, the enable switch is automatically turned off again (CC#65 sent with a value of 0).

Touch: Channel Aftertouch. After touch is generally used to determine how quickly a key is released, but is supported differently on different synths, if at all. MIDI defines two types of after touch, Channel and Key, with Channel Aftertouch having one value per channel, and Key Aftertouch having a separate value for each key.

User Defined Control Channel Inputs: The 4 inputs with text input boxes labeled "CC" are available for you to set your own custom MIDI Control messages. Type the CC# into the text box, and use the input button for the control value, just as with the preset CC buttons.

Key AfterTouch: The 4 inputs with text input boxes labeled "KA" may be used to send Key Aftertouch messages. Use the text box to set the key number, and the input button for the value.

Alternate Tunings using MIDI Pitch Bend

The MIDI module has the ability to use MIDI Pitch Bend messages in conjunction with the normal Note messages to achieve microtonal tuning. When you check Use PB Tuning, the module switches to microtone tuning, and you will see a drop down list of the tunings that are available. If you are using more than one MIDI module the PB Tuning setting will be the same for all modules. PB Tuning is disabled for any MIDI modules using Drum Mode, however it works fine to mix your atonal drums with microtone tuned instruments.

The PB Tuning mode works by separating the scale step and octave from the Note input, and then translating the scale step for the particular scale selected into MIDI Note and Pitch Bend messages.

A default tone table that contains the scale information is loaded automatically when BankStep first runs. Click here to view a descriptive listing of the default tone table.

You can create custom tone tables with the MIDI MicroTone program, which is available separately on the Algorithmic Arts web site. This program gives you the ability to modify the tuning tables and to create new ones, without having to deal with how the tuning data is formatted. However for those who want to know the details, here they are:

For each of the 128 tables: Steps 0-62 are the MIDI Key value for each of the up to 63 scale steps starting from 0; Step 63 is reserved and should not be changed; Steps 64-126 are the Pitch Bend value for each scale step (but 64 must be added to make the signed 128-bit MIDI Pitch Bend value positive); and Step 127 is the number of the highest scale step used (scale steps -1).

When PB Tuning has been selected the two Transp inputs are changed to Root and Octave inputs. Note, Root, and Octav all work together to select the note to be played, and the octave to play it in.

Since MIDI Notes are set at 12 equal tone steps per octave, a little extra care must be taken to place an arbitrary micro tone scale in its pitch environment. Instead of simply adding any value to a Transpose input, you set the Octave the scale is to start on separately from the Root input, which is the scale step of the root. You may also move to higher and lower octaves by simple transposition of the note by octaves (scale steps * octave + note = note in new octave), but some scales - most notably the ones that span greater than the acoustic octave, or 1200 cents - give unpredictable results. However by modulating octaves with the Octave input, and root with the Root input, the scales work and you can change key signatures in real time.

To summarize: Note takes the scale step of the note you want to play. You can transpose this by octaves ( x 5 or x 12 or x 19 or whatever the number of scale steps for the scale); Root takes an offset into the scale. It should only be in the range of 0 to scale steps-1. And Octave takes the octave to play in. This is in the MIDI octave range of 0-9. Setting Octave to 5, for example, will always produce a pitch of standard middle C if Note and Root are 0. The Octave module can be set to extract octave numbers from MIDI note numbers.

The drop down menu listbox that appears when PB Tuning mode is selected selects which of the 128 possible tune tables to use. The number of scale steps is indicated in the list just before the scale name.

One important factor in successful use of PB Tuning is that your synth's Pitch Bend Range must be properly set up. This is done automatically by BankStep whenever it restarts (as when the toolbar Run module is clicked, or when a file is first loads), but it is a good idea to check a synth when using PB Tuning for the first time to see if it responded properly to the range setup messages. You can usually tell by selecting a harmonic table such as Basic Just Intonation, and playing a scale on it. If in doubt you can download SoftStep and run the included test patch file called TestTone.ssp.

BankStep is Copyright © 2001-2004 by John Dunn and Algorithmic Arts. All Rights Reserved.