跳到主要内容
非官方简体中文翻译,内容版权归 Mastra 所有,遵循 Apache-2.0 许可。

OpenAI

Voice
Voice的直接链接

The OpenAIVoice class in Mastra provides text-to-speech and speech-to-text capabilities using OpenAI's models.

Usage example
Usage example的直接链接

import { OpenAIVoice } from '@mastra/voice-openai'

// Initialize with default configuration using environment variables
const voice = new OpenAIVoice()

// Or initialize with specific configuration
const voiceWithConfig = new OpenAIVoice({
speechModel: {
name: 'tts-1-hd',
apiKey: 'your-openai-api-key',
},
listeningModel: {
name: 'whisper-1',
apiKey: 'your-openai-api-key',
},
speaker: 'alloy', // Default voice
})

// Convert text to speech
const audioStream = await voice.speak('Hello, how can I help you?', {
speaker: 'nova', // Override default voice
speed: 1.2, // Adjust speech speed
})

// Convert speech to text
const text = await voice.listen(audioStream, {
filetype: 'mp3',
})

Configuration
Configuration的直接链接

Constructor options
Constructor options的直接链接

speechModel?:

OpenAIConfig
= { name: 'tts-1' }
Configuration for text-to-speech synthesis.
OpenAIConfig

name?:

'tts-1' | 'tts-1-hd' | 'whisper-1'
Model name. Use 'tts-1-hd' for higher quality audio.

apiKey?:

string
OpenAI API key. Falls back to OPENAI_API_KEY environment variable.

listeningModel?:

OpenAIConfig
= { name: 'whisper-1' }
Configuration for speech-to-text recognition.
OpenAIConfig

name?:

'tts-1' | 'tts-1-hd' | 'whisper-1'
Model name. Use 'tts-1-hd' for higher quality audio.

apiKey?:

string
OpenAI API key. Falls back to OPENAI_API_KEY environment variable.

speaker?:

OpenAIVoiceId
= 'alloy'
Default voice ID for speech synthesis.

Methods
Methods的直接链接

speak()
speak的直接链接

Converts text to speech using OpenAI's text-to-speech models.

input:

string | NodeJS.ReadableStream
Text or text stream to convert to speech.

options?:

Options
Configuration options.
Options

speaker?:

OpenAIVoiceId
Voice ID to use for speech synthesis.

speed?:

number
Speech speed multiplier.

Returns: Promise<NodeJS.ReadableStream>

listen()
listen的直接链接

Transcribes audio using OpenAI's Whisper model.

audioStream:

NodeJS.ReadableStream
Audio stream to transcribe.

options?:

Options
Configuration options.
Options

filetype?:

string
Audio format of the input stream.

Returns: Promise<string>

getSpeakers()
getspeakers的直接链接

Returns an array of available voice options, where each node contains:

voiceId:

string
Unique identifier for the voice

Notes
Notes的直接链接

  • API keys can be provided via constructor options or the OPENAI_API_KEY environment variable
  • The tts-1-hd model provides higher quality audio but may have slower processing times
  • Speech recognition supports multiple audio formats including mp3, wav, and webm

Realtime
Realtime的直接链接

The OpenAIRealtimeVoice class provides real-time voice interaction capabilities using OpenAI's WebSocket-based API. It supports real time speech to speech, voice activity detection, and event-based audio streaming.

Usage example
Usage example的直接链接

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({
apiKey: 'your-openai-api-key',
model: 'gpt-5.1-realtime-preview-2024-12-17',
speaker: 'alloy', // Default voice
})

voiceWithConfig.updateSession({
turn_detection: {
type: 'server_vad',
threshold: 0.6,
silence_duration_ms: 1200,
},
})

// 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()

Configuration
Configuration的直接链接

Constructor options
Constructor options的直接链接

model?:

string
= 'gpt-5.1-realtime-preview-2024-12-17'
The model ID to use for real-time voice interactions.

apiKey?:

string
OpenAI API key. Falls back to OPENAI_API_KEY environment variable.

speaker?:

string
= 'alloy'
Default voice ID for speech synthesis.

Voice Activity Detection (VAD) Configuration
Voice Activity Detection (VAD) Configuration的直接链接

type?:

string
= 'server_vad'
Type of VAD to use. Server-side VAD provides better accuracy.

threshold?:

number
= 0.5
Speech detection sensitivity (0.0-1.0).

prefix_padding_ms?:

