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

導入

オーディオ API は、OpenAI の TTS (テキスト読み上げ) モデルに基づく音声エンドポイントを提供し、ユーザーは次のことが可能になります。

  • 書かれたブログ投稿をナレーションします。

  • 複数の言語で音声を生成します。

  • ストリーミングを使用してリアルタイムのオーディオ出力を提供します。

前提条件

  1. OpenAI アカウントを作成し、API キーを取得します。OpenAI サインアップページ (英語) でサインアップし、API キーページ (英語) で API キーを生成できます。

  2. プロジェクトのビルドファイルに spring-ai-openai 依存関係を追加します。詳細については、依存関係管理セクションを参照してください。

自動構成

Spring AI は、OpenAI テキスト読み上げクライアント用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに次の内容を追加します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

音声プロパティ

接続プロパティ

接頭辞 spring.ai.openai は、OpenAI への接続を可能にするプロパティ接頭辞として使用されます。

プロパティ

説明

デフォルト

spring.ai.openai.base-url

接続先の URL

api.openai.com (英語)

spring.ai.openai.api-key

API キー

-

spring.ai.openai.organization-id

オプションで、API リクエストに使用する組織を指定できます。

-

spring.ai.openai.project-id

必要に応じて、API リクエストに使用するプロジェクトを指定できます。

-

複数の組織に属しているユーザー(または従来のユーザー API キーを使用してプロジェクトにアクセスしているユーザー)の場合は、オプションで、API リクエストに使用する組織とプロジェクトを指定できます。これらの API リクエストからの使用量は、指定された組織とプロジェクトの使用量としてカウントされます。

プロパティの構成

プレフィックス spring.ai.openai.audio.speech は、OpenAI テキスト読み上げクライアントを構成できるプロパティプレフィックスとして使用されます。

プロパティ 説明 デフォルト

spring.ai.openai.audio.speech.base-url

接続先の URL

api.openai.com (英語)

spring.ai.openai.audio.speech.api-key

API キー

-

spring.ai.openai.audio.speech.organization-id

オプションで、API リクエストに使用する組織を指定できます。

-

spring.ai.openai.audio.speech.project-id

必要に応じて、API リクエストに使用するプロジェクトを指定できます。

-

spring.ai.openai.audio.speech.options.model

使用するモデルの ID。現在使用できるのは tts-1 のみです。

tts-1

spring.ai.openai.audio.speech.options.voice

TTS 出力に使用する音声。使用可能なオプションは、alloy、echo、fable、onyx、nova、shimmer です。

合金

spring.ai.openai.audio.speech.options.response-format

オーディオ出力の形式。サポートされている形式は、mp3、opus、aac、flac、wav、pcm です。

mp3

spring.ai.openai.audio.speech.options.speed

音声合成の速度。許容範囲は 0.25 (最も遅い) から 4.0 (最も速い) までです。

1.0

共通の spring.ai.openai.base-urlspring.ai.openai.api-keyspring.ai.openai.organization-idspring.ai.openai.project-id プロパティをオーバーライドできます。spring.ai.openai.audio.speech.base-urlspring.ai.openai.audio.speech.api-keyspring.ai.openai.audio.speech.organization-idspring.ai.openai.audio.speech.project-id プロパティが設定されている場合は、共通のプロパティよりも優先されます。これは、異なるモデルや異なるモデルエンドポイントに異なる OpenAI アカウントを使用する場合に便利です。
spring.ai.openai.image.options で始まるすべてのプロパティは、実行時にオーバーライドできます。

ランタイムオプション

OpenAiAudioSpeechOptions クラスは、テキスト読み上げリクエストを行うときに使用するオプションを提供します。起動時には、spring.ai.openai.audio.speech で指定されたオプションが使用されますが、実行時にこれらを上書きできます。

例:

OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
    .withModel("tts-1")
    .withVoice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
    .withResponseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .withSpeed(1.0f)
    .build();

SpeechPrompt speechPrompt = new SpeechPrompt("Hello, this is a text-to-speech example.", speechOptions);
SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);

手動構成

spring-ai-openai 依存関係をプロジェクトの Maven pom.xml ファイルに追加します。

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

または、Gradle build.gradle ビルドファイルに次の内容を追加します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

次に、OpenAiAudioSpeechModel を作成します。

var openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY"));

var openAiAudioSpeechModel = new OpenAiAudioSpeechModel(openAiAudioApi);

var speechOptions = OpenAiAudioSpeechOptions.builder()
    .withResponseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .withSpeed(1.0f)
    .withModel(OpenAiAudioApi.TtsModel.TTS_1.value)
    .build();

var speechPrompt = new SpeechPrompt("Hello, this is a text-to-speech example.", speechOptions);
SpeechResponse response = openAiAudioSpeechModel.call(speechPrompt);

// Accessing metadata (rate limit info)
OpenAiAudioSpeechResponseMetadata metadata = response.getMetadata();

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

リアルタイムオーディオのストリーミング

Speech API は、チャンク転送エンコーディングを使用したリアルタイムオーディオストリーミングをサポートします。つまり、完全なファイルが生成されてアクセス可能になる前にオーディオを再生できます。

var openAiAudioApi = new OpenAiAudioApi(System.getenv("OPENAI_API_KEY"));

var openAiAudioSpeechModel = new OpenAiAudioSpeechModel(openAiAudioApi);

OpenAiAudioSpeechOptions speechOptions = OpenAiAudioSpeechOptions.builder()
    .withVoice(OpenAiAudioApi.SpeechRequest.Voice.ALLOY)
    .withSpeed(1.0f)
    .withResponseFormat(OpenAiAudioApi.SpeechRequest.AudioResponseFormat.MP3)
    .withModel(OpenAiAudioApi.TtsModel.TTS_1.value)
    .build();

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

Flux<SpeechResponse> responseStream = openAiAudioSpeechModel.stream(speechPrompt);

サンプルコード