MIDI 连续旋钮只有 128 档,怎样比较 7 位 CC 与 14 位 Pitch Bend 映射
普通Control Change每个数据值只有七位,而Pitch Bend由两个七位数据字节组成十四位值。把两者都归一化到零到一,可以定量比较步进;但不能把十四位支持推断为所有控制器、所有CC或所有灯具都具备。消息类型与接收约定必须一起确认。
先固定输入与适用条件
本例把五个归一化位置映射到CC与Pitch Bend,约定四舍五入到最近整数,并把Pitch Bend中心8192单独标出。这是虚拟连续参数模型,不把弯音轮直接映射到真实机械运动,也不讨论厂家专有高精度CC配对。发送数据字节顺序应保留原始hex。
本篇的OSC内容限定1.0规范,MIDI内容限定1.0字节消息;未涉及MIDI 2.0的UMP编码。桥接动作属于接收应用约定,不能从协议格式推断产品已经支持。
按字段与边界执行
-
写出输入值域、输出消息类型及舍入规则。输入小于零或大于一时先拒绝,不能静默回绕成另一个有效值。
-
七位CC计算位置乘127后取最近整数;十四位Pitch Bend计算位置乘16383后取最近整数。中点的舍入结果与两个端点都应作为检查点。
-
Pitch Bend先写低七位,再写高七位,组合时用高位左移七位加低位。不要按常见十六位大端或小端规则直接打包两个八位字节。
-
把离散映射结果交给接收应用确认,包括是否保留中心语义、参数单位及可用分辨率。经过只有七位输入的上游,换成十四位输出也不会凭空增加测量信息。
用具体样例核对结果
位置0、0.25、0.5、0.75、1对应CC值0、32、64、95、127;Pitch Bend为0、4096、8192、12287、16383。中心8192的线上两个数据字节是00 40,最大值是7F 7F。附件脚本逐行编码并反解,断言所有数据字节都不超过127。
通过条件是端点一致、映射单调、反解值与编码值相同、中心含义已被应用接受。CC不是天然的百分数,Pitch Bend也不是天然的屏幕坐标;单位由桥接契约定义。若设备输出只在128档变化,应先查原始输入和设备能力,不要单凭接收界面显示更多小数就宣称控制精度提升。
下载与复现
analyze.py、input.json、result.json。
下载输入和结果后可以更改合成位置,比较量化误差。真实控制时仍需保留原始控制器数据及目标接收能力,不用该离线映射表代替实际动作或视觉平滑验收。
把输入与脚本保存到同一个本地目录后执行 python analyze.py,脚本只读取输入、计算并重写同目录的结果文件。先保留原始附件副本,再将自己的脱敏输入另存为新版本,记录输入摘要与执行日期;不要把合成字段覆盖成看似真实的现场日志。
已用 Python 3.12.4 实际运行附件算法并检查断言。结果来自同目录合成输入;没有接入真实NDI源、控制器、灯具、接收卡或LED屏,不能据此填写现场验收通过。
对接下一步与一级来源
基础背景可看MIDI 控制协议在展厅的应用速查。相关流程收在展厅中控专题;需要项目对接时,带上本文输入及结果向SoftControl核对实际能力。
一级来源核对日期:2026-10-24。原始协议规则、本文原创运算和目标系统行为应分别留证;附件计算正确,不等于设备已经按该参数工作。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。