我有两个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消息的经验?
发布于 2019-02-08 06:08:49
我正在经历同样的问题,几乎要发疯了。事实证明,来自不同供应商的各种MIDI数据规范中的Program Change值都是以1为基础的。不是0。或者可能是AudioKit的实现是错误的?
因此,您应该使用值8而不是programChange值9。下面是我的代码,用于将通道0上的当前乐器更改为雅马哈·克拉维诺瓦键盘上的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应该如何工作的理解,但如果你仍然不能用你的罗兰键盘工作,那么值得一试。
https://stackoverflow.com/questions/53273037
复制相似问题