Skip to content
Spring AI 文档版本 2.1.0-SNAPSHOT 源快照 9a570512 更新于 2026-10-16

ElevenLabs 文本转语音(TTS)

引言

ElevenLabs 用深度学习提供听感自然的语音合成软件。它的 AI 音频模型能在 32 种语言上生成逼真、多能且具上下文感知能力的语音、声音和音效。ElevenLabs 文本转语音 API 让用户能以超逼真的 AI 旁白,把任何书、文章、PDF、简报或文本演绎得栩栩如生。

前置条件

  1. 创建一个 ElevenLabs 账户并获取 API 密钥。你可以在 ElevenLabs 注册页 注册。登录后,你的 API 密钥可在个人资料页找到。
  2. 把 spring-ai-elevenlabs 依赖添加到你项目的构建文件。更多信息参见 依赖管理 一节。

自动配置

Spring AI 为 ElevenLabs 文本转语音客户端提供 Spring Boot 自动配置。 要启用它,请将以下依赖添加到你的项目的 Maven pom.xml 文件:

xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-elevenlabs</artifactId>
</dependency>

或添加到你的 Gradle build.gradle 构建文件:

groovy
dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-model-elevenlabs'
}

TIP

参见 依赖管理 一节,把 Spring AI BOM 添加到你的构建文件。

语音属性

连接属性

前缀 spring.ai.elevenlabs 用作所有 ElevenLabs 相关配置(连接和 TTS 特定设置)的属性前缀。它定义在 ElevenLabsConnectionProperties 中。

属性描述默认值
spring.ai.elevenlabs.base-urlElevenLabs API 的基础 URL。https://api.elevenlabs.io
spring.ai.elevenlabs.api-key你的 ElevenLabs API 密钥。-

配置属性

NOTE

音频语音自动配置的启用与禁用,现通过以 spring.ai.model.audio.speech 为前缀的顶层属性来配置。

要启用,spring.ai.model.audio.speech=elevenlabs(默认启用)

要禁用,spring.ai.model.audio.speech=none(或任何不匹配 elevenlabs 的值)

做出此变更是为了支持配置多个模型。

前缀 spring.ai.elevenlabs.tts 用作专门配置 ElevenLabs 文本转语音客户端的属性前缀。它定义在 ElevenLabsSpeechProperties 中。

属性描述默认值
spring.ai.model.audio.speech启用音频语音模型elevenlabs
spring.ai.elevenlabs.tts.model-id要使用的模型 ID。eleventurbov2_5
spring.ai.elevenlabs.tts.voice-id要使用的声音 ID。这是 voice ID,不是声音名。9BWtsMINqrJLrRacOk9x
spring.ai.elevenlabs.tts.output-format生成音频的输出格式。见下方 输出格式。mp32205032

NOTE

基础 URL 和 API 密钥也可以通过 spring.ai.elevenlabs.tts.base-url 和 spring.ai.elevenlabs.tts.api-key 专门为 TTS 配置。不过,通常建议为简便起见使用全局的 spring.ai.elevenlabs 前缀,除非你有特定理由为不同的 ElevenLabs 服务使用不同凭据。更具体的 tts 属性会覆盖全局的那些。

TIP

所有以 spring.ai.elevenlabs.tts 为前缀的属性都可在运行时被覆盖。

.可用的输出格式

枚举值描述
MP32205032MP3,22.05 kHz,32 kbps
MP34410032MP3,44.1 kHz,32 kbps
MP34410064MP3,44.1 kHz,64 kbps
MP34410096MP3,44.1 kHz,96 kbps
MP344100128MP3,44.1 kHz,128 kbps
MP344100192MP3,44.1 kHz,192 kbps
PCM_8000PCM,8 kHz
PCM_16000PCM,16 kHz
PCM_22050PCM,22.05 kHz
PCM_24000PCM,24 kHz
PCM_44100PCM,44.1 kHz
PCM_48000PCM,48 kHz
ULAW_8000µ-law,8 kHz
ALAW_8000A-law,8 kHz
OPUS4800032Opus,48 kHz,32 kbps
OPUS4800064Opus,48 kHz,64 kbps
OPUS4800096Opus,48 kHz,96 kbps
OPUS48000128Opus,48 kHz,128 kbps
OPUS48000192Opus,48 kHz,192 kbps

运行时选项

ElevenLabsTextToSpeechOptions 类提供进行文本转语音请求时使用的选项。在启动时,使用由 spring.ai.elevenlabs.tts 指定的选项,但你可以在运行时覆盖它们。以下选项可用:

  • modelId:要使用的模型 ID。
  • voiceId:要使用的声音 ID。
  • outputFormat:生成音频的输出格式。
  • voiceSettings: 一个包含声音设置的对象,如 stability、similarityBoost、style、useSpeakerBoost 和 speed。
  • enableLogging:一个用于启用或禁用日志的布尔值。
  • languageCode:输入文本的语言代码(例如英语用 "en")。
  • pronunciationDictionaryLocators: 一个发音词典定位器列表。
  • seed:用于随机数生成的种子,以获得可复现性。
  • previousText:主文本之前的文本,用于多轮对话的上下文。
  • nextText:主文本之后的文本,用于多轮对话的上下文。
  • previousRequestIds:对话中先前回合的请求 ID。
  • nextRequestIds:对话中后续回合的请求 ID。
  • applyTextNormalization: 应用文本规范化("auto"、"on" 或 "off")。
  • applyLanguageTextNormalization: 应用语言文本规范化。

例如:

