◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-07-05上級

アプリに会話翻訳を組み込む — Live API で音声から音声へ、遅延と切断に耐える設計

Gemini 3.5 Live Translate と Live API で、音声から音声への会話翻訳をアプリに組み込む設計をまとめました。セッション寿命・言語の自動切り替え・遅延バジェット・ストリーミング課金の勘所を、動くコードとともに整理しています。

Gemini Live API6Live Translate音声翻訳リアルタイム5設計4

✦ プレミアム記事

多言語対応を「文字」でしか考えていなかった頃の自分を、少し悔いています。

個人開発で癒し系のアプリをいくつか運用しているのですが、海外のユーザーさんから「音声のガイドも自分の言葉で聞きたい」という声をいただいたことがありました。当時の私は、テキストを翻訳して読み上げる方式しか思いつかず、話者の間や抑揚が失われた、どこか他人行儀な音声しか返せませんでした。

2026年7月に公開された Gemini 3.5 Live Translate は、その前提を静かに書き換えます。70以上の言語を自動で判定し、話者の抑揚を保ったまま、音声から音声へ翻訳する。文字を経由しないという一点が、体験の質をまるごと変えてしまいました。

ここでは、Live Translate の土台となる Live API を使って、会話翻訳をアプリに組み込むための設計を整理します。単なる呼び出し方ではなく、実運用で必ずつまずく「遅延」「言語の切り替わり」「切断」「コスト」の四つに、どう向き合うかを中心に書いていきます。

文字を経由しない、という設計上の分岐点

従来の翻訳フローは、音声認識・翻訳・音声合成という三つの独立した工程を直列につなぐものでした。それぞれの工程で待ち時間が生まれ、間や感情は文字に落ちる過程で削ぎ落とされます。

Live Translate と Live API が変えたのは、この三工程を一つの持続的なセッションに畳んだことです。音声を流し込むと、モデルが翻訳された音声を返す。中間表現としてのテキストは、必要なら受け取れますが、体験の主役ではなくなりました。

設計者にとっての意味は明確です。私たちはもう「認識精度」と「合成の自然さ」を別々にチューニングする世界にいません。代わりに、一本のストリームをいかに途切れさせず、いかに安く流し続けるかという、通信とセッションの設計問題に軸足が移ります。

最小構成 — セッションを張り、音声を流し、音声で受け取る

まずは骨格です。Live API は WebSocket 上で双方向にやり取りしますが、google-genai SDK が非同期セッションとして抽象化してくれます。

import asyncio
from google import genai
from google.genai import types
 
client = genai.Client(api_key="YOUR_API_KEY")
 
MODEL = "gemini-3.1-flash-live-preview"
 
config = {
    "response_modalities": ["AUDIO"],
    "system_instruction": (
        "あなたは同時通訳者です。話者が話した言語を検出し、"
        "英語の場合は日本語へ、日本語の場合は英語へ、"
        "抑揚と語調を保ったまま音声で通訳してください。"
        "要約や補足はせず、話された内容だけを訳します。"
    ),
    "input_audio_transcription": {},
    "output_audio_transcription": {},
}
 
 
async def translate_stream(mic_frames):
    async with client.aio.live.connect(model=MODEL, config=config) as session:
        async def pump_audio():
            async for chunk in mic_frames:  # 16-bit PCM / 16kHz / little-endian
                await session.send_realtime_input(
                    audio=types.Blob(data=chunk, mime_type="audio/pcm;rate=16000")
                )
 
        sender = asyncio.create_task(pump_audio())
 
        async for response in session.receive():
            content = response.server_content
            if not content:
                continue
            if content.input_transcription:
                print(f"[原文] {content.input_transcription.text}")
            if content.output_transcription:
                print(f"[訳文] {content.output_transcription.text}")
            if content.model_turn:
                for part in content.model_turn.parts:
                    if part.inline_data:
                        yield part.inline_data.data  # 24kHz PCM 音声
 
        await sender

要点は三つあります。入力音声は 16kHz の生 PCM で送ること、出力はネイティブ音声としてチャンクで返ること、そして書き起こし(transcription)は音声とは別に受け取れることです。

input_audio_transcription と output_audio_transcription を有効にしておくと、字幕表示やログ、後述する言語判定のフックに使えます。音声だけを扱うつもりでも、この二つは開けておくことを推奨します。運用の可観測性が段違いになります。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦Live API セッションの張り方と、音声を流し込んで音声で受け取る最小構成の動くコード
✦遅延バジェットの分解と、切断・セッション寿命に耐える再接続の設計指針
✦ストリーミング音声のコストが積み上がる仕組みと、Live をやめてバッチに退避する判断基準
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ API / SDK2026-10-16
models は 200 なのに generateContent だけ 403 になる日 — 切り分けの順番を先に決めておく
モデル一覧の取得は 200 で通るのに、生成リクエストだけが 403 permission_denied で止まるときの切り分け手順です。キー・プロジェクト・請求の順に確かめる小さな診断スクリプトと、リトライしてはいけない理由、サポートへ渡す材料の揃え方をまとめました。
◈ API / SDK2026-10-14
config に「Extra inputs are not permitted」が出たら、キーの綴りを一つずつ疑います
google-genai SDK で config を渡した途端に pydantic の ValidationError(extra_forbidden)が出る原因は、ほぼ綴りの一字違いです。手元で再現した出力と、呼び出し前に怪しいキーを洗う関数、text が None になる場合の見分け方を書き残します。
◈ API / SDK2026-10-08
停止日のない非推奨をどう扱うか — 画像モデルの移行先を、3つの条件で選び直す
10月6日に gemini-nano-banana-2.1 が GA になり、gemini-3.1-flash-image は停止日の書かれないまま非推奨になりました。解像度・参照画像・検索の3条件で移行先を選ぶ表と、確認用の短いスクリプトをまとめます。