このバージョンはまだ開発中であり、まだ安定しているとは考えられていません。最新のスナップショットバージョンについては、Spring AI 1.1.5 を使用してください。

ElevenLabs テキスト読み上げ (TTS)

導入

ElevenLabs は、ディープラーニングを活用した自然な音声合成ソフトウェアを提供しています。AI 音声モデルは、32 言語に対応し、リアルで汎用性が高く、文脈を考慮した音声、音声、効果音を生成します。ElevenLabs のテキスト読み上げ API を利用すると、書籍、記事、PDF、ニュースレター、テキストなどを、超リアルな AI ナレーションで生き生きと表現できます。

前提条件

  1. ElevenLabs アカウントを作成し、API キーを取得してください。ElevenLabs サインアップページ (英語) でサインアップできます。API キーはログイン後、プロフィールページで確認できます。

  2. プロジェクトのビルドファイルに 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 のベース URL。

api.elevenlabs.io (英語)

spring.ai.elevenlabs.api-key

ElevenLabs API キー。

-

プロパティの構成

オーディオ音声自動構成の有効化と無効化は、プレフィックス 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

オーディオ音声モデルを有効にする

イレブンラボ

spring.ai.elevenlabs.tts.options.model-id

使用するモデルの ID。

11_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 キーは、spring.ai.elevenlabs.tts.base-url と spring.ai.elevenlabs.tts.api-key を使用した TTS 専用に設定することもできます。ただし、異なる ElevenLabs サービスごとに異なる認証情報を使用する特別な理由がない限り、簡潔性の観点から、通常はグローバルプレフィックスである spring.ai.elevenlabs を使用することをお勧めします。より具体的な tts プロパティは、グローバルプロパティをオーバーライドします。
spring.ai.elevenlabs.tts.options で始まるすべてのプロパティは、実行時にオーバーライドできます。
表 1: 利用可能な出力形式

列挙値

説明

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

µ -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: 生成されたオーディオの出力形式。

  • voiceSettingsstabilitysimilarityBooststyleuseSpeakerBoostspeed などの音声設定を格納したオブジェクト。

  • enableLogging: ログ記録を有効または無効にするブール値。

  • languageCode: 入力テキストの言語コード (例: 英語の場合は "en" )。

  • pronunciationDictionaryLocators: 発音辞書ロケーターのリスト。

  • seed: 再現性のための乱数生成のシード。

  • previousText: 複数ターンの会話のコンテキストを示す、メインテキストの前のテキスト。

  • nextText: 複数ターンの会話のコンテキストを示す、メインテキストの後のテキスト。

  • previousRequestIds: 会話の前のターンからの ID をリクエストします。

  • nextRequestIds: 会話の後続のターンの ID をリクエストします。

  • applyTextNormalization: テキストの正規化を適用します (「自動」、「オン」、「オフ」)。

  • 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 Speech 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 を使用するには、ElevenLabsVoicesApi のインスタンスを作成する必要があります。

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

その後、次の方法を使用できます。

  • getVoices(): 利用可能なすべての音声のリストを取得します。

  • getDefaultVoiceSettings(): 音声のデフォルト設定を取得します。

  • getVoiceSettings(String voiceId): 特定の音声の設定を返します。

  • getVoice(String 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();

サンプルコード