> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ja/llms.txt # 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()` 設定された発話 Provider を使用してテキストを音声に変換します。 **input** (`string | NodeJS.ReadableStream`): 音声に変換するテキスト **options** (`object`): 発話 Provider に渡す Provider 固有のオプション 注意事項: - 発話 Provider が設定されていない場合、このメソッドはエラーをスローします - オプションは設定された発話 Provider にそのまま渡されます - 音声データのストリームを返します ### `listen()` 設定されたリスニング Provider を使用して音声をテキストに変換します。 **audioStream** (`NodeJS.ReadableStream`): テキストに変換する音声ストリーム **options** (`object`): リスニング Provider に渡す Provider 固有のオプション 注意事項: - リスニング Provider が設定されていない場合、このメソッドはエラーをスローします - オプションは設定されたリスニング Provider にそのまま渡されます - Provider に応じて、文字列または文字起こしテキストのストリームを返します ### `getSpeakers()` 発話 Provider から使用可能な Voice の一覧を返します。各要素には次の値が含まれます。 **voiceId** (`string`): Voice の一意な識別子 **key** (`value`): Provider によって異なる追加の Voice プロパティ(例:名前、言語) 注意事項: - 発話 Provider の Voice だけを返します - 発話 Provider が設定されていない場合は空の配列を返します - 各 Voice オブジェクトには少なくとも voiceId プロパティがあります - 追加の Voice プロパティは発話 Provider によって異なります ## 使用例 ### Mastra Voice Provider の使用 ```typescript 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 の文字起こしモデルと音声モデルを CompositeVoice に直接渡せます。 ```typescript 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 モデルを組み合わせられます。 ```typescript 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 }) ```