Проблемы отправки информации MIDI в приложениях iOS - PullRequest
0 голосов
/ 25 апреля 2019

Так что я застрял, пытаясь получить MIDI-информацию для отправки на мой компьютер из приложения iOS, которое я создаю для своего iPad.Я настраиваю клиента и выходной порт, а также получаю конечную контрольную точку.MIDI Monitor на моем Mac читает сообщение о выполнении системы MIDI, когда я запускаю свой iPad, но больше ничего не происходит.У меня есть очень общее сообщение MIDISend, пытающееся отправить заметку на сообщение, но это не очень успешно.Мой iPad подключен через IDAM MIDI Host через Audio MIDI Setup, но я не могу получить что-либо для передачи.

Я уже пробовал использовать различные опции Core MIDI, такие как получить источник, получить объект источника, получить пункт назначения, почтивсе возвращают один и тот же тип свойства IDAM MIDI Host.В моем коде везде есть операторы print, пытающиеся выяснить, где моя проблема, но я застрял сейчас, так как не могу понять, что не так.

Вот некоторые функции, которые я сделал в классе для созданияклиент, создайте выходной порт и отправьте MIDI-информацию:

Некоторые объявления переменных вне этих функций:

func openClient(){
   MIDIClientCreate("Gregs iPad" as CFString, nil, nil, &midiClient)  
}



func createPort(){
      MIDIOutputPortCreate(midiClient, "Output" as CFString, &outputPort)

}

func receiveSource () {

    // determine how many devices are connected
    midiDevice = MIDIGetDevice(2) // this is IDAM MIDI Host
    let entcount = MIDIDeviceGetNumberOfEntities(midiDevice)  // number of entities
    ent = MIDIDeviceGetEntity(midiDevice, 0) // obtain the entity reference

    // obtain the end point ref from this entity
    midiSource = MIDIEntityGetDestination(ent, 0)
    midiSource2 = MIDIEntityGetSource(ent, 0)



// Trying to send some MIDI within this function
    let pack = UnsafeMutablePointer<MIDIPacket>.allocate(capacity: 1)
    let packLst = UnsafeMutablePointer<MIDIPacketList>.allocate(capacity: 1)
    //let midiDataToSend:[UInt8] = [UInt8(0xB0), UInt8(0x0A), UInt8(20)];
    let midiDataToSend:[UInt8] = [UInt8(0x90), UInt8(60), UInt8(100)];
    MIDIPacketListInit(packLst);
    MIDIPacketListAdd(packLst, 1024, pack, 0, 3, midiDataToSend);

    MIDISend(outputPort, midiSource, packLst)
    MIDIReceived(midiSource, packLst)
    print(packLst)

}

Iтакже попытался использовать MIDIReceived, чтобы посмотреть, будет ли что-нибудь отправлено, но безуспешно.Я ожидаю увидеть некоторую информацию, отправленную моему DAW по этому конкретному статусу и объявлению байтов данных, но, похоже, ничего не работает успешно.Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 26 апреля 2019

Для всех, кто просматривал это, я понял это. Переменная пакета должна быть назначена на инициализацию списка пакетов для передачи в качестве указателя на функцию добавления списка пакетов. В последнем разделе моего кода вам нужно изменить: var pack = UnsafeMutablePointer.allocate (емкость: 1), а затем установить его равным инициализации (pack = MIDIPacketListInit (packLst);). Я заметил это после того, как прочитал функцию MIDIPacketListAdd и понял, что входной аргумент текущего пакета ДОЛЖЕН быть указателем. Надеюсь, что это имеет больше смысла.

...