---
title: "統合型リアルタイムTTS API：複数プロバイダーを束ねるアグリゲーター"
description: "複数の音声プロバイダーをまとめる統合型リアルタイムTTS APIです。WebSocketで音声をストリーミングするか、OpenAI・ElevenLabs互換のSDKを1つのキーで使えます。"
canonical: "https://allmodels.io/ja/guides/universal-tts-api"
markdown: "https://allmodels.io/ja/guides/universal-tts-api.md"
author: "AllModels"
datePublished: "2026-10-12"
dateModified: "2026-10-16"
---

# リアルタイム音声合成プロバイダーを1つのAPIで

AllModels経由で複数のTTSモデルに接続できます。WebSocketで音声をストリーミングしたり、OpenAI互換・ElevenLabs互換のSDKを使ったりでき、音声スタックを作り直さずにモデルを切り替えられます。

> AllModelsは独立したサービスであり、ルーティング先のモデルを提供するプロバイダーとは提携関係になく、その承認や後援も受けていません。

## 統合型TTS APIとは

統合型の音声合成（TTS）APIとは、さまざまなプロバイダーのモデルで音声を生成できる単一のインテグレーションです。Cartesia用、ElevenLabs用、MiniMax用、OpenAI用とクライアントを個別に書く代わりに、アプリケーションは1つのエンドポイントと1つのAPIキーでやり取りします。どのプロバイダーが処理するかは、選んだモデルで決まります。AllModelsはこの種の統合型TTS APIです。`cartesia/sonic-3-6`や`minimax/speech-2-8-hd`のようなモデルIDを送ると、AllModelsがリクエストをそのプロバイダーにルーティングし、音声をストリーミングで返します。同じ考え方は、TTSアグリゲーターAPI、音声合成の抽象化レイヤー、「音声合成版のOpenRouter」とも呼ばれます。

### AllModelsの仕組み

