跳至主要內容

文字轉語音(TTS)

Mastra 的文字轉語音(TTS)提供統一 API,可透過 Provider 將文字合成為語音音訊。 將 TTS 納入應用程式後,你可以透過自然的語音互動提升使用者體驗、改善視覺障礙使用者的無障礙體驗,並建立更具吸引力的多模態介面。

TTS 是所有語音應用程式的核心元件。搭配 STT(語音轉文字)後,兩者會構成語音互動系統的基礎。較新的模型支援可用於即時互動的 STS(語音轉語音),但成本較高($)。

設定
「設定」的直接連結

若要在 Mastra 中使用 TTS,初始化 Voice Provider 時必須提供 speechModel,其中可包含以下參數:

  • name:要使用的特定 TTS 模型。
  • apiKey:用於身分驗證的 API 金鑰。
  • Provider 特有選項:特定 Voice Provider 可能需要或支援的其他選項。

speaker 選項可讓你選擇不同聲音來合成語音。每個 Provider 都提供具有不同聲音多樣性品質聲音個性多語言支援特性的聲音選項

行為:這些參數均為選填。你可以使用 Voice Provider 提供的預設設定;實際預設值取決於所使用的 Provider。

const voice = new OpenAIVoice({
speechModel: {
name: 'tts-1-hd',
apiKey: process.env.OPENAI_API_KEY,
},
speaker: 'alloy',
})

// If using default settings the configuration can be simplified to:
const voice = new OpenAIVoice()

可用的 Provider
「可用的 Provider」的直接連結

Mastra 支援多個文字轉語音 Provider,各自提供獨特的功能與聲音選項。你可以選擇最符合應用程式需求的 Provider:

  • OpenAI:具備自然語調與表情的高品質聲音
  • Azure:Microsoft 的語音服務,提供多種聲音與語言
  • ElevenLabs:具有情緒與精細控制的高度擬真聲音
  • PlayAI:專精於提供各種風格的自然聲音
  • Google:Google 的語音合成,支援多種語言
  • Cloudflare:針對低延遲應用程式進行邊緣最佳化的語音合成
  • Deepgram:具備高準確度的 AI 驅動語音技術
  • Speechify:針對可讀性與無障礙體驗最佳化的文字轉語音
  • Sarvam:專精於印度語言與口音
  • Murf:提供可自訂參數的錄音室品質配音

每個 Provider 都以獨立套件實作,你可以視需要安裝:

pnpm add @mastra/voice-openai@latest # Example for OpenAI

使用 speak 方法
「使用 speak 方法」的直接連結

TTS 的主要方法是 speak(),可將文字轉換成語音。此方法接受選項,讓你指定 speaker 與其他 Provider 特有選項。用法如下:

import { Agent } from '@mastra/core/agent'
import { OpenAIVoice } from '@mastra/voice-openai'

const voice = new OpenAIVoice()

const agent = new Agent({
id: 'voice-agent',
name: 'Voice Agent',
instructions: 'You are a voice assistant that can help users with their tasks.',
model: 'openai/gpt-5.6-sol',
voice,
})

const { text } = await agent.generate('What color is the sky?')

// Convert text to speech to an Audio Stream
const readableStream = await voice.speak(text, {
speaker: 'default', // Optional: specify a speaker
properties: {
speed: 1.0, // Optional: adjust speech speed
pitch: 'default', // Optional: specify pitch if supported
},
})

儲存語音輸出
「儲存語音輸出」的直接連結

speak() 方法會傳回音訊串流。若要儲存產生的語音供日後播放或處理,請將串流導向檔案:

import { createWriteStream } from 'fs'
import path from 'path'

const audio = await agent.voice.speak('Hello, world!')
const filePath = path.join(process.cwd(), 'agent.mp3')
const writer = createWriteStream(filePath)

audio.pipe(writer)

await new Promise<void>((resolve, reject) => {
writer.on('finish', () => resolve())
writer.on('error', reject)
})

如需 Agent 上 Voice Provider 的整體概覽,請參閱 Mastra 中的 Voice