You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效获取匹配位标志的MIDI SysEx数据条目列表?

高效筛选匹配指定位标志的条目方案

需求概述

寻找高效方法,从数据中筛选匹配指定位标志的条目。

数据结构抽象

  • 1字节 group code(组码)
  • 4字节(32位)flags(标志)
  • 标志描述名称字符串
  • 标志唯一ID整数

每组最多32个条目,最多128组(组码首位始终为0),理论共4096个可能条目,实际约150条分布在5组。数据可存储于SQLite数据库,也可转为字典列表等格式,以检索效率优先。

需处理传入的包含组码和32位标志的十六进制字符串,返回所有置位标志对应的名称与ID。

具体场景示例(MIDI SysEx数据处理)

需将乐器发来的MIDI SysEx命令与存储的标志描述数据匹配,生成命令中置位标志的条目列表。

示例数据

instruments = [{"id": 1, "group": 0x00, "flag": 0x00200000, "name": "Bass"},
               {"id": 2, "group": 0x00, "flag": 0x00000800, "name": "Trumpet"},
               {"id": 3, "group": 0x10, "flag": 0x00004000, "name": "Violin"},
               {"id": 4, "group": 0x18, "flag": 0x00010000, "name": "Chimes"},
               {"id": 5, "group": 0x18, "flag": 0x00000200, "name": "Flute"},
               {"id": 6, "group": 0x18, "flag": 0x00000800, "name": "Wooden Flute"},
               {"id": 7, "group": 0x10, "flag": 0x00000200, "name": "Horn"}]

待匹配传入数据

midiData1 = 0x1000400200
midiData2 = 0x1800000A0

其中midiData1是组0x10中标志0x00004000和0x00000200的或运算结果,midiData2是组0x18中标志0x00000200和0x00000800的或运算结果。

预期输出

result1 = [{"id": 3, "group": 0x10, "flag": 0x00004000, "name": "Violin"},{"id": 7, "group": 0x10, "flag": 0x00000200, "name": "Horn"}]
result2 = [{"id": 5, "group": 0x18, "flag": 0x00000200, "name": "Flute"}, {"id": 6, "group": 0x18, "flag": 0x00000800, "name": "Wooden Flute"}]

即解析或运算后的数据,返回所有置位标志对应的条目。

寻求最优方案

需要最优的存储与检索方案,包括SQLite内置位掩码查询、Python本地检索等,以实现高效匹配。

内容的提问来源于stack exchange,提问作者Ben Franske

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:45:55