Java 如何从卷级别创建MIDI Sysex主卷消息?

Java 如何从卷级别创建MIDI Sysex主卷消息?,java,midi,javax.sound.midi,Java,Midi,Javax.sound.midi,如果卷级别表示为介于0和1之间的浮点值,如何创建Universal SysEx Master volume消息的数据字节 这是Sysex消息构造函数,具有给定的Sysex消息状态字节(0xF0)和数据字节: new SysexMessage(0xF0, data, data.length) 根据MIDI规范,主卷消息中有2个状态字节和6个数据字节(无状态字节),最后两个数据字节指定卷级别: 0xF0 SysEx(状态) 0x7F通用实时 0x7F忽略通道 0x04子ID——设备控制 0x01子

如果卷级别表示为介于0和1之间的浮点值,如何创建Universal SysEx Master volume消息的数据字节

这是Sysex消息构造函数,具有给定的Sysex消息状态字节(0xF0)和数据字节:

new SysexMessage(0xF0, data, data.length)
根据MIDI规范,主卷消息中有2个状态字节和6个数据字节(无状态字节),最后两个数据字节指定卷级别:

0xF0 SysEx(状态)
0x7F通用实时
0x7F忽略通道
0x04子ID——设备控制
0x01子ID2——主卷
14位卷的0xLL位0到6
14位卷的0xMM位7到13
0xF7 SysEx结束(状态)

因此,如果我没有错的话,数据字节应该如下所示:

data = new byte[] { 0x7F, 0x7F, 0x04, 0x01, LL, MM }

我的问题是如何从0到1之间的浮点卷级别获取LL和MM字节?

对于这样的无符号类型,smalles 14位值为零,最大值为214-1=16383。 因此,要将1.0转换为16383,只需乘以:

int value_14bits = (int)(float_value * 16383);
如果你是偏执狂,请检查范围:

value_14bits = Math.max(Math.min(value_14bits, 16383), 0);
然后提取上下七位字段:

data = new byte[] {
            0x7F, 0x7F, 0x04, 0x01,
            value_14bits & 0x7f,
            value_14bits >> 7 };

对于这样的无符号类型,smalles 14位值为零,最大值为214-1=16383。 因此,要将1.0转换为16383,只需乘以:

int value_14bits = (int)(float_value * 16383);
如果你是偏执狂,请检查范围:

value_14bits = Math.max(Math.min(value_14bits, 16383), 0);
然后提取上下七位字段:

data = new byte[] {
            0x7F, 0x7F, 0x04, 0x01,
            value_14bits & 0x7f,
            value_14bits >> 7 };

对于这样的无符号类型,smalles 14位值为零,最大值为214-1=16383。 因此,要将1.0转换为16383,只需乘以:

int value_14bits = (int)(float_value * 16383);
如果你是偏执狂,请检查范围:

value_14bits = Math.max(Math.min(value_14bits, 16383), 0);
然后提取上下七位字段:

data = new byte[] {
            0x7F, 0x7F, 0x04, 0x01,
            value_14bits & 0x7f,
            value_14bits >> 7 };

对于这样的无符号类型,smalles 14位值为零,最大值为214-1=16383。 因此,要将1.0转换为16383,只需乘以:

int value_14bits = (int)(float_value * 16383);
如果你是偏执狂,请检查范围:

value_14bits = Math.max(Math.min(value_14bits, 16383), 0);
然后提取上下七位字段:

data = new byte[] {
            0x7F, 0x7F, 0x04, 0x01,
            value_14bits & 0x7f,
            value_14bits >> 7 };