MIDI 音符秒段查询
根据本地 SMF 0/1 的完整速度图将 tick 转为音符秒数,按秒段、轨道和通道查询,并保存全部原始事件与音符。
- 1添加输入
- 2调整设置
- 3获取结果
工具输入和文件在当前浏览器处理,不会上传。
开始之前
找出导出的 MIDI 在指定秒段内有哪些音符。变速会影响之后所有 tick,因此先积分完整全局速度图,再应用筛选。
如何使用
- 选择原始 SMF 0/1 PPQN MIDI 文件。
- 按需输入起止秒、轨道或通道,留空保留该项全部范围。
- 查看选中音符区间与警告,再保存完整 JSON 和全部音符 CSV。
支持范围与限制
一次选择一个不超过 5 MiB 的 .mid 或 .midi;接受正 PPQN 分辨率的 SMF 0/1,最多 64 轨、50,000 个事件、25,000 个音符。单轨累计 tick 最多 4,294,967,295。拒绝类型 2、SMPTE/drop-frame 分辨率、SYX 转储、截断块、无效 running status 或缺少最终轨道结束事件。
使用全部变速事件构建全局 tick→秒图,默认每四分音符 500,000 微秒。不同轨道同一 tick 声明不同速度时整次拒绝;相同速度合并。同一轨道同一 tick 的多次变速按原始顺序采用最后一个。
秒段采用半开区间 [起始, 结束)。按键释放区间与秒段相交即选中,零时长音符按起点判断。起止秒、轨道和通道字段留空时不施加该项约束。轨道与通道从 0 开始,轨道必须存在。筛选不删除下载中的事件,也不复制音符:每个完整音符仅出现一次并带 selected 标记。
同轨道、通道、音高的重复开启事件按 FIFO 闭合;力度为 0 的开启事件视为关闭。无配对关闭事件产生警告且不生成音符;未闭合开启事件按所属轨道结束时刻闭合并警告。CC64 只保留事件,不延长时长。音色状态按轨道与通道区分;不合成音频、不渲染乐谱,也不推断实际声学尾音。
完整 JSON 与 CSV 下载累计最多 24 MiB,超限时整次拒绝。表格预览前 200 个选中音符;文本和复制显示摘要及前 20 个选中音符。下载保留全部源事件、轨道统计、变速点、音符、警告详情和筛选标记。不访问 MIDI 设备或网络服务。
操作示例
示例输入
选择 tempo.mid
示例参数
{"params":{"startSeconds":0.25,"endSeconds":1,"track":1,"channel":0}}示例输出
{
"format": 1,
"ppqn": 480,
"trackCount": 2,
"eventCount": 9,
"noteCount": 2,
"selectedNoteCount": 1,
"endSeconds": 2.5,
"tempoPointCount": 2,
"warningCount": 0,
"query": {
"from": 0.25,
"to": 1,
"track": 1,
"channel": 0
},
"preview": [
{
"track": 1,
"channel": 0,
"pitch": 60,
"velocity": 90,
"program": 7,
"startTick": 0,
"startSeconds": 0,
"endTick": 960,
"endSeconds": 1.5,
"endPolicy": "key-release",
"selected": true
}
]
}出现问题时
从生成端重新导出完整 SMF 0/1 PPQN 文件,解决同时刻冲突速度或畸形事件。使用存在的从 0 开始轨道/通道编号,结束秒应大于起始秒;清空筛选可查看全部音符。数量或完整输出预算超限时缩小输入。
常见问题
为什么 tick 乘单个速度得到的秒数不对?
每次变速都会改变后续 tick 区间的换算。查询前会先对完整速度图积分。
延音踏板会让音符一直延长到松开吗?
不会。时长表示开启到关闭事件的区间,并明确处理无法配对的事件。踏板控制事件保留在完整报告中。
CSV 只包含匹配的音符吗?
不是。CSV 中每个音符出现一次并标有 selected true/false;页面表格只显示匹配项。