voice.send()
send() 方法将音频数据实时流式传输到 Voice Provider,以便持续处理。此方法是实时语音对语音会话的关键,可让你将麦克风输入直接发送到 AI 服务。
使用示例使用示例的直接链接
import { OpenAIRealtimeVoice } from '@mastra/voice-openai-realtime'
import Speaker from '@mastra/node-speaker'
import { getMicrophoneStream } from '@mastra/node-audio'
const speaker = new Speaker({
sampleRate: 24100, // Audio sample rate in Hz - standard for high-quality audio on MacBook Pro
channels: 1, // Mono audio output (as opposed to stereo which would be 2)
bitDepth: 16, // Bit depth for audio quality - CD quality standard (16-bit resolution)
})
// Initialize a real-time voice provider
const voice = new OpenAIRealtimeVoice({
realtimeConfig: {
model: 'gpt-5.1-realtime',
apiKey: process.env.OPENAI_API_KEY,
},
})
// Connect to the real-time service
await voice.connect()
// Set up event listeners for responses
voice.on('writing', ({ text, role }) => {
console.log(`${role}: ${text}`)
})
voice.on('speaker', stream => {
stream.pipe(speaker)
})
// Get microphone stream (implementation depends on your environment)
const microphoneStream = getMicrophoneStream()
// Send audio data to the voice provider
await voice.send(microphoneStream)
// You can also send audio data as Int16Array
const audioBuffer = getAudioBuffer() // Assume this returns Int16Array
await voice.send(audioBuffer)
参数参数的直接链接
audioData:
NodeJS.ReadableStream | Int16Array
要发送给 Voice Provider 的音频数据。可以是可读流(如麦克风流),也可以是音频样本的 Int16Array。
返回值返回值的直接链接
返回 Promise<void>,当 Voice Provider 接受音频数据时解析完成。
注意事项注意事项的直接链接
- 只有支持语音对语音功能的实时 Voice Provider 才实现了此方法
- 如果在不支持此功能的 Voice Provider 上调用此方法,它会记录警告并立即解析完成
- 必须先调用
connect()建立 WebSocket 连接,再使用send() - 音频格式要求取决于具体的 Voice Provider
- 对于持续对话,通常先调用
send()传输用户音频,再调用answer()触发 AI 响应 - Provider 通常会在处理音频时发出包含转录文本的 'writing' 事件
- AI 响应时,Provider 会发出包含音频响应的 'speaking' 事件