ElevenLabsがOpenRouterに登場し、Text to Speechモデル9種とSpeech to Textモデル2種を提供します。
すでにOpenRouter経由で言語モデルと通信しているアプリなら、今や話すことも聞くことも可能です。Eleven v4でトーンや話し方を指示しながら長編コンテンツのナレーションを行い、v4 Turboでエージェントの音声応答を高速化し、Scribe v2で話者ラベル付きの会話文字起こしを行えます。別のElevenLabsプランは不要です。OpenRouterのAPIキーで POST /api/v1/audio/speech と POST /api/v1/audio/transcriptions を呼び出すだけです。
10月19日午前8時(太平洋時間)まで、すべてのOpenRouterのお客様に対し、すべてのElevenLabsモデルがOpenRouterの定価から50%オフ
どのモデルを使うべきか
まずは3つのモデルから始め、必要に応じて他のモデルを使い分けましょう:
- ナレーション、キャラクター、製品ビデオ: Eleven v4。オーディオタグにより、脚本が演技をコントロールできます。
- 音声エージェントとライブ応答: Eleven v4 Turbo。ElevenLabsがリアルタイム用途のために構築したモデルで、v4の半分のレートで利用できます。
- 文字起こし、会議メモ、キャプション: Scribe v2。話者ラベルと単語レベルのタイムスタンプに対応しています。
長編オーディオで速度調整が必要な場合はMultilingual v2を、1リクエストあたり最大40,000文字の大量音声にはFlash v2.5を使用してください。Scribe v2 Medicalは医療用語に特化してチューニングされています。
Text to Speech
| モデル | OpenRouter ID | 1リクエストあたりの最大文字数 | 選ぶべき用途 |
|---|---|---|---|
| Eleven v4 | elevenlabs/eleven-v4 | 10,000 | ElevenLabの最高品質で最も感情表現に優れた音声。[whispering]や[laughing]などのオーディオタグを使った表現力豊かなナレーションやキャラクター演技 |
| Eleven v4 Turbo | elevenlabs/eleven-v4-turbo | 10,000 | 音声エージェント向けの低レイテンシ応答 |
| Eleven v3 | elevenlabs/eleven-v3 | 5,000 | オーディオタグを使った表現力豊か/ドラマチックなナレーションやキャラクター演技 |
| Eleven v3 Conversational | elevenlabs/eleven-v3-conversational | 5,000 | v3の半分のレートでの対話形式のやり取り。ドラマチックな表現力を備え、ライブ対話向けに調整されています。 |
| Eleven Multilingual v2 | elevenlabs/eleven-multilingual-v2 | 10,000 | 多言語にわたる安定した長編オーディオ。速度調整に対応。 |
| Eleven Flash v2.5 | elevenlabs/eleven-flash-v2.5 | 40,000 | 高速かつ低コストで大量の多言語音声を処理。32言語に対応しています。 |
| Eleven Flash v2 | elevenlabs/eleven-flash-v2 | 30,000 | 高速な英語のみの音声 |
| Eleven Turbo v2.5 | elevenlabs/eleven-turbo-v2.5 | 40,000 | ElevenLabsの初世代低レイテンシモデル、現在はFlashに取って代わられました |
| Eleven Turbo v2 | elevenlabs/eleven-turbo-v2 | 30,000 | ElevenLabの初代低レイテンシモデル。現在はFlashに置き換えられています。 |
ElevenLabsはモデルを2つの料金 tiers で価格設定しています。Eleven v4、v3、Multilingual v2 は文字あたりの全額レートで課金され、v4 Turbo、v3 Conversational、Flash、Turbo はその半分で課金されます。現在の文字あたりの価格は、各モデルページの 音声読み上げ(Text to Speech)コレクション.
音声からテキストへ
| モデル | OpenRouter ID | それを選ぶ対象 |
|---|---|---|
| Scribe v2 | elevenlabs/scribe-v2 | 90以上の言語に対応し、単語のタイムスタンプ、話者ラベル、音声イベントタグ付きの汎用文字起こし |
| Scribe v2 Medical | elevenlabs/scribe-v2-medical | 臨床音声において、Scribe v2と比較して医療用語のエラーが35%少ない |
両方のScribeモデルは同じリクエスト形式と同じ1秒あたりの価格を使用します。WebSocket経由のRealtime Scribe v2は今回のリリースには含まれていません。
ウォークスルー:最初のMP3から音声エージェントまで
小さなプロダクトツアーを3つのステップで構築します。まずEleven v4がそれをナレーションします。次にボイスエージェントがそれに関する質問に答え、最後にScribe v2がチームのレビュー会議を、誰が何を発言したかがわかるメモに変換します。リクエストが期待どおりに動作しない場合は、最後のヒントを確認してください。
キーを一度設定してください:
export OPENROUTER_API_KEY="your-api-key"
ステップ1: Eleven v4で製品ツアーのナレーションを作成する
ナレーションを1行から始めてください:
curl https://openrouter.ai/api/v1/audio/speech \
--fail-with-body \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "elevenlabs/eleven-v4",
"input": "[cheerfully] Welcome to the tour. [whispering] Let me show you the shortcut first.",
"voice": "george",
"response_format": "mp3"
}' \
--output intro.mp3
voice ElevenLabsの21種類のプリセット音声のいずれかを名前で指定でき、(george こちら); 名前は大文字と小文字を区別しません。明示的な response_format — 参照 初めてのリクエストのためのヒント 両方に対して。
角括弧で囲まれた語句はオーディオタグです。Eleven v4およびv3は、次のようなタグを読み上げます。 [whispering], [laughing], [sighs]、また [curious] 配達指示を読み上げる代わりにテキストとして入力することができます。タグは課金対象の文字数に含まれます。
完全なツアースクリプトは1回のリクエストで送れる長さ(v4では10,000文字、v3では5,000文字)を超えるため、段落の境界で分割してください。ElevenLabs専用の設定は provider.options.elevenlabsの下に記述します。つなぎ目をまたいでイントネーションが一貫するように、隣接するテキストを previous_text および next_text として渡し、再実行の再現性を高めるために seed を固定してください:
import os
import requests
API = "https://openrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"}
NARRATOR = "george"
def split_paragraphs(text: str, limit: int = 9000) -> list[str]:
chunks, current = [], ""
for para in text.split("\n\n"):
if current and len(current) + len(para) + 2 > limit:
chunks.append(current)
current = para
else:
current = f"{current}\n\n{para}" if current else para
return chunks + [current] if current else chunks
chunks = split_paragraphs(open("tour-script.txt").read())
with open("tour.mp3", "wb") as out:
for i, chunk in enumerate(chunks):
options = {"seed": 7}
if i > 0:
options["previous_text"] = chunks[i - 1][-500:]
if i + 1 < len(chunks):
options["next_text"] = chunks[i + 1][:500]
r = requests.post(
f"{API}/audio/speech",
headers=HEADERS,
json={
"model": "elevenlabs/eleven-v4",
"input": chunk,
"voice": NARRATOR,
"response_format": "mp3",
"provider": {"options": {"elevenlabs": options}},
},
)
r.raise_for_status()
out.write(r.content)
ステップ 2: 音声エージェントで質問に回答する
次に、ユーザーがツアーについての質問を声で尋ねられるようにしましょう。音声エージェントは3つのモデルを連結します。質問にはScribe v2、回答にはチャットモデル、返信用にはEleven v4 Turboを使用します。ElevenLabsはv4 Turboをリアルタイム用途向けに構築しており、課金はv4レートの半分です。
import base64
def transcribe(path: str) -> str:
with open(path, "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
r = requests.post(
f"{API}/audio/transcriptions",
headers=HEADERS,
json={
"model": "elevenlabs/scribe-v2",
"input_audio": {"data": audio_b64, "format": "wav"},
},
)
r.raise_for_status()
return r.json()["text"]
def answer(question: str) -> str:
r = requests.post(
f"{API}/chat/completions",
headers=HEADERS,
json={
"model": "openai/gpt-5-mini",
"messages": [
{"role": "system", "content": "You are the product tour guide. Answer in one or two sentences."},
{"role": "user", "content": question},
],
},
)
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"]
def speak(text: str, out_path: str) -> None:
r = requests.post(
f"{API}/audio/speech",
headers=HEADERS,
json={
"model": "elevenlabs/eleven-v4-turbo",
"input": text,
"voice": NARRATOR,
"response_format": "mp3",
},
)
r.raise_for_status()
with open(out_path, "wb") as f:
f.write(r.content)
speak(answer(transcribe("question.wav")), "reply.mp3")
文字起こしの応答はJSON形式で、文字起こし内容は以下に含まれています text 「and a」 usage オーディオ秒数とドルを報告するオブジェクト cost リクエストの一部です。Swap openai/gpt-5-mini 内の任意のチャットモデルに対して カタログ 音声通話には触れずに、同じまま保ちます。 voice つまり、そのエージェントはstep 1のナレーターのようです。
ステップ3:レビュー会議を話者ラベル付きのメモにする
チームがツアーの振り返りのために集まるとき、Scribe v2 は誰が何を発言したかを教えてくれます。録音をマルチパートとしてアップロードし、 verbose_json 単語レベルのタイムスタンプ付きで、セットします diarize 未満 provider.options.elevenlabs。その後、応答内のすべての単語に話者が割り当てられます。会議に何人がいたかがわかっている場合は、渡してください num_speakers スプリットを改善するため。
curl https://openrouter.ai/api/v1/audio/transcriptions \
--fail-with-body \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-F file="@tour-review.mp3" \
-F model="elevenlabs/scribe-v2" \
-F response_format="verbose_json" \
-F "timestamp_granularities[]=word" \
-F provider='{"options": {"elevenlabs": {"diarize": true, "num_speakers": 3, "tag_audio_events": true}}}'
各エントリは words している word, start, end, confidence, speaker (整数)、および speaker_label (speaker_0, speaker_1など)。 tag_audio_events 「例えば以下のようなエントリを追加する」 (laughter) 単語と並べて表示します。連続する単語を次の基準でグループ化します: speaker 会話のターンを取得し、そのターンをチャットモデルに送って要約とアクション項目を作成します:
def to_turns(words: list[dict]) -> list[str]:
turns: list[tuple[int, list[str]]] = []
for w in words:
if turns and turns[-1][0] == w.get("speaker"):
turns[-1][1].append(w["word"])
else:
turns.append((w.get("speaker"), [w["word"]]))
return [f"Speaker {s}: {' '.join(ws)}" for s, ws in turns]
アップロードは25 MBまでに制限されており、これは128 kbpsのMP3で約27分に相当します。
より長い録音の場合は公開URLを渡すとElevenLabsがファイルを直接ダウンロードするため、25 MBの上限は適用されません:
"input_audio":{ "url": "https://example.com/tour-review.mp3" }
長いファイルでも上流リクエストの180秒タイムアウトに達することがあるため、長時間の録画は分割してください。
初めてのリクエストのためのヒント
- 名前またはIDでボイスを選択します。
のために
voice、ElevenLabsの21種類のプリセット音声のいずれかを名前で指定してください:george,sarah,adam,alice,bella,brian,charlie,daniel,jessica,roger,willなど(完全なリストは各モデルのページに掲載されています)。 名前の大文字・小文字は区別されません。他の音声を使う場合は、そのElevenLabs音声IDをvoiceからコピーしてください。 ElevenLabs ボイスライブラリ。\nクローンまたはデザインした音声は自分自身のElevenLabsアカウントに保存されるため、それらを使用する際には BYOK. - 依頼する
mp3再生できるファイルが必要なとき If you omitresponse_formatは、当社の音声エンドポイントが raw PCM(16 ビット リトルエンディアン、モノラル、24 kHz)を返します。これはオーディオパイプラインには適していますが、ほとんどのプレーヤーでは開けません。Set"response_format": "mp3"再生可能な 44.1 kHz、128 kbps のファイルを得るため。 - 速度制御には Multilingual v2 または Flash を使用してください
Multilingual v2 と Flash の解説
speed0.7から1.2まで。Eleven v4およびv4 Turboにはスピード制御がなく、デフォルト以外のspeed。そのため、これらのモデルでは省略し、代わりにオーディオタグでテンポを調整してください。 - 長いスクリプトを分割する
各モデルにはリクエストあたりの文字数制限があります(モデル表を参照)。音声タグは制限に、また課金対象の文字数にもカウントされます。ステップ 1 と同様に段落の境界で分割し、渡します。
previous_textおよびnext_textそうすることでつなぎが自然に聞こえるようになります。 - ElevenLabs固有の設定は以下の下にあります
provider.options.elevenlabs「Text to Speech は以下を受け付けます」seed,previous_text,next_text,language_code,apply_text_normalization,apply_language_text_normalization,pronunciation_dictionary_locators,voice_settings(stability,similarity_boost,style,use_speaker_boost,speed)、およびoutput_format(ElevenLabsのフォーマット名として「mp3_22050_32またはpcm_16000。これは次のものと一致している必要がありますresponse_formatコーデック)。Speech to Text は次を受け付けますdiarize,num_speakers,diarization_threshold,tag_audio_events,no_verbatim、およびseed.num_speakersおよびdiarization_threshold必要diarize: true片方のみ設定でき、両方は設定できません。フィールド名は記載どおりに正確に使用してください。これらのリストにないキーは無視されます。リストにあるキーでも値が不正な場合は 400 が返されます。 - Scribeが3文字の言語コードを返すようになりました
2文字のコードを送信できます
languageヒント (en)。検出された言語は ISO 639-3 コードとして返されます (eng).
はじめに
- を作成する OpenRouter APIキー.
- 上記のステップ1にあるcurlの例を使って、最初のリクエストを実行してください。
- 各パラメータの詳細については、 Text to Speech および Speech to Text のガイドをご覧ください。
Text to Speechは入力の文字ごとに課金され、Unicodeコードポイントとしてカウントされるため、絵文字やCJK文字は1文字として数えられます。オーディオタグも文字としてカウントされます。Scribeはオーディオの秒数ごとに課金され、すべての文字起こしレスポンスのusage.costフィールドにそのリクエストのコストが表示されます。ElevenLabsの価格をマークアップなしでそのまま提供しており、現在の料金は各モデルのページをご覧ください。
ElevenLabsのアカウントをすでにお持ちですか?
鍵を追加するには、次のコマンドを使います。 BYOK 独自にクローンした音声、発音辞書、および mp3_44100_192 などの高品質フォーマットを使用するためのものです。
を作成する OpenRouter APIキー, またはモデルをまず Playground。The テキスト読み上げ および 音声からテキストへ ガイドにはリクエストの完全なリファレンスが掲載されています。
