注
現在、この機能はパブリック プレビュー段階にあります。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
Voice Live API は、 Azure OpenAI Realtime API と比較して、対応する WebSocket インターフェイスを提供します。
特に明記されていない限り、Voice Live API は Azure OpenAI Realtime API と同じイベントを使用します。 このドキュメントでは、Voice Live API に固有のイベント メッセージ プロパティのリファレンスを提供します。
サポートされているモデルとリージョン
サポートされているモデルとリージョンの表については、 Voice Live API の概要を参照してください。
認証
Voice Live API にアクセスするには、 Azure AI Foundry リソース が必要です。
WebSocket エンドポイント
Voice Live API の WebSocket エンドポイントが wss://<your-ai-foundry-resource-name>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-05-01-preview
。
エンドポイントはすべてのモデルで同じです。 唯一の違いは、必要な model
クエリ パラメーターです。
たとえば、カスタム ドメインを持つリソースのエンドポイントは、次のようになります。 wss://<your-ai-foundry-resource-name>.cognitiveservices.azure.com/voice-live/realtime?api-version=2025-05-01-preview&model=gpt-4o-mini-realtime-preview
資格情報
Voice Live API では、次の 2 つの認証方法がサポートされています。
- Microsoft Entra (推奨): Azure AI Foundry リソースにトークンベースの認証を使用します。
Bearer
ヘッダーを含むAuthorization
トークンを使用して、取得した認証トークンを適用します。 - API キー:
api-key
は、次の 2 つの方法のいずれかで提供できます。- ハンドシェイク前の接続上で
api-key
接続ヘッダーを使用します。 このオプションはブラウザー環境内では使用できません。 - 要求 URI 上で
api-key
クエリ文字列パラメーターを使用します。 https/wss を使用する場合、クエリ文字列パラメーターは暗号化されます。
- ハンドシェイク前の接続上で
Microsoft Entra ID で推奨されるキーレス認証の場合、次のことを行う必要があります。
Cognitive Services User
ロールをユーザー アカウントまたはマネージド ID に割り当てます。 Azure portal の [アクセス制御 (IAM)]>[ロールの割り当ての追加] で、ロールを割り当てることができます。- Azure CLI または Azure SDK を使用してトークンを生成します。 トークンは、
https://cognitiveservices.azure.com/.default
スコープで生成する必要があります。 - WebSocket 接続要求の
Authorization
ヘッダーのトークンを、Bearer <token>
形式で使用します。
セッションの構成
多くの場合、新しく確立された Voice Live API セッションで呼び出し元によって送信される最初のイベントは、 session.update
イベントです。 このイベントは、出力と応答の生成プロパティで、後で response.create
イベントを使用してオーバーライド可能な、幅広い入力および出力動作のセットを制御します。
ターン検出、入力オーディオ処理、音声出力など、セッションのいくつかの側面を構成するメッセージ session.update
例を次に示します。 ほとんどのセッション パラメーターは省略可能であり、必要でない場合は省略できます。
{
"turn_detection": {
"type": "azure_semantic_vad",
"threshold": 0.3,
"prefix_padding_ms": 200,
"silence_duration_ms": 200,
"remove_filler_words": false,
"end_of_utterance_detection": {
"model": "semantic_detection_v1",
"threshold": 0.01,
"timeout": 2,
},
},
"input_audio_noise_reduction": {"type": "azure_deep_noise_suppression"},
"input_audio_echo_cancellation": {"type": "server_echo_cancellation"},
"voice": {
"name": "en-US-Aria:DragonHDLatestNeural",
"type": "azure-standard",
"temperature": 0.8,
},
}
サーバーは、session.updated
イベントで応答してセッション構成を確認します。
セッションのプロパティ
次のセクションでは、session
メッセージで構成できるsession.update
オブジェクトのプロパティについて説明します。
ヒント
サポートされているイベントとプロパティの包括的な説明については、 Azure OpenAI Realtime API イベントのリファレンス ドキュメントを参照してください。 このドキュメントでは、Voice Live API を使用した機能強化であるイベント メッセージ プロパティのリファレンスを提供します。
入力オーディオのプロパティ
入力オーディオ プロパティを使用して、入力オーディオ ストリームを構成できます。
プロパティ | タイプ | 必須または省略可能 | 説明 |
---|---|---|---|
input_audio_sampling_rate |
整数 (integer) | オプション | 入力オーディオのサンプリング レート。 サポートされている値は 16000 と 24000 です。 既定値は 24000 です。 |
input_audio_echo_cancellation |
オブジェクト | オプション | クライアント側のエコー キャンセルを必要とせずに、モデル独自の音声からエコーを削除することで、入力オーディオ品質を向上させます。 エコー キャンセルを有効にするには、 type の input_audio_echo_cancellation プロパティを設定します。type でサポートされる値はserver_echo_cancellation です。これは、モデルの音声がスピーカーを介してエンド ユーザーに再生され、マイクがモデル独自の音声を取り出すときに使用されます。 |
input_audio_noise_reduction |
オブジェクト | オプション | 環境の背景ノイズを抑制または削除することで、入力オーディオの品質を向上させます。 ノイズ抑制を有効にするには、 type のinput_audio_noise_reduction プロパティを設定します。type のサポートされる値は、マイクに最も近いスピーカー用に最適化されるazure_deep_noise_suppression です。 |
入力オーディオ プロパティの例を次に示します。セッション オブジェクトは次のとおりです。
{
"input_audio_sampling_rate": 24000,
"input_audio_noise_reduction": {"type": "azure_deep_noise_suppression"},
"input_audio_echo_cancellation": {"type": "server_echo_cancellation"},
}
ノイズ抑制とエコーキャンセル
ノイズ抑制は、環境背景ノイズを抑制または除去することによって、入力オーディオ品質を向上させます。 ノイズ抑制は、モデルがエンドユーザーをより高い精度で理解し、中断検出やターン終了検出などの信号の精度を向上するのに役立ちます。
サーバーエコーキャンセルは、クライアント側のエコーキャンセルを必要とせずに、モデルの独自の音声からエコーを削除することで、入力オーディオ品質を向上させます。 サーバーエコーキャンセルは、モデルの音声がスピーカーを介してエンドユーザーに再生され、マイクがモデル独自の音声を取り上げるときに便利です。
注
サービスは、クライアントが応答オーディオを受信するとすぐに再生することを前提としています。 再生が 3 秒を超える遅延の場合、エコー キャンセル品質が影響を受けます。
{
"session": {
"input_audio_noise_reduction": {
"type": "azure_deep_noise_suppression"
},
"input_audio_echo_cancellation": {
"type": "server_echo_cancellation"
}
}
}
会話の改善
Voice Live API は、自然なエンドユーザーの会話フローに堅牢性を提供する会話型の機能強化を提供します。
ターン検出パラメーター
ターン検出は、エンド ユーザーが発話を開始または停止したときに検出するプロセスです。 Voice Live API は、ターン検出を構成するために Azure OpenAI Realtime API turn_detection
プロパティに基づいています。 azure_semantic_vad
の種類は、Voice Live API と Azure OpenAI Realtime API の 1 つの差別化要因です。
プロパティ | タイプ | 必須または省略可能 | 説明 |
---|---|---|---|
type |
ひも | オプション | 使用するターン検出システムの種類。 種類 server_vad オーディオ ボリュームに基づいて音声の開始と終了を検出します。タイプ azure_semantic_vad は、セマンティックな意味に基づいて音声の開始と終了を検出します。 Azure セマンティック音声アクティビティ検出 (VAD) では、つなぎ言葉を削除して誤アラーム率を下げることでターン検出が向上します。 現在のつなぎ言葉の一覧は ['ah', 'umm', 'mm', 'uh', 'huh', 'oh', 'yeah', 'hmm'] 。 継続的な応答がある場合、サービスはこれらの単語を無視します。 機能ワードの削除機能は、クライアントが応答オーディオを受信するとすぐに再生することを前提としています。 azure_semantic_vad 型は、gpt-4o-realtime-preview モデルとgpt-4o-mini-realtime-preview モデルではサポートされていません。既定値は server_vad です。 |
threshold |
数値 | オプション | より高いしきい値には、ユーザーが話そうとしているという信頼度の高いシグナルが必要です。 |
prefix_padding_ms |
整数 (integer) | オプション | 音声検出信号の開始前に含めるオーディオの量 (ミリ秒単位)。 |
silence_duration_ms |
整数 (integer) | オプション | 音声の終了を検出するためのユーザーの無音時間 (ミリ秒単位)。 |
end_of_utterance_detection |
オブジェクト | オプション | 発話の終了検出の構成。 Voice Live API では、エンド ユーザーが自然な一時停止を許可しながら話を停止したタイミングを示す高度なターン終了検出が提供されます。 発話の検出の終了により、ユーザーが認識できる待機時間を追加することなく、ターン終了の早期シグナルを大幅に削減できます。 発話の終了検出は、 azure_semantic_vad を使用している場合にのみ使用できます。end_of_utterance_detection のプロパティは次のとおりです。- model : 発話の検出の終了に使用するモデル。 サポートされている値は semantic_detection_v1 。- threshold : 発話の終了を決定するしきい値 (0.0 から 1.0)。 既定値は 0.01 です。- timeout : タイムアウト (秒単位)。 既定値は 2 秒です。 |
セッション オブジェクトでの発話検出の終了の例を次に示します。
{
"session": {
"turn_detection": {
"type": "azure_semantic_vad",
"threshold": 0.3,
"prefix_padding_ms": 300,
"silence_duration_ms": 500,
"remove_filler_words": false,
"end_of_utterance_detection": {
"model": "semantic_detection_v1",
"threshold": 0.01,
"timeout": 2
}
}
}
}
Azure のテキスト読み上げを通じた音声出力
voice
パラメーターを使用して、標準音声またはカスタム音声を指定できます。 音声はオーディオ出力に使用されます。
voice
オブジェクトには、次のプロパティがあります。
プロパティ | タイプ | 必須または省略可能 | 説明 |
---|---|---|---|
name |
ひも | 必須 | 音声の名前を指定します。 たとえば、en-US-AriaNeural のようにします。 |
type |
ひも | 必須 | azure-standard とazure-custom の間の Azure 音声の種類の構成。 |
temperature |
数値 | オプション | Azure HD 音声に適用できる温度を指定します。 値が大きいほど、イントネーションやプロソディなどの変動レベルが高くなります。 |
Azure スタンダードボイス
標準 (azure-standard
) 音声の部分的なメッセージの例を次に示します。
{
"voice": {
"name": "en-US-AriaNeural",
"type": "azure-standard"
}
}
標準音声の完全な一覧については、 Speech サービスの言語と音声のサポートに関するページを参照してください。
Azure の高解像度の音声
標準の高解像度音声の session.update
メッセージの例を次に示します。
{
"voice": {
"name": "en-US-Aria:DragonHDLatestNeural",
"type": "azure-standard",
"temperature": 0.8 // optional
}
}
標準の高解像度音声の完全な一覧については、 高解像度の音声に関するドキュメントを参照してください。
Azure カスタム音声
{
"voice": {
"name": "en-US-CustomNeural",
"type": "azure-custom",
"endpoint_id": "your-endpoint-id", // a guid string
"temperature": 0.8 // optional, value range 0.0-1.0, only take effect when using HD voices
}
}
Azure テキスト読み上げアバター
avatar
パラメーターを使用して、標準アバターまたはカスタム アバターを指定できます。 アバターはオーディオ出力と同期されます。
avatar
パラメーターを指定して、オーディオ出力と同期されるアバター出力を有効にすることができます。
{
"session": {
"avatar": {
"character": "lisa",
"style": "casual-sitting",
"customized": false,
"ice_servers": [
{
"urls": ["REDACTED"],
"username": "",
"credential": ""
}
],
"video": {
"bitrate": 2000000,
"codec": "h264",
"crop": {
"top_left": [560, 0],
"bottom_right": [1360, 1080],
},
"resolution": {
"width": 1080,
"height": 1920,
},
"background": {
"color": "#00FF00FF"
// "image_url": "https://example.com/example.jpg"
}
}
}
}
}
ice_servers
フィールドは省略可能です。 指定しない場合、サービスはサーバー固有の ICE サーバーをsession.updated
応答で返します。 また、サーバー固有の ICE サーバーを使用して、ローカル ICE 候補を生成する必要があります。
ICE 候補が収集された後、クライアント SDP を送信します。
{
"type": "session.avatar.connect",
"client_sdp": "your-client-sdp"
}
そして、サービスはサーバー SDP で応答します。
{
"type": "session.avatar.connecting",
"server_sdp": "your-server-sdp"
}
その後、アバターをサーバー SDP に接続できます。
オーディオタイムスタンプ
Azure 音声を使用し、 output_audio_timestamp_types
が構成されている場合、サービスは応答で response.audio_timestamp.delta
を返し、すべてのタイムスタンプ メッセージが返されたときに response.audio_timestamp.done
します。
オーディオ タイムスタンプを構成するには、session.update メッセージで output_audio_timestamp_types
を設定します。
{
"session": {
"output_audio_timestamp_types": ["word"]
}
}
サービスは、オーディオが生成されたときに応答のオーディオ タイムスタンプを返します。
{
"event_id": "<event_id>",
"type": "response.audio_timestamp.delta",
"response_id": "<response_id>",
"item_id": "<item_id>",
"output_index": 0,
"content_index": 0,
"audio_offset_ms": 490,
"audio_duration_ms": 387,
"text": "end",
"timestamp_type": "word"
}
また、すべてのタイムスタンプが返されると、 response.audio_timestamp.done
メッセージが送信されます。
{
"event_id": "<event_id>",
"type": "response.audio_timestamp.done",
"response_id": "<response_id>",
"item_id": "<item_id>",
}
口形素
animation.outputs
を {"viseme_id"}
に設定して、Azure 標準音声または Azure カスタム音声を使用できます。 サービスは応答で response.animation_viseme.delta
を返し、すべての口形素メッセージが返されたときに response.animation_viseme.done
を返します。
口形素を構成するには、animation.outputs
メッセージで session.update
を設定します。 animation.outputs
パラメーターは省略可能です。 返されるアニメーション出力を構成します。 現時点では、 viseme_id
のみをサポートしています。
{
"type": "session.update",
"event_id": "your-session-id",
"session": {
"voice": {
"name": "en-US-AriaNeural",
"type": "azure-standard",
},
"modalities": ["text", "audio"],
"instructions": "You are a helpful assistant.",
"turn_detection": {
"type": "server_vad"
},
"output_audio_timestamp_types": ["word"], // optional
"animation": {
"outputs": ["viseme_id"], // optional
},
}
}
output_audio_timestamp_types
パラメーターは省略可能です。 生成されたオーディオに対して返されるオーディオ タイムスタンプを構成します。 現時点では、 word
のみをサポートしています。
オーディオが生成されたときに、サービスは応答で口形素アラインメントを返します。
{
"event_id": "<event_id>",
"type": "response.animation_viseme.delta",
"response_id": "<response_id>",
"item_id": "<item_id>",
"output_index": 0,
"content_index": 0,
"audio_offset_ms": 455,
"viseme_id": 20
}
すべての口形素メッセージが返されると、response.animation_viseme.done
メッセージが送信されます。
{
"event_id": "<event_id>",
"type": "response.animation_viseme.done",
"response_id": "<response_id>",
"item_id": "<item_id>",
}