LoginSignup
0
0
音声認識APIを使ってみよう!

[Google Cloud Text-to-Speech API(V1)] Javaでテキストを音声に変換する

Last updated at Posted at 2024-05-18

Cloud Text-to-Speech API V1(Java)を使用して、
テキストを音声に変換する方法についてご紹介します。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Google Cloud Text-to-Speech API(V1)] JavaでText-to-Speech APIを使ってみる
を参照ください。

No 目次
1 テキストを変換(同期)
1 スコープ
2 実行
3 レスポンスの内容
2 長いテキストを変換(非同期)
1 スコープ
2 実行
3 レスポンスの内容

1. テキストを変換(同期)

テキストを音声に変換します。
変換した音声はすぐ(同期的)に取得できます。
変換に時間がかかるような長いテキストは、2. 長いテキストを変換(非同期)の方を利用ください。

1.1. スコープ

OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。

https://www.googleapis.com/auth/cloud-platform

1.2. 実行

public static void main(String[] args) throws Exception{
    try(TextToSpeechClient client = getTextToSpeechClient()){
        SynthesizeSpeechRequest.Builder builder = SynthesizeSpeechRequest.newBuilder();
        
        SynthesisInput.Builder input = SynthesisInput.newBuilder();
        input.setText("こんにちは");
        builder.setInput(input.build());
        
        VoiceSelectionParams.Builder voice = VoiceSelectionParams.newBuilder();
        voice.setLanguageCode("ja");
        builder.setVoice(voice.build());
        
        AudioConfig.Builder audioConfig = AudioConfig.newBuilder();
        audioConfig.setAudioEncoding(AudioEncoding.MP3);
        builder.setAudioConfig(audioConfig.build());
        
        SynthesizeSpeechResponse response = client.synthesizeSpeech(builder.build());
        ByteString bytes = response.getAudioContent();
        try (OutputStream out = new FileOutputStream("output.mp3")) {
            out.write(bytes.toByteArray());
        }
    }
}

1.2.1. HTTPリクエスト

POST: https://texttospeech.googleapis.com/v1/text:synthesize
が実行されます。

1.2.2. クエリパラメータ

クエリパラメータはありません。

1.2.3. リクエストボディ

SynthesizeSpeechRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでSynthesizeSpeechRequestインスタンスを取得し、
getAudioContent()に渡します。

メソッド 引数 説明
setInput SynthesisInput 【必須】合成するテキストの入力情報
setVoice VoiceSelectionParams 【必須】音声の情報
setAudioConfig AudioConfig 【必須】オーディオの構成

SynthesisInput

メソッド 引数 説明
setText String 【setSsmlとどちらか一方が必須】
合成されるテキスト
setSsml String 【setTextとどちらか一方が必須】
合成される⧉ 音声合成マークアップ言語(SSML)

VoiceSelectionParams

メソッド 引数 説明
setLanguageCode String 【必須】合成するテキストの言語

⧉ サポートされている音声と言語の「言語コード」を指定
setName String 音声名

⧉ サポートされている音声と言語の「音声名」を指定
setSsmlGender SsmlVoiceGender(enum) 声の優先性別
setCustomVoice CustomVoiceParams カスタムボイス

CustomVoiceParams

メソッド 引数 説明
setModel String
setReportedUsage ReportedUsage(enum) 報告される合成音声の使用法

ReportedUsage

定義値 内容
REPORTED_USAGE_UNSPECIFIED 未指定
REALTIME 合成されたオーディオがダウンロードできず一度しか使用できないシナリオ
OFFLINE 合成されたオーディオがダウンロード可能で再利用できるシナリオ

AudioConfig

メソッド 引数 説明
setAudioEncoding AudioEncoding(enum) 【必須】出力ファイル形式
setSpeakingRate double 話す速度(0.25〜4.0)
setPitch double 話す感覚(-20.0〜20.0)
setVolumeGainDb double ボリュームゲイン(dB)(-96.0〜16.0)
setSampleRateHertz int 合成サンプルレート(ヘルツ)
setAddEffectsProfileId String 音声プロファイルID

AudioEncoding

定義値 内容
AUDIO_ENCODING_UNSPECIFIED 未指定
LINEAR16 非圧縮16ビット符号付きリトルエンディアンサンプル(リニアPCM)
MP3 32kbpsのMP3オーディオ
長いテキストを変換(非同期)では使用不可
OGG_OPUS Opusでエンコードされたオーディオをoggコンテナーにラップ
長いテキストを変換(非同期)では使用不可
MULAW G.711PCMU/mu-lawを使用して14ビットオーディオサンプルを圧縮した8ビットサンプル
長いテキストを変換(非同期)では使用不可
ALAW G.711PCMU/A-lawを使用して14ビットオーディオサンプルを圧縮した8ビットサンプル
長いテキストを変換(非同期)では使用不可

