跳至主要內容

CompositeVoice

CompositeVoice 類別可讓您組合不同的 Voice Provider,以執行文字轉語音與語音轉文字作業。當您想為每項作業使用最合適的 Provider 時,這特別實用;例如使用 OpenAI 進行語音轉文字,並使用 PlayAI 進行文字轉語音。

CompositeVoice 同時支援 Mastra Voice Provider 與 AI SDK 模型 Provider

建構函式參數
「建構函式參數」的直接連結

config:

object
複合語音服務的設定物件

config.input?:

MastraVoice | TranscriptionModel
用於語音轉文字作業的 Voice Provider 或 AI SDK 轉錄模型。AI SDK 模型會自動包裝。

config.output?:

MastraVoice | SpeechModel
用於文字轉語音作業的 Voice Provider 或 AI SDK 語音模型。AI SDK 模型會自動包裝。

config.realtime?:

MastraVoice
用於即時語音轉語音作業的 Voice Provider

方法
「方法」的直接連結

speak()
「speak」的直接連結

使用已設定的語音輸出 Provider 將文字轉換為語音。

input:

string | NodeJS.ReadableStream
要轉換為語音的文字

options?:

object
傳遞給語音輸出 Provider 的 Provider 專用選項

注意事項:

  • 若未設定語音輸出 Provider,此方法會擲回錯誤
  • 選項會直接傳遞給已設定的語音輸出 Provider
  • 回傳音訊資料流

listen()
「listen」的直接連結

使用已設定的聆聽 Provider 將語音轉換為文字。

audioStream:

NodeJS.ReadableStream
要轉換為文字的音訊資料流

options?:

object
傳遞給聆聽 Provider 的 Provider 專用選項

注意事項:

  • 若未設定聆聽 Provider,此方法會擲回錯誤
  • 選項會直接傳遞給已設定的聆聽 Provider
  • 視 Provider 而定,回傳字串或轉錄文字資料流

getSpeakers()
「getspeakers」的直接連結

回傳語音輸出 Provider 的可用語音清單,其中每個節點包含:

voiceId:

string
語音的唯一識別碼

key?:

value
依 Provider 而異的其他語音屬性(例如名稱、語言)

注意事項:

  • 僅回傳語音輸出 Provider 的語音
  • 若未設定語音輸出 Provider,則回傳空陣列
  • 每個語音物件至少會有一個 voiceId 屬性
  • 其他語音屬性取決於語音輸出 Provider

使用範例
「使用範例」的直接連結

使用 Mastra Voice Provider
「使用 Mastra Voice Provider」的直接連結

import { CompositeVoice } from '@mastra/core/voice'
import { OpenAIVoice } from '@mastra/voice-openai'
import { PlayAIVoice } from '@mastra/voice-playai'

// Create voice providers
const openai = new OpenAIVoice()
const playai = new PlayAIVoice()

// Use OpenAI for listening (speech-to-text) and PlayAI for speaking (text-to-speech)
const voice = new CompositeVoice({
input: openai,
output: playai,
})

// Convert speech to text using OpenAI
const text = await voice.listen(audioStream)

// Convert text to speech using PlayAI
const audio = await voice.speak('Hello, world!')

使用 AI SDK 模型 Provider
「使用 AI SDK 模型 Provider」的直接連結

您可以直接將 AI SDK 轉錄與語音模型傳入 CompositeVoice:

import { CompositeVoice } from '@mastra/core/voice'
import { openai } from '@ai-sdk/openai'
import { elevenlabs } from '@ai-sdk/elevenlabs'

// Use AI SDK models directly - they will be auto-wrapped
const voice = new CompositeVoice({
input: openai.transcription('whisper-1'), // AI SDK transcription
output: elevenlabs.speech('eleven_turbo_v2'), // AI SDK speech
})

// Works the same way as with Mastra providers
const text = await voice.listen(audioStream)
const audio = await voice.speak('Hello from AI SDK!')

混合搭配
「混合搭配」的直接連結

您可以組合 Mastra Provider 與 AI SDK 模型:

import { CompositeVoice } from '@mastra/core/voice'
import { PlayAIVoice } from '@mastra/voice-playai'
import { groq } from '@ai-sdk/groq'

const voice = new CompositeVoice({
input: groq.transcription('whisper-large-v3'), // AI SDK for STT
output: new PlayAIVoice(), // Mastra for TTS
})