MIDI Menu

MIDI Output Modules

Most MIDI Output modules have no output available to other SoftStep modules - their output is to the selected (in the Options menu) MIDI driver. There are no priority-changes on MIDI modules because they are always the last modules in the processing chain. Whenever a MIDI Output module sends MIDI data to Windows, the MIDI Output LED in the Tool Bar, just to the right of the Tempo LED, flashes. This is useful for those times when you are getting no sound and don't know why. If the blue MIDI LED is flashing, SoftStep is sending MIDI data out to Windows.

All MIDI Output modules have a small medium dark blue button (), usually in the upper left of the module, that shows the MIDI channel, numbered 1 to 16, and the MIDI Port (the selected MIDI Output driver as selected in Options) labeled A to D, that the module will send its MIDI messages to.

Click on the button to change the channel and/or port used by the module. A small dialog box pops up with numbered buttons for the MIDI Channels, and buttons labeled A-D for the ports. Select the combination you want and click OK (or select Cancel and no change is made).

Voice     KeyOut

The MIDI Voice module combines the most often needed MIDI outputs into a single module. It assumes a single music line for a single MIDI channel. You have the option to add more polyphony to a Voice module by adding as many MIDI Key modules as you like. And you can expand the number and type of MIDI control messages with the ChanOut andCtlOut modules described below. But usually the MIDI Voice is all you need to get started, and often it is the only MIDI module you will need to use at all.

The MIDI Voice module is divided into two parts. The topmost 4 inputs are for playing MIDI notes, and the bottom 3 inputs are control parameters.

The MIDI KeyOut module is identical to the first part of the Voice module, so the following applies to both. You should have no more than one Voice module active per MIDI channel per Port. If you want polyphonic output use KeyOut modules, which implements only the note out messages (which you can have as many of as you like per channel), but do not duplicate the MIDI channel controls, which should be only one per Channel per Port.

The inputs that define a MIDI note are the yellow Clock input, and the Note, Transpose, and Velocity inputs, plus the light blue button to the left of the Clock input, which sets Legato play.

The Note and Transp inputs are added to get the actual MIDI note number that will be sent. There is one exception to this - when Transp is set to 127, it is not added to the Note input and the module stops sending out MIDI note off messages. This is a kind of super sustain mode that is intended more for MIDI lighting controllers and other non musical MIDI devices that require runs of MIDI note on messages without the corresponding note off messages.

Velocity is part of the MIDI note message, and it indicates how hard the MIDI synthesizer thinks you hit the key - usually this translates into volume but some synthesizers and samplers alter the texture as well. In any case, Velocity has to be some number greater than 0 for the note to be heard. Sending a note with Velocity set to 0 is the same as sending a note-off. When Velocity is set to 0, only the last note-off message is sent, and subsequent 0 Velocity notes will not be sent to MIDI.

When the light blue Clock/LEG button is unclicked (the default), a MIDI note is sent out on every Clock gate. At the start of the gate, the Note+Transp and the Velocity are sent to MIDI to turn the note on at the synthesizer; when the Clock gate falls back to 0, a MIDI note-off is sent, turning the sound back off.

When the Clock/LEG button is clicked in, the Clock input is ignored, and a new note is sent out only when the value of the Note input changes. This has the effect of turning repeated notes into longer single notes; and all notes are played always-on until a new note is played. To be precise, when the value at the Note input changes, a MIDI note-off is sent for the previous note, and a note-on is sent for the current note on the next tick. This has the effect of making the Legato mode notes play one tick (64th note triplet) behind Clock mode notes.

Display boxes at the top of the module are readouts for current MIDI note number (gray), the pitch name and octave, and the MIDI Note-On LED.

The bottom three inputs, Pan, ModWh, and Prog, are channel controls and are not repeated in the KeyOut module. These values are sent to MIDI when they are changed.

Pan is MIDI control #10. Most synthesizers, samplers, and sound cards support this, but there are exceptions. Pan values of 0-63 are left, and 64-127 are right; with 0 as hard left, 127 as hard right, and 64 as center.

ModWh (Modulation Wheel), MIDI control #1, is supported by most synthesizers, samplers, and sound cards. Increasing the value up from 0 usually adds increasing tremolo to the sound.

Prog (Program Change) changes instruments. This is a good parameter to attach a Radio module to.

The gray text label at the bottom of the module shows the currently selected Program name. These names come from a file in the SoftStep\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.

Tone

The MIDI Tone module is similar to the Voice module, but with one important difference. The Tone module is designed for microtonal output, where the Voice module is for standard MIDI note output. Generally, you should not use both of these modules in the same composition. Both serve the same function - to send MIDI Notes to the synthesizer - but the Tone module is specialized to produce microtonal pitches by sending a MIDI Pitch Bend with every MIDI Note.

One important difference between the Tone module and the Voice module is the Tone module can not be used with Key Out modules for adding polyphonic lines to the same MIDI channel. Since the Tone module must send a Pitch Bend message with every Key On (Note) message, and since MIDI supports only one Pitch Bend message per channel, you must set up a separate Tone module for each music line. If you want a 4 note chord to sound, you have to set up 4 Tone modules.

The Tone module 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 SoftStep 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).

Since the Tone module is identical to the MIDI Voice module in most respects, only the differences will be mentioned here. These are: the Voice Transpose input has been changed to the Tone Root input, and the addition of two additional inputs, Octave and Tune Table; and one additional option button directly under the Clock/LEG button, labeled "Note."

Also, the output display at the top of the module gives slightly different information. The number at the top, next to the LED is the MIDI Key sent; on the line belos, left to right are: MIDI Pitch Bend Sent, Scale step being played, Octave being played.

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 the Transpose input of the Voice module, with the Tone module, 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 Octv 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 Octv takes the octave to play in. This is in the MIDI octave range of 0-9. Setting Octv to 5, for example, will always produce a pitch of standard middle C if Note and Root are 0.

The blue Note option button, when clicked in, strips octave information from the Note input, so Note values always stay within the octave set by the Octv input.

The TuneTbl input selects which of the 128 tune tables to use. There is a module in the Display menu, Tone Table, which displays the table name, and outputs the number of scale steps in the selected table. While this module is highly recommended to use in conjunction with the Tone module, remember the Tone Table module only displays the table names it does not select the table to use. That is done only with the TuneTbl input of the Tone module.

One important factor in successful use of the Tone module is that your synth's Pitch Bend Range must be properly set up. This is done automatically by the Tone module whenever it restarts (as when the toolbar Run module is clicked, or when the .ssp file first loads), but it is a good idea to check a synth when using Tone modules for the first time to see if it responded properly to the range setup messages. You can do this by loading the TestTone.ssp file. There also is a tutorial that describes how to set up and use the Tone module.

ChanOut

The ChanOut (Channel Out) module gives access toMIDI control messages not available in the MIDI Voice. Between the two modules, just about every commonly used MIDI control message is available. You should have no more than one ChanOut module active per MIDI channel per Port If there are additional control messages you want to use, the CtrlOut, described below, will handle them.

All controls in this module are sent when changed - so if you do not make a change in an input, it will leave the synthesizer setting for that control unchanged.

The unlabeled control input just to the right of the channel number is the Bank Change control. This sends the message to switch to a new set of Program Changes. The number of banks available is dependent on the synthesizer. Most synthesizers that implement Bank Change require a Program Change to be sent right after the Bank Change. The Bank Change in ChanOut does this, sending a Program Change to Program #0. So when you make a Bank Change, the new bank is started at Program #0.

AfTch (Channel After Touch, or Channel Pressure) is implemented differently or at all depending on the synthesizer. Most sound cards do not support it.

Volume, MIDI control #7, is supported by just about every synthesizer and sound card. Usually you will be better off setting Volume to a constant high value and controlling the audible volume with the Velocity input of the Voice module. This is because most notation programs that read MIDI files will set dynamic markings in the score according to Velocity, not Volume. However there is a subtlety that might be important - Velocity changes only when the note is played while Volume can change while the note is sustaining. So for smooth fade outs you might want to use a Slew module connected to the Volume input.

Breath (Breath Controller or BC), MIDI control #2, is implemented differently or at all depending on the synthesizer. It is most often found in Yamaha synthesizers for support of the Yamaha Breath Controller device.

Foot (Foot Controller), MIDI control #4, is supported by many synthesizers, however the effect of the control varies.

Expres (Expression), MIDI control #11, is often used as an auxiliary volume control, sometimes with extra color added as with the Velocity control. In many synthesizers and sound cards, when this is set to 0 the volume also goes to 0. For this reason, the default value has been set to 127. However as in all controls in this module, no output is sent unless the control is changed.

Porta (Portamento) sends two control messages; the input value is sent as MIDI control # 5, portamento time, and it is also sent as a 0/NZ gate to control #65, portamento on/off.

The gray text label at the bottom of the module shows the currently selected Bank name. These names come from a file in the SoftStep\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.

CtrlOut

CtrlOut (Control Out), sends a MIDI control message to whatever controller number you choose. Set the text box input to the message number (0-127), and send the message by changing the connection input parameter. MIDI control messages are sent only when the connection input parameter actually changes.

Poly Pressure Out

