发送带有程序号(补丁号)的程序更改

时间:2018-11-13 02:45:18

标签: audiokit

我有两个Roland midi设备,当我尝试发送银行和程序更改时它们的行为相同。它始终将其设置为库的第一个补丁。它不会更改我在银行中选择的补丁。但是,Pro Logic可以切换到不同的库。

以下示例使设备更改为存储区,但设备上的程序(补丁程序)默认为该存储区中的第一个而不是第9个。

var event = AKMIDIEvent(controllerChange: 0, value: 89, channel: 0)
midiOut.sendEvent(event)
event = AKMIDIEvent(controllerChange: 32, value: 64, channel: 0)
midiOut.sendEvent(event)
event = AKMIDIEvent(programChange: 9, channel: 0)
midiOut.sendEvent(event)

任何人都有发送此MIDI消息的经验吗?

1 个答案:

答案 0 :(得分:0)

我正在经历同样的问题,并且快要疯了。事实证明,来自不同供应商的各种MIDI数据规范中的Program Change值均基于1。不是0。也许是AudioKit实现错了?

因此,应该使用值8而不是programChange值9。这是我的代码,用于将通道0上的当前乐器更改为Yamaha Clavinova键盘上的Bösendorfer三角钢琴,其中MIDI中的programChange值数据规范指定为1。

midiOut.sendControllerMessage(0, value: 108) // MSB sound bank selection
midiOut.sendControllerMessage(32, value: 0) // LSB sound bank selection
midiOut.sendEvent(AKMIDIEvent(programChange: 0, channel: 0)) // Initiate program change based on MSB and LSB selections

在阅读有关MIDI工作原理的各种文档时,我还看到一些论坛帖子,描述了在选择MSB库之前先选择LSB库的键盘。但是,这不是我对MIDI应该如何工作的理解,但是如果您仍然无法使其与Roland键盘一起工作,则值得尝试。