Как вы создаете MidiEventPacket с каналом, используя CoreMidi?

Вот мой код для создания пакета событий Midi. Он создает событие включения/выключения ноты со скоростью и номером ноты на канале 1.

Как установить номер канала?

      var midiEventPacket = MIDIEventPacket ()
midiEventPacket.timeStamp = 0
midiEventPacket.wordCount = 1
midiEventPacket.words.0 = isNoteOff ? 0x20900000 : 0x20800000
midiEventPacket.words.0 = midiEventPacket.words.0 | ((note) << 8) // Note  = 60
midiEventPacket.words.0 = midiEventPacket.words.0 | UInt32(velocity) // Velocity = 127

1 ответ

Я только что нашел решение. Вам нужно добавить канал к шестнадцатеричному значению Note On/Note Off:

      var midiEventPacket = MIDIEventPacket ()
midiEventPacket.timeStamp = 0
midiEventPacket.wordCount = 1
midiEventPacket.words.0 = (isNoteOff ? 0x20900000 : 0x20800000) + (UInt32(channel - 1) << 16) // -1 because midi channel range is 1..16
midiEventPacket.words.0 = midiEventPacket.words.0 | ((note) << 8) // Note  = 60
midiEventPacket.words.0 = midiEventPacket.words.0 | UInt32(velocity) // Velocity = 127
Другие вопросы по тегам