博客

24/24 / 已知调性的基础测试

新功能:改进大调与小调混音的调性检测

用户发现两首歌曲的调性错误后,Mix Analyzer改进了检测。现在会比较大调与小调模板,并为靠前的候选结果评分。

新功能:改进大调与小调混音的调性检测 - Mix Analyzer博客
能区分C大调与A小调时,调性检测才更有用。结果仍是音乐层面的估计,但现在基于更充分的和声证据。

更改内容

本次更新已发布的内容

  • 和声分析现在会比较大调与小调的调性模板。
  • 分析结果现在可以直接返回小调。
  • 排名靠前的候选结果现在包含调式、分数和置信度,便于排查相近结果。
  • 基准测试脚本可以在未来发布调性检测改动前,测试已知调性的文件。

反馈足够具体,可以着手修复

一位用户喜欢分析器,但指出了实际问题:两首歌曲返回了错误的调性。这种反馈值得采取行动。如果和声部分判断错了调性,其余音乐建议就建立在不可靠的基础上。

旧方法过于粗略。它把chroma中最强的音高类别当作调性主音。这可能适用于简单素材,却忽略了明显的音乐差异:C大调与A小调使用相同的音高类别,但不会让人感觉是同一个调。

分析器有哪些改变

当前和声分析器现在会将chroma结果与大调、小调模板比较。它仍使用音轨的音频证据,但提出了更合适的问题:哪种调性和调式最能解释完整的音高类别模式?

  • 大调与小调模板分别评分。
  • 主音和五度音的支持有助于区分相近候选。
  • 结果现在可以返回如下小调: Am.
  • 排名靠前的候选包含调性、调式、分数和置信度,而不是简单的字符串列表。

这并不让调性检测成为完美的音乐学家。歌曲可能转调、使用借用和弦、保持某种调式或避免明确主音。这次改动使默认估计不再那么简单化,也更容易排查。

发布前如何测试

我们针对调性检测器和和声分析输出增加了专门的单元测试。还加入了用于已知调性音频文件的小型基准测试脚本,今后的调整可以通过文件夹或CSV检查,而不必逐个手动上传。

首次基础测试中,我们生成了覆盖全部12个主音的清晰大调与小调进行。内部检测器在24个受控案例中的24个都返回了预期调性。这证明新逻辑能处理基本的大调与小调区分,不代表所有真实歌曲都已解决。

为什么不立即全面改用大型外部引擎?

我们考察了开源调性检测工具。Essentia有较强的调性提取器,已经接入为受控测试的可选后端。但生产环境许可、打包和运行成本仍需审慎考虑,因此还未加入默认Web依赖。

默认路径保持小巧且可检查。这是本次版本合适的取舍:修复明确的错误类型,保持输出可排查,并在投入运行前,用真实歌曲比较更强的引擎。

结果可以期待什么

和声部分现在应能更好地区分关系大小调。如果歌曲明显是A小调,分析器无需仅因音高类别重合就将其简化为C。

如果结果看起来仍然有误,最有用的错误报告是确切的歌曲或报告,加上预期调性。这样可以比较检测调性、靠前候选、chroma证据与音乐上的特殊情况,而不是凭记忆猜测。

常见问题

这能保证每首歌曲的调性都正确吗?

不能。它改善默认估计,尤其是大小调歧义,但真实歌曲可能改变调性或避免稳定的主音。

你们验证了报告的那两首歌曲吗?

没有。修复期间无法取得对应文件。因此我们使用已知调性的受控音频验证检测器,并增加了针对已标注真实歌曲的基准测试路径。

Mix Analyzer会使用Essentia检测调性吗?

可能。可选后端已可测试,但默认版本会保留内部检测器,直到许可、打包和真实歌曲的基准结果足以支持切换。