|
此版本仍在开发中,尚未被视为稳定版。为了获取最新的快照版本,请使用Spring AI 1.1.3! |
ElevenLabs 文本转语音(TTS)
简介
ElevenLabs使用深度学习技术提供自然语音合成软件。其AI音频模型能够生成横跨32种语言、听起来真实、多变且能根据上下文调整的语音、声效。ElevenLabs的文本转语音API使用户能够将任何书籍、文章、PDF、时事通讯或文本内容,通过超逼真的人工智能朗读生动展现。
前提条件
-
创建一个ElevenLabs账户并获取API密钥。您可以在ElevenLabs注册页面上进行注册。登录后,您可以在个人资料页面上找到您的API密钥。
-
将
spring-ai-elevenlabs依赖项添加到项目的构建文件中。更多信息,请参阅依赖管理部分。
自动配置
Spring AI 为 ElevenLabs 文本转语音客户端提供了 Spring Boot 自动配置功能。
要启用此功能,请在项目的 Maven pom.xml 文件中添加以下依赖项:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-elevenlabs</artifactId>
</dependency>
或者添加到你的 Gradle build.gradle 构建文件中:
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-elevenlabs'
}
| 参考以下依赖管理部分,添加Spring AI BOM到你的构建文件中。 |
语音属性
连接属性
前缀 spring.ai.elevenlabs 用作所有 ElevenLabs 相关配置(包括连接和TTS特定设置)的属性前缀。这在 ElevenLabsConnectionProperties 中定义。
属性 |
描述 |
默认 |
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文本转语音客户端的属性前缀。这在 ElevenLabsSpeechProperties 中定义。
| 属性 | 描述 | 默认 |
|---|---|---|
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。这是语音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.options为前缀的属性都可以在运行时覆盖。 |
枚举值 |
描述 |
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千赫兹 |
PCM_16000 |
PCM,16 kHz |
PCM_22050 |
脉冲编码调制(PCM),22.05 千赫兹 |
PCM_24000 |
PCM,24 kHz |
PCM_44100 |
脉冲编码调制(PCM),44.1 千赫兹 |
PCM_48000 |
脉冲编码调制(PCM),48 kHz |
ULAW_8000 |
µ-law, 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 |
运行时选项
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: 应用语言文本规范化。
例如:
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);
手动配置
将 spring-ai-elevenlabs 依赖添加到您项目的 Maven pom.xml 文件中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-elevenlabs</artifactId>
</dependency>
或者添加到你的 Gradle build.gradle 构建文件中:
dependencies {
implementation 'org.springframework.ai:spring-ai-elevenlabs'
}
| 参考以下依赖管理部分,添加Spring AI BOM到你的构建文件中。 |
接下来,创建一个 ElevenLabsTextToSpeechModel:
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 语音 API 允许您检索有关可用声音、它们的设置以及默认声音设置的信息。您可以使用此 API 来发现用于语音请求的 `voiceId`。
要使用Voices API,您需要创建一个ElevenLabsVoicesApi的实例:
ElevenLabsVoicesApi voicesApi = ElevenLabsVoicesApi.builder()
.apiKey(System.getenv("ELEVEN_LABS_API_KEY"))
.build();
然后您可以使用以下方法:
-
getVoices(): 获取所有可用语音的列表。 -
getDefaultVoiceSettings(): 获取语音的默认设置。 -
getVoiceSettings(String voiceId): 返回特定语音的设置。 -
getVoice(String voiceId): 返回关于特定语音的元数据。
Example:
// 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 测试提供了使用低级别
ElevenLabsApi的示例。