All skills
jtydhr88 avatar

/lw-tone-check

@91bb089

The tone-melody conflict detector and how to read it (倒字检测器). The one objective, computable criterion this library has - Mandarin dao-zi, where a syllable is heard as a different word because the melody enters it against its tone contour. Covers the correct model (incoming interval versus the syllable's own contour, not previous-end versus next-start), how to run it, how to read a risk score, the three boundaries that make it a risk indicator rather than a verdict, and the five ways to fix a flagged syllable. Use when fitting Mandarin words to a melody, when a sung line is misheard as different words, when checking a draft before delivery, or when a melody must be adjusted to fit words already written. 倒字、依字行腔、字调、声调、检测器、唱出来听成了别的字、唱成别的字、字唱错了、tone_check。

Use this Skill: https://skilld.dev/gh/jtydhr88/lyric-writing-skills/lw-tone-check

This session only. Nothing lands on disk.

SKILL.md

≈217 tokens always: the name and description. ≈2.4k when used: this file.

倒字检测器(Tone Check)

这是本库唯一一个不需要任何教材就能建、且立刻产生客观判据的东西。 声调表和旋律走向都是确定的数据。 它在本库的地位,相当于音频线里的 tempo——而 tempo 恰好是库一唯一校准成功的那一项。

按任务读哪几节

任务 读
倒字是什么 §1
怎么跑 §3
结果怎么读 §4
这个数能不能当判决 ★ §5 三条边界(必读)
标出风险了怎么改 ★ §6 五种改法
粤语 §7(★ 协音不是这个工具)

边界

不归这里 归哪
十三辙、平仄、中文韵表 lw-mandarin
粤语协音 ★ lw-cantonese(约束更严、且写作顺序反转)
押韵 lw-rhyme
字怎么安到音上(每句几个字) lw-workflow §2 的 S2 + lw-structure
旋律本身怎么改 库一 mc-melody
那些字该怎么唱(气声/力度/修音) 库一 mc-vocal-direction

1. 倒字是什么

唱出来听成别的字。

普通话每个字有调型。旋律在字与字之间的走向如果和调的高低关系相反, 听感上字就变了——"深爱"(shēn ài) 唱成"神爱"(shén ài)。

★ 戏曲里这叫「依字行腔」,是同一个问题的老版本—— 编剧库的戏曲层有现成的表,可以直接跨库引用。


2. ★ 正确的模型(第一版错在哪)

判的是「进入某个字的音程」vs「那个字自身的调型」, 不是「前字终点 vs 后字起点」的相对高度。

contour  = TONE_PITCH[t][1] - TONE_PITCH[t][0]   # 本字调型:+升 −降 0平
incoming = notes[i] - notes[i - 1]               # 进入本字的音程(半音)

2.1 为什么第一版是错的

第一版按相对高度判,结果漏掉了教科书上最经典的例子: "深爱→神爱" 算出来的期望是 +0,永远不会被标记。

原因是流行歌一字一音是常态,字内没有调型可言—— 这时候听者是从进入这个字的旋律走向去推断它的调的。 上行进入"深"(阴平,平调),就听成了阳平 = 神。

★ 这个教训值得记住: 当一个检测器测不出教科书上的标准案例时,先怀疑模型,不要怀疑案例。

2.2 五个调与它们的约束

赵元任五度标调,取每个调的起点与终点:

调 五度值 调型 ★ 约束
阴平 1 55 平 进入它不该有大跳(大跳会把平调听出走向)
阳平 2 35 升 ★ 不该下行进入
上声 3 21 降 不该上行进入(连读半上;全上 214 只在单念和句末)
去声 4 51 降 ★ 不该上行进入
轻声 5 ~3 平 同阴平,但权重减半(本来就轻、短、易被吞)

★★ 这正是老话说的"阳平字别配下行、去声字别配上行"。


2.3 ★ 没有检测器时怎么手判

只查三类位置(它们是倒字最常发生的地方,约占全部字的 1/5):每段最高音的字、每句第一个字、大跳(≥5 半音)的落点字。 对每个字:查它的调(§2.2 表)→ 看进入它的旋律方向 → 阳平被下行进入、去声被上行进入、平调被 ≥3 半音大跳进入 → 标风险 → 念一遍。

3. 怎么判

把词和旋律并排写成两行(字 / 音高),按 §2.3 的三类位置逐字查,念一遍确认。

★ 查出风险之后先分从严从宽。薛範的八条里三条从严(黄志华《文字声律与粤语歌创作》附录 p0107):

  1. 与口语结合紧、语感强的作品从严:流行歌曲、说唱一类。这条几乎覆盖本库全部产出
  2. 主题句、高潮句、关键词、结尾句从严。这正是 §2.3 三类位置之外要加查的一档:位置不高、不跳,但它是 hook
  3. 前后紧挨的两个音音程大、呈上下行跳进的从严。与 §2.3 的"大跳落点字"同一条

落在这三条里的风险必改;其余五条从宽的情形在 lw-mandarin §3.6,落在那里的可以放过并记理由。 仓库内部有同模型的检测器脚本,不随包发布,用户不需要。


4. 结果怎么读

我深爱你   —— ★ 教科书例:上行大跳进入平调「深」→ 听成「神」
  倒字率 33%  (1/3 对相邻字有风险)
  字      调型    进入    风险   说明
  深       平    +7  0.47 ← 阴平是平调,7 度大跳会带出走向
  爱       降    -2  0.00
  你       降    -1  0.00
列 含义
调型 本字自己的调要求什么走向(升/降/平)
进入 实际的旋律走向(半音)
风险 0–1。跳得越大风险越高(`min(
倒字率 有风险的相邻字对 / 总对数

三条计分规则:

  • 升调被下行进入、降调被上行进入 → 风险 = 量级
  • 平调被 ≥3 半音的跳进入 → 风险 = 量级 × 0.8
  • 轻声 → 风险再 × 0.5

5. ★★ 三条边界:别把这个检测器当判官

这一节是本 skill 最重要的部分。

5.1 一字多音(拖腔)没处理

本工具假设一字一音。 一个字拖多个音时,字内轮廓本身就能承载调型,规则不同—— 多音的情况需要逐音符对齐信息,本方法给不出。

★ 后果:慢歌、抒情曲、戏曲风的段落,这个工具会误报。

5.2 不看语境消歧

"深爱"在"我深爱着你"里几乎不会听错,因为上下文锁死了词。 本工具只看声学层面的风险,不懂词。

★ 后果:常用搭配、成语、固定词组会被误报。

5.3 ★ 倒字风险 ≠ 错

长音、重音、清晰咬字都能救。 输出的是「风险」不是「判决」。

⚠ LYR-LINT 第 7 条只给出数值,不给"过/不过"。

→ 哪些风险可以放过,五条判据在 lw-mandarin §3.6;哪些必改,三条在本文 §3。

5.4 综合起来怎么用

★ 把它当成一支荧光笔,不是一个判官。 它告诉你"这几个字值得念一遍听听",念了没问题就放过。

自检动作:

  1. 跑检测器 → 得到高风险字的清单
  2. ★ 把那几句唱出来(或念出来)
  3. 真的听成别的字 → 改(§6);听不出来 → 在 checks.self_audit 里记一句"已人工确认"

6. 标出风险了,五种改法

按代价从低到高:

# 改法 代价
1 换字 最低。同义词里找一个调型顺的
2 调整词序 低。把那个字挪到旋律走向合适的位置
3 给那个字加时值(拖长) 中。★ 拖长之后字内可以自己走出调型,风险消失(见 §5.1)
4 改旋律的那一跳 中高。★ 先曲后词时这是最后手段;先词后曲时它是正常选项
5 接受它 ——但要在 checks.self_audit 里写明理由(如"这里刻意的错听是个双关")

★ 第 1 条永远先试。 中文同义词极多,换个字通常就解决了, 而改旋律会牵动库一的一大堆东西。

★★ 第 5 条不是偷懒:真实的流行歌里有大量"技术上倒字但听起来没问题"的地方 (见 §5.2、§5.3)。关键是你知道它在那儿,而不是没检查。


7. 粤语:不是这个工具

★ 粤语的协音是另一回事,严得多。

普通话倒字 粤语协音
声调数 4(+轻声) 9
约束强度 风险(可救) ★ 硬约束(违了就是错字)
写作顺序 词曲都可以先 ★ 旋律先定,每个位置只剩几个字可选
判法 §2.3 手判 见 lw-cantonese

→ lw-cantonese。不要用普通话那套顶替。


8. 与 LYR-SPEC 的字段对应

字段 本 skill
prosody.sections[].peak_syllable ★ 最高音落在哪个字——那个字的倒字风险要单独看
prosody.sections[].melody_contour 检测器的输入
checks.computed.daozi_rate 检测器的输出
checks.self_audit ★ §5.4 第 3 步、§6 第 5 条的人工确认写这里

9. 用完必过

  • 跑过检测器,拿到了数值
  • ★ 高风险的几句实际唱/念过一遍,不是只看数字
  • 人工确认没问题的,在 self_audit 里记了一句
  • 要改的,先试换字,最后才动旋律
  • 一字多音的段落,知道检测器在那儿会误报
  • 常用搭配被标红时,没有为了数字好看去改一个本来没问题的词
  • ★ 粤语没有用这个工具顶替

附:来源

  • 仓库内部有同模型的检测器脚本(不随插件发布)
  • 一个可调的标定参数:semitone_per_degree = 2.0 (把五度调值折算成半音的系数,"调值差 1 度 ≈ 2 个半音的听感期望")
  • ⚠ 本方法不处理一字多音;粤语协音(§7)没有对应判法
  • 跨库引用:编剧库戏曲层的依字行腔与十三辙表——同一个问题的老版本

Source: SKILL.md on GitHub

No alerts13d3 checks · Risk SAFE
  • Gen Agent Trust Hub13d

    The skill provides instructions and a logic model for checking Mandarin tone conflicts (dao-zi) in songwriting. It is purely informational and contains no code, network operations, or security vulnerabilities.

  • Socket13d

    No alerts

  • Snyk13d

    Risk: LOW · No issues

Signed by skilld at 91bb089. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub last week.

Activeupdated 2 weeks ago

README badge

README badge for jtydhr88/lyric-writing-skills/lw-tone-check