我想将这样的MIDI SysEx消息发送给我的Roland JX8P Synth。
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是指定字节的正确方法吗?
答案 0 :(得分:3)
基本答案是“不”:
您的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
s,而不是byte
的列表,这也会导致编译器错误,除非您明确告诉编译器假设整数文字是8位。