本地 AI 音乐生成消除了创作的门槛。像 ACE-Step 1.5 这样的工具可以完全在 Mac 上运行,在几分钟内将文本提示词转化为完整的歌曲,无需云端积分,也无需排队上传。这种自由催生了一个新问题:数量。当生成变得廉价且即时时,你不再问自己“能不能”做一首歌,而是开始纠结硬盘里那五十个版本中,哪一个才值得保留。

我曾为此吃过苦头。在平凡的日子里,我通常需要通过 ACE-Step 1.5 进行四次尝试才能找到一个值得保留的版本。但平均值会骗人。在最近的一次创作中,为了追求单一的编曲效果,我生成了三十二个版本。听完三十二首两分钟的歌曲需要超过一个小时的批判性聆听。听到第七首时,我的耳朵已经开始对模糊的元音变得宽容;到了第十五首,我一边跟着旋律点头,一边完全忽略了漏掉的歌词。听觉疲劳并非懒惰,而是感知准确性的真实崩塌。我需要一个能在我的耳朵“介入”之前运行的过滤器。

于是,我围绕 mlx-whisper 构建了一个本地 QA(质量保证)流水线,它是 OpenAI 语音识别模型针对 Apple Silicon 优化的移植版本。思路很简单:如果我能自动转录每一个版本并将其与原始歌词进行对比,我就能得到一个客观的歌词匹配率。这个数字可以将那三十二个版本缩减到少数几个易于处理的候选版本。

工作流程原理

该工作流分为四个阶段,每一阶段对我来说都是不可逾越的。

生成。 我使用 ACE-Step 1.5 创建原始音频。在这个阶段,我不做任何评判。目标是追求数量。

转录。 每个 WAV 文件都会输入到我 Mac 上的 mlx-whisper 中。由于 MLX 是为 Apple 的 Metal 和神经网络引擎构建的,因此整个过程完全在本地运行。没有 API 成本,没有网络延迟,也不存在将原始音频发送到远程服务器的隐私担忧。我冲杯咖啡的功夫,三十两个文件的批处理就转录完成了。

评分。 我将 Whisper 的转录结果与原始歌词提示词进行对比。匹配率衡量的是忠实度:歌手是否唱准了每一个词,还是跳过了行、模糊了短语或产生了音节幻觉?我会计算百分比重叠率。这不是审美判断,而是对文本准确性的严格核算。

过滤。 我根据匹配率对版本进行排序。前 20% 的版本进入我的试听池,其余的全部移至次级文件夹。我还没有删除低分版本,但我不会在它们身上浪费宝贵的听觉时间。

保持评审的独立性

我遵循一条铁律:生成模型永远不要给自己的作业评分。ACE-Step 1.5 不会对 ACE-Step 1.5 的输出进行评估。我使用完全独立的流程进行转录,因为一个自我检查的模型总是会过于宽容,它拥有同样的盲点。如果生成器倾向于丢掉复数标记或弱化硬辅音,那么自我评估循环也会学会忽略这些相同的缺陷。一个独立的语音识别模型对音乐没有忠诚度。它只是如实报告它听到的内容,无论那份报告多么刺耳。

数据揭示的结果

在这一批三十二个版本中,流水线将范围缩小到了八个值得认真对待的候选版本。这八个版本的平均歌词匹配率为 83.9%。在我认真聆听并根据我自己的质量标准进行评分后,它们的平均分为 94.1/100。这个差距说明了一切。机器筛选机制捕捉到了明显的结构性失败——歌词缺失、节奏崩溃、人声伪影——从而使我的人类评分能够在一个预先清理过的集合上进行。自动化并没有取代我的判断,它保护了我的判断。

当机器失灵时

低分并不总是意味着一首烂歌。我很早就发现了这一点,当时一首我非常喜欢的曲子得分远低于截止线。那首歌的歌词是简单的字母吟唱:将单个字母作为孤立的声音唱出来。Whisper 是基于自然句子结构训练的。如果你给它输入“A B C D”,它经常会产生幻觉单词、插入冠词,或者将字母坍缩成模糊的音素。转录失败了,但人声表现实际上非常清晰。

这个案例教会了我实际的局限性。匹配率是一个预过滤器,而不是最终判决。任何得分较低的版本在被丢弃之前,仍会经过十秒钟的人类试听。这个数字指向的是概率,而非确定性。如果你把分数视为法槌而非指南针,你就会错失好音乐。

一个技术上的小障碍

如果你在 Apple Silicon 上运行 MLX,在处理大批量数据之前,请先检查你的 Python 架构。一个常见的配置错误是通过 Rosetta 模拟运行 Python 二进制文件。脚本仍然可以执行,但你会失去让本地转录变得可行的硬件加速。

在终端中运行以下命令:

python3 -c "import platform; print(platform.machine())"

你应该看到 arm64。如果显示的是 x86_64,说明你的环境是在模拟运行。请切换到原生 Python 构建或原生的 conda 环境,然后重新安装 mlx-whisper。对于长批次任务,模拟执行与原生执行之间的区别,在于你是能在午饭前完成,还是得等到晚饭前才能完成。

真正的价值

生成式音频会回报你的坚持,但人类的注意力是有限的。为了证明自己足够严谨而去听 32 个平庸的版本,这并没什么值得骄傲的。通过在生成器和我的耳朵之间加入 mlx-whisper,我找回了数小时专注创作的时间。我依然决定哪首歌该留下,哪首歌该被舍弃。机器只是确保我将这种判断应用在最值得挑选的候选对象上。

关于这一工作流的完整文章可以在这里查看。如果你正在构建类似的本地 QA 工具,GyaanSetu community 是一个交流心得的好地方。