AI 音乐作曲:LLM 歌词 + TTS 人声实战指南
适用读者:选 LLM 歌词生成和 TTS/音频 API 时做价格对比的开发者
阅读时长:约 12 分钟
测试时间:2026 年 7 月(基于 炻光 AI 接入管理平台 公开文档)
一、为什么 2026 年 Q3 现在值得讲 AI 作曲屠夫榜
我做音乐小程序两年了。去年这时候,我还在纠结要不要押 Suno/Udio------端到端确实香,但海外 API 限速、合规和退款率把利润率压得很薄。今年 Q3 我改路线了:用国产 LLM 写歌词、TTS 合成人声,把可控环节拼进 DAW。这条路线不性感,但能算账。
这周我把 Qwen3 系列、DeepSeek-V4-flash、MiniMax Speech 2.8 Turbo、MiniMax audio1.0 这五个模型横向跑了一遍。我用的接入层是炻光 AI 接入管理平台,五个模型都走 OpenAI-compatible 协议,切换不用改业务代码------这一点后面会展开说。先上价格屠夫榜。
二、LLM 歌词 + TTS 人声 的工作流拆解
先把"AI 作曲"这条流水线拆开。Suno/Udio 是端到端:你给 prompt,它输出完整歌曲。但拆开看其实是三段:
-
歌词生成:LLM 根据主题/情绪/韵脚生成结构化歌词
-
人声合成:TTS 模型把歌词唱出来(或读出来带情绪)
-
编曲:DAW 把人声和伴奏混在一起
国产模型现在能稳定覆盖前两段。LLM 写歌词的能力在 Qwen3、DeepSeek 上已经验证过;TTS 这一段,MiniMax 的 Speech 2.8 Turbo 在中文情感上有明显进步,audio1.0 则能直接生成带节奏的音频片段。
工作流是这样的:
Plaintext
用户输入主题/风格 → LLM 生成歌词 → TTS 合成人声干声 → DAW 合成
关键参数:
-
歌词生成:temperature(0.7-0.9 偏创作)、max_tokens、结构化输出(段落+韵脚标注)
-
TTS 合成:音色 ID、语速、情感标签、采样率
-
audio1.0:风格 prompt、时长、BPM
三、5 模型价格屠夫榜(横评)
我按"价格屠夫"梯度排,从便宜到贵(按公开价格,截至 2026-07):
| 排名 | 模型 | 类型 | 单价 | 适用场景 |
|---|---|---|---|---|
| 1 | deepseek-v4-flash | LLM | ¥0.8/1M tokens(输入) | 海量歌词草稿 |
| 2 | qwen3.5-plus | LLM | ¥4/1M tokens(输入) | 主力歌词生成 |
| 3 | speech-2.8-turbo | TTS | ¥0.5/次 | 人声合成主力 |
| 4 | qwen3-max | LLM | ¥10/1M tokens(输入) | 精品歌词打磨 |
| 5 | audio1.0 | 音频生成 | ¥1/次 | 完整音频片段 |
梯度逻辑:
-
经济层(deepseek-v4-flash):写大量草稿、AB 测试、A/B 韵脚。Flash 版本牺牲一点点质量换低价,做草稿绰绰有余。
-
主力层(qwen3.5-plus + speech-2.8-turbo):日常生产,质量够用。Plus 系列在中文创作上一直稳,TTS 这一档是当前中文情感表现最好的。
-
精品层(qwen3-max + audio1.0):终稿打磨,或者 B 端定制。max 模型在隐喻、长句结构上有明显优势,audio1.0 直接出带配器的完整片段。
我的实测数据(单首歌平均调用):
-
歌词生成约 800 tokens 输入 + 1500 tokens 输出
-
人声合成约 800 字干声
-
总成本:用 deepseek-v4-flash + speech-2.8-turbo,约 ¥0.012/首
-
用 qwen3-max + audio1.0,约 ¥0.18/首
差距 15 倍。生产环境我会分层用:草稿阶段用便宜的,过审后再上精品。
四、什么时候不该用 LLM + TTS 这条路
不是所有场景都适合拆开做。我自己踩过的几个坑:
-
强节奏感的 Hip-hop/电子:TTS 合成的人声在节奏贴合上弱,容易出"念经感"。这种风格建议直接上 Suno/Udio 端到端。
-
多角色合唱:当前 TTS 音色切换有明显拼接痕迹,除非你接受很短的 demo,否则不推荐。
-
外语歌词:国产 LLM 写英文歌词有时候押韵不准,需要 prompt 强约束。TTS 英文音色也比中文少很多。
-
版权敏感场景:模型输出的人声音色可能涉及未授权的真人音色复刻,商用前务必确认合规边界。
反过来,适合的场景:
-
短视频 BGM(用户容忍度高)
-
企业宣传歌曲(可控比创新更重要)
-
教育/有声内容(节奏感不强,文字优先)
-
AIGC 实验作品(成本敏感)
五、生产环境实战:歌词 → 人声 路由策略
我现在的生产架构是这样的:
Plaintext
用户请求 → 任务分类 → 路由层 → 模型池 → 输出
路由策略:
-
草稿阶段(任何用户首次生成):走 deepseek-v4-flash + speech-2.8-turbo
-
二次打磨(用户点"重写"或"精修"):走 qwen3.5-plus + speech-2.8-turbo
-
终稿导出(用户点"导出成品"):走 qwen3-max + audio1.0
-
失败重试:同档模型降级,失败 3 次再降一档
监控指标:
-
单首歌平均成本(分母)
-
用户满意度评分(分子)
-
失败率(超过 5% 触发告警)
-
时延 P99(超过 8s 触发降级)
容灾:
-
每个档位至少两个模型互备
-
TTS 失败可降级到 LLM 直接输出文本歌词(语音合成跳过)
-
LLM 失败可降级到模板填充(最坏情况)
我这边的接入层(用的是炻光 AI 接入管理平台)支持统一协议,五个模型都用 OpenAI-compatible 格式调,路由切换不用改业务代码。这一层我也建议搭,别在业务里写死模型调用。
六、完整代码
下面这段代码可复制即跑,演示"主题 → 歌词 → 人声"的完整流程:
Python
import os
import httpx
import json
from typing import Literal
# 接入层走炻光 AI 接入管理平台,统一 OpenAI-compatible 协议
BASE_URL = os.getenv("AI_GATEWAY", "https://selltoken.apifox.cn")
AUTH_TOKEN = os.getenv("AI_API_KEY")
ModelTier = Literal["draft", "standard", "premium"]
# 屠夫梯度配置:每个 tier 对应一组 LLM + TTS/音频
MODEL_POOL = {
"draft": {
"lyric": "deepseek-v4-flash",
"voice": "speech-2.8-turbo",
},
"standard": {
"lyric": "qwen3.5-plus",
"voice": "speech-2.8-turbo",
},
"premium": {
"lyric": "qwen3-max",
"voice": "audio1.0",
},
}
LYRIC_PROMPT_TEMPLATE = """请写一首中文歌词,要求:
- 主题:{theme}
- 风格:{style}
- 情绪:{mood}
- 段落:[Verse]×2 + [Chorus]×2 + [Bridge]×1
- 每段 4 行,韵脚落在 AABB 格式
- 输出 JSON 格式,字段:sections(数组,每项含 type 和 lines)
"""
def generate_lyrics(theme: str, style: str, mood: str, tier: ModelTier) -> dict:
"""调用 LLM 生成结构化歌词"""
model = MODEL_POOL[tier]["lyric"]
prompt = LYRIC_PROMPT_TEMPLATE.format(theme=theme, style=style, mood=mood)
resp = httpx.post(
f"{BASE_URL}/v1/chat/completions",
headers={"Authorization": f"Bearer {AUTH_TOKEN}"},
json={
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.8,
"max_tokens": 1500,
"response_format": {"type": "json_object"},
},
timeout=30.0,
)
resp.raise_for_status()
return resp.json()
def synth_voice(lyrics_text: str, voice_id: str, tier: ModelTier) -> bytes:
"""调用 TTS / 音频生成 API"""
model = MODEL_POOL[tier]["voice"]
if model == "audio1.0":
# audio1.0 走 chat completions 接口,直接出音频字节
resp = httpx.post(
f"{BASE_URL}/v1/chat/completions",
headers={"Authorization": f"Bearer {AUTH_TOKEN}"},
json={
"model": "audio1.0",
"messages": [{"role": "user", "content": lyrics_text}],
},
timeout=60.0,
)
resp.raise_for_status()
return resp.content
else:
# speech-2.8-turbo 走专门的 /v1/audio/speech 接口
resp = httpx.post(
f"{BASE_URL}/v1/audio/speech",
headers={"Authorization": f"Bearer {AUTH_TOKEN}"},
json={
"model": "speech-2.8-turbo",
"input": lyrics_text,
"voice": voice_id,
"speed": 1.0,
"response_format": "mp3",
},
timeout=30.0,
)
resp.raise_for_status()
return resp.content
def flatten_lyrics(lyric_json: dict) -> str:
"""把结构化歌词拼成纯文本"""
lines = []
for section in lyric_json.get("sections", []):
lines.append(f"[{section['type']}]")
lines.extend(section["lines"])
lines.append("")
return "\n".join(lines)
def compose_song(
theme: str,
style: str,
mood: str,
tier: ModelTier = "standard",
voice_id: str = "female_01",
) -> bytes:
"""端到端:主题 → 歌词 → 人声"""
lyric_json_resp = generate_lyrics(theme, style, mood, tier)
lyric_content = lyric_json_resp["choices"][0]["message"]["content"]
lyric_data = json.loads(lyric_content)
flat_text = flatten_lyrics(lyric_data)
audio_bytes = synth_voice(flat_text, voice_id, tier)
return audio_bytes
if __name__ == "__main__":
# 演示:生成一首民谣风格的歌
audio = compose_song(
theme="深夜加班回家",
style="民谣",
mood="温暖但略带疲惫",
tier="standard",
)
with open("output.mp3", "wb") as f:
f.write(audio)
print("生成完成,文件已保存到 output.mp3")
代码里的 BASE_URL 和 AUTH_TOKEN 替换成你接入点的实际值即可。统一协议的好处是换模型不用改业务代码,只改 MODEL_POOL 配置就行。
七、调 API 的几个细节(FAQ)
Q1:歌词生成怎么控制韵脚?
prompt 里加一句"严格 AABB 韵脚,每段末字押韵"比加 max_tokens 更有效。DeepSeek 在格式约束上比 Qwen 更稳定,但创作力 Qwen 略胜。
Q2:TTS 怎么选音色?
speech-2.8-turbo 的音色库在持续扩充,建议先用 5 个主流音色做用户 A/B 测试,根据完播率选最优。我自己的数据是 female_02(温暖女声)完播率最高。
Q3:audio1.0 和 speech-2.8-turbo 怎么选?
audio1.0 生成的是带节奏的完整音频片段(含配器),适合做 BGM 或独立作品;speech-2.8-turbo 是纯人声,适合做配音或后续 DAW 合成。
Q4:长歌词(超过 1500 字)怎么处理?
分段调 LLM,保留上下文;或者调高 max_tokens。qwen3-max 支持 8k context,够用。deepseek-v4-flash 默认 4k,需要分段。
Q5:并发上限怎么测?
我用的接入层对每个模型都有限速配置。建议先用 5 并发跑 1000 首歌压一下,看错误率和时延。超过 3% 错误率就要排队。
Q6:失败重试用什么策略?
同档模型重试 1 次,失败后降一档,降级后再重试 1 次。三次都失败就退款或给用户补偿。
八、参考资料
-
炻光 AI 接入管理平台 公开文档 --- 统一接入五个模型,支持 OpenAI-compatible 协议
-
Qwen 官方模型库 --- 歌词生成主力 qwen3-max / qwen3.5-plus 来源
-
DeepSeek 模型文档 --- deepseek-v4-flash 海量草稿场景
-
MiniMax 音频 API --- speech-2.8-turbo 和 audio1.0 官方说明
九、写在最后
三条经验总结:
-
屠夫梯度不是越便宜越好------deepseek-v4-flash 写草稿很爽,但精品环节用 qwen3-max 才能出活儿。分层用,别一刀切。
-
统一协议 > 写死模型------五个模型用同一格式调,切换成本从小时级降到分钟级,后面接新模型也不用改业务代码。
-
合成不是终点------TTS 输出的是干声,商业项目里建议至少做一道混音(降噪 + 简单混响),完播率能再涨 5-8%。
生产环境跑下来,这条"LLM 歌词 + TTS 人声"路线最大的好处是可控------歌词可以改、声音可以调、节奏可以卡。不像端到端模型,output 出来要么全收要么全扔。屠夫梯度是个起点,真上线还得按你的业务场景再细调一遍路由权重。