number
= 1000
Milliseconds of audio to include before speech is detected.

silence_duration_ms?:

number
= 1000
Milliseconds of silence before ending a turn.

Methods
Methods的直接链接

connect()
connect的直接链接

Establishes a connection to the OpenAI Realtime service. Must be called before using speak, listen, or send functions.

returns:

Promise<void>
Promise that resolves when the connection is established.

speak()
speak-1的直接链接

Emits a speaking event using the configured voice model. Can accept either a string or a readable stream as input.

input:

string | NodeJS.ReadableStream
Text or text stream to convert to speech.

options?:

Options
Configuration options.
Options

speaker?:

string
Voice ID to use for this specific speech request.

Returns: Promise<void>

listen()
listen-1的直接链接

Processes audio input for speech recognition. Takes a readable stream of audio data and emits a 'listening' event with the transcribed text.

audioData:

NodeJS.ReadableStream
Audio stream to transcribe.

Returns: Promise<void>

send()
send的直接链接

Streams audio data in real-time to the OpenAI service for continuous audio streaming scenarios like live microphone input.

audioData:

NodeJS.ReadableStream
Audio stream to send to the service.

Returns: Promise<void>

updateConfig()
updateconfig的直接链接

Updates the session configuration for the voice instance. This can modify voice settings and turn detection. It can also modify other parameters.

sessionConfig:

Realtime.SessionConfig
New session configuration to apply.

Returns: void

addTools()
addtools的直接链接

Adds a set of tools to the voice instance. Tools allow the model to perform additional actions during conversations. When OpenAIRealtimeVoice is added to an Agent, any tools configured for the Agent will automatically be available to the voice interface.

tools?:

ToolsInput
Tools configuration to equip.

Returns: void

close()
close的直接链接

Disconnects from the OpenAI Realtime session and cleans up resources. Should be called when you're done with the voice instance.

Returns: void

sendEvent()
sendevent的直接链接

Sends a raw client event to the OpenAI Realtime session. Use this for session control that has no dedicated method, such as adding conversation items. Events sent before the session is created are queued and sent once it is.

type:

string
OpenAI Realtime client event type, such as conversation.item.create.

data?:

Record<string, unknown>
= {}
Event payload sent alongside the type.

Returns: void

getSpeakers()
getspeakers-1的直接链接

Returns a list of available voice speakers.

Returns: Promise<Array<{ voiceId: string; [key: string]: any }>>

on()
on的直接链接

Registers an event listener for voice events.

event:

string
Name of the event to listen for.

callback:

Function
Function to call when the event occurs.

Returns: void

off()
off的直接链接

Removes a previously registered event listener.

event:

string
Name of the event to stop listening to.

callback:

Function
The specific callback function to remove.

Returns: void

Events
Events的直接链接

The OpenAIRealtimeVoice class emits the following events:

speaking:

event
Emitted when audio data is received from the model. Callback receives { audio: Int16Array }.

writing:

event
Emitted when transcribed text is available. Callback receives { text: string, role: string }.

error:

event
Emitted when an error occurs. Callback receives the error object.

OpenAI Realtime Events
OpenAI Realtime Events的直接链接

Every server event received from the OpenAI Realtime API is also emitted with the openAIRealtime: prefix, using the OpenAI server event type as the suffix. The callback receives the complete event payload.

voice.on('openAIRealtime:rate_limits.updated', event => {
console.log(event.rate_limits)
})

Socket Events
Socket Events的直接链接

open:

event
Emitted when the WebSocket connection to OpenAI opens.

close:

event
Emitted when the WebSocket connection closes, including when OpenAI closes it. Callback receives { code: number, reason: string }.

Available voices
Available voices的直接链接

The following voice options are available:

  • alloy: Neutral and balanced
  • ash: Clear and precise
  • ballad: Melodic and smooth
  • coral: Warm and friendly
  • echo: Resonant and deep
  • sage: Calm and thoughtful
  • shimmer: Bright and energetic
  • verse: Versatile and expressive

Notes
Notes的直接链接

  • API keys can be provided via constructor options or the OPENAI_API_KEY environment variable
  • The OpenAI Realtime Voice API uses WebSockets for real-time communication
  • Server-side Voice Activity Detection (VAD) provides better accuracy for speech detection
  • All audio data is processed as Int16Array format
  • The voice instance must be connected with connect() before using other methods
  • Always call close() when done to properly clean up resources
  • Memory management is handled by OpenAI Realtime API