Appearance
OpenRouter 提供专用的 /api/v1/audio/speech 端点,将文字转换为语音音频流。该端点完全兼容 OpenAI Audio Speech API,可以直接用 OpenAI 客户端库对接。响应为原始音频字节流(非 JSON),支持 mp3 和 pcm 两种格式,按输入字符数计费。
查找 TTS 模型
通过 API:
bash
# 列出所有 TTS 模型
curl "https://openrouter.ai/api/v1/models?output_modalities=speech"通过模型页面: 访问 Models 页面,按输出模态筛选,找到列出 speech 的模型。
基本用法
typescript
import { OpenRouter } from '@openrouter/sdk';
import fs from 'fs';
const openRouter = new OpenRouter({ apiKey: '<OPENROUTER_API_KEY>' });
const stream = await openRouter.tts.createSpeech({
speechRequest: {
model: 'openai/gpt-4o-mini-tts-2025-12-15',
input: 'Hello! This is a text-to-speech test.',
voice: 'alloy',
responseFormat: 'mp3',
},
});
// 收集音频流并保存到文件
const reader = stream.getReader();
const chunks: Uint8Array[] = [];
while (true) {
const { done, value } = await reader.read();
if (done) break;
chunks.push(value);
}
const totalLength = chunks.reduce((sum, c) => sum + c.length, 0);
const buffer = new Uint8Array(totalLength);
let offset = 0;
for (const chunk of chunks) {
buffer.set(chunk, offset);
offset += chunk.length;
}
await fs.promises.writeFile('output.mp3', buffer);
console.log('Audio saved to output.mp3');请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | TTS 模型 ID(如 openai/gpt-4o-mini-tts-2025-12-15) |
input | string | 是 | 要转换为语音的文字 |
voice | string | 是 | 音色 ID,各模型支持的音色不同,详见模型页面 |
response_format | string | 否 | 输出格式:mp3 或 pcm,默认 pcm |
speed | number | 否 | 播放速度倍率,仅部分模型支持(如 OpenAI),默认 1.0 |
provider | object | 否 | 提供商特定的透传配置 |
响应格式
TTS 端点返回原始音频字节流而非 JSON,响应头说明:
| 响应头 | 说明 |
|---|---|
Content-Type | mp3 对应 audio/mpeg,pcm 对应 audio/pcm |
X-Generation-Id | 本次生成的唯一 ID,用于追踪调试 |
输出格式选择
| 格式 | Content-Type | 适用场景 |
|---|---|---|
mp3 | audio/mpeg | 压缩格式,文件小,适合存储和普通播放 |
pcm | audio/pcm | 无压缩原始音频,延迟更低,适合实时流式处理 |
使用 OpenAI SDK 对接
python
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="<OPENROUTER_API_KEY>",
)
# 非流式:获取完整音频
response = client.audio.speech.create(
model="openai/gpt-4o-mini-tts-2025-12-15",
input="The quick brown fox jumps over the lazy dog.",
voice="nova",
response_format="mp3"
)
response.write_to_file("output.mp3")
# 流式:分块处理音频
with client.audio.speech.with_streaming_response.create(
model="openai/gpt-4o-mini-tts-2025-12-15",
input="The quick brown fox jumps over the lazy dog.",
voice="nova",
response_format="mp3"
) as response:
response.stream_to_file("output.mp3")计费
TTS 按输入字符数计费,各模型和提供商价格不同,在 Models 页面或通过 Models API 查看每个模型的单价。
常见问题
Q: 输出的音频文件是空的或损坏?
A: 检查 response_format 是否与保存文件的扩展名匹配(例如不要把 pcm 保存为 .mp3)。非 200 响应返回的是 JSON 错误信息,不是音频。
Q: 如何知道某个模型支持哪些音色?
A: 各模型的可用音色不同,在 Models 页面查看具体模型的文档,或参考提供商官方文档。
Q: 长文本 TTS 怎么处理?
A: 建议将长文本拆成多个片段分批合成,再拼接音频输出,可以提高可靠性并减少首帧延迟。