让 AI 生成完整的游戏配乐(踩坑记录和免费方案)

让 AI 生成完整的游戏配乐(踩坑记录和免费方案)

背景音乐是游戏美学中的重要元素。 尽管我听过许多人说,「我玩手游从来不开声音!」但主动不听,和没有选择,是两码事。曾老师自己玩游戏绝对无法接受没有声音。

标准的游戏研发流程中,音乐和音效的制作,和美术、程序、策划工作有较大差距。尤其是对于休闲游戏,许多团队不太可能有专职的音乐人岗位。我接触过的一些团队,主要还是让策划或者其他岗位来寻找免费的素材搞定音乐,这会有一些侵权风险。拥有专职音乐人的团队比较少,由于岗位设置不多,不利于音乐人才在工作中成长,这也导致小团队中的音乐人更加难招。

个人开发者和微型团队,除了制作人自己成为音乐人之外,还有一个选择,就是 AI 音乐。


以上是我去年春天写的、关于 AI 生成游戏音效和音乐的系列文章中的一段话,原文在这里:

一年多过去了,更多的游戏人接受了 AI 音乐,整个游戏和影视行业,也越来越多地把 AI 作为基建,嵌入自己的工作流。

曾老师团队已经完成并上线了一款末日题材互动影游,其中的背景音乐就是完全使用 AI 制作的。本篇就来详细讲讲具体的流程以及踩坑记录。

先交代结果:整个游戏一共 7 段循环音乐,多数在 90 秒以内,最长一段约 121 秒。

最终选用的版本中,大厅音乐来自 ACE-Step,另外 6 首来自 MiniMax。生成、试听、选稿、裁切、压缩,整个流程使用了 AI 辅助。AI 做得有瑕疵的部分,人类补上。

文章目录

全部交给 AI 的效果

起因是一次素材来源排查。已有的 BGM 都是在素材站随意寻找的,感染力有限,来源不清晰。

决定整体重做后,旧曲作为参考,说明想要的氛围、节奏和场景作用,新曲使用参考生成,人类负责进行筛选。

规则很简单:

  • 大厅要适合长时间停留,轻松和欢快;
  • 寻宝要有期待感;
  • 战斗要能带动情绪,不同类型的战斗要有不同的情绪。

曾老师最初的想法很直接:把 7 首原曲交给 AI 分析,参考它们的效果,重新生成一套循环 BGM。

文件很快生成,我的反馈是:

过于普通,没有高潮。

改了一轮,再听,依然不知所谓。

重复几轮后,出现了更多风格跑偏:

  • 寻宝曲的候选跑成过钢琴摇滚、chiptune,换模型后又出了管弦乐;
  • 废墟战斗曲则偏向 neo-soul 或氛围摇滚。

单看提示词和生成报告,觉得已经很清晰了,但人耳听了音乐之后,总觉得差点意思。

大厅 BGM,听起来要轻松

批量生成不理想,痛定思痛,改成一首首来生成。大厅音乐适合展开讲讲,生成的过程中,曾老师心中也是挺拉扯的:

这是游戏大厅和探索界面的背景音乐,长期,应该欢快中不失探索感觉,能振奋精神但又不会抢戏。 从一场激烈的战斗中回到大厅,这个音乐能平复战斗中的紧张心情。

玩家刚经历一场激烈战斗,回到大厅要整理东西、看养成、准备下一次出发。如果音乐很激烈,人就缓不下来;如果一下变成空荡荡的环境音,又容易泄气。

原曲分析给出的节拍估计约为 117 BPM,主要特征是鼓机、合成贝斯、明亮的键盘和合成器旋律。沿着这个方向,AI 把场景要求整理成了下面这段提示词,然后交给不同模型尝试生成。

1Create an original, instrumental, seamless 60–70 second loop for a game's home lobby and exploration screens. Use the attached reference only for its overall retro electronic timbre and steady 117 BPM, 4/4 groove; write a new melody and harmony. The player has just returned from an intense battle: begin with a feeling of safety and relief, then bring in gentle curiosity and optimism for the next journey. Use a soft vintage drum machine, restrained claps and hi-hats, warm syncopated synth bass, luminous FM electric-piano chords, mellow pads, and a memorable four-note synth motif with a contrasting answer. Introduce the hook early, develop it through small variations, reach a satisfying but moderate high point around the middle, then return toward the opening texture for a natural loop. Keep it uplifting, lightly adventurous, cleanly mixed and comfortable for hours of listening. No vocals, guitars, orchestral trailer drums, dramatic EDM drop, long empty breakdown or abrupt ending.

这段提示词保留了原始参考 BGM 的风格,但没有单靠原始音频的频谱下判断,而是把场景和配器要求写清楚。

值得保留的是它描述需求的方法:玩家刚做了什么,现在停在哪里,接下来想做什么;音乐用什么配器表达;什么时候开始有变化,变化到什么程度,又怎样回到开头。

如果采用之前批量的方式,让 AI 通过频谱去分析原曲,模型给出的乐器判断可能会出现分歧,同一段音频未必能得到一致的描述。

改成上面的描述方式,更在意的是旋律本身,多生成几次,用人类去比较,效率反而更高。

战斗音乐需要起伏

工厂战斗轮换音乐波形

战斗背景音乐可以更主动一些。下面这个战斗 BGM 整理出的方向是暗色复古电子乐:鼓机、连续推进的合成贝斯、略带粗粝感的主旋律,以及后段更强的一次抬升。节拍估计约为 92 BPM:

