Как выполняется соединение CoreMIDI Thru в swift 4.2? - PullRequest
0 голосов
/ 25 февраля 2019

Следующее строит, запускает и печатает консольное сообщение без ошибок в конце, когда переданы два допустимых MIDIEndPointRef.Но события миди не передаются от источника к месту, как ожидалось.Чего-то не хватает?

func createThru2(source:MIDIEndpointRef?, dest:MIDIEndpointRef?)  {

    var connectionRef = MIDIThruConnectionRef()
    var params = MIDIThruConnectionParams()
    MIDIThruConnectionParamsInitialize(&params)

    if let s = source {
        let thruEnd = MIDIThruConnectionEndpoint(endpointRef: s, uniqueID: MIDIUniqueID(1))
        params.sources.0 = thruEnd
        params.numSources = 1
        print("thru source is \(s)")
    }

    if let d = dest {
        let thruEnd = MIDIThruConnectionEndpoint(endpointRef: d, uniqueID: MIDIUniqueID(2))
        params.destinations.0 = thruEnd
        params.numDestinations = 1
        print("thru dest is \(d)")
    }

    var localParams = params
    let nsdata = withUnsafePointer(to: &params) { p in
        NSData(bytes: p, length: MIDIThruConnectionParamsSize(&localParams))
    }

    let status = MIDIThruConnectionCreate(nil, nsdata, &connectionRef)
    if status == noErr {
        print("created thru")
    } else {
        print("error creating thru \(status)")
    }
}

1 Ответ

0 голосов
/ 20 июня 2019

Ваш код отлично работает в Swift 5 на macOS 10.13.6.Соединение устанавливается, и события MIDI передаются от источника к месту назначения.Таким образом, проблема, похоже, связана не с функцией, которую вы опубликовали, а с конечными точками, которые вы указали или используете Swift 4.2.

Я использовал следующий код для вызова вашей функции:

var source:MIDIEndpointRef = MIDIGetSource(5)
var dest:MIDIEndpointRef = MIDIGetDestination(9)

createThru2(source:source, dest:dest)

5 - это клавиатура MIDI, а 9 - порт MIDI на моем аудиоинтерфейсе.

...