Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SysEx不会发送byte";广告「;_Java_Windows_Macos_Cocoa_Midi - Fatal编程技术网

Java SysEx不会发送byte";广告「;

Java SysEx不会发送byte";广告「;,java,windows,macos,cocoa,midi,Java,Windows,Macos,Cocoa,Midi,好的,在两个不同的系统(Mac和PC)上用两种不同的语言(Java和Cocoa)编写的两个不同的程序(my own和QLab)进行测试,结果是相同的。所以我被难住了 实际上,我正在尝试发送以下Sysex消息: F0 43 10 3E 12 01 00 33 00 00 00 00 AD 00 00 00 AD F7 当我发送它时,我的Midi监控程序(又是两个不同的)或者说它被发送了: F0 43 10 3E 12 01 00 33 00 00 00 00 F7 Aftertouch Ch1

好的,在两个不同的系统(Mac和PC)上用两种不同的语言(Java和Cocoa)编写的两个不同的程序(my own和QLab)进行测试,结果是相同的。所以我被难住了

实际上,我正在尝试发送以下Sysex消息:

F0 43 10 3E 12 01 00 33 00 00 00 00 AD 00 00 00 AD F7
当我发送它时,我的Midi监控程序(又是两个不同的)或者说它被发送了:

F0 43 10 3E 12 01 00 33 00 00 00 00 F7
Aftertouch Ch14 C-2 0
Invalid 1 Byte
Invalid 1 Byte
然后这个被发送了:

F0 43 10 3E 12 01 00 33 00 00 00 00 F7
Aftertouch Ch14 C-2 0
Invalid 1 Byte
Invalid 1 Byte
或者另一个只是说三次后触摸,然后是来自Java的通道闭包

因此,在对Mac程序进行故障排除时,我发送了以下消息:

F0 43 10 3E 12 01 00 33 00 00 00 00 00 00 00 00 AD F7
上面说我发了这个:

F0 43 10 3E 12 01 00 33 00 00 00 00 00 00 00 00 F7
然后这个:

Invalid 1 Byte
如果它有帮助,我正在尝试发送消息kInputFader的雅马哈LS9


Sysex不喜欢AD字节吗?

好的,有一分钟忘记了这是MIDI。如果我错了,请纠正我,但除了标题之外,Sysex消息只能包含00-7F(0-127 dec)

来源:

MIDI大部分仅为7位 看看这张表:

正如它所说,SysEx消息

  • F0开始
  • 只能包含范围
    [00..7F]
  • 除了结束SysEx消息的
    F7
MIDI主要是以字节发送的7位编码。只有少数特殊字节(如消息的起始字节)设置了高位

当控制器支持的值超出
[0..127]
范围时,需要将该值拆分为多个字节

确定范围 下表有助于确定范围

                Range                         |Data|Bytes
     unsigned     |           signed          |Bits|req'd
------------------+---------------------------+----+------
 0 ..         127 |         -64 ..         63 |  7 |  1
 0 ..       16383 |       -8192 ..       8191 | 14 |  2
 0 ..     2097151 |    -1048576 ..    1048575 | 21 |  3
 0 ..   134217728 |   -67108864 ..   67108863 | 26 |  4
 0 .. 17179869184 | -8589934592 .. 8589934591 | 34 |  5
意义在于特定控制器支持的值范围,而不是实际值。例如,如果控制器支持值范围
[0..1023]
,则始终需要2个字节,即使要发送的值是
0
,并且
0
只需要一个字节

确定Java程序中的长度 如果您知道
maxValue
,可以使用以下算法确定长度:

public static int getDataLengthUnsigned(final int maxValue) {
    int ret = 1;
    while ((1 << (ret * 7)) <= maxValue) ret++;
    return ret;
}

AD代表音量控制器在音板上的特定位置。范围为0-1023。从宏看,它是一个基数128,每个数字编码为两个十六进制数字。现在有道理了。