МИКМИДИ: запись событий на дорожке выдает предупреждение - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь написать программу для сдвига ключа миди-файла. По сути, мне просто нужно сдвинуть каждое событие заметки на определенную сумму и прожить остаток без изменений. Мне было легко использовать 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-файл воспроизводится, как и ожидалось), просто для выполнения в режиме отладки требуется несколько минут из-за бесконечности последовательность предупреждающих сообщений, напечатанных на экране отладки. Спасибо!

...