1Original instrumental dark synthwave battle BGM, 92 BPM, 4/4, minor key. Punchy electronic drum machine with gated snare, driving sequenced synth bass, gritty melodic lead synth, shadowy pads and quick arpeggios. Tense, determined, retro-futuristic. Start with the groove immediately, briefly reduce the layers, build to a strong melodic peak in the final third, then return to the opening feel for an approximately 83-second seamless loop. Compose a new melody and harmony. No vocals, guitars, acoustic band or trailer-style orchestra.

它要求开头直接进入律动,中间短暂收一下,后面再推到更高的位置。至少在需求上,「有高潮」已经被写成了具体的段落要求。

不过,这里也有一个容易过头的地方:背景音乐一直在冲,战斗反而会变平。屏幕里还有攻击、受击、技能和各种提示,音乐需要和它们一起工作。单独听很过瘾的,放进游戏后也可能太抢戏。最终的标准,还是靠人耳来听。

模型选择:MiniMax

MiniMax 的音乐创作网页 有免费积分,生成质量也在线,用起来挺方便:直接输入 AI 整理的提示词即可。

MiniMax 作品历史,包含大厅、人战、车战及废墟战斗音乐

作品 提示词要求 历史成品显示
人战电子音乐 约 83 秒 约 2 分 12 秒
废墟电子追逐 44 秒 约 2 分 34 秒
废墟交响战斗 88 秒 约 2 分 18 秒

MiniMax 人战提示词生成

模型选择:ACE-Step 1.5

ACE-Step 1.5 是由 ACE Studio 和阶跃星辰共同主导的开源音乐生成模型,可以免费本地部署。

曾老师将它部署到本地,并制作了一个 API 服务:

 1# ACE-Step API
 2
 3独立的 ACE-Step 1.5 音乐生成服务。项目目录为 `ace-step/`,API 包为 `api/`。对外 API 监听 `0.0.0.0:8051`;生成任务持久化到 SQLite,模型只在获得共享 GPU 使用权后由官方 ACE-Step 子进程加载。
 4
 5## API
 6
 7- `GET /health`:存活与版本。
 8- `GET /api/status`:业务队列、GPU 关卡及模型文件状态。
 9- `GET /api/capabilities`:本服务支持的生成模式和格式。
10- `POST /api/tasks`:JSON 提交无音频参考的生成。
11- `POST /api/tasks/upload`:multipart,`request` 为同一 JSON 对象,另可带 `reference_audio`、`src_audio` 文件。
12- `GET /api/tasks/{id}`:任务状态及完成后的输出 URL。
13- `POST /api/tasks/{id}/cancel`:取消等待或运行任务。
14- `GET /api/tasks/{id}/outputs/{index}`:下载音频。
15
16当前支持 `text2music`、`cover`、`repaint`;cover/repaint 必须上传 `src_audio`。`reference_audio` 只用作全局音色参考,不能保证保持原曲段落。请求长度 10–600 秒、批次 1–8;实际 GPU 可用上限以模型运行结果为准。
17
18curl -X POST http://127.0.0.1:8051/api/tasks -H 'Content-Type: application/json' \
19  -d '{"prompt":"instrumental synthwave with a strong final section","audio_duration":30,"bpm":120,"instrumental":true}'

测试了该模型的多个规格,实际听感:

  • 使用 Base 规格生成时,爆音较多,有些节奏也有问题,音质不理想;
  • 换到 XL-Turbo 规格,音质和节奏好很多,听起来更干净,没有听到那些爆音。

在我的 RTX 3090(24 GB 显存)上,XL 搭配 4B 语言模型时发生过 OOM(显存不足)。换成 XL-Turbo + 1.7B 语言模型,真实生成任务完成,效果也不错。注意:这里的 1.7B 和 4B 指辅助语言模型,不是音乐生成模型的大小。

显存能装下哪些组合,可以参考官方显存指南:

https://github.com/ace-step/ACE-Step-1.5/blob/main/docs/en/GPU_COMPATIBILITY.md

ACE-Step 也支持音频参考。参考音频尽量使用高质量的 WAV 母带。如果输入是低采样率、低码率音频(例如:22.05 kHz、64 kbps 的 MP3),再加上生成过程中的损失,输出可能会出现高频不足、听感发闷的问题。

得到最终循环音乐

提示词里的 seamless loop,翻译过来就是无缝循环,但模型不一定会遵循这个要求。

上面生成的几条结果都比提示词要求的要长。要选出适合游戏循环的段落,可以使用免费软件 Audacity,通过多轨剪切、拼接处理首尾,再试听确认循环是否自然。

Audacity 循环剪切

批量响度和文件尺寸

这是 AI 擅长的部分了。开发者需要根据游戏场景的需求,批量将循环背景音乐调整到统一的响度目标。重复处理交给 AI,处理后再检查响度、削波和循环接缝。

对于线上小游戏,需要在文件大小和音质中找到一个平衡,太大了影响加载,太小了影响听感。我最初要求这样的规格:

每分钟不超过 300 KB,使用 ABR(平均码率)编码的 MP3。后来为了兼顾音质,又转了一批 64 kbps 的版本,游戏最终采用的是这一档,实际体积约为每分钟 480 KB。

转换工作也直接交给 AI,但要按最终文件的大小和时长核对,检查能否完整解码,再到游戏里试听。

和 AI 做好分工

7 个循环背景音乐,从制作到确认,大概花了 4 个小时。ACE-Step 可以免费本地部署,MiniMax 用的是免费积分。这中间还部署了一个后续使用的 ACE-Step API 服务。

最贵的部分,可能就是曾老师的耳朵了。

需要 ACE-Step API 源码的可以留言找我要。你自己写一个当然也行,但不一定比我的好用就是了。😄