mcpField
O
openai-audio

openai-audio

github.com/calesthioクリエイティブ・メディア219103 回インストール15 週間前に更新
リポジトリ

openai-audio について

音声生成、文字起こし、字幕のタイミング、英語への翻訳、音声対応チャットなど、範囲が定まった OpenAI 音声タスク向けのスキルです。ファイル単位のリクエストと継続的なリアルタイム音声セッションを区別し、モデルやエンドポイントの選択を案内します。

主な機能

  1. 01テキスト読み上げ生成
  2. 02音声文字起こしと話者識別
  3. 03字幕タイムスタンプの指針
  4. 04音声の英語翻訳
  5. 05モデルとエンドポイントの振り分け

活用シーン

  1. 01製品デモ用ナレーションの生成
  2. 02話者ラベル付きインタビューの文字起こし
  3. 03音声からタイミング付き字幕を作成
  4. 04チャットへの音声入力と出力の追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/calesthio/generative-media-skills --skill openai-audio

インストール後、Claude Code で/openai-audioを入力して読み込まれたか確認します。

同梱ファイルEVAL.md

詳細

OpenAI audio

ユーザーが範囲の定まったリクエストで OpenAI による音声の生成や理解を求めている場合は、このスキルを使用してください。対象には、ナレーションの生成、製品デモの音声化、ポッドキャストやインタビューの文字起こし、字幕のタイミング調整、英語への翻訳、音声の品質確認、既存のチャットワークフローへの音声入力・出力の追加が含まれます。

低レイテンシーの音声対話エージェント、ライブ通訳、SIP/WebRTC セッション、音声アクティビティ検出を継続的に行う場合は、これを主なガイドとして使用しないでください。これらは別のリアルタイム音声スキルの対象です。ただし、このスキルでは適用範囲の違いを説明できます。リクエストベースの音声 API はファイル、スクリプト、範囲の定まったリクエストに適しており、リアルタイムセッションはライブ音声イベントを伴う接続を維持する場合に適しています。ドキュメントの出典:OpenAI の音声ガイドでは、リクエストベースの API、リアルタイムセッション、マルチモーダルのチャット補完を区別しています。2026-07-10 に確認済み:https://developers.openai.com/api/docs/guides/audio

ソースのステータスと根拠のラベル