SsmlVoiceGender

定義値 内容
SSML_VOICE_GENDER_UNSPECIFIED 性別不詳
MALE 男性の声
FEMALE 女性の声
NEUTRAL 性別を問わない声(未サポート)

音声プロファイルID

音声プロファイルID 使用に適したデバイスの例
wearable-class-device スマートウォッチやその他のウェアラブル
handset-class-device スマートフォン
headphone-class-device オーディオ再生用のイヤフォンやヘッドフォン
small-bluetooth-speaker-class-device 小型の家庭用スピーカー
medium-bluetooth-speaker-class-device 家庭用スマートスピーカー
large-home-entertainment-class-device 家庭用エンターテイメントシステムやスマートテレビ
large-automotive-class-device 車載用スピーカー
telephony-class-application インタラクティブ音声レスポンス(IVR)システム

1.3. レスポンスの内容

SynthesizeSpeechResponse

メソッド 戻り値 説明
getAudioContent ByteString エンコードされたオーディオデータバイト

2. 長いテキストを変換(非同期)

非同期で長いテキストを音声に変換します。

変換された音声ファイルはCloud Storageに出力されます。
変換される音声ファイルの形式は、LINEAR16のみ対応されています。

出力するCloud StorageはAPIからアクセスできるように
保存先のプロジェクトにIAM権限の設定を忘れないでください。

2.1. スコープ

OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。

https://www.googleapis.com/auth/cloud-platform

2.2. 実行

public static void main(String[] args) throws Exception{
    try(TextToSpeechLongAudioSynthesizeClient client = getTextToSpeechLongAudioSynthesizeClient()){
        SynthesizeLongAudioRequest.Builder builder = SynthesizeLongAudioRequest.newBuilder();
        builder.setParent(String.format(
            "projects/%s/locations/%s","プロジェクトID","ロケーションID"));
        builder.setOutputGcsUri(String.format(
            "gs://%s/%s","バケット名","出力するファイル名"));
        
        SynthesisInput.Builder input = SynthesisInput.newBuilder();
        input.setText("こんにちは");           //必須
        builder.setInput(input.build());
        
        VoiceSelectionParams.Builder voice = VoiceSelectionParams.newBuilder();
        voice.setName("ja-JP-Standard-A");  //必須
        voice.setLanguageCode("ja-JP");     //必須
        
        builder.setVoice(voice.build());
        
        AudioConfig.Builder audioConfig = AudioConfig.newBuilder();
        audioConfig.setAudioEncoding(AudioEncoding.LINEAR16); //必須
        builder.setAudioConfig(audioConfig.build());
        
        OperationFuture<SynthesizeLongAudioResponse,SynthesizeLongAudioMetadata>  response = client.synthesizeLongAudioAsync(builder.build());
        System.out.println(response.getName());
    }
}

2.2.1. HTTPリクエスト

POST: https://texttospeech.googleapis.com/v1/projects/{プロジェクトID}/locations/{ロケーションID}:synthesizeLongAudio
が実行されます。

2.2.2. クエリパラメータ

クエリパラメータはありません。

2.2.3. リクエストボディ

SynthesizeSpeechRequest.Builderのsetメソッドにより、リクエストボディを追加できます。
build()メソッドでSynthesizeSpeechRequestインスタンスを取得し、
getAudioContent()に渡します。

メソッド 引数 説明
setInput SynthesisInput 【必須】合成するテキストの入力情報
setVoice VoiceSelectionParams 【必須】音声の情報
setAudioConfig AudioConfig 【必須】オーディオの構成
setOutputGcsUri String 【必須】合成結果を出力するCloudStorageURI
形式:gs://{バケット名}/{出力するファイル名}

2.3. レスポンスの内容

OperationFuture

メソッド 戻り値 説明
getName String サーバーによって割り当てられた名前
形式:"projects/{プロジェクトID}/locations/{ロケーションID}/operations/{オペレーションID}"
getMetadata ApiFuture<SynthesizeLongAudioMetadata> 操作に関連付けられたサービス固有のメタデータ
isDone boolean 操作がまだ進行中であるか
getPollingFuture RetryingFuture<OperationSnapshot> 失敗またはキャンセルされた場合の操作のエラー結果
get SynthesizeLongAudioResponse 成功した場合の操作の通常の応答

SynthesizeLongAudioMetadata

メソッド 戻り値 説明
getStartTime Timestamp リクエストを受信した時刻
getProgressPercentage double 最新の処理更新の進行状況(%)

OperationSnapshot

メソッド 戻り値 説明
getErrorCode StatusCode エラーコード
getErrorMessage String 開発者向けのエラーメッセージ


おしまい。。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0