Я пытаюсь написать программу для сдвига ключа миди-файла. По сути, мне просто нужно сдвинуть каждое событие заметки на определенную сумму и прожить остаток без изменений. Мне было легко использовать MIKMIDI для чтения, анализа, изменения и обратной записи потока.
К сожалению, у меня есть проблема, которую я не могу решить. У меня есть oop, в котором я выбираю события заметки и добавляю / вычитаю желаемое значение сдвига, но когда я добавляю событие в выходной трек, я получаю сообщение из библиотеки MIKMIDI:
"Warning: attempted to insert a NULL event".
Код, который я написал, выглядит следующим образом:
for event in inputTrack.events {
if event.eventType == .midiNoteMessage {
var tmpData = event.data
if (event.data[0] != 9) { // skip percussion channel
tmpData[1] = event.data[1] - shift
}
let outEvent = MIKMIDIEvent(timeStamp: event.timeStamp, midiEventType: .midiNoteMessage, data: tmpData)!
outputSeq.tracks[i].events.append(outEvent)
}
else {
outSeq.tracks[i].events.append(event)
}
}
Кстати, код работает отлично (MIDI-файл воспроизводится, как и ожидалось), просто для выполнения в режиме отладки требуется несколько минут из-за бесконечности последовательность предупреждающих сообщений, напечатанных на экране отладки. Спасибо!