繁体   English   中英

如何从音量级别创建MIDI Sysex主音量消息?

[英]How to create MIDI Sysex Master Volume message from volume level?

如果将音量级别表示为介于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 Sub-ID2-主音量
0xLL 14位卷的位0到6
0xMM 14位卷的第7至13位
0xF7 SysEx结束(状态)

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

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

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

对于这样的无符号类型,smalles 14位值是0,最大值是2 14 -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 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM