ElevenLabs 文本转语音(TTS)
介绍
ElevenLabs 提供基于深度学习的自然音效语音合成软件。其AI音频模型生成真实、多功能且具上下文感知的语音、声音和音效,涵盖32种语言。ElevenLabs 文本转语音 API 允许用户通过超逼真的 AI 解说,将任何书籍、文章、PDF、通讯或文本呈现为生命。
前提条件
-
创建一个 ElevenLabs 账户并获取 API 密钥。你可以在ElevenLabs的注册页面注册。登录后,您可以在个人资料页找到您的API密钥。
-
添加
春艾十一实验室依赖你项目的构建文件。更多信息请参阅依赖管理部分。
自动配置
Spring AI 为 ElevenLabs 文本转语音客户端提供 Spring Boot 自动配置。
要启用它,请在项目的 Maven 中添加以下依赖pom.xml文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-elevenlabs</artifactId>
</dependency>
或者去你的Gradlebuild.gradle构建文件:
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-elevenlabs'
}
| 请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。 |
语音属性
连接性质
前缀spring.ai.elevenlabs作为所有 ElevenLabs 相关配置(包括连接和 TTS 特定设置)的属性前缀。定义为十一实验室连接属性.
属性 |
描述 |
默认值 |
Spring.ai.elevenlabs.base-url |
ElevenLabs API 的基础网址。 |
|
Spring.ai.elevenlabs.api-key |
你的ElevenLabs的API密钥。 |
- |
配置属性
|
现在通过带有前缀的顶层属性配置,启用和禁用音频语音自动配置 要启用,spring.ai.model.audio.speech=elevenlabs(默认启用) 要禁用,可以选择 spring.ai.model.audio.speech=none(或任何与 elevenlabs 不匹配的值) 此改动旨在允许配置多个模型。 |
前缀spring.ai.elevenlabs.tts作为属性前缀,专门用于配置 ElevenLabs 文本转语音客户端。定义为十一实验室语音属性.
| 属性 | 描述 | 默认值 |
|---|---|---|
spring.ai.model.audio.speech |
启用音频语音模型 |
十一实验室 |
Spring.ai.elevenlabs.tts.options.model-id |
要用的型号ID。 |
eleven_turbo_v2_5 |
Spring.ai.elevenlabs.tts.options.voice-id |
要用的声音ID。这是语音识别,不是语音名称。 |
9BWtsMINqrJLrRacOk9x |
spring.ai.elevenlabs.tts.options.output-format |
生成音频的输出格式。请参见下方的输出格式。 |
mp3_22050_32 |
基础URL和API密钥也可以专门配置用于TTS,使用以下方式Spring.ai.elevenlabs.tts.base-url和Spring.ai.elevenlabs.tts.api-key.不过,通常建议使用全局spring.ai.elevenlabs为了简化,除非你有特别的理由要为不同的ElevenLabs服务使用不同的凭证。越具体TTS属性会覆盖全局属性。 |
所有以spring.ai.elevenlabs.tts.optionss可以在运行时被覆盖。 |
枚举值 |
描述 |
MP3_22050_32 |
MP3,22.05 kHz,32 kbps |
MP3_44100_32 |
MP3,44.1 kHz,32 kbps |
MP3_44100_64 |
MP3,44.1 kHz,64 kbps |
MP3_44100_96 |
MP3,44.1 kHz,96 kbps |
MP3_44100_128 |
MP3,44.1 kHz,128 kbps |
MP3_44100_192 |
MP3,44.1 kHz,192 kbps |
PCM_8000 |
PCM,8 kHz |
PCM_16000 |
PCM,16 kHz |
PCM_22050 |
PCM,22.05 kHz |
PCM_24000 |
PCM,24 kHz |
PCM_44100 |
PCM,44.1 kHz |
PCM_48000 |
PCM,48 kHz |
ULAW_8000 |
μ律,8 kHz |
ALAW_8000 |
A-law,8 kHz |
OPUS_48000_32 |
Opus,48 kHz,32 kbps |
OPUS_48000_64 |
Opus,48 kHz,64 kbps |
OPUS_48000_96 |
Opus,48 kHz,96 kbps |
OPUS_48000_128 |
Opus,48 kHz,128 kbps |
OPUS_48000_192 |
Opus,48 kHz,192 kbps |
运行时选项
这十一实验室文本语音选项课程提供在发送文本转语音请求时可用的选项。启动时,指定选项如下spring.ai.elevenlabs.tts但你可以在运行时覆盖这些设置。以下选项可供选择:
-
modelId:用于使用的型号ID。 -
voiceId(声音ID):要用的声音ID。 -
输出格式:生成音频的输出格式。 -
voiceSettings:包含语音设置的对象,如稳定性,相似性提升,风格,使用SpeakerBoost和速度. -
启用日志: 一个用于启用或禁用日志的布尔值。 -
languageCode:输入文本的语言代码(例如,英语的“en”)。 -
发音词典 Locators:发音词典定位器列表。 -
种子:用于随机数生成和可重复性的种子。 -
上一文正文:在主文之前,用于多回合对话中的上下文。 -
下一个正文: 主文后方的文本,用于多回合对话中的上下文。 -
前置请求信息:请求对话中之前回合的ID。 -
nextRequestIds请求后续对话的ID。 -
应用文本归一化:应用文本归一化(“自动”、“开”或“关”)。 -
应用语言文本规范化: 应用语言文本规范化。
例如:
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在选项里。这让你可以控制稳定性和相似性等属性。
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);
手动配置
添加春艾十一实验室对你项目Maven的依赖pom.xml文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-elevenlabs</artifactId>
</dependency>
或者去你的Gradlebuild.gradle构建文件:
dependencies {
implementation 'org.springframework.ai:spring-ai-elevenlabs'
}
| 请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。 |
接下来,创建一个ElevenLabs文本转语音模型:
ElevenLabsApi elevenLabsApi = ElevenLabsApi.builder()
.apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
.build();
ElevenLabsTextToSpeechModel elevenLabsTextToSpeechModel = ElevenLabsTextToSpeechModel.builder()
.elevenLabsApi(elevenLabsApi)
.defaultOptions(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 支持使用分块传输编码的实时音频流。这使得音频播放可以在整个音频文件生成之前就开始播放。
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 Voices API 允许您获取可用语音、设置和默认语音设置的信息。你可以用这个 API 发现用于语音请求的“voiceId”。
要使用 Voices API,你需要创建一个十一实验室声音API:
ElevenLabsVoicesApi voicesApi = ElevenLabsVoicesApi.builder()
.apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
.build();
然后你可以使用以下方法:
-
getVoices()检索所有可用声音的列表。 -
getDefaultVoiceSettings(): 获得语音默认设置。 -
getVoiceSettings(字符串voiceId): 返回特定音色的设置。 -
getVoice(字符串voiceId)返回关于特定声音的元数据。
例:
// 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();
示例代码
-
ElevenLabsTextToSpeechModelIT.java测试提供了一些通用的使用示例。
-
ElevenLabsApiIT.java测试提供了使用低层次的示例
十一实验室API.