MIDI Modules

MIDI module are divided into four groups, output, system output, support, and input.


MIDI Output Modules: MidiVoice, ChannelOut & NoteOut MIDITone ProgOut CtrlOut PolyOut TouchOut BendOut NRPNOut CtrlOutAry PolyOutAry

MIDI System Output Modules: SysExOut MIDIStart Continue MIDIStop MIDIBeat

MIDI Support Modules: MIDIFile ProgName DrumName

MIDI Input Modules: KeyboardIn ProgIn CtrlIn LastCtrl PolyIn LastPoly TouchIn BendIn NRPNIn CtrlInRel CtrlInChng PolyInChng CtrlInAry CtrlInAryRel PolyInAry


MIDI Output Modules

Output modules send MIDI messages such as Note On to your MIDI synth or sound card. These modules should be at the very end of the calculation chain to avoid glitches due to MIDI getting a sound before it had been fully calculated.

MIDI Channels, Controls, and Notes

The MIDI Note On message plays a sound, and Note Off stops playing it. The two together are the equivalent of pressing then releasing a piano key. But there are other parameters that also need to be set such as which instrument (piano, celesta, tuba, etc.) to play,  placement in the stereo field, tone color, volume, and so on.  This is what the channel messages take care of.

MIDI is set up as a hierarchy of control, with basically three levels.  The top level is System messages that control everything at once. These include MIDI transport controls such as Start and Stop. Usually you can ignore them because they are taken care of automatically.

The middle level is MIDI Channel messages.  There are 16 channels numbered 1-16 (ArtWonk numbers them 0-15).  These control just about everything except the actual note playing: which instrument, stereo placement, tonal color, etc.  In general MIDI Channels are the instruments in your MIDI orchestra or band. In ArtWonk you have up to 64 available, 4 sets of 16 Channels each.

