Skip to Content
リファレンス音声リファレンス: OpenAI リアルタイム音声 | 音声プロバイダー | Mastra ドキュメント

OpenAI Realtime Voice

OpenAIRealtimeVoice クラスは、OpenAI の WebSocket ベースの API を使用してリアルタイムの音声対話機能を提供します。リアルタイムの音声から音声への変換、音声活動検出、およびイベントベースのオーディオストリーミングをサポートしています。

使用例

import { OpenAIRealtimeVoice } from "@mastra/voice-openai-realtime"; import { playAudio, getMicrophoneStream } from "@mastra/node-audio"; // Initialize with default configuration using environment variables const voice = new OpenAIRealtimeVoice(); // Or initialize with specific configuration const voiceWithConfig = new OpenAIRealtimeVoice({ chatModel: { apiKey: 'your-openai-api-key', model: 'gpt-4o-mini-realtime-preview-2024-12-17', options: { sessionConfig: { turn_detection: { type: 'server_vad', threshold: 0.6, silence_duration_ms: 1200 } } } }, speaker: 'alloy' // Default voice }); // Establish connection await voice.connect(); // Set up event listeners voice.on('speaker', ({ audio }) => { // Handle audio data (Int16Array) pcm format by default playAudio(audio); }); voice.on('writing', ({ text, role }) => { // Handle transcribed text console.log(`${role}: ${text}`); }); // Convert text to speech await voice.speak('Hello, how can I help you today?', { speaker: 'echo' // Override default voice }); // Process audio input const microphoneStream = getMicrophoneStream(); await voice.send(microphoneStream); // When done, disconnect voice.connect();

設定

コンストラクタオプション

chatModel?:

object
= {}
OpenAIリアルタイムモデルの設定。

speaker?:

string
= 'alloy'
音声合成のデフォルト音声ID。

chatModel

model?:

string
= 'gpt-4o-mini-realtime-preview-2024-12-17'
リアルタイム音声インタラクションに使用するモデルID。

apiKey?:

string
OpenAI APIキー。OPENAI_API_KEY環境変数にフォールバックします。

tools?:

ToolsInput
モデルの機能を拡張するためのツール設定。OpenAIRealtimeVoiceがエージェントに追加されると、エージェントに設定されたツールは自動的に音声インターフェースで利用可能になります。

options?:

object
リアルタイムクライアントの追加オプション。

options

sessionConfig?:

Realtime.SessionConfig
リアルタイムセッションの設定。

url?:

string
カスタムWebSocket URL。

dangerouslyAllowAPIKeyInBrowser?:

boolean
= false
ブラウザ環境でAPIキーを許可するかどうか。

debug?:

boolean
= false
デバッグログを有効にします。

音声活動検出 (VAD) 設定

type?:

string
= 'server_vad'
使用するVADのタイプ。サーバー側のVADはより高い精度を提供します。

threshold?:

number
= 0.5
音声検出の感度 (0.0-1.0)。

prefix_padding_ms?:

number
= 1000
音声が検出される前に含めるオーディオのミリ秒。

silence_duration_ms?:

number
= 1000
ターンを終了する前の無音のミリ秒。

メソッド

connect()

OpenAIリアルタイムサービスへの接続を確立します。speak、listen、またはsend関数を使用する前に呼び出す必要があります。

returns:

Promise<void>
接続が確立されたときに解決されるPromise。

speak()

設定された音声モデルを使用してスピーキングイベントを発生させます。入力として文字列またはリーダブルストリームのいずれかを受け入れることができます。

input:

string | NodeJS.ReadableStream
音声に変換するテキストまたはテキストストリーム。

options.speaker?:

string
= Constructorのスピーカー値
この特定のスピーチリクエストに使用する音声ID。

戻り値: Promise<void>

listen()

音声認識のために音声入力を処理します。音声データのリーダブルストリームを受け取り、書き起こされたテキストと共に「listening」イベントを発生させます。

audioData:

NodeJS.ReadableStream
書き起こすための音声ストリーム。

戻り値: Promise<void>

send()

ライブマイク入力のような連続音声ストリーミングシナリオのために、リアルタイムでOpenAIサービスに音声データをストリームします。

audioData:

NodeJS.ReadableStream
サービスに送信する音声ストリーム。

戻り値: Promise<void>

updateConfig()

音声インスタンスのセッション設定を更新します。これを使用して、音声設定、ターン検出、その他のパラメータを変更できます。

sessionConfig:

Realtime.SessionConfig
適用する新しいセッション設定。

戻り値: void

addTools()

音声インスタンスに一連のツールを追加します。ツールは、会話中にモデルが追加のアクションを実行できるようにします。OpenAIRealtimeVoiceがエージェントに追加されると、そのエージェントに設定されたツールは自動的に音声インターフェースで利用可能になります。

tools?:

ToolsInput
装備するツールの設定。

戻り値: void

close()

OpenAIリアルタイムセッションから切断し、リソースをクリーンアップします。音声インスタンスの使用が終了したら呼び出す必要があります。

戻り値: void

getSpeakers()

利用可能な音声スピーカーのリストを返します。

戻り値: Promise<Array<{ voiceId: string; [key: string]: any }>>

on()

音声イベントのためのイベントリスナーを登録します。

event:

string
リッスンするイベントの名前。

callback:

Function
イベントが発生したときに呼び出される関数。

戻り値: void

off()

以前に登録されたイベントリスナーを削除します。

event:

string
リッスンを停止するイベントの名前。

callback:

Function
削除する特定のコールバック関数。

戻り値: void

イベント

OpenAIRealtimeVoice クラスは次のイベントを発行します:

speaking:

event
モデルからオーディオデータが受信されたときに発行されます。コールバックは { audio: Int16Array } を受け取ります。

writing:

event
文字起こしされたテキストが利用可能になったときに発行されます。コールバックは { text: string, role: string } を受け取ります。

error:

event
エラーが発生したときに発行されます。コールバックはエラーオブジェクトを受け取ります。

OpenAI リアルタイムイベント

‘openAIRealtime:’ をプレフィックスとして付けることで、OpenAI リアルタイムユーティリティイベントをリッスンすることもできます:

openAIRealtime:conversation.created:

event
新しい会話が作成されたときに発行されます。

openAIRealtime:conversation.interrupted:

event
会話が中断されたときに発行されます。

openAIRealtime:conversation.updated:

event
会話が更新されたときに発行されます。

openAIRealtime:conversation.item.appended:

event
会話にアイテムが追加されたときに発行されます。

openAIRealtime:conversation.item.completed:

event
会話内のアイテムが完了したときに発行されます。

利用可能な声

以下の声のオプションが利用可能です:

  • alloy: 中立的でバランスの取れた
  • ash: 明瞭で正確な
  • ballad: メロディックで滑らかな
  • coral: 暖かく親しみやすい
  • echo: 共鳴し深みのある
  • sage: 落ち着いて思慮深い
  • shimmer: 明るくエネルギッシュな
  • verse: 多才で表現力豊かな