以下を、OpenAI の公開ドキュメントに基づき 2026-07-10 に確認された事実として扱ってください。

  • リクエストベースの音声エンドポイントは POST /v1/audio/speech です。gpt-4o-mini-tts、現在固定されているスナップショット gpt-4o-mini-tts-2025-12-15、tts-1、tts-1-hd を受け付け、利用可能な場合は組み込み音声とカスタム音声 ID に対応します。音声入力は 4,096 文字までです。以前の固定スナップショット gpt-4o-mini-tts-2025-03-20 は 2026-07-23 に提供終了予定で、公式ドキュメントでは代替として gpt-4o-mini-tts-2025-12-15 が記載されています。このスナップショットの提供終了を、固定されていないエイリアスの提供終了と混同しないでください。出典:https://developers.openai.com/api/reference/resources/audio/subresources/speech/methods/create および https://developers.openai.com/api/docs/deprecations

  • gpt-4o-mini-tts は指示形式による音声制御に対応しています。旧モデルの tts-1 と tts-1-hd は instructions パラメーターに対応していません。出典:https://developers.openai.com/api/reference/resources/audio/subresources/speech/methods/create

  • /v1/audio/speech の音声出力形式として、mp3、opus、aac、flac、wav、pcm が記載されています。speed の範囲は 0.25~4.0 です。ストリーミング形式には sse または audio を指定できますが、tts-1/tts-1-hd は SSE に対応していません。出典:https://developers.openai.com/api/reference/resources/audio/subresources/speech/methods/create

  • 音声テキスト変換エンドポイントは POST /v1/audio/transcriptions です。ドキュメントに記載されているモデルには gpt-4o-transcribe、gpt-4o-mini-transcribe、gpt-4o-transcribe-diarize、whisper-1 があり、レスポンス形式やストリーミングへの対応状況はモデルによって異なります。アップロードできるファイルは 25 MB までです。これより大きな入力は、文の途中で切らないように分割するか、圧縮してください。出典:https://developers.openai.com/api/docs/guides/speech-to-text

  • gpt-4o-transcribe-diarize は prompt、logprobs、timestamp_granularities[] に対応していません。入力が 30 秒を超える場合は chunking_strategy が必要であり、"auto" が推奨されています。出典:https://developers.openai.com/api/docs/guides/speech-to-text

  • 現行の GPT 音声テキスト変換モデルはストリーミングに対応していますが、whisper-1 は対応していません。ストリーミング音声テキスト変換では、transcript delta/done イベントが送信されます。出典:https://developers.openai.com/api/docs/guides/speech-to-text

  • 音声翻訳エンドポイントは POST /v1/audio/translations です。共通のモデル型 enum に追加の音声モデル ID が記載されている場合でも、API リファレンスによると、英語への翻訳に現在利用できるのは whisper-1 のみです。出典:https://developers.openai.com/api/reference/resources/audio/subresources/translations/methods/create

  • 音声対応のチャット補完では、modalities: ["text", "audio"]、音声/形式を指定する audio オブジェクト、および音声入力用の input_audio コンテンツブロックと組み合わせて gpt-audio-1.5 を利用できます。出典:https://developers.openai.com/api/docs/guides/audio

  • Realtime のルーティングは別です。Realtime の概要では、低レイテンシーの音声エージェントには gpt-realtime-2.1、ライブ翻訳には gpt-realtime-translate、ライブ音声テキスト変換には gpt-realtime-whisper が案内されています。出典:https://developers.openai.com/api/docs/guides/realtime

  • 料金は変動します。2026-07-10 時点で、OpenAI の料金ページには、Realtime/音声生成の料金がトークン単位または分単位で、gpt-4o-transcribe と gpt-4o-mini-transcribe の音声テキスト変換料金がトークン単位と推定分単位の料金で記載されています。本番環境で料金を提示する前に、必ず再確認してください。出典:https://developers.openai.com/api/docs/pricing

  • OpenAI のプラットフォームのデータ管理ページによると、API エンドポイントのデータはトレーニングに使用されず、エンドポイントごとに不正利用監視とアプリケーション状態の保持について記載されています。また、2026-07-10 時点で、/v1/audio/transcriptions と /v1/audio/translations では不正利用監視のためのデータ保持はなく、/v1/audio/speech ではデフォルトで不正利用監視のために 30 日間データが保持されるとされています。出典:https://developers.openai.com/api/docs/guides/your-data

  • OpenAI の利用ポリシーでは、本人の同意なく、本人の声を含む肖像を、その真正性について誤解を招く可能性のある形で使用することを禁止しています。また、TTS ガイドでは、音声が AI 生成であることをエンドユーザーに明確に開示することを求めています。カスタム音声の作成は対象となる顧客に限られ、別途、本人の同意を得るとともに、照合用の音声サンプルを提供する必要があります。出典:https://openai.com/policies/usage-policies/ および https://developers.openai.com/api/docs/guides/text-to-speech 以下は本番環境向けの経験則であり、OpenAI による保証ではありません。

  • クリエイティブブリーフで演技の方向付け、表現の細かな制御、または自然言語による音声メモを通じた反復が必要な場合は、まず gpt-4o-mini-tts を使用します。

  • 低レイテンシが品質や詳細な方向付けより重要な場合に限り tts-1 を使用します。tts-1-hd は、古いインテグレーションですでに依存している場合、または特定の音声/スクリプトで優位性がテストで確認された場合に限り使用します。

  • 精度、固有名詞、または話者向けに整えた出力がコストより重要な場合は gpt-4o-transcribe を使用します。大量処理、粗編集、下書き、コスト重視のバッチ文字起こしには gpt-4o-mini-transcribe を使用し、話者ラベルが重要な場合は gpt-4o-transcribe-diarize を使用します。

  • 英語への翻訳、または whisper-1 用としてドキュメントに記載されている単語/セグメントのタイムスタンプ形式が必要な場合は whisper-1 を使用します。それ以外の場合は、代表的な音声でテストしたうえで、新しい文字起こしモデルを優先します。

  • 完成メディアでは、高品質な WAV または FLAC の中間ファイルを生成して保管し、納品用コピーのみ MP3/AAC にエンコードします。

API 呼び出しの前にジョブのルートを決める

エンドポイントを選択する前に、次の変数を確認または推測します。

  1. 入力:テキストスクリプト、音声ファイル、ライブマイクストリーム、または音声を含む複合チャットターン。
  2. 出力:音声ファイル、文字起こし、英語に翻訳した文字起こし、キャプション、話者分離済みの文字起こし、音声付きチャット応答、またはライブ音声イベント。
  3. 時間形状:範囲が定まったリクエストか、継続的なセッションか。
  4. 承認リスク:著名人/従業員/顧客の声、規制対象の文字起こし、一般公開広告、法律/医療/金融に関するコンテンツ、未成年者、または機微な個人データ。
  5. 成果物の管理:未加工の入力、生成した音声、文字起こし、サイドカー、承認記録を保存する場所。

