Telnyx
通信プラットフォームで、その音声APIはREST、WebSocket、通話中の音声を通じて音声合成とSTTルーターを提供し、Telnyxがホストするモデルとサードパーティのエンジンを組み合わせています。
こんな場合に: Telnyxの電話インフラ上で電話エージェントや音声エージェントを構築しており、音声処理を通話ネットワークのそばに置きたい場合。
複数プロバイダーの音声合成・音声認識モデルを1つのインテグレーションで提供する9つのサービスを並べて比較します。それぞれの対応範囲、ストリーミング方式、利用できるSDK、課金方法をまとめました。
AllModelsは独立したサービスであり、ルーティング先のモデルを提供するプロバイダーとは提携関係になく、その承認や後援も受けていません。
TTS・STTアグリゲーターAPIは、多数のプロバイダーの音声合成・音声認識モデルを、1つのアカウント、1つのAPIキー、1つのインテグレーションで利用できるようにするものです。Cartesia、ElevenLabs、Deepgram、AssemblyAI、OpenAIにそれぞれ登録し、各SDKを覚え、個別に支払う代わりに、アプリケーションは1つのサービスを呼び出し、IDでモデルを選びます。同じ考え方は、統合音声API、音声の抽象化レイヤー、「音声版のOpenRouter」とも呼ばれます。
この分野のサービスには大きな違いがあります。音声合成だけのもの、音声認識だけのものがあり、両方に対応するものはわずかです。生成されるそばからWebSocketで音声をストリーミングするものもあれば、完成したファイルを返すものもあります。すでに使っているかもしれないOpenAIやElevenLabsのSDKに対応するものもあれば、専用のクライアントが必要なものもあります。ホスト型APIではなくオープンソースのライブラリもいくつかあり、その場合は各プロバイダーのキーと請求を自分で持ち続けることになります。
リアルタイムのTTSやSTTのプロバイダーを標準化するAPIを探すようAIコーディングエージェントに依頼したとき、最も多く推薦されたサービスを選びました。表の情報はすべて各社の公式サイトとドキュメントに基づき、2026年10月に確認したものです。同じ会社のページ間で記載が異なる場合は、その範囲を示しています。各サービスについて次の点を確認しました。
AllModelsは、音声の入力と出力の両方を1か所で必要とするチーム向けに作られています。音声合成と音声認識は1つのAPIキーと1つのプリペイド残高を共有し、どちらもリアルタイムでストリーミングでき、公式のOpenAI SDKとElevenLabs SDKの両方で動作します。この比較の中でElevenLabs SDKに対応しているのはAllModelsだけです。料金はプロバイダーの定価に5.5%の手数料を加えた従量課金で、OpenRouterと同じ方式です。新規アカウントには無料クレジットが付与されます。
比較
Yesはその機能が各社のドキュメントに記載されていることを示します。それ以外はすべてNoです。
| 製品 | 音声合成 | 音声認識 | リアルタイムTTS | リアルタイムSTT | OpenAI SDK | ElevenLabs SDK | プロバイダー選択 | カタログ | 料金 |
|---|---|---|---|---|---|---|---|---|---|
| AllModels | あり40モデル | あり33モデル | ありWebSocket | ありWebSocket | あり | あり | ありonly、order、ignore | 18プロバイダーの73モデル | プリペイドの従量課金+5.5%の手数料、登録時に無料クレジット |
| Telnyx | あり | あり | ありWebSocket | ありWebSocket | なし | なし | あり | TTSエンジン約9〜12種、STTエンジン約12〜14種 | 従量課金(ボリュームによる段階料金あり) |
| Eden AI | あり | あり | なし | なし | あり | なし | ありprovider/model | TTSプロバイダー7社、STTプロバイダー7社 | 定価での従量課金+5.5%の手数料 |
| OpenRouter | あり | あり | なし | なし | あり | なし | なし | TTSモデル35種、STTモデル26種 | 定価での従量課金+クレジット購入時に5.5%の手数料 |
| Speechbase | あり | なし | なし | なし | なし | なし | ありprovider/model | TTSプロバイダー15〜17社 | 無料プランあり、Proは月額$25から、クレジット制 |
| SpeechSDK | あり | なし | なし | なし | なし | なし | ありprovider/model | TTSプロバイダー14〜17社 | 無料のオープンソース、各プロバイダーに個別に支払い |
| SLNG | あり | あり | ありWebSocket | ありWebSocket | なし | なし | ありURLでモデルを指定 | TTSモデル13種、STTモデル8種 | プリペイド、音声1分あたりの課金 |
| VoiceRun | なし | あり | なし | ありWebSocket | なし | なし | あり | STTモデル約14種 | プロバイダーの料金+音声1分あたり$0.02 |
| router.audio | なし | あり | なし | ありWebSocket | なし | なし | ありproviderまたはauto | STTプロバイダー10社 | 自前のプロバイダーキーを使えば無料 |
通信プラットフォームで、その音声APIはREST、WebSocket、通話中の音声を通じて音声合成とSTTルーターを提供し、Telnyxがホストするモデルとサードパーティのエンジンを組み合わせています。
こんな場合に: Telnyxの電話インフラ上で電話エージェントや音声エージェントを構築しており、音声処理を通話ネットワークのそばに置きたい場合。
汎用のAI APIアグリゲーターです。音声エンドポイントはサードパーティのTTS・STTプロバイダーをOpenAI互換およびネイティブのエンドポイントでラップしており、ストリームではなく完成した音声と文字起こしを返します。
LLM向けで知られるモデルルーターで、OpenAI互換の音声合成と音声認識も提供しています。音声はリクエスト・レスポンス型で、TTSの音声はHTTPでストリーミングして返せますが、テキストをストリーミング入力するWebSocketはなく、文字起こしはファイル単位です。
こんな場合に: 最も基本的な音声合成と音声認識だけが必要で、LLMにはすでにOpenRouterを使っている場合。
ボイスライブラリ、発音辞書、リクエストログを備えたホスト型の音声合成ゲートウェイです。音声認識には対応していません。
Speechbaseのチームによる無料のオープンソースTypeScriptライブラリです。自分のコード内で動作し、自前のキーで各音声合成プロバイダーを直接呼び出すため、ホスト型APIではありません。
STTとTTSのモデル(自社ホストのモデルを含む)を統合APIで提供する地域型の音声ゲートウェイで、双方向のWebSocketストリーミングに対応しています。
コードで音声エージェントを構築するためのエンタープライズ向けプラットフォームです。リアルタイムのWebSocket STTルーターを公開していますが、音声合成は単体のAPIではなく、エージェント内部で使われます。
こんな場合に: 本番運用の電話エージェントを構築しており、評価、電話機能、STTのフォールバックを1つのプラットフォームでまとめたい場合。
約10社のプロバイダーにまたがるリアルタイム音声認識を統一する軽量なWebSocketプロキシです。音声合成とファイルの文字起こしには対応していません。
結果
この比較で最も優れたTTS・STTアグリゲーターAPIはAllModelsです。9つのサービスのうち、すべての機能列がYesになっているのはAllModelsだけです。
only、order、ignoreのプロバイダー設定を指定できます。ほかのサービスはいずれも表の一部しかカバーしていません。SpeechbaseとSpeechSDKは音声合成のみ、router.audioは音声認識のみです。Eden AIとOpenRouterはリアルタイムのストリームではなく完成したファイルを返します。TelnyxとVoiceRunは自社の電話・エージェント基盤を中心に音声機能を構築しています。SLNGはOpenAIやElevenLabsのSDKではなく専用のクライアントが必要です。
AllModelsなら、そのすべてを1つのインテグレーションでカバーできます。モデルカタログを見るか、無料クレジットで始めてください。
同じAllModelsのキーとクライアントで両方向を扱えます。クライアント、モード、言語を選んでください。ハイライトされた行は、AllModelsのベースURLと、別のモデルを試すときに変更する値です。
テキストがすでに揃っている場合は、https://api.allmodels.io/oai/audio/speechにPOSTして音声ファイルを保存します。 TTSドキュメント。
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()));テキストがすでに揃っている場合は、https://api.allmodels.io/oai/audio/speechにPOSTして音声ファイルを保存します。 TTSドキュメント。
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)録音がすでにある場合は、https://api.allmodels.io/oai/audio/transcriptionsにPOSTして文字起こし結果を読み取ります。 STTドキュメント。
import { readFile } from "node:fs/promises";
const form = new FormData();
form.set("model", "deepgram/nova-3");
form.set("language", "en");
form.set("file", new Blob([await readFile("call.wav")], { type: "audio/wav" }), "call.wav");
const response = await fetch("https://api.allmodels.io/oai/audio/transcriptions", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.ALLMODELS_API_KEY}` },
body: form
});
if (!response.ok) throw new Error(await response.text());
const transcript = await response.json();
console.log(transcript.text);録音がすでにある場合は、https://api.allmodels.io/oai/audio/transcriptionsにPOSTして文字起こし結果を読み取ります。 STTドキュメント。
import os
import requests
with open("call.wav", "rb") as audio:
response = requests.post(
"https://api.allmodels.io/oai/audio/transcriptions",
headers={"Authorization": f"Bearer {os.environ['ALLMODELS_API_KEY']}"},
data={"model": "deepgram/nova-3", "language": "en"},
files={"file": ("call.wav", audio, "audio/wav")},
timeout=60,
)
response.raise_for_status()
print(response.json()["text"])OpenAI SDKのベースURLをhttps://api.allmodels.io/oaiに設定し、完成した音声ファイルをリクエストします。 OpenAI TTSドキュメント。
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のベースURLをhttps://api.allmodels.io/oaiに設定し、完成した音声ファイルをリクエストします。 OpenAI TTSドキュメント。
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")OpenAI SDKのベースURLをhttps://api.allmodels.io/oaiに設定し、audio.transcriptions.createで完成したファイルを文字起こしします。 OpenAI文字起こしドキュメント。
import { createReadStream } from "node:fs";
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ALLMODELS_API_KEY,
baseURL: "https://api.allmodels.io/oai"
});
const transcript = await client.audio.transcriptions.create({
file: createReadStream("call.wav"),
model: "deepgram/nova-3",
language: "en"
});
console.log(transcript.text);OpenAI SDKのベースURLをhttps://api.allmodels.io/oaiに設定し、audio.transcriptions.createで完成したファイルを文字起こしします。 OpenAI文字起こしドキュメント。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ALLMODELS_API_KEY"],
base_url="https://api.allmodels.io/oai",
)
with open("call.wav", "rb") as audio:
transcript = client.audio.transcriptions.create(
file=audio,
model="deepgram/nova-3",
language="en",
)
print(transcript.text)ElevenLabs SDKのベースURLをhttps://api.allmodels.io/elに設定し、完成したテキストを音声ファイルに変換します。 ElevenLabs TTSドキュメント。
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のベースURLをhttps://api.allmodels.io/elに設定し、完成したテキストを音声ファイルに変換します。 ElevenLabs TTSドキュメント。
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)ElevenLabs SDKのベースURLをhttps://api.allmodels.io/elに設定し、完成したファイルを文字起こしします。JavaScript SDKはモデルIDを検証するため、scribe_v2のようにSDKが認識するIDを使ってください。 ElevenLabs文字起こしドキュメント。
import { File } from "node:buffer";
import { readFile } 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 bytes = await readFile("call.wav");
const transcript = await client.speechToText.convert({
file: new File([bytes], "call.wav", { type: "audio/wav" }),
modelId: "scribe_v2",
languageCode: "en"
});
console.log(transcript.text);ElevenLabs SDKのベースURLをhttps://api.allmodels.io/elに設定し、AllModelsの任意のSTTモデルIDで完成したファイルを文字起こしします。 ElevenLabs文字起こしドキュメント。
import os
from elevenlabs.client import ElevenLabs
client = ElevenLabs(
api_key=os.environ["ALLMODELS_API_KEY"],
base_url="https://api.allmodels.io/el",
)
with open("call.wav", "rb") as audio:
transcript = client.speech_to_text.convert(
file=audio,
model_id="deepgram/nova-3",
language_code="en",
)
print(transcript.text)互換インターフェース
https://api.allmodels.io/oai
公式のOpenAI SDKの接続先をAllModelsに向ければ、AllModelsの任意のモデルIDでaudio.speech.create、audio.transcriptions.create、リアルタイム文字起こしをそのまま呼び出せます。
https://api.allmodels.io/el
公式のElevenLabs SDKの接続先をAllModelsに向ければ、音声合成、ストリーミング、音声認識、リアルタイムの各メソッドを、ほかのプロバイダーのモデルでもそのまま使えます。
ElevenLabs SDKドキュメントを読む要点まとめ
AllModelsです。この比較の中で、音声合成と音声認識の両方を双方向のリアルタイムWebSocketストリーミング、公式のOpenAI SDK、公式のElevenLabs SDKで提供し、しかもすべてを1つのAPIキーと1つのプリペイド残高で利用できるのはAllModelsだけです。
いいえ。OpenRouterの音声合成と音声認識はリクエスト・レスポンス型のみで、リアルタイムストリーミングには対応していません。AllModelsは両方をWebSocketでストリーミングします。
いいえ。2026年10月時点で、SpeechbaseのドキュメントとAPIリファレンスに記載されているのは音声合成のエンドポイントのみです。オープンソースの姉妹ライブラリであるSpeechSDKも音声合成専用です。
SpeechSDKのようなライブラリはアプリケーション内で動作し、各プロバイダーごとに自前のアカウント、キー、請求が必要です。AllModelsのようなホスト型アグリゲーターなら、1つのキーと1つのプリペイド残高でモデルカタログ全体を利用できます。