Repository navigation
qa reads the score: a note's attack is not a click, the score's rest is not a dropout, each finding carries evidence - #115
Merged
Merged
Conversation
…is not a dropout, each finding carries evidence The scan reported designed music as faults (note onsets as clicks, the gap between two plucked notes and a sparse passage as dropouts) with little to judge by. With the beat map's note map (music.py now also writes "unmapped", what the map leaves out), a click on a note's onset is listed as that note's attack, and a dropout where no note starts and the next one brings the sound back is listed as the score's rest; both stay visible and are not counted. Digital silence still fails. Every open finding gets its value against the threshold, bar:beat, what the score does there and, with --stems, which stem carries it; --clips DIR writes +-2 s excerpts. Advice only: 16+ identical bars of the note map's rhythm, and one SFX class spread 15 dB or more against the local bed in the mix report.
# Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
ZLHad
marked this pull request as ready for review
October 18, 2026 17:05
ZLHad
enabled auto-merge (squash)
October 18, 2026 17:05
…ame-timeout 3) GitHub's macOS runner took over 1 s on an ordinary frame, so --frame-timeout 1 stopped the render at its second frame and kept 1 chunk, not 5.
…on the whole suite)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why · 改了什么、为什么
bin/vh qa的扫描把写好的音乐报成故障:音符的音头报成 click,两个拨弦音之间的空、一段有意放稀的段落报成掉音;报告给的依据又少。作者听不见,结果要么为了过检查去改音乐(加一条持续的底音),要么分不清哪处是真故障。这一版把检测器做准,不加规则,也不靠声明放过。"note_map": true):--click-grace以内,是这个音的音头:列在 "the score has a note here" 下(最严重的 5 处),不算 click。音符表只收了一部分声部也成立:一个起点就是一个起点。bin/vh music的节拍表现在多一个unmapped(没写note_map的声部,用了layers时加"layers";纹理声部不出音符,不列)。有东西没收进来,或者是没有这个字段的旧节拍表,掉音照报,后面写明原因。只在已经写notes的节拍表里加;其余节拍表一个字节不变。--stems时写是哪条 stem(一段:各条 stem 在这段里比前 0.5 s 低多少;一个 click:哪条 stem 在那里也有一样大的跳变,都没有就是 "made in the mix")。--clips DIR把每处前后 2 s 的混音写成 WAV,按时间命名(0012.340s-dropout.wav,最多 40 段),给人听。[5]里同一类音效相对本地音乐床(re-bed)相差 15 dB 以上(一个写死的 dB 增益放在起伏的音乐床上:安静处太响、热闹处听不见)。完整运行最后一行写 "(advice above)"。不改混音。bin/vh music的节拍表没有音符表时多一行,说怎么加。tools/audio/README.md(unmapped、扫描的谱子规则、证据、clips、建议)、qa 的帮助、music.py的帮助(原来写"qa 不读 notes")、playbook/04一行、playbook/02表里两处小句(不改就和行为对不上)、CHANGELOG。English summary. With the beat map's note map, the scan lists a click on a note's onset as that note's attack and a dropout where no note starts and the next one brings the sound back as the score's rest, both kept visible and not counted; the rest rule needs the map to be the whole score, which
bin/vh musicnow records as"unmapped". Digital silence still fails. Every open finding carries its value against the threshold, bar:beat, what the score does there and, with--stems, which stem carries it;--clips DIRwrites ±2 s excerpts. Two advice lines, never failures: 16+ identical bars of the note map's rhythm, and one SFX class spread 15 dB+ against the local bed. Without a note map, counts and exit codes are unchanged.Review focus · 请重点看
unmapped(它们不出音符):纹理自己在两音之间掉下去,会被当成谱子的空。这一点写进了已知局限;要更严,可以把纹理也列进unmapped,代价是带纹理的谱子永远用不上这条。onset_ms留了余地);click 用现有的--click-grace。music.py的节拍表加了unmapped:只在已经有notes时写。How it was verified · 怎么验证的
tools/ci.sh --committed(VH_BASH=/bin/bash,shellcheck、pyflakes 按 CONTRIBUTING 的办法真的跑了):全部通过(合并 main 以后的提交);跳过 1 项(本机没装 HyperFrames 运行时)music +0.0 dB),--clips写出0003.100s-dropout.wav;谱子休止里的数字静音照样失败;20 个一样的小节给建议、退出 0;bin/vh music的unmapped列出没写note_map的声部,不列纹理。bin/vh music,humanize 0.5)报了 4 处掉音,全是两音之间的空;读音符表一处不算,去掉音符表四处照报。同一首经bin/vh mix … profile=promo stems=混好、跑完整的bin/vh qa … --stems:音乐 stem 的排除先起作用(4 处),剩下的 5 个 click 都写了 "in the music stem" 和最近的音。bin/vh qa的各模式(完整、scan、mix)真跑过;bed_advice用构造的报告查过(同类 34 dB 的跨度出一行)。tools/readpath.py,和分支起点比):quick 不变,standard +25,有声音的路径 +116。Found, not fixed · 看到但没改
saw_pluck声部在音符松键后约 0.1 s 处有 click(4.825、9.836、32.817 s,都在音乐 stem 里,比局部电平高 18–22 倍),像是它的余音被截断。没有单独验证。Checklist · 自查
tools/ci.sh --committedpasses · 通过CHANGELOG.md→ Unreleased · 已记进 CHANGELOGCLAUDE.md→ ranbin/vh sync-agents· 没改 CLAUDE.md