본문으로 건너뛰기

음성.말하기()

그만큼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
음성의 선명도와 원본 음성과의 유사도입니다.

Google
Google에 대한 직접 링크

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)

함께 사용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 공급자 사용
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가 있습니다.
  • 최상의 성능을 위해 사용을 마치면 오디오 스트림을 닫거나 종료하는 것이 좋습니다.