At the bottom of the hierarchy are the MIDI Note messages.  There are 128 per channel numbered 0-127, with the 88 note keyboard located roughly in the center (Middle C is MIDI Note #60).  MIDI Note messages control which note to play, when to play it, and how hard.  That's all.  Everything else is under Channel control.

So, yes, you can have multiple MIDI Note on/off messages per channel.  But except for pitch and dynamics they all sound the same, all have the same stereo placement.  Thus, you should think of the Channel control as the instrument, and you need at least one  defined.  The MIDI Note messages are the keyboard of the instrument.  You need at least one of these also, often (as when playing chords) more than one.  But you should rarely if ever use just the MIDI Note messages without first setting up the Channel messages that define the instrument.

This is the point of ArtWonk's MIDIVoice and MIDIChannel modules.  They do the MIDI setup more or less automatically.  By setting up either (but not both) for each instrument, the instrument setup is taken care of for you, and the controls you most likely will need are right there.  With the MIDIVoice you also have a single Note Out, so you have a complete MIDI instrument; with the MIDIChannel you must set up at least one MIDINote as well.


MidiVoice, MIDIChannel & NoteOut


The MIDIVoice 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 MIDIVoice module by adding as many MIDI NoteOut modules as you like. And you can expand the number and type of MIDI control messages with the control MIDI output modules described below. But usually the MIDIVoice is all you need to get started, and often it is the only MIDI module you will need to use at all.

The MIDIChannel module has the same channel controls as MIDIVoice, but it has no NoteOut section.  So you will need at least one NoteOut module to go with it.

You should have no more than one MIDIVoice or MIDIChannel module active per MIDI channel per Port. If you want polyphonic output on the same channel add some NoteOut modules, which implement only the note out messages (which you can have up to 128 per channel). But do not duplicate the MIDI channel controls, which should be only one per Channel per Port.

Enabling the MIDIVoice, MIDIChannel and NoteOut for MIDI Output

Before you can use either module, you must enable it by setting its MIDI channel and port, and by setting the Play input to True (1). This the default when the module is created; setting Play to 0 effectively kills the module, and prevents it from sending any MIDI output.

The Play input almost always should be connected to the System Module Play output, so when you depress the toolbar Play button the module will play, when you release it the module will go silent. This will make it very easy to record a piece because you can then simply click on the toolbar Record button then the Play button, much as you would with any recording device, and your piece will be recorded to a MIDI file.

The MIDI channel and port both default to 0; if you are using more than one channel, you need to set each to a different channel number and/or port. There are 4 ports available, numbered 0-4, which you set to any of 4 MIDI output drivers in the MIDI Options menu; and for each port there are 16 channels available, numbered 0-15.

Except for very large patches or special synth setups, you can leave the Port setting at 0, and just set the MIDI Out Device Driver in the MIDI Port 0 tab of the Main Menu Options/MIDI tab to the MIDI driver you want to use. If you are not certain what driver to use, almost always the "Microsoft MIDI Mapper" driver will work.

The MIDI Channel should be set progressively: 0 for the first MIDIVoice or MIDIChannel, 1 for the second, 2 for the third, and so on. One exception to this may be the MIDI Drum Set channel, which usually is channel 9. This channel, if your synth or sound card supports it, ignores Program Change and places each drum in the kit on a different note.

While it is important to set each and every MIDIVoice or MIDIChannel to a different MIDI channel nujmber, the same does not apply to the NoteOut modules. You set them to the same channel as the MIDIVoice (or MIDIChannel) module they will be associated with. The reason for this is they must know from which channel to get their MIDI Channel messages, such as Program Change, Pitch Bend, Volume, Pan, etc.

Remember, NoteOut modules add to the polyphony of the "parent" MIDIVoice module. They only add more polyphony, they do not allow for different instrument sounds, pan positions, etc. For these you need separate MIDIVoice or MIDIChannel modules.

Generating MIDI Notes:

As the NoteOut module is identical to the first part of the MIDIVoice module, the following discussion on generating MIDI notes applies to both modules, but not to MIDIChannel which does not sends MIDI Note messages.

MIDI Notes consists of two values being sent to your synth, a key or pitch value of 0-127 plus a velocity or loudness value of 0-127. When your synth gets a note message it will play the note and continue to play it until it is told to stop playing it (or to play it at velocity 0, which amounts to the same thing). Thus, a complete MIDI Note cycle is a Note On message of a particular pitch and velocity followed at some point by a corresponding Note Off message.

Note On / Note Off

Depending on the particular instrument your synth is playing, the note might actually play for the full duration of the Note On to Note Off cycle, or it might just play upon receiving the Note On, and die out of its own accord. Instruments like pianos usually die out; instruments like organs usually just keep playing until they get the proper (same key value) Note Off. This can lead to a "stuck note," a note that just keeps playing on. Stuck notes can be turned off in ArtWonk with the main menu Options/Notes Off, or with the F2 key.

Because of the 1-2, On-Off cycle of MIDI notes, the MIDIVoice and NoteOut modules use a Clock input to turn the note on and off. The leading edge of the clock, the 0-NZ transition, sends a Note On message; the trailing edge, the Nz back to 0 transition, sends a Note Off message. Thus, by connecting a Clock Out module into the Clock input, you can control the rhythm with the Clock module's Dur setting, and you can control the Note On time with the Clock module's %On setting.

Another way to control the Note On / Note Off cycle is to set the Lgto ("Legato") to 1. This causes the module to ignore the Clock input, and to simply produce a new Note On every time the key value changes. ArtWonk automatically handles Note Off messages by sending a Note Off of the previous note immediately prior to sending the new Note On. The effect is that notes have a run together Legato sound, and (important!) new notes will not sound unless the key value actually changes, so the notes skip beats where a note is followed by another of the same pitch.

Additionally, for use with some control devices such as lighting controllers (which expect to receive Note On values only, and will flash off when they get a Note Off), you can set the Lgto input to -1 to cause ArtWonk to not send Note Off messages at all. This is like holding the Sustain pedal down on a piano. If you try it, you can use the F2 key to turn the notes back off.

Note Pitch

The Note and Transp inputs are added to get the actual MIDI note number that will be sent. Either input can be any value, including negative values, but the total when added together must be in the MIDI note range of 0 to 127. Values outside this range will be folder over (logical AND with 127).

Note Velocity

Velocity (the Velo input) 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.

Control Changes

The remainder of the inputs in the MIDIVoice module and all inputs to MIDIChannel are channel controls and are not repeated in the NoteOut module. These values are sent to MIDI when they are changed, or on Reset.  Exception: Inputs set to -1 are not sent at all. This prevents Reset from unintentionally sending 0 value control changes.

Output (MIDIVoice & NoteOut):

Out: This is the value that is sent to MIDI. It will be the sum of the Note +Transp inputs, limited to a range of 0-127.

Output (MIDIChannel):

Chan: This echos the Chan input, useful for connecting to MIDIVoice Chan inputs.

Inputs for MIDIVoice and NoteOut:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Clock: NZ part of input is note-on duration. Must cycle between 0 and NZ to send Note.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Lgto: Legato: 1 for note only when note input changes; -1 to inhibit note-off messages; 0 for note on every clock tick. When NZ, Clock input is ignored.

Note: MIDI Note Number to send. Note + Transposition range is 0-127.

Trnsp: Transposition value is added to Note input.

Velo: Velocity part of MIDI Note message. Range is 0-127 (0=Off); usually sets note loudness.

Inputs for MIDIVoice and MIDIChannel:

Volu: MIDI Control Change ("CC") #7: Volume.

Pan: CC#10: Pan: 0=Left, 64=Center, 127=Right.

ModW: CC#1: Modulation Wheel.

Expr: CC#11: Expression. Used in Sound Blaster type cards for volume emphasis, setting to 0 may inhibit sound. The CC# can be changed for each MIDI Port with the main menu MIDI Options dialog.

Porta: CC#5 (value) & CC#65 (on/off): Portamento.

Prog: Program Change (0-127) to send. Note that you can see meaningful names for the instrument that is selected by means of a Program Change or Bank Change with the ProgName module in the Strings menu.

Bank: Bank Change. This sends the message to switch to a new set of Program Changes. The number of banks available is dependent on the synthesizer. There are two methods for changing banks, the MIDI Standard and the Sound Blaster method. So if one method does not work on your synth or sound card, try the other. You can change between the two methods in the MIDI Options dialog.


MIDITone

The MIDITone module is similar to the MIDIVoice module, but with one important difference. The MIDITone module is designed for microtonal output, where the MIDIVoice 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 MIDITone module is specialized to produce microtonal pitches by sending a MIDI Pitch Bend with every MIDI Note.

One important difference between the MIDITone module and the MIDIVoice module is the MIDITone module can not be used with NoteOut modules for adding polyphonic lines to the same MIDI channel. Since the MIDITone 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 MIDITone module for each music line. If you want a 4 note chord to sound, you have to set up 4 MIDITone modules.

The MIDITone 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.

If your synth or sound card has microtone pitch maps built in, it is usually best to use that instead of the MIDITone module.  MIDITone works, but it is fussy and prone to glitches on some sound devices, depending on how fast they can process the Note+PitchBend changes.  That said, here is how to do it with MIDITone:

The Note, Root, and Octav inputs 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 MIDIVoice module, with the MIDITone 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 (x5 or x12 or x19 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.

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

You can create custom tone tables, and/or import scales from the free Scala scale archive of some 3000 scales, and with the MIDI MicroTone dialog on the main menu. This dialog 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).

One important factor in successful use of the MIDITone module is that your synth's Pitch Bend Range must be properly set up. This is done automatically by the MIDITone module whenever it gets a Reset flag, but it is a good idea to check a synth when using MIDITone modules for the first time to see if it responded properly to the range setup messages. You can test easily enough by ear by setting up a Counter module to run up the scale, and then testing with different Table input settings.

Outputs:

Note: Note value sent to MIDI.

Bend: Pitch Bend value sent to MIDI.

Step: Scale step being played.

Octv: Octave being played.

Table: Text name of selected tone table.

Steps: Maximum scale step for selected tone table.

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Clock: NZ part of input is note-on duration. Must cycle between 0 and NZ to send Note.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Lgto: Legato:1 for note only when note input changes; -1 to inhibit note-off messages; 0 for note on every clock tick.

Note: Note value to send.

Root: Set Root (0 - max scale step).

Octv: Set Octave (0-9).

Strip: NZ to strip octaves from Note input, so note values always stay within the octave set by the Octv input.

Velo: Velocity part of MIDI Note message. Range is 0-127 (0=Off); usually sets note loudness.

Volu: MIDI Control Change ("CC") #7: Volume.

Pan: CC#10: Pan: 0=Left, 64=Center, 127=Right.

ModW: CC#1: Modulation Wheel.

Expr: CC#11: Expression. Used in Sound Blaster type cards for volume emphasis, setting to 0 may inhibit sound.

Porta: CC#5 (value) & CC#65 (on/off): Portamento.

Prog: Program Change (0-127) to send.

Bank: Bank Change, sends the message to switch to a new set of Program Changes.

Table: Set Microtone Tuning Table (0-127).


ProgOut

This sends the MIDI Program Change message, which causes the synth to change instruments. Normally this module is not needed as it is included in the MIDIVoice module, where it is integrated with the MIDI Bank Change; but it is here if you need it. Sent only on Reset or when the Value input parameter changes.

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Value: Program change (0-127) to send.


CtrlOut

Sends a MIDI Control Change message to whatever controller number you choose. Sent only on Reset or when the Value input parameter changes.

The MIDIVoice module includes the most commonly needed control messages, such as Pan (CC#10), Modulation (CC#1), and Volume (CC#7). This module gives you direct access to all 128 control messages available per MIDI channel

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Ctrl: Control number (0-127) to send.

Value: Control value (0-127) to send.


PolyOut

Sends a MIDI Poly Pressure (also called "Poly Key Aftertouch" ). Sent only on Reset or when the Value input parameter changes.

Poly Pressure is not commonly 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 Control Change inputs which may conflict with existing controls.

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Key#: Key number (0-127) to send.

Value: Poly value (0-127) to send.


TouchOut

Channel After Touch, or Channel Pressure is implemented differently or not at all depending on the synthesizer. Most sound cards do not support it. Sent only on Reset or when the Value input parameter actually changes.

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Value: Aftertouch value (0-127) to send.


BendOut

Sends MIDI Pitch Bend. Center (no pitch bend) is 64, not 0. Sent only on Reset or when the Value input parameter actually changes.

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Value: Pitch Bend value (0-127) to send.


NRPNOut

Send NRPN (Non Registered Parameter Number) or RPN (Registered Parameter Number) to the Port and Channel given. NRPNs consist of 4 control messages with two bytes for the parameter ID and two bytes for the value. This gives a larger value range than the normal MIDI range of 0-127; the NRPN value range is -4096 to 4095.

Some devices use NRPNs to format the data as 2 bytes, and some as a single combined word. ArtWonk allows you to have it either way: If you put 9999 into either of the MSB (Hi byte) parameters, then only the value in the corresponding LSB (Low byte) parameter is sent, with a range of -4096 to 4095.

Also, many devices do not use the LSB data parameter at all, only the MSB data in the 0-127 range. Therefore if you put 9999 into the LSB data parameter, only the MSB is sent, the LSB is not sent.

Outputs: (none)

Inputs:

Play: Must be set to True (1 or any NZ) to enable MIDI output.

Chng: Any change sends. This is different from most MIDI control output modules, which send on value change, because the data format is variable.

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

P#Hi: Parameter Number Hi byte (0-127, or 9999).

P#Lo: Parameter Number Lo byte (0-127, or -4096 to 4095 if P#Hi = 9999).

DatHi: Data value Hi byte (0-127), or 9999).

DatLo: Data value Lo byte (0-127, or -4096 to 4095 if DatHi = 9999, or 9999 to only send only DatHi byte).

RPN: NZ to send RPN, 0 to send NRPN.


CtrlOutAry

Sends Multiple MIDI Control Change messages from an array to whatever controller numbers you set up. Sent only on Dump or when the array value changes.

Outputs: (none)

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Max: Maximun Step of Array.

Ctl#: Array containing Ctrl Numbers or <100 for direct n to n+Max. For example if you give a Max of 127 and enter 96 into this Ctrl# input, it will send the 32 Control messages from 96 through 127 instead of using an array. None of the array creating modules use array numbers below 100, so this will never conflict with normal arrays.

Val#: Array containing the output values.

Dump: Any change to send all array values to MIDI.

Hold: NZ to prevent sending values when they change.

Reset: Reset to new input parameters. It is important to note that the module will not change its array parameters until it gets a Reset strobe.


PolyOutAry

Sends Multiple MIDI Poly Key messages from an array to whatever key numbers you set up. Sent only on Dump or when the array value changes.

Outputs: (none)

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Max: Maximun Step of Array.

Key#: Array containing Key Numbers or <100 for direct n to n+Max. For example if you give a Max of 127 and enter 96 into this Key# input, it will send the 32 Key messages from 96 through 127 instead of using an array. None of the array creating modules use array numbers below 100, so this will never conflict with normal arrays.

Val#: Array containing the output values.

Dump: Any change to send all array values to MIDI.

Hold: NZ to prevent sending values when they change.

Reset: Reset to new input parameters. It is important to note that the module will not change its array parameters until it gets a Reset strobe.


MIDI System Output Modules

System output modules do not have channel designations as they are "global" to the channel. They include System Exclusive strings, and messages to control external MIDI devices with tape recorder-like Start, Stop and Continue messages.

Input system control messages sent by external MIDI devices to ArtWonk are received by the System Module at its MIDI input.


SysExOut

The SysExOut (System Exclusive) modules sends up to 104 bytes of system exclusive data to MIDI. MIDI System Exclusive messages start with byte F0 hex, and end with byte F7 hex. These bytes are attached to the data by the SysExOut module, so you do not include them into the data table. Just enter the actual data bytes for the system exclusive message to send.

This module has a user settable number of inputs. To change the number of inputs, click on the blue-label property button on the upper right of the module, and click on the "More" or "Fewer" button on the Inputs tab. You have the option to set custom input labels and tool tips if you like.

Outputs: (none)

Inputs:

Strb: Strobe to send MIDI SysEx data.

Port: MIDI Port Number 0-3.

In N: Bytes (0-127) to send.


MIDIStart

Typically used for control of sequencers and drum machines. Also used for performance, allowing control of sequencers and drum machines from a "master" unit which sends the messages down the line when its buttons are pushed.

Outputs: (none)

Inputs:

Strb: Strobe to send MIDI Start control message

Port: MIDI Port Number 0-3.


Continue

Causes a device to pick up at the next clock mark. Typically used for control of sequencers and drum machines. Also used for performance, allowing control of sequencers and drum machines from a "master" unit which sends the messages down the line when its buttons are pushed.

Outputs: (none)

Inputs:

Strb: Strobe to send MIDI Continue control message

Port: MIDI Port Number 0-3.


MIDIStop

Typically used for control of sequencers and drum machines. Also used for performance, allowing control of sequencers and drum machines from a "master" unit which sends the messages down the line when its buttons are pushed.

Outputs: (none)

Inputs:

Strb: Strobe to send MIDI Stop control message

Port: MIDI Port Number 0-3.


MIDIBeat

Sends MIDI Beat Clock message. This is sent at the rate of 24 clocks per quarter note, and is used to sync devices, especially drum machines. This module sends the message when the Chng input changes, so normally you would connect the System Module Main output, which changes on every tick at the standard rate of 24 ticks (clocks) per MIDI quarter note, but you have the option of using any change value for custom beat clock rates.

MIDI Beat is automatically sent when the Main Menu MIDI Option has MIDI Sync set to Master, and is received with MIDI Sync is set to Slave; in either of these cases the MIDIBeat module should not be used.

Outputs: (none)

Inputs:

Chng: Any change to send MIDI Beat Clock control message

Port: MIDI Port Number 0-3.


MIDI Support Modules

These modules do not send or receive MIDI directly.


MIDIFile

Provides module access to standard MIDI file data. It sequences track data that is imported from a MIDI file with the MIDI File Import dialog available in the Main menu (File/Import MIDI File). Data tracks are loaded for each track you want to sequence. Use the Properties button to specify the track files, and the More button to add an output for each track. The files must be MIDI File Translation files (.mfx) created with the MIDI File Import dialog. Note that the module does not save the track data, it only saves the file name of the .mfx files; so like a picture file, the .mfx files must exist in either the exact location given by the Properties file names or in the same directory as the patch.

Outputs:

Play%: Play Progress in percent.

Ticks: Ticks played.

Time: Play time in ticks. Use the StrTime module to get a minutes:seconds readout.

Tempo: Tempo - original tempo when Speed=1. You can use the Tempo with a Tempo2MS module to change system tempo to the original tempo recorded; you can also use the Speed input to change the playback tempo. However you should use one or the other, not both.

Trk N: Track output. This is the value output for each data track. When the MIDIFile module receives a Load flag, it will load the .mfx file for each track, and the label will change to indicate the data type of the track: Vel for velocity, Not for Note, CC# for control channel, etc.

Inputs:

Speed: Playback speed: 1 = original, .5 = half, 2=double, etc.

Loop: NZ causes looping, 0 to stop at end of longest track.

Hold: NZ to hold.

Reset: NZ to reset.


ProgName

Converts numeric Program and Bank numbers to text names which come from a file in the ArtWonk\Names directory. The default name set 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.

Outputs:

Prog: Program Name.

Bank: Bank Name.

Inputs:

Prog: Program Number.

Bank: Bank Number.


DrumName

Converts MIDI Key Number ("Note") and Kit number to text names which come from a file in the ArtWonk\Names directory. The default name set is the General MIDI Channel 9 Percussion Instruments Kit, in the text file, "GMPercNames.txt", which is the single entry in the Drum Kit file, "DrumKits.txt," but you can change the text files in the Names directory to work with whatever Drum Kit and Drum names your sound card, synth, or soft synth uses. See the readme.txt file in the Names directory for additional information.

Use this module to get the text names of drum kits when you are playing MIDI Channel 9 rhythm sounds, and using the MIDIVoice or NoteOut modules's Note input to change percussion instruments.

Outputs:

Drum: Percussion Instrument Name.

Kit: Drum Kit Name.

Inputs:

Drum: Key number for Percussion Instrument.

Kit: Drum Kit Number


MIDI Input Modules

Input modules receive MIDI messages from your MIDI synth or sound card. Since they are signal receivers, not senders, they should be placed near the start of the module priority chain.


KeyboardIn

Reads MIDI Keyboard input on the MIDI input channel selected. Can read up to 8 simultaneous key presses. Key reads the MIDI note number and Vel reads the MIDI velocity, and also acts as an on/off indicator: When a key is pressed MIDI velocity goes to some value greater than zero, when the key is released velocity goes to 0.

The first output set, Keys & Vels, causes the modules to select the last key played, monophonically. Selecting the other output sets 1-8 causes only the nth key of a chord to be seen. That is, if a chord of up to 8 keys are played, Key1/Vel1 gets the first key, Key2/Vel2 the second, and so on. The next time, if only one key is played, then only first set will show the key played. If two keys are played at once, the first two sets will show the keys played, but the remaining sets will not.

Outputs:

Keys: Last Key Number.

Vels: Last Key Velocity.

Key1-8: Polyphonic Key Number.

Vel1-8: Polyphonic Key Velocity.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.


ProgIn

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 the value of the module's output.

In addition to the PC In module, ArtWonk also can recognize an incoming Program Change message as a command to change to the Snapshot of the received Program Change. This can be enabled in the Main Menu Options/MIDI dialog.

Output:

Value: Program Change value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.


CtrlIn

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 with the Ctrl input, and any incoming MIDI Control Change on the MIDI input channel selected will show up as the value of the module's output.

Output:

Value: Control Input value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Ctrl: MIDI Control Number 0-127.


LastCtrl

Receives the last Control Change message sent by an external MIDI device and sends the Value and Control number received to the module outputs.

Output:

Value: Control Input value last sent.

Ctrl: MIDI Control Number last sent.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.


CtrlInChng

Output changes with each MIDI Control received. This solves the problem of knowing when you receive two or more messages that are the same value.

Output:

Chng: Changes with each Control Input value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Ctrl: MIDI Control Number 0-127.


PolyIn

Receives MIDI Poly Pressure (also called "Poly Key Aftertouch" ) messages sent by an external MIDI device. Poly Pressure is not commonly supported by synthesizers and sound cards, but many soft synths can be set to send Poly Pressure messages, so it makes an excellent means of interacting with custom parameters in soft synths without using Control Change which may conflict with existing controls.

Other than using a different MIDI message (Poly Pressure instead of Control 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 with the Key# input, and any incoming MIDI Poly Pressure on the MIDI input channel selected will show as the value of the module's output.

Output:

Value: Control Input value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Key: MIDI Key Number 0-127.


LastPoly

Receives the last Poly Pressure message sent by an external MIDI device and sends the Value and Key number received to the module outputs.

Output:

Value: Poly Input value last sent.

Key#: MIDI Poly Key Number last sent.

Inputs:

Port: MIDI Port Number 0-3.

Key: MIDI Key Number 0-15.


PolyInChng

Output changes with each MIDI Poly Key received. This solves the problem of knowing when you receive two or more messages that are the same value.

Output:

Chng: Changes with each Poly Key Input value received.

Inputs:

Port: MIDI Port Number 0-3.

Key: MIDI Key Number 0-15.

Ctrl: MIDI Key Number 0-127.


TouchIn

Receives an Aftertouch (Mono Key Pressure) 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 Aftertouch on the MIDI input channel selected will show up as the value of the module's output.

Output:

Value: Aftertouch value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.


BendIn

Receives a Pitch Bend 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 Pitch Bend on the MIDI input channel selected will show up as the value of the module's output.

Output:

Value: Pitch Bend value received.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.


NRPNIn

Return last NRPN sent. if RPN input is non zero, returns the RPN instead of NRPN. Because this function takes extra computer resources, it is not initialized until the first time it is called, therefore you should call it once during setup, discarding the result, if you plan to use it.

Output:

Value: Data value received as a signed integer value between -8192 and 8191.

ValHi: Data value Hi byte (0-127). This is a signed byte, like Pitch Bend, so 64 is the 0 point. Values above 64 are positive, values of 63 and below are negative.

ValLo: Data value Lo byte (0-127).

NewIn: Changes each time a new input is received

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

P#Hi: Parameter Number Hi byte (0-127, or 9999).

P#Lo: Parameter Number Lo byte (0-127, or -8192 to 8191 if P#Hi = 9999).

RPN: NZ to receive RPN, 0 to receive NRPN.

14Bit: NZ to format Value output as a 14 bit signed integer, 0 for standard MIDI word value. The standard 2 MIDI byte MIDI word range is -16384 to +16383. But it is done in a more subtle way than just using a 14 bit signed integer. The negative bit in a MIDI word is the 7th bit of the high byte. This is why, for example, the Pitch Bend center is 64, not 0: 64 is the high byte center point. But when you just convert it to a 14 bit signed integer, the sign bit gets shifted down one, so a high, low byte of 0,1 is interpreted not as 1 but as -8191. Some MIDI devices use this non standard formatting; if you are getting values that don't make sense, try setting this input to NZ.


CtrlInRel

Receives Control increment and decrement messages, and sets the output to the sum of the inputs received relative +/- from the Start value. Since exactly what constitutes a increment or decrement value varies with different MIDI implementations, the mid value of 64 is used as the cutoff: anything received greater or equal to 64 is considered an increment and anything less than 64 is considered a decrement.

Output:

Value: Running sum of the increment, decrement messages received, relative to the Start value.

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Ctrl: MIDI Control Number 0-127.

Max: Maximum Output Value.

Min: Minimum Output Value.

Start: Start Value after Reset.

Nudge: Increment amount for each + or - received. Can be any positive number, including decimal fractions such as 0.5.

Int: If NZ output is rounded to an integer value .

Reset: Strobe to reset output to Start Value.


CtrlInAry

Receives Multiple MIDI Ctrl messages, placing them in an Array. Especially useful with hardware slider or knob controller devices. As MIDI control messages are received they are automatically placed in their position in an array, so other modules need only read the array values. Works well with the widget ASliders, as they will automatically display any changes in the array values.

Output: (none)

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Max: Maximum Step of Array.

Ctl#: Array containing Ctrl Numbers or <100 for direct n to n+Max. For example if you give a Max of 127 and enter 96 into this Ctrl# input, it will read the 32 Control messages from 96 through 127 instead of using an array. None of the array creating modules use array numbers below 100, so this will never conflict with normal arrays.

Val#: Array to hold input values. For example, this could be connected to the Ary# output of an ASliders module.

Reset: Reset to new input parameters. It is important to note that the module will not change its array parameters until it gets a Reset strobe.


CtrlInAryRel

Receives Control increment and decrement messages, placing them in an Array as an increment or decrement of the existing array value. Since exactly what constitutes a increment or decrement value varies with different MIDI implementations, the mid value of 64 is used as the cutoff: anything received greater or equal to 64 is considered an increment and anything less than 64 is considered a decrement.

Especially useful with hardware controller devices that send increment/decrement messages, such as continuous controller knobs. As MIDI control messages are received they are automatically placed in their position in an array, so other modules need only read the array values. Works well with the widget ASliders, as they will automatically display any changes in the array values.

Output: (none)

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Max: Maximum Step of Array.

Ctl#: Array containing Ctrl Numbers or <100 for direct n to n+Max. For example if you give a Max of 127 and enter 96 into this Ctrl# input, it will read the 32 Control messages from 96 through 127 instead of using an array. None of the array creating modules use array numbers below 100, so this will never conflict with normal arrays.

Val#: Array to hold input values. For example, this could be connected to the Ary# output of an ASliders module.

Nudge: Increment amount for each + or - received. Can be any positive number, including decimal fractions such as 0.5.

Max V: Maximum of array value range.

Min V: Minimum of array value range.

Start: Start Value after Reset.

Reset: Reset to new input parameters. It is important to note that the module will not change its array parameters until it gets a Reset strobe.


PolyInAry

Receives Multiple MIDI Poly Key messages, placing them in an Array. Especially useful with hardware slider or knob controller devices. As MIDI key messages are received they are automatically placed in their position in an array, so other modules need only read the array values. Works well with the widget ASliders, as they will automatically display any changes in the array values.

Output: (none)

Inputs:

Port: MIDI Port Number 0-3.

Chan: MIDI Channel Number 0-15.

Max: Maximum Step of Array.

Keyl#: Array containing Key Numbers or <100 for direct n to n+Max. For example if you give a Max of 127 and enter 96 into this Key# input, it will read the 32 Key messages from 96 through 127 instead of using an array. None of the array creating modules use array numbers below 100, so this will never conflict with normal arrays.

Val#: Array to hold input values. For example, this could be connected to the Ary# output of an ASliders module.

Reset: Reset to new input parameters. It is important to note that the module will not change its array parameters until it gets a Reset strobe.

 

ArtWonk is Copyright © 2003-2014 by John Dunn and Algorithmic Arts. All Rights Reserved.