跳过导航
MuziAI

AI 按伴奏演唱:为什么听起来像说唱

一次真实投诉的实测:人声晚进 16.1 s,长音占比 0.139,抒情歌为 0.216-0.428。工具如何找进唱点和调,以及旋律为什么是新的。

作者:MuziAI 团队。文中数据来自我们在开发 MuziAI 时亲自做的测量;初稿借助 AI 撰写,每个数字都已对照我们的测量记录核实。更新于 2026年10月13日。

你上传一段做好的伴奏,粘贴歌词,选「抒情」,拿回来的却更像口语化的说唱,歌词好像和音乐不搭。一位 MuziAI 用户的投诉原话正是如此:他们以为自己「听成了说唱」,音乐和歌词「各走各的」,AI「自己编了歌词」,还「一直在嚎」。在改动任何东西之前,我们先把他们的三次生成全部测了一遍。简短的答案是:人声从来没有跑调。他们听到的是晚进了四个小节、更像说话而不是唱歌的唱法,以及一段由工具从零写出的旋律。前两个问题可以部分修复,第三个不能。

唱机上旋转的黑胶唱片特写
唱机上旋转的黑胶唱片特写

投诉:三次生成,在任何修复之前先测量

一位用户在一段 276.5 秒、60 BPM 的伴奏上粘贴了 48 行歌词,这段伴奏的主唱部分从 32.5 秒开始。

生成歌词的输入方式晚进长音占比歌词覆盖率
148 行整块粘贴16.1 s0.1390.85
2用户加了段落标签0 s0.2620.891
3与第 2 次相同0 s0.2830.891

第 1 次,四十八行之间没有空行,被读成了一整段主歌:模型恰好晚进了四个小节,半说半唱地走完了全程。第 2 次和第 3 次准时开始,但含有 11 秒的「呼呼呼」,那是用户自己写进歌词的一段纯哼唱。

我们在三次生成中都检查了人声相对伴奏的调:三次都在调上。「各走各的」的感觉来自别处。伴奏只包含配乐,不包含人声旋律,所以工具会为歌词重新创作一段全新的旋律。熟悉这段歌词另一个曲调的人,听到的是熟悉的词配上陌生的曲,于是把这种错位归结为「跑调」。任何按伴奏演唱工具里的算法都修不了这一点,因为原先的旋律根本不在输入里。

长音占比:一个区分唱歌与说话的数字

为了检验「听起来像说话」这条投诉,我们做了一项指标:在有声时间里,落在保持稳定 0.6 秒或更久的音符中的比例。我们用本站完整歌曲分离出的人声做校准,每首取中间的 90 秒:

风格测得的长音占比范围
说唱0.114-0.190
R&B0.125-0.191
摇滚0.168-0.433
抒情0.216-0.428
流行0.237-0.405

第 1 次得分 0.139,完全落在说唱区间。一首长音占比低于 0.2 的「抒情歌」听起来确实像说唱,所以这条投诉是准确的描述,而不是挑剔。第 2 次和第 3 次的 0.262 和 0.283 被嚎叫声抬高了;只算有歌词的部分,会降到 0.22-0.25,处在抒情区间的下沿。

工具如何找到进唱点、调和结构

人声从哪里进

如果让模型从第 0 秒开始唱,它会在 79% 的歌里压到前奏上,这是在 57 首已知答案的歌(本站的伴奏和分离出的人声)上测得的。我们的第一条规则「在音乐变化最大处进唱」,不出所料地失败了:在另一位用户的伴奏上,它选了 16.5 秒,恰好是一段响亮的器乐 riff 开始的地方。现在的规则多了一个条件:绝不在音乐变响的地方进唱。它查看前 40 秒内的四小节边界,去掉音乐升高超过 2 dB 的位置,再取变化最大的那一处。结果:64.9% 的歌误差在 ±1 小节以内,误差中位数 0.5 小节,只有 1.8% 仍会压到前奏上。那位用户的伴奏现在恰好在 32.0 秒进唱。

可以让演唱模型只在一个时间窗口内生成,但在窗口之外,模型会把整段伴奏复制进人声轨。所以工具会在进唱点切开伴奏,在剩下的部分上演唱,把人声放回正确的秒数,再用人声分离器去掉渗进来的鼓和吉他声。

