Я знаю, что MIDI позволяет мне читать состояние MIDI Foot Controller, вылавливая MIDI-сообщение с сообщением об изменении управления. Но что, если пользователь еще не коснулся/не изменил контроль? Я все еще могу читать состояние/ценность? Каким образом это можно сделать?Как читать начальное состояние MIDI Foot Controller?
Это мой код для ловли Midi сообщений с использованием OSX CoreMIDI
void initMidi()
{
MIDIClientRef midiClient;
MIDIPortRef inputPort;
OSStatus status;
MIDIEndpointRef src;
status = MIDIClientCreate(CFSTR("testing"), NULL, NULL, &midiClient);
if (status != noErr)
NSLog(@"Error creating MIDI client: %d", status);
status = MIDIInputPortCreate(midiClient, CFSTR("Input"), midiInputCallback, NULL, &inputPort);
if (status != noErr)
NSLog(@"Error creating MIDI input port: %d", status);
ItemCount numOfDevices = MIDIGetNumberOfDevices();
// just try to connect to every device
for (ItemCount i = 0; i < numOfDevices; i++) {
src = MIDIGetSource(i);
status = MIDIPortConnectSource(inputPort, src, NULL);
}
}
void midiInputCallback(const MIDIPacketList *list,
void *procRef,
void *srcRef)
{
for (UInt32 i = 0; i < list->numPackets; i++) {
const MIDIPacket *packet = &list->packet[i];
for (UInt16 j = 0, size = 0; j < packet->length; j += size) {
UInt8 status = packet->data[j];
if (status < 0xC0) size = 3;
else if (status < 0xE0) size = 2;
else if (status < 0xF0) size = 3;
else if (status < 0xF3) size = 3;
else if (status == 0xF3) size = 2;
else size = 1;
switch (status & 0xF0) {
case 0xb0:
NSLog(@"MIDI Control Changed: %d %d", packet->data[j + 1], packet->data[j + 2]);
break;
}
}
}
}
Какой контроллер вы используете? – obiwanjacobi
Я нацеливаюсь на регуляторы и элементы управления контроллера гитарных эффектов - PODxt. К счастью, Line6 предлагает спецификации своих сообщений SysEx для конкретных поставщиков: [ссылка на PDF] (http://line6.com/data/6/0a060b316ac34f0593ef290ff/application/pdf/POD%20Pro%20Sysex%20-%20English%20. pdf) – Jay
запросить дамп, и все вы настроены – obiwanjacobi