[AllModelsのTTSカタログ](https://allmodels.io/ja/audio/models?type=tts)にあるすべてのモデルには`provider/model`形式のIDがあります。認証はAllModelsのAPIキー1つで済み、プロバイダーごとに管理していた個別のキーや請求アカウントは不要になります。AllModelsでは、同じモデルを次の3つの方法で呼び出せます。

- **ネイティブWebSocket**：`wss://api.allmodels.io/v1/tts`。テキストを生成されるそばから送り、音声をバイナリメッセージとして受け取ります。AllModelsネイティブのリアルタイムインターフェースです。
- **OpenAI互換**：`https://api.allmodels.io/oai`。公式のOpenAI SDKのベースURLをここに向ければ、そのまま`audio.speech.create`を呼び出せます。
- **ElevenLabs互換**：`https://api.allmodels.io/el`。公式のElevenLabs SDKのベースURLをここに向ければ、ストリーミングを含む音声合成メソッドをそのまま呼び出せます。

3つとも同じカタログにアクセスします。コードベースですでにOpenAIやElevenLabsのSDKを使っている場合は、ベースURLとAPIキーを変えるだけでAllModelsに移行できます。

### 1つのカタログ、1つのキー、1つの残高

アグリゲーターであるAllModelsでは、プロバイダーの比較と制御も1か所で行えます。`GET /v1/models`は、すべてのTTSモデルと、それを提供するプロバイダー、1,000文字あたりの価格を一覧表示します。1つのモデルを複数のプロバイダーが提供している場合は、`provider`の設定でどれを使うかを選べます。`only`は指定したプロバイダーに固定し、`order`は指定したプロバイダーを優先し、`ignore`は指定したプロバイダーを除外します。すべてのプロバイダーの利用料は、プロバイダーごとの個別請求ではなく、AllModelsのプリペイド残高1つから差し引かれます。

### モデルだけ変えて、ほかはそのまま

APIキー、エンドポイント、クライアント、リクエストのコードは、プロバイダーが変わってもまったく同じです。別のTTSモデルを使うにはモデルIDを変えるだけです。プロバイダーへの接続、そのAPIの処理、アプリケーションへの音声の返却はAllModelsが引き受けます。

## どのクライアントからでもリアルタイム音声をストリーミング

クライアント、モード、言語を選んでください。ハイライトされた行は、AllModelsのベースURLと、別のモデルを試すときに変更するモデルとボイスの値です。

### ネイティブWebSocket（ストリーミング） — JavaScript · Node.js · ws

クライアント: ネイティブ · モード: ストリーミング · 言語: JS

`wss://api.allmodels.io/v1/tts`に接続し、テキストを生成されるそばから送って、音声をバイナリメッセージとして受け取ります。 [ストリーミングガイド](https://allmodels.io/audio/docs/streaming-realtime)。

```javascript
import { once } from "node:events";
import { createWriteStream } from "node:fs";
import WebSocket from "ws";

const url = new URL("wss://api.allmodels.io/v1/tts");
url.searchParams.set("model", "grok/grok-tts");
url.searchParams.set("voice", "eve");
url.searchParams.set("format", "pcm");

const output = createWriteStream("reply.pcm");
const ws = new WebSocket(url, {
  headers: { Authorization: `Bearer ${process.env.ALLMODELS_API_KEY}` }
});

// Audio arrives as binary WebSocket messages.
ws.on("message", (data, isBinary) => {
  if (isBinary) output.write(data);
});

await once(ws, "open");
// Send text as your LLM or application produces it.
ws.send(JSON.stringify({ type: "text", text: "Your order has shipped. " }));
ws.send(JSON.stringify({ type: "text", text: "It arrives tomorrow." }));
ws.send(JSON.stringify({ type: "flush" }));
ws.send(JSON.stringify({ type: "close" }));

await once(ws, "close");
output.end();
```

### ネイティブWebSocket（ストリーミング） — Python · websockets

クライアント: ネイティブ · モード: ストリーミング · 言語: Python

`wss://api.allmodels.io/v1/tts`に接続し、テキストを生成されるそばから送って、音声をバイナリメッセージとして受け取ります。 [ストリーミングガイド](https://allmodels.io/audio/docs/streaming-realtime)。

```python
import asyncio
import json
import os

import websockets

URL = (
    "wss://api.allmodels.io/v1/tts"
    "?model=grok%2Fgrok-tts&voice=eve&format=pcm"
)

async def receive_audio(socket):
    with open("reply.pcm", "wb", buffering=0) as output:
        async for message in socket:
            if isinstance(message, bytes):
                output.write(message)

async def main():
    async with websockets.connect(
        URL,
        additional_headers={
            "Authorization": f"Bearer {os.environ['ALLMODELS_API_KEY']}"
        },
    ) as socket:
        receiver = asyncio.create_task(receive_audio(socket))
        for text in ["Your order has shipped. ", "It arrives tomorrow."]:
            await socket.send(json.dumps({"type": "text", "text": text}))
        await socket.send(json.dumps({"type": "flush"}))
        await socket.send(json.dumps({"type": "close"}))
        await receiver

asyncio.run(main())
```

### HTTP（単一リクエスト） — JavaScript · Node.js · fetch

クライアント: ネイティブ · モード: リクエスト · 言語: JS

テキストがすでに揃っている場合は、`https://api.allmodels.io/oai/audio/speech`にPOSTして音声ファイルを保存します。 [TTSドキュメント](https://allmodels.io/audio/docs/text-to-speech)。

```javascript
import { writeFile } from "node:fs/promises";

const response = await fetch("https://api.allmodels.io/oai/audio/speech", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ALLMODELS_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "grok/grok-tts",
    voice: "eve",
    input: "Your order has shipped. It arrives tomorrow.",
    response_format: "mp3"
  })
});

if (!response.ok) throw new Error(await response.text());
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
```

### HTTP（単一リクエスト） — Python · requests

クライアント: ネイティブ · モード: リクエスト · 言語: Python

テキストがすでに揃っている場合は、`https://api.allmodels.io/oai/audio/speech`にPOSTして音声ファイルを保存します。 [TTSドキュメント](https://allmodels.io/audio/docs/text-to-speech)。

```python
import os

import requests

response = requests.post(
    "https://api.allmodels.io/oai/audio/speech",
    headers={"Authorization": f"Bearer {os.environ['ALLMODELS_API_KEY']}"},
    json={
        "model": "grok/grok-tts",
        "voice": "eve",
        "input": "Your order has shipped. It arrives tomorrow.",
        "response_format": "mp3",
    },
    timeout=60,
)
response.raise_for_status()

with open("speech.mp3", "wb") as output:
    output.write(response.content)
```

### OpenAI SDK（ストリーミング） — JavaScript · openai

クライアント: OpenAI SDK · モード: ストリーミング · 言語: JS

OpenAI SDKのベースURLを`https://api.allmodels.io/oai`に設定し、`audio.speech.create`を呼び出します。音声は生成されるそばからストリーミングで返されます。 [OpenAI TTSドキュメント](https://allmodels.io/audio/docs/openai/text-to-speech)。

```javascript
import { createWriteStream } from "node:fs";
import { Readable } from "node:stream";
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseURL: "https://api.allmodels.io/oai"
});

const response = await client.audio.speech.create({
  model: "grok/grok-tts",
  voice: "eve",
  input: "Your order has shipped. It arrives tomorrow.",
  response_format: "pcm",
  stream_format: "audio"
});

Readable.fromWeb(response.body).pipe(createWriteStream("speech.pcm"));
```

### OpenAI SDK（ストリーミング） — Python · openai

クライアント: OpenAI SDK · モード: ストリーミング · 言語: Python

OpenAI SDKのベースURLを`https://api.allmodels.io/oai`に設定し、生成されるそばからレスポンスをファイルにストリーミングします。 [OpenAI TTSドキュメント](https://allmodels.io/audio/docs/openai/text-to-speech)。

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ALLMODELS_API_KEY"],
    base_url="https://api.allmodels.io/oai",
)

with client.audio.speech.with_streaming_response.create(
    model="grok/grok-tts",
    voice="eve",
    input="Your order has shipped. It arrives tomorrow.",
    response_format="pcm",
) as response:
    response.stream_to_file("speech.pcm")
```

### OpenAI SDK（単一リクエスト） — JavaScript · openai

クライアント: OpenAI SDK · モード: リクエスト · 言語: JS

OpenAI SDKのベースURLを`https://api.allmodels.io/oai`に設定し、完成した音声ファイルをリクエストします。 [OpenAI TTSドキュメント](https://allmodels.io/audio/docs/openai/text-to-speech)。

```javascript
import { writeFile } from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseURL: "https://api.allmodels.io/oai"
});

const audio = await client.audio.speech.create({
  model: "grok/grok-tts",
  voice: "eve",
  input: "Your order has shipped. It arrives tomorrow.",
  response_format: "mp3"
});

await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));
```

### OpenAI SDK（単一リクエスト） — Python · openai

クライアント: OpenAI SDK · モード: リクエスト · 言語: Python

OpenAI SDKのベースURLを`https://api.allmodels.io/oai`に設定し、完成した音声ファイルをリクエストします。 [OpenAI TTSドキュメント](https://allmodels.io/audio/docs/openai/text-to-speech)。

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ALLMODELS_API_KEY"],
    base_url="https://api.allmodels.io/oai",
)

audio = client.audio.speech.create(
    model="grok/grok-tts",
    voice="eve",
    input="Your order has shipped. It arrives tomorrow.",
    response_format="mp3",
)

audio.write_to_file("speech.mp3")
```

### ElevenLabs SDK（ストリーミング） — JavaScript · @elevenlabs/elevenlabs-js

クライアント: ElevenLabs SDK · モード: ストリーミング · 言語: JS

ElevenLabs SDKのベースURLを`https://api.allmodels.io/el`に設定し、生成されるそばから音声チャンクをストリーミングします。 [ElevenLabs TTSドキュメント](https://allmodels.io/audio/docs/elevenlabs/text-to-speech)。

```javascript
import { createWriteStream } from "node:fs";
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseUrl: "https://api.allmodels.io/el"
});

const audio = await client.textToSpeech.stream("eve", {
  text: "Your order has shipped. It arrives tomorrow.",
  modelId: "grok/grok-tts",
  outputFormat: "mp3_44100_128"
});

const output = createWriteStream("speech.mp3");
for await (const chunk of audio) {
  output.write(Buffer.from(chunk));
}
output.end();
```

### ElevenLabs SDK（ストリーミング） — Python · elevenlabs

クライアント: ElevenLabs SDK · モード: ストリーミング · 言語: Python

ElevenLabs SDKのベースURLを`https://api.allmodels.io/el`に設定します。`convert_realtime`はテキストを生成されるそばからWebSocketで送り、届いた音声を順次返します。 [ElevenLabs TTSドキュメント](https://allmodels.io/audio/docs/elevenlabs/text-to-speech)。

```python
import os
from elevenlabs.client import ElevenLabs

client = ElevenLabs(
    api_key=os.environ["ALLMODELS_API_KEY"],
    base_url="https://api.allmodels.io/el",
)

def generated_text():
    # Yield text as your LLM or application produces it.
    yield "Your order has shipped. "
    yield "It arrives tomorrow."

audio = client.text_to_speech.convert_realtime(
    "eve",
    text=generated_text(),
    model_id="grok/grok-tts",
    output_format="pcm_24000",
)

with open("reply.pcm", "wb", buffering=0) as output:
    for chunk in audio:
        output.write(chunk)
```

### ElevenLabs SDK（単一リクエスト） — JavaScript · @elevenlabs/elevenlabs-js

クライアント: ElevenLabs SDK · モード: リクエスト · 言語: JS

ElevenLabs SDKのベースURLを`https://api.allmodels.io/el`に設定し、完成したテキストを音声ファイルに変換します。 [ElevenLabs TTSドキュメント](https://allmodels.io/audio/docs/elevenlabs/text-to-speech)。

```javascript
import { writeFile } from "node:fs/promises";
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const client = new ElevenLabsClient({
  apiKey: process.env.ALLMODELS_API_KEY,
  baseUrl: "https://api.allmodels.io/el"
});

const audio = await client.textToSpeech.convert("eve", {
  text: "Your order has shipped. It arrives tomorrow.",
  modelId: "grok/grok-tts",
  outputFormat: "mp3_44100_128"
});

const chunks = await Array.fromAsync(audio, (chunk) => Buffer.from(chunk));
await writeFile("speech.mp3", Buffer.concat(chunks));
```

### ElevenLabs SDK（単一リクエスト） — Python · elevenlabs

クライアント: ElevenLabs SDK · モード: リクエスト · 言語: Python

ElevenLabs SDKのベースURLを`https://api.allmodels.io/el`に設定し、完成したテキストを音声ファイルに変換します。 [ElevenLabs TTSドキュメント](https://allmodels.io/audio/docs/elevenlabs/text-to-speech)。

```python
import os
from elevenlabs.client import ElevenLabs

client = ElevenLabs(
    api_key=os.environ["ALLMODELS_API_KEY"],
    base_url="https://api.allmodels.io/el",
)

audio = client.text_to_speech.convert(
    "eve",
    text="Your order has shipped. It arrives tomorrow.",
    model_id="grok/grok-tts",
    output_format="mp3_44100_128",
)

with open("speech.mp3", "wb") as output:
    for chunk in audio:
        output.write(chunk)
```

## チームが使い慣れたクライアントをそのまま

### OpenAI互換

エンドポイント: `https://api.allmodels.io/oai`

すでにOpenAI SDKを使っていますか？ベースURLをAllModelsに設定すれば、AllModelsのモデルIDでそのまま`audio.speech.create`を呼び出せます。ストリーミングと単一リクエストのどちらにも対応しています。

- [OpenAI TTSドキュメントを読む](https://allmodels.io/audio/docs/openai/text-to-speech)

### ElevenLabs互換

エンドポイント: `https://api.allmodels.io/el`

すでにElevenLabs SDKを使っていますか？ベースURLをAllModelsに設定すれば、AllModelsのモデルIDでconvert、stream、realtimeの各メソッドをそのまま使えます。

- [ElevenLabs TTSドキュメントを読む](https://allmodels.io/audio/docs/elevenlabs/text-to-speech)

## リアルタイムTTS APIの基本

### 統合型TTS APIとは何ですか？

統合型TTS APIは、複数の音声合成モデルに対する単一のインテグレーション窓口をアプリケーションに提供します。AllModelsでは、選んだモデルIDでルートが決まり、認証と基本的なリクエストの流れは変わりません。

### AllModelsはリアルタイム音声に対応していますか？

はい。ネイティブインターフェースは`/v1/tts`でWebSocket経由のストリーミングを行い、ElevenLabs Python SDKは互換WebSocket経由でテキストをストリーミング入力でき、どちらのSDKもHTTPで音声をストリーミングで受け取れます。ストリーミング対応はモデルによって異なります。

### 各プロバイダーの機能はすべて使えますか？

はい。共通の設定は標準のフィールドで指定し、ボイス設定などのプロバイダー固有の設定は`provider_options`に入れると、そのままプロバイダーに渡されます。

### 音声合成版のOpenRouterはありますか？

はい。AllModelsは音声版のOpenRouterのように使えます。1つのAPIキーと1つのエンドポイントで、複数プロバイダーの音声合成モデルを`provider/model`形式のIDで選んで利用できます。公式のOpenAI SDKとElevenLabs SDKにも対応しているため、既存のコードはベースURLとキーを変えるだけで済みます。

### TTSアグリゲーターAPIとオープンソースの抽象化ライブラリはどう違いますか？

オープンソースの抽象化ライブラリはアプリケーション内で動作し、ラップする各プロバイダーごとに自前のアカウント、APIキー、請求が必要です。AllModelsのようなアグリゲーターAPIはホスト型サービスで、1つのキーと1つのプリペイド残高で[TTSカタログ](https://allmodels.io/ja/audio/models?type=tts)全体を利用でき、すでに使っているOpenAIやElevenLabsのSDK、またはWebSocketで呼び出せます。

### プロバイダーを比較するには？

アプリケーションのモデルIDを変更する前に、[TTSカタログ](https://allmodels.io/ja/audio/models?type=tts)で利用可能なモデル、ルート、価格、言語、ボイス、APIの例を比較してください。

## 3ステップで1つのインテグレーション

1. **モデルを選ぶ。** [最新のカタログ](https://allmodels.io/ja/audio/models?type=tts)から、`provider/model`形式のIDでTTSモデルを選びます。
2. **APIキーは1つだけ。** プロバイダーごとの個別のキーではなく、AllModelsで認証します。
3. **ストリーミングまたは生成。** ライブ音声にはWebSocketでストリーミングし、完成したファイルが必要ならHTTPでリクエストします。

## TTSのインテグレーションは1つから。

今すぐモデルを選び、あとから自由に変更できます。

- [無料で始める](https://dash.allmodels.io/signup)
- [TTSモデルを見る](https://allmodels.io/ja/audio/models?type=tts)
- [AllModelsのドキュメントを読む](https://allmodels.io/audio/docs)
- [正規のHTML版ガイドを見る](https://allmodels.io/ja/guides/universal-tts-api)
