Skip to content

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');

请求参数

参数类型必填说明
modelstringTTS 模型 ID(如 openai/gpt-4o-mini-tts-2025-12-15
inputstring要转换为语音的文字
voicestring音色 ID,各模型支持的音色不同,详见模型页面
response_formatstring输出格式:mp3pcm,默认 pcm
speednumber播放速度倍率,仅部分模型支持(如 OpenAI),默认 1.0
providerobject提供商特定的透传配置

响应格式

TTS 端点返回原始音频字节流而非 JSON,响应头说明:

响应头说明
Content-Typemp3 对应 audio/mpeg,pcm 对应 audio/pcm
X-Generation-Id本次生成的唯一 ID,用于追踪调试

输出格式选择

格式Content-Type适用场景
mp3audio/mpeg压缩格式,文件小,适合存储和普通播放
pcmaudio/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: 建议将长文本拆成多个片段分批合成,再拼接音频输出,可以提高可靠性并减少首帧延迟。