Structs



MIDIValueMap


struct MIDIValueMap { 
    UInt8 value[128]; 
}; 
Discussion

A custom mapping function to transform MIDI 7-bit values, as contained in note numbers, velocities, control values, etc. y = value[x], where x is the input MIDI value, y the output.


MIDITransform


Describes how a single type of MIDI event is transformed.

struct MIDITransform { 
    MIDITransformType transform; 
    SInt16 param; 
}; 
Field Descriptions
transform
The type of transformation to be applied to the event values.
param
An argument to the transformation method (see description of MIDITransformType).
Discussion

This structure controls the transformation of various MIDI events other than control changes.


MIDIControlTransform


Describes a transformation of MIDI control change events.

struct MIDIControlTransform { 
    MIDITransformControlType controlType; 
    MIDITransformControlType remappedControlType; 
    UInt16 controlNumber; 
    MIDITransformType transform; 
    SInt16 param; 
}; 
Field Descriptions
controlType
The type of control specified by controlNumber
remappedControlType
If transform is kMIDITransform_MapControl, the output control type
controlNumber
The control number to be affected.
transform
The type of transformation to be applied to the event values.
param
An argument to the transformation method (see description of MIDITransformType).
Discussion

A single MIDIThruConnectionParams may describe any number of transformations to control events. It is important that multiple transformations are ordered correctly: filter out, remap, then alter values.

All transformations are done internally using 14-bit values, so for example, when doing an add/min/max transform on a 7-bit control value, the parameter must be a 14-bit value. For example, to add 10 to a control value, param must be (10


MIDIThruConnectionEndpoint


Describes a source or destination in a MIDIThruConnection.

struct MIDIThruConnectionEndpoint { 
    MIDIEndpointRef endpointRef; 
    MIDIUniqueID uniqueID; 
}; 
Field Descriptions
endpointRef
The endpoint specified as a MIDIEndpointRef.
uniqueID
The endpoint specified by its uniqueID.
Discussion

When creating one of these, you can leave uniqueID 0 if the endpoint exists and you are passing its MIDIEndpointRef.

When obtaining one of these from CoreMIDI, endpointRef may be NULL if it doesn't exist, but the uniqueID will always be non-zero.


MIDIThruConnectionParams


Describes a set of MIDI routings and transformations.

struct MIDIThruConnectionParams { 
    UInt32 version; 
    UInt32 numSources; 
    MIDIThruConnectionEndpoint sources[
            kMIDIThruConnection_MaxEndpoints]; 
    UInt32 numDestinations; 
    MIDIThruConnectionEndpoint destinations[
            kMIDIThruConnection_MaxEndpoints];  
    // 
    UInt8 channelMap[16]; 
    UInt8 lowVelocity, highVelocity; 
    UInt8 lowNote, highNote; 
    MIDITransform noteNumber; 
    MIDITransform velocity; 
    MIDITransform keyPressure; 
    MIDITransform channelPressure; 
    MIDITransform programChange; 
    MIDITransform pitchBend;  
    UInt8 filterOutSysEx; 
    UInt8 filterOutMTC; 
    UInt8 filterOutBeatClock; 
    UInt8 filterOutTuneRequest; 
    UInt8 reserved2[3]; 
    UInt8 filterOutAllControls;  
    UInt16 numControlTransforms; 
    UInt16 numMaps; 
    UInt16 reserved3[4];  
    // remainder of structure is variable-length: 
    // MIDIControlTransform controls[;] 
    // MIDIValueMap maps[;] 
}; 
Field Descriptions
version
Version of this structure; must be 0.
numSources
The number of valid sources in the following array.
sources
All MIDI generated by these sources is routed into this connection for processing and distribution to destinations.
numDestinations
The number of valid destinations in the following array.
destinations
All MIDI output from the connection is routed to these destinations.
channelMap
Maps each of the source 16 MIDI channels to channel 0-15 (1-16) or 0xFF when MIDI from a channel is to be filtered out.
lowVelocity
Note events with a velocity less than this value are filtered out.
highVelocity
Note events with a velocity greater than this, if it is not 0, are filtered out.
lowNote
See highNote.
highNote
If highNote >= lowNote, then notes outside this range are filtered out. If lowNote > highNote, then notes inside this range are filtered out. This applies to note and polyphonic key pressure events. These fields are ignored if a there is a MIDIValueMap applying to noteNumber.
noteNumber
Specifies how MIDI note numbers are transformed.
velocity
Specifies how MIDI note velocities are transformed.
keyPressure
Specifies how MIDI polyphonic key pressure events are transformed.
channelPressure
Specifies how MIDI monophonic (channel) pressure events are transformed.
programChange
Specifies how MIDI program change events are transformed.
pitchBend
Specifies how MIDI pitch bend events are transformed.
filterOutSysEx
If 1, specifies that system-exclusive messages are to be filtered out.
filterOutMTC
If 1, specifies that MIDI Time Code messages are to be filtered out.
filterOutBeatClock
If 1, specifies the MIDI clock, play, stop, and resume messages are to be filtered out.
filterOutTuneRequest
If 1, specifies that MIDI Tune Request messages are to be filtered out.
reserved2
Must be 0.
filterOutAllControls
If 1, specifies that all MIDI continuous control messages are to be filtered out.
numControlTransforms
The number of control transformations in the variable-length portion of the struct.
numMaps
The number of MIDIValueMaps in the variable-length portion of the struct.
reserved3
Must be 0.

Discussion

The remainder of the structure is variably-sized. It contains numControlTransform instances of MIDIControlTransform, followed by numMaps instances of MIDIValueMap.

(Last Updated February 25, 2005)