音频
如何使用 OpenRouter 模型发送和接收音频
OpenRouter 支持通过 API 向兼容模型发送音频文件,并接收音频响应。本指南介绍如何处理音频输入和输出。
音频输入
向兼容模型发送音频文件,用于转写、分析和处理。音频输入请求使用 /api/v1/chat/completions API,内容类型为 input_audio。音频文件必须进行 Base64 编码,并包含格式说明。
注意:音频文件必须进行 Base64 编码 — 音频内容不支持直接 URL。
你可以在模型页面上按音频输入模态筛选,查找支持音频输入的模型。
发送音频文件
以下是发送音频文件进行处理的方法:
import { OpenRouter } from '@openrouter/sdk';
import fs from "fs/promises";
const openRouter = new OpenRouter({
apiKey: '<OPENROUTER_API_KEY>',
});
async function encodeAudioToBase64(audioPath: string): Promise<string> {
const audioBuffer = await fs.readFile(audioPath);
return audioBuffer.toString("base64");
}
// 读取音频文件并进行编码
const audioPath = "path/to/your/audio.wav";
const base64Audio = await encodeAudioToBase64(audioPath);
const result = await openRouter.chat.send({
model: "google/gemini-2.5-flash",
messages: [
{
role: "user",
content: [
{
type: "text",
text: "请转写这段音频。",
},
{
type: "input_audio",
inputAudio: {
data: base64Audio,
format: "wav",
},
},
],
},
],
stream: false,
});
console.log(result);
支持的音频输入格式
支持的音频格式因模型服务提供商而异。常见格式包括:
wav - WAV 音频
mp3 - MP3 音频
aiff - AIFF 音频
aac - AAC 音频
ogg - OGG Vorbis 音频
flac - FLAC 音频
m4a - M4A 音频
pcm16 - PCM16 音频
pcm24 - PCM24 音频
注意: 请查阅所用模型的文档,确认其支持哪些音频格式。并非所有模型都支持全部格式。
音频输出
OpenRouter 支持从具备音频输出能力的模型接收音频响应。要请求音频输出,请在请求中包含 modalities 和 audio 参数。
你可以在模型页面上按音频输出模态筛选,查找支持音频输出的模型。
请求音频输出
要接收音频输出,将 modalities 设为 ["text", "audio"],并在 audio 配置中指定所需的语音和格式:
import requests
import json
import base64
url = "https://openrouter.ai/api/v1/chat/completions"
headers = {
"Authorization": f"Bearer {API_KEY_REF}",
"Content-Type": "application/json"
}
payload = {
"model": "openai/gpt-4o-audio-preview",
"messages": [
{
"role": "user",
"content": "请用友好的语气打个招呼。"
}
],
"modalities": ["text", "audio"],
"audio": {
"voice": "alloy",
"format": "wav"
},
"stream": True
}
# 音频输出需要使用流式传输 — 响应以服务器发送事件(SSE)分块形式下发
response = requests.post(url, headers=headers, json=payload, stream=True)
audio_data_chunks = []
transcript_chunks = []
for line in response.iter_lines():
if not line:
continue
decoded = line.decode("utf-8")
if not decoded.startswith("data: "):
continue
data = decoded[len("data: "):]
if data.strip() == "[DONE]":
break
chunk = json.loads(data)
delta = chunk["choices"][0].get("delta", {})
audio = delta.get("audio", {})
if audio.get("data"):
audio_data_chunks.append(audio["data"])
if audio.get("transcript"):
transcript_chunks.append(audio["transcript"])
transcript = "".join(transcript_chunks)
print(f"转写文本:{transcript}")
# 拼接并解码 Base64 音频分块,然后保存
full_audio_b64 = "".join(audio_data_chunks)
audio_bytes = base64.b64decode(full_audio_b64)
with open("output.wav", "wb") as f:
f.write(audio_bytes)
流式分块格式
音频输出需要使用流式传输(stream: true)。音频数据和转写文本通过每个分块中的 delta.audio 字段增量下发:
{
"choices": [
{
"delta": {
"audio": {
"data": "<base64-encoded audio chunk>",
"transcript": "Hello"
}
}
}
]
}
音频配置选项
audio 参数接受以下选项: