メインコンテンツへ移動

CompositeVoice

CompositeVoice クラスを使用すると、Text-to-Speech と Speech-to-Text の操作に異なる Voice Provider を組み合わせられます。たとえば Speech-to-Text には OpenAI、Text-to-Speech には PlayAI を使用するなど、操作ごとに最適な Provider を使用したい場合に特に役立ちます。

CompositeVoice は、Mastra Voice Provider と AI SDK Model Provider の両方をサポートします。

コンストラクターパラメーター
コンストラクターパラメーターへの直接リンク

config:

object
複合 Voice サービスの設定オブジェクト

config.input?:

MastraVoice | TranscriptionModel
Speech-to-Text 操作に使用する Voice Provider または AI SDK 文字起こしモデル。AI SDK モデルは自動的にラップされます。

config.output?:

MastraVoice | SpeechModel
Text-to-Speech 操作に使用する 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 から使用可能な Voice の一覧を返します。各要素には次の値が含まれます。

voiceId:

string
Voice の一意な識別子

key?:

value
Provider によって異なる追加の Voice プロパティ(例:名前、言語)

注意事項:

  • 発話 Provider の Voice だけを返します
  • 発話 Provider が設定されていない場合は空の配列を返します
  • 各 Voice オブジェクトには少なくとも voiceId プロパティがあります
  • 追加の Voice プロパティは発話 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 Model Provider の使用
AI SDK Model 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
})