음성.말하기()
그만큼speak()메소드는 텍스트를 음성으로 변환하는 모든 Mastra 음성 Provider에서 사용할 수 있는 핵심 기능입니다. 텍스트 입력을 받아 재생하거나 저장할 수 있는 오디오 스트림을 반환합니다.
매개변수매개변수에 대한 직접 링크
input:
string | NodeJS.ReadableStream
음성으로 변환할 텍스트입니다. 문자열이나 읽기 가능한 텍스트 스트림일 수 있습니다.
options?:
object
음성 합성 옵션
object
speaker?:
string
이 특정 요청에 사용할 음성 ID입니다. 생성자에 설정된 기본 speaker를 재정의합니다.
반환 값반환 값에 대한 직접 링크
다음 중 하나인 Promise<NodeJS.ReadableStream | void>를 반환합니다.
NodeJS.ReadableStream: 재생하거나 저장할 수 있는 오디오 데이터 스트림void: 오디오를 직접 반환하지 않고 이벤트를 통해 오디오를 내보내는 실시간 음성 제공자를 사용하는 경우
공급자별 옵션공급자별 옵션에 대한 직접 링크
각 음성 Provider는 구현에 따른 추가 옵션을 지원할 수 있습니다. 다음은 몇 가지 예입니다.
오픈AI오픈AI에 대한 직접 링크
options?:
Options
구성 옵션입니다.
Options
speed?:
number
말하기 속도 배율입니다. 0.25에서 4.0 사이의 값을 지원합니다.
일레븐랩스일레븐랩스에 대한 직접 링크
options?:
Options
구성 옵션입니다.
Options
stability?:
number
음성 안정성입니다. 값이 높을수록 더 안정적이고 표현력이 낮은 음성이 생성됩니다.
similarity_boost?:
number
음성의 선명도와 원본 음성과의 유사도입니다.
GoogleGoogle에 대한 직접 링크
options?:
Options
구성 옵션입니다.
Options
languageCode?:
string
음성의 언어 코드(예: 'en-US')입니다.
audioConfig?:
object
Google Cloud Text-to-Speech API의 오디오 구성 옵션입니다.
머프머프에 대한 직접 링크
options?:
Options
구성 옵션입니다.
Options
properties?:
object
properties 구성입니다.
object
rate?:
number
말하기 속도 배율입니다.
pitch?:
number
음성 피치 조정값입니다.
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)
함께 사용CompositeVoiceusing-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 공급자 사용AI SDK Model 공급자 사용에 대한 직접 링크
AI SDK 음성 Model을 직접 사용할 수도 있습니다.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 참고 문서를 참조하세요.
실시간 음성 Provider실시간 음성 Provider에 대한 직접 링크
OpenAIRealtimeVoice와 같은 실시간 음성 Provider를 사용할 때 speak() 메서드는 다르게 동작합니다.
- 오디오 스트림을 반환하는 대신 오디오 데이터와 함께 '말하기' 이벤트를 발생시킵니다.
- 오디오 청크를 수신하려면 이벤트 리스너를 등록해야 합니다.
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마다 조금씩 다를 수 있지만 모든 구현은 동일한 기본 인터페이스를 따릅니다.- 실시간 음성 Provider를 사용할 때 메서드는 오디오 스트림을 직접 반환하지 않고 대신 'speaking' 이벤트를 방출할 수 있습니다.
- 텍스트 스트림이 입력으로 제공되면 Provider는 일반적으로 처리하기 전에 이를 문자열로 변환합니다.
- 반환되는 스트림의 오디오 형식은 Provider마다 다릅니다. 일반적인 형식으로는 MP3, WAV, OGG가 있습니다.
- 최상의 성능을 위해 사용을 마치면 오디오 스트림을 닫거나 종료하는 것이 좋습니다.