请求协助解析Behringer X32混音器的4路返回仪表浮点数据
解析Behringer X32混音器4路仪表值(32位小端浮点数)
需求说明
- 目标:获取Behringer X32混音器的4路仪表值,分别为post gain/trim、gate、dyn gain reduction、post-fade,这些值为32位小端编码的浮点数
- 请求方式:发送OSC命令
/meters/6 <channel_id>获取指定通道的仪表数据
OSC手册相关摘录
X32/M32服务器返回的
/meters数据是OSC二进制块(OSC-blob),即一组任意二进制数据。
因此,其格式与X32/M32通常返回的数据格式不同,这主要是出于效率/性能考虑。返回的二进制块格式如下:<仪表ID> ,b~~<int1><int2><原生浮点数>…<原生浮点数> <仪表ID>: 参见下方可选值(以空字节填充) ,b~~: 表示二进制块格式,以空字节填充 <int1>: 二进制块的字节长度,32位大端编码 <int2>: 原生浮点数的数量,32位小端编码 <原生浮点数>: 数据或仪表值,32位浮点数,小端编码
/meters/6 <channel_id>
返回通道条仪表值(post gain/trim、gate、dyn gain reduction、post-fade):
支持4个通道条仪表,通道ID范围为0…71
返回包含4个浮点值的单个OSC二进制块
已完成的预处理步骤
- 切片处理:在Node-RED中用以下代码截取有效数据(去掉前4个字节)
const bytes = msg.payload; msg.payload = bytes.slice(4); return msg;
- 原始返回示例:
4,0,0,0,230,123,133,57,128,2,165,58,32,250,127,63,111,187,213,52 - 切片后结果:
230,123,133,57,128,2,165,58,32,250,127,63,111,187,213,52
- 拆分数组:用以下代码将切片后的字节拆分为数组
const bytes = msg.payload; const chunkSize = msg.chunkSize || 16; // 默认块大小 const chunks = []; for (let i = 0; i < bytes.length; i += chunkSize) { const chunk = bytes.slice(i, i + chunkSize); chunks.push(chunk); } msg.payload = chunks; return msg;
- 拆分后数组示例:
[{"0":230,"1":123,"2":133,"3":57,"4":128,"5":2,"6":165,"7":58,"8":32,"9":250,"10":127,"11":63,"12":111,"13":187,"14":213,"15":52}]
解决方案:解析为4路仪表值
在Node-RED中添加函数节点,使用以下代码将处理后的字节数组解析为目标浮点数:
const bytes = msg.payload[0]; // 取拆分后的第一个块(对应4个浮点数的16字节) const meters = []; // 每4个字节对应一个32位小端浮点数,循环解析4次 for (let i = 0; i < 16; i += 4) { // 创建DataView处理小端编码 const view = new DataView(new ArrayBuffer(4)); // 按小端顺序写入字节 view.setUint8(0, bytes[i]); view.setUint8(1, bytes[i+1]); view.setUint8(2, bytes[i+2]); view.setUint8(3, bytes[i+3]); // 读取小端浮点数并加入结果数组 meters.push(view.getFloat32(0, true)); } // 将结果映射为对应的仪表名称 msg.payload = { "post_gain_trim": meters[0], "gate": meters[1], "dyn_gain_reduction": meters[2], "post_fade": meters[3] }; return msg;
代码说明
- 使用
DataView处理二进制数据,通过getFloat32的第二个参数true指定小端编码 - 每4字节解析一个浮点数,共解析4次,对应4路仪表值
- 最终结果以键值对形式返回,方便后续节点调用
内容的提问来源于stack exchange,提问作者Ossama
相关产品推荐
相关产品推荐

