Azure Voice Live API を探索する

完了

Voice Live API を使用すると、開発者はリアルタイムの双方向通信を使用して音声対応アプリケーションを作成できます。 このユニットでは、そのアーキテクチャ、構成、実装について説明します。

Voice Live API の主な機能

Voice Live API は、WebSocket 接続を使用したリアルタイム通信を提供します。 音声認識、テキスト読み上げ合成、アバター ストリーミング、オーディオ処理などの高度な機能がサポートされています。

  • JSON 形式のイベントは、会話、オーディオ ストリーム、応答を管理します。
  • イベントは、クライアント イベント (クライアントからサーバーに送信) とサーバー イベント (サーバーからクライアントに送信) に分類されます。

主な機能は次のとおりです。

  • PCM16 や G.711 などの複数の形式をサポートするリアルタイムオーディオ処理。
  • OpenAI 音声や Azure カスタム音声などの高度な音声オプション。
  • ビデオとアニメーションに WebRTC を使用したアバター統合。
  • ノイズリダクションとエコーキャンセルを内蔵。

Voice Live API は、Microsoft Foundry リソース用に最適化されています。 完全な機能の可用性と最高の Microsoft Foundry 統合エクスペリエンスには、Microsoft Foundry リソースを使用することをお勧めします。

サポートされているモデルとリージョンの表については、 Voice Live API の概要を参照してください。

Voice Live API に接続する

Voice Live API では、Microsoft Entra (キーレス) と API キーの 2 つの認証方法がサポートされています。 Microsoft Entra は、Microsoft Foundry リソースにトークン ベースの認証を使用します。 取得した認証トークンは、Bearer ヘッダーを持つAuthorization トークンを使用して適用します。

Microsoft Entra ID で推奨されるキーレス認証では、 Cognitive Services ユーザー ロールをユーザー アカウントまたはマネージド ID に割り当てる必要があります。 トークンは、Azure CLI または Azure SDK を使用して生成します。 トークンは、https://ai.azure.com/.default スコープまたはレガシ https://cognitiveservices.azure.com/.default スコープで生成する必要があります。 WebSocket 接続要求の Authorization ヘッダーのトークンを、 Bearer <token>形式で使用します。

キー アクセスの場合、API キーは 2 つの方法のいずれかで提供できます。 プリハンドシェイク接続では、 api-key 接続ヘッダーを使用できます。 このオプションはブラウザー環境内では使用できません。 または、要求 URI に対して api-key クエリ文字列パラメーターを使用することもできます。 https/wss を使用する場合、クエリ文字列パラメーターは暗号化されます。

プリハンドシェイク接続の api-key 接続ヘッダーは、ブラウザー環境では使用できません。

WebSocket エンドポイント

使用するエンドポイントは、リソースへのアクセス方法によって異なります。 AI Foundry プロジェクト (エージェント) への接続またはモデルへの接続を介してリソースにアクセスできます。

  • プロジェクト接続: エンドポイントは次の値です。 wss://<your-ai-foundry-resource-name>.services.ai.azure.com/voice-live/realtime?api-version=2025-10-01
  • モデル接続: エンドポイントが wss://<your-ai-foundry-resource-name>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-10-01

エンドポイントはすべてのモデルで同じです。 唯一の違いは、必要な model クエリ パラメーターです。または、エージェント サービスを使用する場合は agent_id パラメーターと project_id パラメーターです。

Voice Live API イベント

クライアント イベントとサーバー イベントは、音声ライブ API 内での通信と制御を容易にします。 主なクライアント イベントは次のとおりです。

  • session.update: セッション構成を変更します。
  • input_audio_buffer.append: バッファーにオーディオ データを追加します。
  • response.create: モデル推論を使用して応答を生成します。

サーバー イベントは、フィードバックと状態の更新を提供します。

  • session.updated: セッション構成の変更を確認します。
  • response.done: 応答生成の完了を示します。
  • conversation.item.created: 新しい会話アイテムが追加されたときに通知します。

クライアント/サーバー イベントの完全な一覧については、 Voice Live API リファレンスを参照してください

イベントを適切に処理することで、クライアントとサーバー間のシームレスな対話が保証されます。

Voice Live API のセッション設定を構成する

多くの場合、新しく確立された Voice ライブ API セッションで呼び出し元によって送信される最初のイベントは、 session.update イベントです。 このイベントは、さまざまな入力と出力の動作を制御します。 セッション設定は、 session.update イベントを使用して動的に更新できます。 開発者は、音声の種類、モダリティ、ターン検出、およびオーディオ形式を構成できます。

構成の例

{
  "type": "session.update",
  "session": {
    "modalities": ["text", "audio"],
    "voice": {
      "type": "openai",
      "name": "alloy"
    },
    "instructions": "You are a helpful assistant. Be concise and friendly.",
    "input_audio_format": "pcm16",
    "output_audio_format": "pcm16",
    "input_audio_sampling_rate": 24000,
    "turn_detection": {
      "type": "azure_semantic_vad",
      "threshold": 0.5,
      "prefix_padding_ms": 300,
      "silence_duration_ms": 500
    },
    "temperature": 0.8,
    "max_response_output_tokens": "inf"
  }
}

ヒント

インテリジェントなターン検出と会話フローの改善には、Azure セマンティック VAD を使用します。

音声ライブ API を使用してリアルタイムオーディオ処理を実装する

リアルタイム オーディオ処理は、音声ライブ API のコア機能です。 開発者は、特定のクライアント イベントを使用してオーディオ バッファーを追加、コミット、クリアできます。

  • オーディオの追加: 入力バッファーにオーディオ バイトを追加します。
  • オーディオをコミットする: 文字起こしまたは応答の生成のためにオーディオ バッファーを処理します。
  • 音声をクリアする: バッファーからオーディオ データを削除します。

ノイズリダクションとエコーキャンセルは、オーディオ品質を向上させるために構成することができます。 例えば次が挙げられます。

{
  "type": "session.update",
  "session": {
    "input_audio_noise_reduction": {
      "type": "azure_deep_noise_suppression"
    },
    "input_audio_echo_cancellation": {
      "type": "server_echo_cancellation"
    }
  }
}

ノイズリダクションは、入力オーディオをフィルタリングすることでVAD精度とモデル性能を向上させます。

音声ライブ API を使用してアバター ストリーミングを統合する

Voice Live API は、対話型アプリケーション用の WebRTC ベースのアバター ストリーミングをサポートしています。 開発者は、ビデオ、アニメーション、ブレンドシェイプの設定を構成できます。

  • session.avatar.connect イベントを使用して、クライアントの SDP オファーを提供します。
  • ビデオの解像度、ビットレート、コーデックの設定を構成します。
  • ブレンドシェイプやビセームなどのアニメーション出力を定義します。

構成の例

{
  "type": "session.avatar.connect",
  "client_sdp": "<client_sdp>"
}

ヒント

アバターの操作で高い視覚品質を得るには、高解像度のビデオ設定を使用します。