调与歌词结构

旧的调性检测只用一种方法,在 48 首已知调的歌里判对 40 首。新的检测让三种方法投票,没有多数就不给结论,因为没有提示总好过错误的提示:46/48。有一段示例伴奏以前被识别为 C# 小调,现在是 B 大调,3 票中得 3 票。

工具还会找出重复出现的歌词块来划分段落,把重复最多的块认作副歌。在 300 首已标注的歌曲上,96% 的歌能找出结构,87% 的副歌句能被正确认出,92% 的情况下不会把主歌误认作副歌。对这位用户的歌词,它准确还原了他们手工加的标签。纯哼唱的段落会变成器乐间奏。每一遍演唱都会打分(在 CPU 上约 15 秒),晚进会触发重唱,最多两次。用这位用户的原样输入重跑:晚进 1.1 s 和 0.0 s,歌词覆盖率 0.906 和 0.921。

一整遍长唱,还是每段单独唱

像说话一样的唱法更难解决。改写声音描述没有用:三种描述,各三个种子,默认为 0.203、0.150、0.200;「soft breathy」为 0.217、0.183、0.180;「slow ballad, long sustained notes, legato」为 0.189、0.201、0.174。真正起作用的是单次生成的长度:同样的伴奏、歌词和描述,一次唱完 244 秒,或者按段落每段约 100 秒分开唱:

段落单独演唱在整首一遍中
A:两段主歌 + 第一段副歌(104 s)21 遍平均 0.305(0.127-0.426)5 遍平均 0.189(0.148-0.220)
B:第三段主歌 + 两段副歌(116 s)0.247、0.402、0.2215 遍平均 0.166(0.108-0.249)

按段落演唱能把抒情歌从说唱区间拉回抒情区间。问题在于:分开生成的两段是两位不同的歌手。同一遍演唱的前后两半,声音相似度为 0.89-0.97;用同一个种子分开生成的 A 段和 B 段,只有 0.57、0.68 和 0.84。把整首那一遍反过来作为音色参考,能保持同一个声音(0.886,阈值为 0.80),却把那一遍的唱法也一并带了过来:长音占比只从 0.181 升到 0.202,而不是大约 0.30。由于每个任务要多花五分钟以上,这一步已关闭。

局限与未解的问题

  • 试过当天就撤掉的: 凡是长音占比低于 0.2 的抒情歌,都换一个种子重唱。13 遍、7 个种子下来,长音占比随机落在 0.093 到 0.217 之间,每个任务要多花约五分钟。晚进重唱保留了下来,因为晚进跟着种子走(大约每 3 遍有 1 遍)。
  • 进唱点检测在 64.9% 的歌上误差在 ±1 小节以内,所以大约三分之一的歌会偏得更多。
  • 调性检测可能报出关系调:有一段示例伴奏被识别为 F,而它的乐谱写的是 D 小调(72 BPM 的速度是准确的)。
  • 长歌里像说话一样的唱法,目前还没有上线的修复;用现成的持续演唱乐句作为音色参考,尚未测试。
  • 现有歌曲的原旋律,无法从卡拉 OK 伴奏里还原出来。

这对你生成歌曲意味着什么

  1. 段落之间留一个空行,或者用 [Verse] 和 [Chorus] 标注。整块粘贴的歌词导致了那次 16.1 秒的晚进。
  2. 除非你想听到哼唱,否则别把哼唱写进歌词:一段纯哼唱变成了 11 秒的嚎叫。
  3. 看看结果页上工具报告的 BPM 和调。BPM 明显不对,可能说明伴奏中途变速,或者以自由节奏的前奏开场。
  4. 如果你想保留你有权使用的某段录音的旋律,请用 AI翻唱,而不是按伴奏演唱。AI翻唱听的是包含歌手的录音,所以会保留旋律,只换声音。按伴奏演唱是一个写歌工具:它会给你的歌词配上一段新旋律。
  5. 如果你需要长音饱满的抒情歌,而且只用其中一段,就只把那一段的歌词交给工具:约 100 秒的演唱,长音占比明显高于 244 秒的。新歌从 MuziAI 首页 开始。

立即在 MuziAI 试用

免费,无需注册。输入一个创意,AI 自动写词并生成完整歌曲。

生成歌曲