java
ElevenLabsTextToSpeechOptions speechOptions = ElevenLabsTextToSpeechOptions.builder()
    .model("eleven_multilingual_v2")
    .voiceId("your_voice_id")
    .outputFormat(ElevenLabsApi.OutputFormat.MP3_44100_128.getValue())
    .build();

TextToSpeechPrompt speechPrompt = new TextToSpeechPrompt("Hello, this is a text-to-speech example.", speechOptions);
TextToSpeechResponse response = elevenLabsTextToSpeechModel.call(speechPrompt);

使用声音设置

你可以通过在选项中提供 VoiceSettings 来定制声音输出。这让你能控制 stability 和 similarity 等属性。

java
var voiceSettings = new ElevenLabsApi.SpeechRequest.VoiceSettings(0.75f, 0.75f, 0.0f, true);

ElevenLabsTextToSpeechOptions speechOptions = ElevenLabsTextToSpeechOptions.builder()
    .model("eleven_multilingual_v2")
    .voiceId("your_voice_id")
    .voiceSettings(voiceSettings)
    .build();

TextToSpeechPrompt speechPrompt = new TextToSpeechPrompt("This is a test with custom voice settings!", speechOptions);
TextToSpeechResponse response = elevenLabsTextToSpeechModel.call(speechPrompt);

手动配置

把 spring-ai-elevenlabs 依赖添加到你的项目的 Maven pom.xml 文件:

xml
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-elevenlabs</artifactId>
</dependency>

或添加到你的 Gradle build.gradle 构建文件:

groovy
dependencies {
    implementation 'org.springframework.ai:spring-ai-elevenlabs'
}

TIP

参见 依赖管理 一节,把 Spring AI BOM 添加到你的构建文件。

接下来,创建一个 ElevenLabsTextToSpeechModel:

java
ElevenLabsApi elevenLabsApi = ElevenLabsApi.builder()
		.apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
		.build();

ElevenLabsTextToSpeechModel elevenLabsTextToSpeechModel = ElevenLabsTextToSpeechModel.builder()
	.elevenLabsApi(elevenLabsApi)
	.options(ElevenLabsTextToSpeechOptions.builder()
		.model("eleven_turbo_v2_5")
		.voiceId("your_voice_id") // e.g. "9BWtsMINqrJLrRacOk9x"
		.outputFormat("mp3_44100_128")
		.build())
	.build();

// The call will use the default options configured above.
TextToSpeechPrompt speechPrompt = new TextToSpeechPrompt("Hello, this is a text-to-speech example.");
TextToSpeechResponse response = elevenLabsTextToSpeechModel.call(speechPrompt);

byte[] responseAsBytes = response.getResult().getOutput();

流式实时音频

ElevenLabs 语音 API 通过块传输编码支持实时音频流式。这让音频播放能在整个音频文件生成完毕之前就开始。

java
ElevenLabsApi elevenLabsApi = ElevenLabsApi.builder()
		.apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
		.build();

ElevenLabsTextToSpeechModel elevenLabsTextToSpeechModel = ElevenLabsTextToSpeechModel.builder()
	.elevenLabsApi(elevenLabsApi)
	.build();

ElevenLabsTextToSpeechOptions streamingOptions = ElevenLabsTextToSpeechOptions.builder()
    .model("eleven_turbo_v2_5")
    .voiceId("your_voice_id")
    .outputFormat("mp3_44100_128")
    .build();

TextToSpeechPrompt speechPrompt = new TextToSpeechPrompt("Today is a wonderful day to build something people love!", streamingOptions);

Flux<TextToSpeechResponse> responseStream = elevenLabsTextToSpeechModel.stream(speechPrompt);

// Process the stream, e.g., play the audio chunks
responseStream.subscribe(speechResponse -> {
    byte[] audioChunk = speechResponse.getResult().getOutput();
    // Play the audioChunk
});

声音 API

ElevenLabs 声音 API 让你能获取关于可用声音、它们的设置以及默认声音设置的信息。你可以用这个 API 来发现你在语音请求中要使用的 voiceId。

要使用声音 API,你需要创建一个 ElevenLabsVoicesApi 的实例:

java
ElevenLabsVoicesApi voicesApi = ElevenLabsVoicesApi.builder()
        .apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
        .build();

随后你可以使用以下方法:

  • getVoices():检索所有可用声音的列表。
  • getDefaultVoiceSettings():获取声音的默认设置。
  • getVoiceSettings(String voiceId):返回某个特定声音的设置。
  • getVoice(String voiceId):返回某个特定声音的元数据。

示例:

java
// Get all voices
ResponseEntity<ElevenLabsVoicesApi.Voices> voicesResponse = voicesApi.getVoices();
List<ElevenLabsVoicesApi.Voice> voices = voicesResponse.getBody().voices();

// Get default voice settings
ResponseEntity<ElevenLabsVoicesApi.VoiceSettings> defaultSettingsResponse = voicesApi.getDefaultVoiceSettings();
ElevenLabsVoicesApi.VoiceSettings defaultSettings = defaultSettingsResponse.getBody();

// Get settings for a specific voice
ResponseEntity<ElevenLabsVoicesApi.VoiceSettings> voiceSettingsResponse = voicesApi.getVoiceSettings(voiceId);
ElevenLabsVoicesApi.VoiceSettings voiceSettings = voiceSettingsResponse.getBody();

// Get details for a specific voice
ResponseEntity<ElevenLabsVoicesApi.Voice> voiceDetailsResponse = voicesApi.getVoice(voiceId);
ElevenLabsVoicesApi.Voice voiceDetails = voiceDetailsResponse.getBody();

示例代码

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。