PolyOut (Poly Pressure Out), sends a MIDI Poly Pressure (also called "Poly Key Aftertouch" ). Set the text box input to the key number (0-127), and send the value by changing the connection input parameter. MIDI Poly messages are sent only when the connection input parameter actually changes.

Poly Pressure is not comonly supported by synthesizers and sound cards, but most soft synths can be set to respond to Poly Pressure, so it makes an excellent means of controlling your own custom parameters in soft synths without using their Ctrl Change inputs which may conflict with existing controls.

Pitch Bend Out

PBend (Pitch Bend Out) sends MIDI Pitch Bend. Center (no pitch bend) is 64, not 0. Send the message by changing the connection input parameter. Pitch Bend messages are sent only when the connection input parameter actually changes.

Sys Ex Out

The SysEx (System Exclusive) modules sends up to 128 bytes of system exclusive data to MIDI. It uses Table module tables, so you can set up a Table Write module to the same table to dynamically change SysEx values.

System Exclusive MIDI messages do not have channel numbers, so the usual channel/port button is reduced to just a Port button at the top right of the module. Successive clicks on the button will step through the 4 MIDI Ports.

To send SysEx data, put the values you want to send into the table selected with the Table input, just under the Fill button. Set the length of the data with the first green input connection, the Length input - this is actually length-1: zero will send 1 byte of data, and 127 will send all 128 bytes in the table. Then trigger the topmost Strobe input with a zero to non zero transition (as a clock input, or from the Strobe button) . . The System Exclusive data is immediately sent at zero latency. The number readout to the right of the Strobe input will indicate the number of bytes sent. System Exclusive messages are not recorded when you are making a MIDI file.

MIDI System Exclusive messages start with byte F0 hex, and end with byte F7 hex. These bytes are attached to the data by the SysEx module, so you do not enter them into the data table. Just enter the actual data bytes for the system exclusive message to send. If you have a standard SysEx data dump, you can use the Fill utility file Load button to read the data into the table. In this case the first byte of data will be 112, which is F0 hex with the high bit stripped off, and the last byte will be 119, or F7 hex with the high byte stripped. You should remove these bytes from the table data before sending the SysEx message to your synth.

SysEx File

SysEx File sends System Exclusive Files (*.syx) directly to MIDI. These files are a standard format with one or more System Exclusive messages per file. SoftStep does no checking on the file: it assumes if the file has a .syx extension, it is a properly formatted sysex file.

System Exclusive MIDI messages do not have channel numbers, so the usual channel/port button is reduced to just a Port button at the top right of the module. Successive clicks on the button will step through the 4 MIDI Ports.

Use the Get button to set up the file name. Get does not send the file, it only stores the name to be used when you trigger the send. The file data itself is not stored by SoftStep, only the file name. Thus, if you move the file or rename it, the module will no longer function until you update its filename.

The bottom input connection must be non zero for the module to send data. This is to help prevent accidental sends, since a large sysex file send will disrupt the normal MIDI data flow.

To initiate the SysEx data dump, send a non-zero strobe (non-zero after zero) to the topmost strobe input. If the Safety input is non zero, the file will be sent. Because the normal MIDI data flow is halted during the SysEx dump, after the file has been sent SoftStep's clocks are reset and synchronized.


MIDI Input Modules

All MIDI Input modules have a MIDI Channel/Port button that is identical to the MIDI Output button but a slightly different color (blue-green instead of medium blue). To change the MIDI channel or port, click on the button to invoke the same pop up dialog as for the MIDI Output modules.

You may set whether a MIDI input will trigger an immediate module execution cycle from the MIDI Triggers checkboxes in Options. When any of these are checked, whenever a MIDI input is received, modules set to Priority "M" (for MIDI) are immediately executed; then they will not execute at the immedite next cycle, to prevent counters from registering an extra tick. This gives SoftStep the ability to work as an exceptionally powerful and open ended MIDI signal processor.

Ctrl Change Input

The Control Change In (CC In) module receives a Control Change message sent by an external MIDI device, and delivers it as a standard module output that can be connected to any other module. Select the control message number you want to receive by typing it into the text input box, and any incoming MIDI Control Change on the MIDI input channel selected will show up as text in the blue output box, and as the value of the module's output.

Poly Pressure Input

The Poly Pressure Input (PP In) module receives MIDI Poly Pressure (also called "Poly Key Aftertouch" ) messages sent by an external MIDI device. Poly Pressure is not comonly supported by synthesizers and sound cards, but most soft synths can be set to respond to Poly Pressure, so it makes an excellent means of controlling your own custom parameters in soft synths without using Ctrl Change inputs which may conflict with existing controls.

Other than using a different MIDI message (Poly Pressure instead of Ctrl Change), Poly Pressure works the same as Ctrl Change. There are 128 different message numbers (called key numbers) that can each have a value in the standard MIDI range of 0-127. Select the key number you want to receive by typing it into the text input box, and any incoming MIDI Poly Pressure on the MIDI input channel selected will show up as text in the blue output box, and as the value of the module's output.

Prog Change Input

The Program Change In (PC In) module receives a Program Change message sent by an external MIDI device, and delivers it as a standard module output that can be connected to any other module. Any incoming MIDI Program Change on the MIDI input channel selected will show up as text in the blue output box, and as the value of the module's output.

In addition to the PC In module, SoftStep also can recognize an incoming Program Change message as a command to change to the Snapshot of the received Program Change. See the Options Menu for more information on this.

Pitch Bend Input

The Pitch Bend Input (PBIn) module receives MIDI Pitch Bend messages sent by an external device, and delivers it as a standard module output that can be connected to any other module. Any incoming MIDI Pitch Bend on the MIDI input channel selected will show up as text in the blue output box, and as the value of the module's output.

This module only detects the low part (fastest moving part) of a MIDI Pitch Bend message, which is the part most synths send. Pitch Bend values are +/- 0 to 63; in SoftStep these show up as 0-127, with 64 = 0 (default setting), 63-0 as negative, and 64-127 as positive.

 Keyboard Input

Two modules are used for MIDI Keyboard input on the MIDI input channel selected. KeyNum reads the MIDI note number and KeyVel reads the MIDI velocity, and also acts as a gate: When a key is pressed MIDI velocity goes to some value greater than zero, when the key is released velocity goes to 0.

The yellow drop down menu selects the polyphony. The default selection, "All," causes the modules to select the last key played, monophonically. Selecting the other values 1-7 causes only the nth key of a chord to be seen. That is, if a chord of up to 7 keys are played, modules set to 1 see the first key, 2 the second, and so on. The next time, if only one key is played, then only the module set to 1 will show the key. If two keys are played at once, modules set to 1 and 2 will detect the keys, but modules set to 3-7 will not.


Multi Use Control Sliders

Control Sliders

The Control Sliders (Ctrl32) module is is a multi use module that can be used to control parameters on an external synthesizer or other MIDI device by sending MIDI Control or MIDI Poly Pressure messages, or to adjust SoftStep parameters by setting Table Sequencer values.

Using the control sliders is very simple, just click and drag up or down on the slider bar you want to use. The slider number 0-31 is displayed in the white-text box on the left, and the slider's value is displayed in the blue-text output box to the right.

Before using the sliders you should set them up to specify their action. You can set the sliders to send MIDI Control Change messages, MIDI Poly Pressure messages, or to write their value to Table Sequencer table #127, where it can be read by normal Table Sequencers or by the Table#127 module, which may be considered the companion output module for this module.

Set slider parameters by clicking on the blue button on the title bar to the left of the readout boxes. A pop up window will appear with buttons that represent each of the sliders, followed by their port/channel and their control number. Click on the numbered slider color buttons to specify which slider or group of sliders you want to change. Also you may click on the "All On/Off" button to turn all selector buttons on or off at once.

To set a color, click on one of the four color buttons in the upper left of the pop up. All selection buttons that have been clicked in (selected) will turn to the color you have selected. Click on a different color button, and the selected buttons will change again to that color Clicking on the "Disable" button will turn the selected slider buttons gray, setting them to disabled status. When sliders are disabled they appear as black if they are followed by any enabled (colored) sliders. If no enabled sliders are to the right of the disabled sliders, the module will resize itself to only show the enabled sliders.

To set the MIDI Port and Channel, select the desired Port and Channel button, then click on the "Set Port/Chan" button, and all selected sliders will be assigned to the current button settings.

To select whether the slider will send its output to MIDI Ctrl, MIDI Poly, or Table #127, click on the "CC" button. Each time you click the button, the selected sliders will change its output designation, and the Control Number text boxes for each selected slider will chage from white (Ctrl), to pink (Poly) to green (Table#127).

To set the MIDI Control Number for each slider, type the lowest number into the edit box of the first slider to change, then click on the "Set Ctrl #'s" button to set that first slider to the selected value, and to automatically set all other selected sliders to increments of the starter value.

Optionally, a documentation line may be set for each of the 32 sliders, or the same line can be set for any number of sliders. Type the documentation text into the text input box, to the right of the "Set Doc" button, then click on that button to insert the text into each selected slider. Documentation lines will display as the mouse is positioned over each slider.

Finally, before any of the changes can affect the module settings, select the "OK" button, which updates the module and closes the settings pop up. Select "Cancel", or the upper right "X" close button to discard the changes and leave the Control module unchanged.

SoftStep is Copyright © 1999-2004 by John Dunn and Algorithmic Arts. All Rights Reserved.