我想发送一个这样的MIDI SysEx消息到我的罗兰JX8P合成器。
F0 41 36 06 21 20 01 22 1B F7
该消息将改变合成器的VCF截止频率。1B是一个可变的十六进制值,范围从00到7F,相对于截止频率。
在MIDI库中,我找到了发送SysEx消息的文档。
sendSysEx (int length, const byte *const array, bool ArrayContainsBoundaries=false)根据我可以告诉bool的信息,ArrayContainsBoundaries指定您是否希望该库包含F0和F7消息开始/停止标记(我不希望,所以我将其设置为true)。Int length表示以字节为单位的消息长度(我的消息是10字节,所以这将是10字节)。
我搞不懂的是数组。我可以像这样指定它们,而不是将所有的值都存储在数组中吗?
MIDI.sendSysEx(10,0xF0 0x41 0x36 0x06 0x21 0x20 0x01 0x22 0x1B 0xF7,true);另外,在这里添加前缀0x是指定字节的正确方式吗?
发布于 2013-03-30 23:31:11
基本答案是“不”:
您的sendSysEx()函数正在寻找两个或三个参数:
尝试像这样传递数组数据:
MIDI.sendSysEx(10,0xF0 0x41 0x36 0x06 0x21 0x20 0x01 0x22 0x1B 0xF7,true);您正在做以下两件事之一:
no matching function for call to错误。因此,调用函数的一种方法如下所示:
byte data[] = { 0xF0, 0x41, 0x36, 0x06, 0x21, 0x20, 0x01, 0x22, 0x1B, 0xF7 };
sendSysEx(10, data, true);在C++11中,你可以通过初始化函数调用中的列表来接近你想要的东西,比如sendSysEx(10,{0xF0, 0x41, 0x36, 0x06, 0x21, 0x20, 0x01, 0x22, 0x1B, 0xF7}, true);,然而,你会发现这可能会遇到另一个问题(取决于你的工具链):编译器可能会假设你的初始化器列表是int的列表,而不是byte的列表,这也会导致编译器错误,除非你特别告诉你的编译器假设整数字面量是8位。
https://stackoverflow.com/questions/15716446
复制相似问题