OpenRouter 入门与概览

OpenRouter 入门与概览

音频

5 分钟阅读

音频

如何使用 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 支持从具备音频输出能力的模型接收音频响应。要请求音频输出,请在请求中包含 modalitiesaudio 参数。

你可以在模型页面上按音频输出模态筛选,查找支持音频输出的模型。

请求音频输出

要接收音频输出,将 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 参数接受以下选项:

选项说明
voice用于音频生成的语音(例如 alloyechofableonyxnovashimmer)。可用语音因模型而异。
format输出的音频格式(例如 wavmp3flacopuspcm16)。可用格式因模型而异。