Performance Signal

Wikis > Analog3 > Bus Data > Performance Signal

Overview

Performance signals are basically conversions of MIDI messages. The MIDI Gateway module picks up channel voice messages of a certain MIDI channel, interprets them as single or multi voice performance signals. MIDI also has messages for multi voices such as expression control. These messages go into a special voice called “omnivoice”.

Each voice has its CAN ID. Every module listens to a particular voice and omnivoice.

Identifier

Performance signal uses <number_of_voices> + 1 for the omunivoice CAN identifiers. All identifiers should fit the standard data frame ID, i.e., 11bit. The identifier for the omnivoice must be the largest among all voice identifiers.

Performance Signal Frame Structure

Performance signals are sent using standard data frames. The frame data does not include indicator of Analaog3 signal type. Signal receivers know the signal type by frame identifier numbers.

struct can_standard_data_frame {
    int11 id;
    uint4 data_length;
    uint8 data[];
};
A performance signal frame data consists of one byte message followed by one or more bytes of values.
 ex)
 performanceSignal.data_length = 2;
 performacneSignal.data[] = { 0x09, 0x7f }; // note on with velocity = 128

If the message byte has four zero MSB’s, the rest four LSB’s are equivalent to four MSB’s of a MIDI channel voice message. In other words, you can easily convert a MIDI channel voice message to an A3 performance signal message by shifting 4 bit rightward:

performanceSignal.data[0] = midi.channel_voice_message >> 4;

0x08 Note-Off <uint8:note> <number:velocity>
0x09 Note-On <uint8:note> <number:velocity>
0x0a Poly Key Pressure <uint8:note> <number:value>
0x0b Control Change
0x0c Program Change
0x0d Channel Pressure
0x0e Pitch Bend

The values are one or multi-byte big endian (network order) unsigned integer.