0

我正在尝试编写一个程序来移动midi文件的键。基本上,我只需要将每个音符事件移动给定的数量,其余部分保持不变。我发现使用 MIKMIDI 读取、解析、修改和写回流很容易。

不幸的是,我有一个无法解决的问题。我有一个循环,我在其中选择音符事件并添加/减去所需的移位值,但是当我在输出轨道中附加事件时,我从 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 文件按预期播放),只是由于调试屏幕上打印了无限序列的警告消息,在调试模式下执行需要几分钟。谢谢!

4

0 回答 0