判断表:

ユーザーの意図主なルートモデル/API の選択備考
テキストからナレーションまたはセリフを生成する/v1/audio/speech通常は gpt-4o-mini-ttsファイル出力、バッチナレーション、スタイルを指定した音声演技に最適です。
古いシンプルな TTS インテグレーションで低レイテンシの音声を生成する/v1/audio/speechtts-1品質が低くなることを許容します。instructions は送信しないでください。
古い高品質 TTS 経路が必要な場合に音声を生成する/v1/audio/speechtts-1-hdgpt-4o-mini-tts と比較テストします。あらゆるブリーフで、新しいモデルより「HD」が優れていると決めつけないでください。
ファイルまたは範囲が定まったアップロードを文字起こしする/v1/audio/transcriptionsgpt-4o-transcribe または gpt-4o-mini-transcribe精度/コストに応じてモデルを選びます。サポートされているレスポンス形式のみをリクエストしてください。
話者ラベル付きで文字起こしする/v1/audio/transcriptionsgpt-4o-transcribe-diarize話者アノテーションが必要な場合は diarized_json を使用します。
キャプション用に単語/セグメントのタイムスタンプを作成する/v1/audio/transcriptions多くの場合、verbose_json とタイムスタンプの粒度を指定した whisper-1ドキュメントによると、タイムスタンプの粒度には verbose_json が必要です。単語単位のタイムスタンプを指定するとレイテンシが増加します。
英語以外の音声を英語に翻訳する/v1/audio/translationswhisper-1翻訳エンドポイントは一般的なローカライズ吹き替え用ではなく、英語のテキストを生成します。
既存のチャットアプリに音声の入出力を追加するChat Completionsmodalities と audio を指定した gpt-audio-1.5モデルが音声を推論し、1 回のチャットターンでテキスト/音声による応答を返す必要がある場合に使用します。
ライブの音声間変換、ライブ翻訳、ライブ文字起こし、SIP、WebRTC、または VAD を構築するRealtime APIこのスキルの対象外にルーティング専用のリアルタイム音声スキルを使用します。

ルートを黙って切り替えないでください。承認済みの経路が使えない場合は、何が失敗したのか、それがモデルへのアクセス、パラメーターの非互換性、ポリシー、プライバシー、コスト、または製品の不適合のどれに該当するのかを伝え、エンドポイントまたはモデルを切り替える前に確認を求めてください。

テキスト読み上げの本番運用

スクリプトの準備

プロンプトを入力する前に、音声での演技を想定して書きます。TTS モデルは間やトーンを表現できますが、見た目を重視した文章や、句読点が過剰な文章、略語を展開していない文章を救うことはできません。

制作上のヒューリスティック:

  • 密度の高い文章は、息継ぎできる長さの行に分けます。入れ子になった節よりも、1文に1つのアイデアを盛り込むほうが、通常は安全です。
  • 商品名、頭字語、人名、外国語の用語、数字、単位、URL、法的免責事項など、発音に注意が必要なものは、スクリプトまたは指示の中で発音を明記します。
  • 抑揚にはシンプルな句読点を使います。エンドポイントまたは後続のツールが明示的にサポートしていない限り、演劇的なマークアップは避けます。
  • できる限り、発音に関するメモと演技上のクリエイティブなメモは分けます。
  • 長いナレーションは段落またはシーンの区切りで分割し、チャンク間で音声と指示の設定を一貫させます。
  • スクリプト内で無音を正確に強制しようとせず、ポストプロダクションで短いルームトーンまたは無音の余白を残します。

演技指示書の例:

Voice: coral
Model: gpt-4o-mini-tts
Format: wav for editing; mp3 only for review copies
Performance instructions:
Warm, confident startup launch voice. Conversational, not announcer-like.
Medium pace, lightly excited on the first sentence, then grounded.
Pronounce "Aster Lane" as "ASS-ter lane"; pronounce "SOC 2" as "sock two".
Do not impersonate any real person or named celebrity.

ドキュメントに記載されている制御項目:

音声の選択

音声を人口統計上のラベルだけで説明しないでください。制作に必要な演技の役割を説明します。

  • 「リリースノートを読む、信頼感のある創業者」
  • 「穏やかなチュートリアルの司会者」
  • 「高級感のあるドキュメンタリーのナレーター」
  • 「速くても聞き取りやすいサポート用 IVR」
  • 「落ち着いた安全上の指示」

候補となる音声を2つか3つ選び、代表的な同じ一文から短いオーディション音声を生成して、全編の生成前に承認を得ます。発音や間の問題は実際の原稿で初めて現れることが多いため、一般的なデモ用の文ではなく、最終版のスクリプトそのもの、または内容の濃い抜粋を使います。

一般公開する音声の承認ゲート:

  1. スクリプトおよび参照されているブランド/キャラクターについて、ユーザーが権利を有していることを確認します。
  2. 選択した組み込み音声またはカスタム音声が、予定している用途で許可されていることを確認します。
  3. 同意のない実在の人物への紛らわしいなりすましを求める依頼がないことを確認します。
  4. トーンを判断するのに必要な長さを超えないオーディション音声を生成します。
  5. 選択した音声、モデル、指示、スクリプトのバージョンハッシュまたはファイル名、承認者、日付、承認済みオーディション音声のパスを記録します。
  6. その後にのみ、全バッチを生成します。

カスタム音声の場合は、組織が利用資格を満たしていることも確認し、プロバイダーの同意録音 ID を保管します。また、同意録音とサンプル録音に登場する人物が同一人物であることを確認し、Text-to-Speech Supplemental Agreement に従います。一般的なメールでの承認は、OpenAI が求める同意録音のワークフローの代わりにはなりません。

出力形式と保管管理

ライフサイクルに応じて形式を使い分けます。

  • wav または flac:編集用マスター、アーカイブ保管、後工程のミキシング。
  • mp3 または aac:ウェブでのプレビュー、SNS向けの下書き、コンパクトな納品。
  • opus:対象環境が対応している場合の、音声中心のストリーミングや低ビットレート配信。
  • pcm:生のPCMを必要とする低レベルの音声パイプライン。

生成した音声成果物はすべて、次の情報とともに記録します。

  • ソーススクリプトのパス、またはスクリプトの正確なテキスト;
  • モデル;
  • 音声;
  • 指示;
  • レスポンス形式;
  • 速度;
  • 生成日;
  • SDKログに記録されている場合はOpenAIのリクエストID;
  • 承認状況;
  • 出力ファイルのチェックサム;
  • 後処理の手順。

承認済みのマスターを上書きしないでください。セリフを再生成する場合は、新しいバージョンのファイルを作成し、マニフェストを更新してください。

完全な例:製品ローンチのナレーション

ユーザーの意図:一般公開するローンチ用のナレーションを1行作成し、一括生成の前に承認を得ます。

モデルとエンドポイント:/v1/audio/speech、gpt-4o-mini-tts、音声 marin、WAVマスター。

この呼び出しはオーディション用のサンプルであり、一括生成の許可ではありません。上記の権利、開示、保存、サンプル費用に関する事前確認を済ませてから実行し、このテイクの承認を記録してから実行範囲を広げてください。

Pythonの例:

from pathlib import Path
from openai import OpenAI

client = OpenAI()

script = (
    "Aster Lane turns every customer call into a searchable product signal, "
    "so your team can fix what matters first."
)

instructions = (
    "Speak as a warm, credible product-launch narrator. "
    "Confident but not hypey. Medium pace. "
    "Pronounce Aster as ASS-ter. "
    "Do not imitate any real person."
)

out = Path("artifacts/audio/aster-lane-launch-v001.wav")
out.parent.mkdir(parents=True, exist_ok=True)

with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="marin",
    input=script,
    instructions=instructions,
    response_format="wav",
    speed=1.0,
) as response:
    response.stream_to_file(out)

このような構成にしている理由:

  • 制作用マスターのため、WAVを使用しています。
  • 発音を明示的に指定しています。
  • 演技の指示は簡潔にし、有名人の物まねを避けています。
  • 以前のテイクを上書きせず、ファイルパスでバージョンを管理しています。

確認項目:

  • 「Aster」の発音が正しいこと。
  • 「searchable product signal」に自然な強調があること。
  • 広告のように大げさな読み上げになっていないこと。
  • 冒頭や末尾が途切れていないこと。
  • AI生成音声であることを明示する計画があること。
  • 音量と無音の処理は、モデルの生出力に任せず、後処理で行うこと。

音声テキスト化の本番運用

後工程の用途に応じて文字起こしモデルを選ぶ

確認済みの事実:

本番運用での指針:

  • 編集ログ、法務に関わるレビュー、固有表現の多いインタビューでは、精度の高いモデルを優先し、語彙を指定するプロンプトを追加します。
  • 長時間の音声を多数処理するラフカットの選別では、より安価なモデルを使用し、必要に応じて選択した区間を精度の高いモデルで再度文字起こしします。
  • 字幕では、単語単位のタイミング、セグメント単位のタイミング、話者ラベル、プレーンテキストのどれが必要かを最初に決めます。必要な出力形式によって、使用するモデルが決まる場合があります。
  • 信頼度が低い区間やノイズの多い区間では、音声全体を繰り返し送るのではなく、聞き取りやすいWAV区間を切り出し、語彙を指定するプロンプトを使って再試行します。話者分離モデルは prompt を受け付けないため、切り出した箇所の修正にはプロンプト対応の文字起こしモデルを使用し、そのテキストを話者分離済みのタイムラインと手作業で照合してください。
文字起こしのプロンプト

スタイル、スペル、専門用語、または前のセグメントからの続き方を指定するには、promptを使用します。文字起こし用プロンプトは、音声の言語に合わせてください。不明瞭な音声を作り上げたり「修正」したりするためにプロンプトを使わないでください。必要に応じて、レビュー後に聞き取れない箇所を明示してください。

プロンプトに含めるとよい内容:

  • 名前や製品用語;
  • わかっている場合は話者名;
  • 分野の用語;
  • 想定される頭字語;
  • 大文字・小文字の表記の好み;
  • 継続性を保つための前のセグメントの末尾;
  • 関連する場合は言語のバリエーション。

例:

This is an English product interview about Aster Lane, SOC 2, Snowflake, Zendesk, and call summarization. Preserve product names. Use "Aster Lane" not "Asterlane". Use "SOC 2" not "sock two" in the transcript.
完全な例:話者分離された会議の文字起こし

ユーザーの目的:35分間の顧客インタビューを文字起こしし、研究者向けに話者の発言順を維持します。

モデルとエンドポイント:/v1/audio/transcriptions、gpt-4o-transcribe-diarize、diarized_json。

Python の例:

from pathlib import Path
from openai import OpenAI

client = OpenAI()

audio_path = Path("raw/customer-interview-2026-07-10.m4a")  # Prevalidated at <25 MB.

with audio_path.open("rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="gpt-4o-transcribe-diarize",
        file=audio_file,
        response_format="diarized_json",
        chunking_strategy="auto",
    )

Path("artifacts/transcripts/customer-interview-diarized-v001.json").write_text(
    transcript.model_dump_json(indent=2),
    encoding="utf-8",
)

想定される結果:

  • 話者ラベル付きセグメントを含む、話者分離された JSON;
  • 質的コーディングに十分な構造;
  • 別途作成する場合を除き、単語単位の字幕タイミングは含みません。

よくある失敗モード:

  • 話者が重なっている場合、ラベルを誤ることがあります;
  • 繰り返し登場する製品名でも、スペルを間違えることがあります;
  • 話者分離を、法的な本人確認として扱ってはいけません。

修正方法:

  • レビュー後に話者ラベルを実名に手動で対応付けます;
  • 不明瞭な箇所は、プロンプトに対応したモデルと修正済みの語彙リストを使って別途文字起こしし、話者分離済みのタイムラインと照合します;
  • 生の文字起こしとレビュー済みの文字起こしは、別々の成果物として保持します。
完全な例:単語のタイムスタンプによる字幕タイミング

ユーザーの目的:単語単位のカラオケ風ハイライトが必要な、短いチュートリアル動画の字幕タイミングを作成します。

モデルとエンドポイント:/v1/audio/transcriptions、whisper-1、verbose_json、timestamp_granularities=["word"]。

Python の例:

from pathlib import Path
from openai import OpenAI

client = OpenAI()

with open("exports/tutorial-voice.wav", "rb") as audio_file:
    transcription = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
        response_format="verbose_json",
        timestamp_granularities=["word"],
        prompt=(
            "Tutorial narration about Aster Lane, SOC 2, and Zendesk. "
            "Use product capitalization exactly."
        ),
    )

Path("artifacts/captions/tutorial-word-timestamps-v001.json").write_text(
    transcription.model_dump_json(indent=2),
    encoding="utf-8",
)

この方法を選ぶ理由:

  • ドキュメントに記載されているタイムスタンプの粒度指定は、whisper-1に紐づいています。
  • 単語のタイムスタンプを追加すると遅延が増えるため、編集で単語単位のタイミングが実際に必要な場合にのみリクエストしてください。
  • 改行、読み上げ速度、アクセシビリティについて、文字起こしには引き続き人間または自動化による字幕の品質チェックが必要です。

英語への翻訳

音声翻訳エンドポイントは、音声を英語のテキストに翻訳します。多言語吹き替え、音声変換、またはローカライズされた音声制作として紹介しないでください。

次の場合に使用します:

  • ユーザーの音声が英語以外で、英語の文字起こしを求めている;
  • 後続の編集、調査、または字幕のワークフローが英語を前提としている;
  • ユーザーが、元の言語の言い回しや話者の表現のニュアンスが失われることを受け入れている。

次の場合は使用しないでください:

  • 成果物に元の言語の字幕が必要;
  • 対象言語が英語ではない;
  • ユーザーが別の言語の合成音声による吹き替えを希望している;
  • 人間によるレビューなしでは、話者の同一性や正確な法的文言が重要となる。

完全な例:

from pathlib import Path
from openai import OpenAI

client = OpenAI()

with open("raw/founder-clip-es.m4a", "rb") as audio_file:
    translation = client.audio.translations.create(
        model="whisper-1",
        file=audio_file,
        response_format="text",
        prompt=(
            "The speaker discusses Aster Lane, customer support analytics, "
            "and SOC 2. Translate to clear English while preserving product names."
        ),
    )

Path("artifacts/transcripts/founder-clip-english-v001.txt").write_text(
    translation,
    encoding="utf-8",
)

承認ルール:翻訳を公開する場合は、バイリンガルによるレビューを必須とするか、機械翻訳ではニュアンスが失われる可能性があることをユーザーが明示的に受け入れている必要があります。

音声対応チャット補完

音声が単なるファイル変換作業ではなく、会話モデルのターンの一部である場合は、音声対応モデルで Chat Completions を使用します。ドキュメントに記載されているパターンは、gpt-audio-1.5 を使用し、modalities に audio を含め、音声出力パラメーターを指定し、音声入力を base64 の input_audio コンテンツブロックとして含める方法です。出典:https://developers.openai.com/api/docs/guides/audio

次の用途には、この方法を使用してください。

  • 「この短い録音を聞いて、声に出して回答する」場合;
  • 既存の Chat Completions アプリで音声対応チャットを実現する場合;
  • 音声の内容を推論し、1 回の制限されたターンでテキストと音声の両方を返すエージェント。

次の用途には、この方法を使用しないでください。

  • 大量の文字起こし。/v1/audio/transcriptions のほうが簡単です;
  • 完成した原稿からのナレーションのみを行う場合。/v1/audio/speech のほうが簡単です;
  • マイクを使った継続的なやり取り。リアルタイムセッションのほうが適しています。

完全な例:

import base64
from pathlib import Path
from openai import OpenAI

client = OpenAI()

audio_bytes = Path("raw/user-question.wav").read_bytes()
encoded_audio = base64.b64encode(audio_bytes).decode("utf-8")

completion = client.chat.completions.create(
    model="gpt-audio-1.5",
    modalities=["text", "audio"],
    audio={"voice": "alloy", "format": "wav"},
    messages=[
        {
            "role": "system",
            "content": (
                "Answer as a concise support coach. If the recording is unclear, "
                "say what you could not determine rather than guessing."
            ),
        },
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What is the customer asking for?"},
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": encoded_audio,
                        "format": "wav",
                    },
                },
            ],
        },
    ],
)

message = completion.choices[0].message
Path("artifacts/chat-audio/answer-transcript-v001.txt").write_text(
    message.audio.transcript,
    encoding="utf-8",
)
Path("artifacts/chat-audio/answer-v001.wav").write_bytes(
    base64.b64decode(message.audio.data)
)

管理に関する注意:チャット音声の応答には、base64 の音声バイト列と文字起こしが含まれます。出力が承認済みの本番成果物である場合は、両方を保存してください。プライバシーポリシーでサーバー側への永続化が禁止されている場合は、使用前に store の動作と組織のデータ管理設定を確認してください。

レイテンシー、コスト、バッチ処理

コストに関する情報は変わりやすいため、本番環境で使用する当日に必ず料金を再確認してください。2026-07-10 時点で、OpenAI の料金ページには次の情報が掲載されています。

  • リアルタイム/音声生成モデルの料金は、モデルに応じて音声/テキスト/画像のトークン単位または分単位です;
  • gpt-4o-transcribe と gpt-4o-mini-transcribe の文字起こしモデルの料金には、分あたりの推定料金が含まれます;
  • Responses、Chat Completions、Realtime、Batch、Assistants API には、モデル/ツールの料金以外にプラットフォーム利用料はかかりません。出典:https://developers.openai.com/api/docs/pricing

本番環境での指針:

  • 音声生成モデルを使用する場合は、生成されたテキストと音声トークンの料金から TTS のコストを見積もります。文字起こしのコストは、音声の長さと最新の料金ページから見積もります。
  • 文字起こしでは、後から誤りを修正できる場合に限り、低コストの初回文字起こしを行います。法務、医療、コンプライアンス、公開用の引用資料には、粗い文字起こしを最終成果物として使用しないでください。
  • 長い TTS 原稿では、まず音声サンプルを生成し、声の承認後にのみナレーション全体をバッチ処理で生成します。
  • 長い文字起こしファイルでは、並列処理や再試行時の分離が必要な場合に限り、自然な間や場面の切れ目で分割します。重複は最小限に抑え、後処理で重複箇所を調整してください。
  • ストリーミングは UX のレイテンシー低減に役立ちますが、最終成果物を保存し、公開前に出力を確認する必要はなくなりません。

権利、同意、プライバシー、安全性

必須要件:

  • ユーザーの同意と権利がない限り、本物かどうかを誤認させる可能性のある方法で、人の声を生成、変換、模倣してはいけません。OpenAI のポリシーでは、誤認を招く状況において、同意なしに声を含む人物の肖像を使用することが明確に禁止されています。出典:https://openai.com/policies/usage-policies/
  • 合成音声を、実在の人物による生の発話または録音された発話として提示してはいけません。
  • ユーザーが合法的な権限を持ち、必要な参加者の同意を得ていない限り、私的な通話、インタビュー、会議、留守番電話のメッセージを処理してはいけません。
  • OpenAI の TTS 音声は AI が生成したものであり、人間の声ではないことをエンドユーザーに明確に開示してください。また、追加の法的要件、プラットフォーム要件、クライアント要件がある場合は、それらも満たしてください。
  • 未成年者、医療、法律、職場での監視、生体情報、または機微な個人データを扱う場合は、処理前に一度停止し、プライバシーとポリシーの審査を行ってください。
  • 話者ダイアライゼーションは、制作上の便宜として扱い、本人確認の証明として扱わないでください。
  • 文字起こしデータは機微な記録となる可能性があるものとして扱ってください。未加工の音声と文字起こしデータは、承認済みの保存場所にのみ保管してください。

2026-07-10 に確認したデータ管理に関する事実:

  • OpenAI のプラットフォームのデータ管理表によると、記載されているすべてのエンドポイントで、API データはトレーニングに使用されません。
  • 同表では、/v1/audio/transcriptions と /v1/audio/translations について、不正利用監視のための保持も、アプリケーション状態の保持もないと記載されています。
  • 同表では、/v1/audio/speech について、不正利用監視のため30日間保持し、アプリケーション状態の保持はないと記載されています。
  • Chat Completions と Responses の音声出力では、複数ターンの会話を可能にするため、アプリケーション状態が1時間保持される場合があります。
  • Zero Data Retention と Modified Abuse Monitoring の利用には承認が必要であり、エンドポイントごとに制限があります。出典:https://developers.openai.com/api/docs/guides/your-data

承認と成果物の保管プロトコル

本番用アセット、公開コンテンツ、顧客コンテンツ、規制対象の文字起こし、または有料のバッチジョブには、このプロトコルを使用してください。

生成または文字起こしを行う前に:

  1. エンドポイント、モデル、出力形式、およびその経路を選ぶ理由を明記します。
  2. 音声、録音、スクリプト、ブランド、音楽ベッドに関する権利と同意を確認します。
  3. プライバシー分類と保存場所を確認します。
  4. 費用が重要な場合は、費用見積もりの出典と日付を確認します。
  5. 最初の呼び出しがオーディション/サンプル用か、全件バッチ用かを確認します。

サンプルの作成後:

  1. 未加工の出力をバージョン管理されたパスに保存します。
  2. 短いレビュー記録を作成します。モデル、音声、プロンプト/指示、入力ファイル/スクリプト、形式、レビュー担当者、日付、合格/不合格を記録してください。
  3. 全件バッチを生成する前に、承認または修正の指示を求めます。

全件バッチの作成後:

  1. 未加工の入力、生成された出力、文字起こしデータ、サイドカー、マニフェスト、承認記録をそれぞれ分けて保存します。
  2. 後処理を行う前に、元のモデル出力を保持します。
  3. モデル、エンドポイント、パラメーター、ソースファイル、出力ファイル、チェックサム、承認状況を記録したマニフェストを作成します。
  4. 派生ファイルには、編集済み、正規化済み、ミックス済み、字幕付き、翻訳済み、レビュー済みのいずれかを明確に表示します。
  5. ユーザーの保持ポリシーで削除が求められ、かつ削除が記録されている場合を除き、未加工のソースまたは承認済みマスターを削除してはいけません。

