voice.speak()
speak() メソッドは、テキストを音声に変換する、すべての Mastra Voice Provider で利用可能なコア関数です。テキスト入力を受け取り、再生または保存できる音声ストリームを返します。
パラメーターパラメーターへの直接リンク
input:
string | NodeJS.ReadableStream
音声に変換するテキスト。文字列またはテキストの読み取り可能なストリームを指定できます。
options?:
object
音声合成のオプション
object
speaker?:
string
このリクエストに使用する Voice ID。コンストラクターで設定したデフォルトの Speaker を上書きします。
戻り値戻り値への直接リンク
次のいずれかとなる Promise<NodeJS.ReadableStream | void> を返します。
NodeJS.ReadableStream:再生または保存できる音声データのストリームvoid:音声を直接返さず、イベントで送出するリアルタイム Voice Provider を使用する場合
Provider 固有のオプションProvider 固有のオプションへの直接リンク
各 Voice Provider は、その実装に固有の追加オプションをサポートする場合があります。以下に例を示します。
OpenAIOpenAIへの直接リンク
options?:
Options
設定オプション。
Options
speed?:
number
発話速度の倍率。0.25~4.0 の値をサポートします。
ElevenLabsElevenLabsへの直接リンク
options?:
Options
設定オプション。
Options
stability?:
number
Voice の安定性。値が高いほど安定し、表現の変化が少ない発話になります。
similarity_boost?:
number
Voice の明瞭さと元の Voice との類似度。
GoogleGoogleへの直接リンク
options?:
Options
設定オプション。
Options
languageCode?:
string
Voice の言語コード(例:'en-US')。
audioConfig?:
object
Google Cloud Text-to-Speech API の音声設定オプション。
MurfMurfへの直接リンク
options?:
Options
設定オプション。
Options
properties?:
object
properties の設定。
object
rate?:
number
発話速度の倍率。
pitch?:
number
Voice のピッチ調整。
format?:
'MP3' | 'WAV' | 'FLAC' | 'ALAW' | 'ULAW'
出力音声形式。
使用例使用例への直接リンク
import { OpenAIVoice } from '@mastra/voice-openai'
// Initialize a voice provider
const voice = new OpenAIVoice({
speaker: 'alloy', // Default voice
})
// Basic usage with default settings
const audioStream = await voice.speak('Hello, world!')
// Using a different voice for this specific request
const audioStreamWithDifferentVoice = await voice.speak('Hello again!', {
speaker: 'nova',
})
// Using provider-specific options
const audioStreamWithOptions = await voice.speak('Hello with options!', {
speaker: 'echo',
speed: 1.2, // OpenAI-specific option
})
// Using a text stream as input
import { Readable } from 'stream'
const textStream = Readable.from(['Hello', ' from', ' a', ' stream!'])
const audioStreamFromTextStream = await voice.speak(textStream)
CompositeVoice での使用using-with-compositevoiceへの直接リンク
CompositeVoice を使用する場合、speak() メソッドは設定された発話 Provider に処理を委譲します。
import { CompositeVoice } from '@mastra/core/voice'
import { OpenAIVoice } from '@mastra/voice-openai'
import { PlayAIVoice } from '@mastra/voice-playai'
const voice = new CompositeVoice({
output: new PlayAIVoice(),
input: new OpenAIVoice(),
})
// This will use the PlayAIVoice provider
const audioStream = 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 speech models
const voice = new CompositeVoice({
output: elevenlabs.speech('eleven_turbo_v2'), // AI SDK model
input: openai.transcription('whisper-1'), // AI SDK model
})
// Works the same way
const audioStream = await voice.speak('Hello from AI SDK!')
// Provider-specific options can be passed through
const audioWithOptions = await voice.speak('Hello with options!', {
speaker: 'Rachel', // ElevenLabs voice
providerOptions: {
elevenlabs: {
stability: 0.5,
similarity_boost: 0.75,
},
},
})
AI SDK 統合の詳細については、CompositeVoice リファレンスを参照してください。
リアルタイム Voice Providerリアルタイム Voice Providerへの直接リンク
OpenAIRealtimeVoice などのリアルタイム Voice Provider を使用する場合、speak() メソッドの動作は異なります。
- 音声ストリームを返す代わりに、音声データを含む 'speaking' イベントを送出します
- 音声チャンクを受け取るには、イベントリスナーを登録する必要があります
import { OpenAIRealtimeVoice } from '@mastra/voice-openai-realtime'
import Speaker from '@mastra/node-speaker'
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)
})
const voice = new OpenAIRealtimeVoice()
await voice.connect()
// Register event listener for audio chunks
voice.on('speaker', stream => {
// Handle audio chunk (e.g., play it or save it)
stream.pipe(speaker)
})
// This will emit 'speaking' events instead of returning a stream
await voice.speak('Hello, this is realtime speech!')
注意事項注意事項への直接リンク
speak()の動作は Provider によって多少異なる場合がありますが、すべての実装は同じ基本インターフェースに従います。- リアルタイム Voice Provider を使用する場合、メソッドは音声ストリームを直接返さず、代わりに 'speaking' イベントを送出することがあります。
- テキストストリームを入力として指定すると、通常、Provider は処理前に文字列へ変換します。
- 返されるストリームの音声形式は Provider によって異なります。一般的な形式には MP3、WAV、OGG があります。
- 最良のパフォーマンスを得るため、使用後は音声ストリームを閉じるか終了することを検討してください。