OpenAI テキスト読み上げ (TTS)
導入
オーディオ API は、OpenAI の TTS (テキスト読み上げ) モデルに基づく音声エンドポイントを提供し、ユーザーは次のことが可能になります。
書かれたブログ投稿をナレーションします。
複数の言語で音声を生成します。
ストリーミングを使用してリアルタイムのオーディオ出力を提供します。
前提条件
OpenAI アカウントを作成し、API キーを取得します。OpenAI サインアップページ (英語) でサインアップし、API キーページ (英語) で API キーを生成できます。
プロジェクトのビルドファイルに
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 | |
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 | |
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-url 、spring.ai.openai.api-key 、spring.ai.openai.organization-id 、spring.ai.openai.project-id プロパティをオーバーライドできます。spring.ai.openai.audio.speech.base-url 、spring.ai.openai.audio.speech.api-key 、spring.ai.openai.audio.speech.organization-id 、spring.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);
サンプルコード
OpenAiSpeechModelIT.java [GitHub] (英語) テストでは、ライブラリの使用方法に関する一般的な例がいくつか提供されます。