最小限の成果物マニフェストの形式:

{
  "artifact_id": "narration_sc01_v003",
  "created_at": "2026-07-10T18:30:00Z",
  "provider": "openai",
  "endpoint": "/v1/audio/speech",
  "model": "gpt-4o-mini-tts",
  "voice": "marin",
  "input_script": "scripts/narration/sc01_v004.txt",
  "instructions": "Warm, credible, medium pace; pronounce Aster as ASS-ter.",
  "parameters": {
    "response_format": "wav",
    "speed": 1.0
  },
  "outputs": [
    {
      "path": "artifacts/audio/sc01_v003.wav",
      "role": "raw_model_master",
      "sha256": "..."
    }
  ],
  "approval": {
    "status": "approved",
    "approver": "user",
    "approved_at": "2026-07-10T18:45:00Z"
  },
  "source_verification": {
    "docs_checked_at": "2026-07-10",
    "pricing_checked_at": "2026-07-10"
  }
}

品質レビュー

生成音声では、次の点を確認します。

  • 名前、頭字語、数字、通貨、URL の発音;
  • ペース、間、息づかいの自然さ;
  • 依頼内容に対する感情表現;
  • チャンク間の一貫性;
  • クリッピング、音切れ、アーティファクト、ノイズ、不自然な終わり方;
  • 同意/開示要件への準拠;
  • ポストプロセス後のラウドネスとピークヘッドルーム。

文字起こしでは、次の点を確認します。

  • 話者ラベルと発話ターンの境界;
  • 固有表現と専門用語;
  • 実際の波形と照合したタイムスタンプ;
  • クロストーク、音楽、拍手、ノイズ中の欠落;
  • 聞き取れない箇所における幻覚テキスト;
  • 句読点と大文字・小文字の使い分け;
  • プライバシー保護のためのマスキング要件。

翻訳された文字起こしでは、次の点を確認します。

  • 期待どおり、出力が英語のみであるか;
  • 製品名が保持されているか;
  • 慣用表現やジョークが直訳されすぎていないか;
  • バイリンガルレビューなしで引用が公開されていないか;
  • 文化的に配慮が必要な表現や法的な文言が、人間によるレビューに回されているか。

よくある失敗と修正方法

失敗考えられる原因修正方法
TTS が製品名を誤って発音する名前の音声的な指定がないinstructions および/またはスクリプトに発音を追加し、該当する行だけを再生成します。
TTS が広告のナレーションのように聞こえる「興奮した」「プロフェッショナル」など、指示が大まかすぎる対象者、感情の流れ、ペース、避けるべきことを指定します。
TTS のチャンク間で内容が一致しないチャンクごとに指示が変わっている、またはスクリプトの区切りが不自然指示ブロックを固定し、シーンや段落の境界でチャンクに分けます。
編集に適した出力形式でない配信形式を早い段階で選んでいるマスターを WAV/FLAC で生成し、後続工程でコピーをトランスコードします。
文字起こしで固有名詞が抜ける用語のプロンプトがない、または音声の品質が低い用語のプロンプトを追加し、音質の良いセグメントを再試行して、最終結果を手動で QA します。
タイムスタンプを取得できないモデルまたはレスポンス形式が間違っているドキュメントに記載されたタイムスタンプ用の方法(whisper-1、verbose_json、要求する粒度)を使用します。
ストリーミングリクエストが無視されるwhisper-1 を使用しているストリーミングには GPT 文字起こしモデルを使用するか、Whisper の非ストリーミング動作を受け入れます。
英語以外の言語への翻訳を要求しているエンドポイントが合っていない英語のテキストにのみ翻訳エンドポイントを使用するか、このスキルの範囲外であるローカライズ/吹き替えのワークフローに回します。
話者ラベルを個人の身元として扱っているダイアライゼーションの誤用話者の対応付けは人間がレビューします。ダイアライゼーションを生体認証による ID として使用してはいけません。
プライバシー上の懸念により作業が止まる元音声に機密情報が含まれている、または同意が不明確作業を中断し、適法な根拠、保存、保持期間、開示要件を確認します。

制作作業の最終報告形式

成果物を引き渡す際は、次の内容を含めます。

  • 使用したエンドポイントとモデル;
  • 入力ソースと出力成果物のパス;
  • 出力に大きく影響したパラメーター;
  • 承認状況;
  • QA の結果と未解決のリスク;
  • 公開前に必要な人間によるレビュー;
  • 変動する料金、モデル、保持期間に関する情報の出典日付。

コメント