Как прочитать начальное состояние MIDI Foot Controller?

Я знаю, что MIDI позволяет мне читать состояние ножного MIDI-контроллера, перехватывая MIDI-сообщение, указывающее на изменение управления. Но что, если пользователь еще не коснулся/не изменил элемент управления? Я все еще могу прочитать состояние/значение? Как это сделать?

Это мой код для перехвата сообщений 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;
            }
        }
    }
}

person Jay    schedule 04.11.2014    source источник
comment
На какой контроллер вы ориентируетесь?   -  person obiwanjacobi    schedule 04.11.2014
comment
Я ориентируюсь на ручки и элементы управления контроллера гитарных эффектов — PODxt. К счастью, Line6 предлагает спецификации своих сообщений SysEx для конкретных поставщиков: " rel="nofollow noreferrer">ссылка на PDF   -  person Jay    schedule 12.11.2014
comment
запросить дамп и все готово   -  person obiwanjacobi    schedule 12.11.2014
comment
Я сделал запрос дампа, и это сработало! Спасибо всем! Для всех, кто заинтересован: сообщение запроса дампа буфера редактирования PODxt — «F0 00 01 0C 03 75 F7». Я нашел эту информацию в этой теме   -  person Jay    schedule 14.11.2014


Ответы (2)


Если вы не сбрасывали устройство и не меняли элемент управления, то ваша программа не знает о состоянии элемента управления, пока не получит сообщение.

Некоторые устройства могут иметь специфичные для производителя команды для чтения текущего состояния элемента управления или для вывода всего состояния.

person CL.    schedule 04.11.2014
comment
Ознакомьтесь с документацией по соответствующему педальному контроллеру. Если поддерживается, это обычно системное эксклюзивное сообщение. Вы также можете исследовать отправку MIDI PC или CC на контроллер, чтобы явно установить его состояние. Оба метода требуют двусторонней связи, что означает, что вы должны подключить порты MIDI-In, а также порты MIDI-Out контроллера. Если контроллер имеет только MIDI-выход, восстановить состояние будет практически невозможно. [2с] - person obiwanjacobi; 04.11.2014

Короткий ответ: нет, вы не можете знать, пока не произойдет событие.

Другие ответы верны, если у вас есть IN и OUT, подключенные к контроллеру, который позволяет опрашивать сообщения SysEx (зависит от производителя).

Чтобы быть более полезным: состояние по умолчанию всех контроллеров (которые вы хотите использовать) должно быть выключено при запуске, например. Изменение высоты тона = по центру, модуляция = ZERO, сустейн = OFF и т. д.

Это было состоянием игры с 1980-х годов, поэтому это не было реальной проблемой. Если вы нажмете ногу (на педаль) до того, как запустите свое приложение, вы будете синхронизированы в тот момент, когда вы ее отпустите.

Удачи

person dyslexia    schedule 05.11.2014