DashScope Java SDK を用いて、 CosyVoice で音声合成を行います。
サービスエンドポイント
デフォルトでは、SDK はChina (Beijing) リージョンのエンドポイントに接続します。別のリージョンを使用するには、SDK を初期化する前にConstants.baseWebsocketApiUrl を設定します。
- Singapore
- China (Beijing)
wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference{WorkspaceId} を実際のワークスペース ID に置き換えてください。SpeechSynthesizer
パッケージ: com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer
コンストラクター
param:SpeechSynthesisParam.builder() で構築する音声合成パラメーター。callback:ストリーミング呼び出しのコールバック。非ストリーミング呼び出しの場合は null を渡します。
call() - 非ストリーミング/単方向ストリーミングの合成
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
text | 文字列 | 必須 | 合成するテキスト。最大長:20,000 文字。 |
ByteBuffer または null。非ストリーミング呼び出しの場合は、完全な音声データを返します。単方向ストリーミング呼び出しの場合、このメソッドは null を返し、音声はコールバック経由で配信されます。
streamingCall() - 双方向ストリーミングの合成
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
text | 文字列 | 必須 | 合成するテキスト。最大長:20,000 文字。このメソッドは複数回呼び出して、テキストを追加できます。 |
streamingComplete() - 双方向ストリーミングの終了
メソッドシグネチャ:
streamingCancel() - 双方向ストリーミングのキャンセル
メソッドシグネチャ:
SpeechSynthesizer インスタンスを再初期化せずに、同じ接続上で新しい合成タスクを開始できます。
callAsFlowable() - 単方向ストリーミングの合成 (リアクティブ)
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
text | 文字列 | 必須 | 合成するテキスト。最大長:20,000 文字。 |
streamingCallAsFlowable() - 双方向ストリーミングの合成 (リアクティブ)
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
textStream | Flowable<String> | 必須 | テキストのリアクティブストリーム。 |
SpeechSynthesisResult> のリアクティブストリーム。
getDuplexApi().close() - WebSocket 接続のクローズ
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
code | int | 必須 | クローズコード。 |
reason | 文字列 | 必須 | クローズ理由。 |
ブール値。接続を正常にクローズできた場合は true、それ以外の場合は false を返します。
getLastRequestId() - リクエスト ID の取得
メソッドシグネチャ:
文字列。リクエスト ID を返します。
getFirstPackageDelay() - 初回パケットレイテンシーの取得
メソッドシグネチャ:
long。最初のテキストセグメントを送信してから最初の音声パケットを受信するまでの時間をミリ秒単位で測定した、初回パケットレイテンシー。
SpeechSynthesisParam
パッケージ: com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam
例:
Builderメソッド
| メソッド | パラメーターの型 | 必須 | 説明 |
|---|---|---|---|
model(String) | String | はい | モデル名です。 |
voice(String) | String | はい | 音声合成に使用する音声です。
|
format(SpeechSynthesisAudioFormat) | enum | いいえ | 音声エンコーディング形式とサンプリングレートです。デフォルト値: SpeechSynthesisAudioFormat.MP3_22050HZ_MONO_256KBPS です。SpeechSynthesisAudioFormat パッケージ: com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisAudioFormat です。 |
volume(int) | int | いいえ | 音量です。デフォルト値: 50 です。有効な値: [0, 100] です。 |
speechRate(float) | float | いいえ | スピーチレートです。デフォルト値: 1.0 です。有効な値: [0.5, 2.0] です。 |
pitchRate(float) | float | いいえ | ピッチです。デフォルト値: 1.0 です。有効な値: [0.5, 2.0] です。 |
enableWordTimestamp(boolean) | boolean | いいえ | 単語レベルのタイムスタンプを有効にするかどうかを指定します。デフォルト値: false です。ストリーミング出力モードでのみ使用できます。サポートされている音声は、cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のクローン音声、および CosyVoice Voice list でサポート対象としてマークされているシステム音声です。他のモデルのクローン音声はこの機能をサポートしていません。 |
seed(int) | int | いいえ | 合成出力のばらつきを制御するためのランダムシードです。モデルのバージョン、テキスト、音声、およびその他のパラメーターが変更されない場合、同じシードを使用すると同一の結果を生成します。デフォルト値: 0 です。有効な値: [0, 65535] です。SDK バージョン 2.21.7 より前の場合、追加パラメーターを使用して seed を設定します。 |
languageHints(List<String>) | List<String> | いいえ | 音声合成のターゲット言語を指定し、出力品質を向上させます。数字の発音、略語の展開、記号の読み上げ、または少数言語の合成が期待どおりでない場合に、このパラメーターを使用します。例:
有効な値
|
instruction(String) | String | いいえ | 方言、感情、話し方などの合成特性を制御します。使用方法の詳細については、「Instruction control」をご参照ください。 |
hotFix(ParamHotFix) | ParamHotFix | いいえ | 合成前に適用する発音の修正とテキスト置換を設定します。 この機能は cosyvoice-v2 ではサポートされていません。
|
parameter(String key, Object value) | String, Object | いいえ | 追加パラメーターを設定します。 |
parameters(Map<String, Object>) | Map | いいえ | 追加パラメーターを設定します。 |
追加パラメーター
parameter() または parameters() を使用して設定します。
例:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
bit_rate | integer | いいえ | kbps 単位の音声ビットレートです。音声形式が mp3 または opus の場合、bit_rate を使用してビットレートを調整します。デフォルト値: 32 です。有効な値: [6, 510] です。 |
enable_aigc_tag | boolean | いいえ | 生成された音声に AIGC ウォーターマークを埋め込むかどうかを指定します。true に設定すると、サポートされている形式 (wav/mp3/opus) の音声ファイルにウォーターマークが埋め込まれます。デフォルト値: false です。 cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがこの機能をサポートしています。 |
aigc_propagator | String | いいえ | AIGC ウォーターマークの ContentPropagator フィールドを設定し、コンテンツの伝播元を識別します。enable_aigc_tag が true の場合にのみ有効になります。デフォルト値: Alibaba Cloud の UID です。cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがこの機能をサポートしています。 |
aigc_propagate_id | String | いいえ | AIGC ウォーターマークの PropagateID フィールドを設定し、特定の伝播アクションを一意に識別します。enable_aigc_tag が true の場合にのみ有効になります。デフォルト値: 現在の音声合成リクエストのリクエスト ID です。cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがこの機能をサポートしています。 |
enable_markdown_filter | boolean | いいえ | cosyvoice-v3-flash のクローン音声のみがこの機能をサポートしています。
|
ResultCallback
パッケージ: com.alibaba.dashscope.common.ResultCallback
onEvent() - 音声データの受信
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
result | SpeechSynthesisResult | はい | 合成イベントを受信したときにトリガーされ、オーディオフレーム、タイムスタンプ情報、および出力情報 (イベントタイプ、元のテキストなど) が含まれます。 |
onComplete() - 合成完了
メソッドシグネチャ:
onError() - エラー処理
メソッドシグネチャ:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
e | Exception | はい | エラーが発生したときにトリガーされ、例外情報が含まれます。 |
SpeechSynthesisResult
パッケージ: com.alibaba.dashscope.audio.tts.SpeechSynthesisResult
getAudioFrame() - オーディオデータフレームの取得
メソッドシグネチャ:
ByteBuffer。オーディオデータフレーム。
getTimestamp() - タイムスタンプ情報の取得
メソッドシグネチャ:
getOutput() - 出力情報の取得
メソッドシグネチャ:
com.google.gson.JsonObject。イベントタイプ、テキストコンテンツ、タイムスタンプ情報を含む、合成イベントの 出力情報 です。 SDK バージョン >= 2.22.0 が必要です。
文レベルのタイムスタンプ情報 (Sentence)
Sentence は、文レベルのタイムスタンプ情報をカプセル化します。
getBeginTime() - 文の開始時刻の取得
メソッドシグネチャ:
getEndTime() - 文の終了時刻の取得
メソッドシグネチャ:
getWords() - 単語レベルのタイムスタンプの取得
メソッドシグネチャ:
List。空の場合があります。
単語レベルのタイムスタンプ情報 (Word)
Word は、単語レベルのタイムスタンプ情報をカプセル化します。
getBeginTime() - 単語の開始時刻の取得
メソッドシグネチャ:
getEndTime() - 単語の終了時刻の取得
メソッドシグネチャ:
getText() - テキストの取得
メソッドシグネチャ:
String。テキストコンテンツ。
getPhonemes() - 音素レベルのタイムスタンプの取得
メソッドシグネチャ:
List。空の場合があります。
音素レベルのタイムスタンプ情報 (Phoneme)
Phoneme は、音素レベルのタイムスタンプ情報をカプセル化します。
getBeginTime() - 音素の開始時刻の取得
メソッドシグネチャ:
getEndTime() - 音素の終了時刻の取得
メソッドシグネチャ:
getText() - テキストの取得
メソッドシグネチャ:
String。テキストコンテンツ。
getTone() - トーンの取得
メソッドシグネチャ:
- 英語では、0、1、2 はそれぞれ無強勢、第一強勢、第二強勢を表します。
- 中国語ピンインでは、1、2、3、4、5 はそれぞれ第一声、第二声、第三声、第四声、軽声を表します。
出力情報 (output)
getOutput() は、合成イベントの出力情報をカプセル化した JsonObject を返します。onEvent コールバック、または Flowable ストリームで取得します。これには次のフィールドが含まれます。
| フィールド | タイプ | 説明 |
|---|---|---|
type | 文字列 | イベントタイプ。有効な値: sentence-begin (文の開始。合成対象のテキストを返します)、sentence-synthesis (音声の合成中。オーディオデータチャンクを返します)、sentence-end (文の終了。テキストコンテンツと単語レベルのタイムスタンプを返します)。 |
original_text | 文字列 | 現在の文の元のテキスト。sentence-begin および sentence-end イベントで返されます。 |
sentence | JsonObject | 文の情報。文のインデックス (index) と単語レベルのタイムスタンプ (words) が含まれます。 sentence-end イベントには、単語レベルのタイムスタンプ情報がすべて含まれます。 |
サンプルコード
SDK は以下の合成モードをサポートしています。
- 非ストリーミング:完全なテキストを一度に送信し、完全な音声を直接返すブロッキングコールです。短いテキストの音声合成に最適です。
- 単方向ストリーミング:完全なテキストを一度に送信し、コールバック関数を通じて音声データ (チャンク単位で配信される場合があります) を配信する非ブロッキングコールです。低レイテンシーが必要な短いテキストのシナリオに最適です。
- 双方向ストリーミング:テキストを複数のセグメントで送信し、リアルタイムでコールバック関数を通じて段階的に合成された音声を配信する非ブロッキングコールです。低レイテンシーが必要な長いテキストのシナリオに最適です。
- 非ストリーミング呼び出し
- 単方向ストリーミング呼び出し
- 双方向ストリーミング呼び出し
Flowable ベースの呼び出し
Flowable は、バックプレッシャーをサポートするリアクティブストリームを表す RxJava の型です。詳細については、「RxJava Flowable ドキュメント」をご参照ください。
Flowable を使用する前に、RxJava ライブラリが統合されていること、およびリアクティブプログラミングの基礎を理解していることを確認してください。
個別の呼び出しのテキスト長は 20,000 文字、全呼び出しにわたる累積テキスト長は 200,000 文字を超えないようにしてください。
- 単方向ストリーミング呼び出し
- 双方向ストリーミング呼び出し
次の例では、Flowable オブジェクトの
blockingForEach メソッドを使用して、ストリーミングされた各 SpeechSynthesisResult オブジェクトをブロッキング方式で取得する方法を示します。