CosyVoice 音声合成 Java SDK のパラメーターおよび主要インターフェイスについて説明します。
ユーザーガイド:モデルの概要および選択推奨については、「リアルタイム音声合成 — CosyVoice」をご参照ください。
前提条件
-
Model Studio を有効化し、API キーを作成済みである必要があります。環境変数としてエクスポートする(ハードコーディングしない)ことで、セキュリティリスクを防止してください。
説明一時的なアクセスや、機密データへのアクセス/削除といった高リスク操作を厳密に制御する場合は、一時認証トークンをご利用ください。
長期使用の API キーと比較して、一時トークンはより安全(有効期限:60 秒)であり、API キーの漏洩リスクを低減します。
一時トークンを利用するには、コード内の認証に使用する API キーを、一時認証トークンに置き換えてください。
-
DashScope SDK の最新版をインストールしてください。
モデルおよび料金
「リアルタイム音声合成 — CosyVoice」をご参照ください。
テキストおよびフォーマットの制限事項
テキスト長の制限
-
非ストリーミング呼び出し、単方向ストリーミング呼び出し、または Flowable 単方向ストリーミング呼び出し:1 回のリクエストあたり最大 20,000 文字です。
-
双方向ストリーミング呼び出しまたは Flowable 双方向ストリーミング呼び出し:1 回のリクエストあたり最大 20,000 文字(全リクエスト合計で最大 200,000 文字)です。
文字数カウント規則
-
中国語文字(簡体字/繁体字)、日本語漢字、韓国語漢字は 1 文字につき 2 文字としてカウントされます。その他のすべての文字(句読点、英数字、ひらがな・カタカナ、ハングルなど)は 1 文字としてカウントされます。
-
SSML タグはテキスト長の計算対象外です。
-
例:
-
"你好"→ 2(中国語文字)+ 2(中国語文字)= 4 文字 -
"中A文123"→ 2(中国語文字)+ 1(A)+ 2(中国語文字)+ 1(1)+ 1(2)+ 1(3)= 8 文字 -
"中文。"→ 2(中国語文字)+ 2(中国語文字)+ 1(。)= 5 文字 -
"中 文。"→ 2(中国語文字)+ 1(半角スペース)+ 2(中国語文字)+ 1(。)= 6 文字 -
"<speak>你好</speak>"→ 2(中国語文字)+ 2(中国語文字)= 4 文字
-
エンコード形式
UTF-8 エンコードを使用してください。
数式のサポート
数式解析(v3.5-flash、v3.5-plus、v3-flash、v3-plus、v2 のみ対応):小学校・中学校レベルの数学(基本操作、代数、幾何学)をサポートします。
この機能は中国語のみ対応しています。
「LaTeX 数式を音声に変換(中国語のみ)」をご参照ください。
SSML のサポート
SSML は、v3.5-flash、v3.5-plus、v3-flash、v3-plus、v2 でカスタムボイス(音声デザインまたは音声クローニング)に使用可能であり、また音声一覧で「対応」と明記されたシステムボイスでも使用可能です。要件は以下のとおりです:
-
DashScope SDK 2.20.3 以降。
-
サポートされているのは、非ストリーミング呼び出しおよび単方向ストリーミング呼び出し(つまり、SpeechSynthesizer クラスの
callメソッド)のみです。双方向ストリーミング呼び出し(つまり、SpeechSynthesizer クラスのstreamingCallメソッド)およびFlowable 呼び出しはサポートされていません。 -
通常の音声合成と同様の使い方です:SSML を含むテキストを、SpeechSynthesizer クラスの
callメソッドに渡します。
クイックスタート
SpeechSynthesizer クラスは、音声合成の主要インターフェイスを提供し、以下の呼び出し方法をサポートしています:
-
非ストリーミング:テキスト全体を一度に送信し、完全な音声を返すブロッキング呼び出しです。短いテキストに適しています。
-
単方向ストリーミング:テキスト全体を一度に送信し、コールバック経由で音声を受信するノンブロッキング呼び出しです。低レイテンシーを要求する短いテキストに適しています。
-
双方向ストリーミング:テキストを断片的に段階的に送信し、リアルタイムでコールバック経由で音声を受信するノンブロッキング呼び出しです。低レイテンシーを要求する長いテキストに適しています。
非ストリーミング呼び出し
音声合成タスクを同期的に送信し、完全な結果を返します。
SpeechSynthesizer クラスのインスタンスを作成し、リクエストパラメーターをバインドしたうえで、call メソッドを呼び出して音声合成を行い、バイナリ音声データを取得します。
送信するテキストの長さは 20,000 文字を超えてはなりません。詳細については、SpeechSynthesizer クラスの call メソッドをご参照ください。
call メソッドを呼び出すたびに、SpeechSynthesizer インスタンスを再初期化する必要があります。
単方向ストリーミング呼び出し
音声合成タスクを非同期で送信し、ResultCallback を介して音声を段階的に受信します。
SpeechSynthesizer クラスのインスタンスを作成し、リクエストパラメーターおよびResultCallback インターフェイスをバインドしたうえで、call メソッドを呼び出して音声合成を行います。ResultCallback インターフェイスの onEvent メソッドを介して、リアルタイムで合成結果を取得します。
送信するテキストの長さは 20,000 文字を超えてはなりません。詳細については、SpeechSynthesizer クラスの call メソッドをご参照ください。
call メソッドを呼び出すたびに、SpeechSynthesizer インスタンスを再初期化する必要があります。
双方向ストリーミング呼び出し
複数のチャンクに分割したテキストを送信し、登録済みの ResultCallback コールバックを介して音声データを段階的に受信します。
-
ストリーミング入力の場合、
streamingCallを複数回呼び出して、順次テキスト断片を送信します。サーバーがテキスト断片を受信すると、自動的に文に分割します:-
完全な文は即座に合成されます。
-
不完全な文はバッファーに保持され、完成後に合成されます。
streamingCompleteを呼び出すと、サーバーは受信済みだが未処理のすべてのテキスト断片(不完全な文を含む)を強制的に合成します。 -
-
テキスト断片の送信間隔は 23 秒を超えてはならず、それ以上になるとタイムアウト例外が発生します。
テキストの送信が完了した場合は、速やかに
streamingCompleteメソッドを呼び出してください。サーバーは 23 秒のタイムアウト機構を強制的に適用します。この設定はクライアント側では変更できません。
-
SpeechSynthesizer クラスのインスタンス化
SpeechSynthesizer クラスのインスタンスを作成し、リクエストパラメーターおよびResultCallback インターフェイスをバインドします。
-
ストリーミング
SpeechSynthesizer クラスの
streamingCallメソッドを複数回呼び出して、合成用のテキストをチャンク単位で送信します。これにより、テキストがセグメント単位でサーバーに送信されます。テキストを送信している間、サーバーはResultCallback インターフェイスの
onEventメソッドを介して、リアルタイムで合成結果をクライアントに返します。streamingCallメソッド(textパラメーター)で送信する各テキスト断片の長さは 20,000 文字を超えてはならず、送信するテキストの合計長は 200,000 文字を超えてはなりません。 -
処理の終了
SpeechSynthesizer クラスの
streamingCompleteメソッドを呼び出して音声合成を終了します。このメソッドは、ResultCallback インターフェイスの
onCompleteまたはonErrorコールバックがトリガーされるまで、現在のスレッドをブロックします。その後、スレッドのブロックが解除されます。必ずこのメソッドを呼び出してください。呼び出さないと、末尾のテキストが音声に変換されない可能性があります。
Flowable を使用した呼び出し
Flowable はオープンソースのワークフロー・フレームワーク(Apache 2.0 ライセンス)です。「Flowable API の詳細」をご参照ください。
Flowable を使用する前に、RxJava ライブラリを統合し、リアクティブプログラミングの基本概念を理解していることを確認してください。
単方向ストリーミング呼び出し
次の例では、Flowable オブジェクトの blockingForEach インターフェイスを使用して、各ストリームから返される SpeechSynthesisResult データをブロッキングして取得する方法を示します。
すべての Flowable ストリームデータが返された後、SpeechSynthesizer クラスの getAudioData メソッドを介して、完全な合成結果も取得できます。
双方向ストリーミング呼び出し
次の例では、Flowable オブジェクトを入力パラメーターとしてテキストストリームを入力する方法、および Flowable オブジェクトを戻り値として使用し、blockingForEach インターフェイスを介して各ストリームから返される SpeechSynthesisResult データをブロッキングして取得する方法を示します。
すべての Flowable ストリームデータが返された後、SpeechSynthesizer クラスの getAudioData メソッドを介して、完全な合成結果も取得できます。
高同時実行数呼び出し
DashScope Java SDK は OkHttp3 の接続プール技術を使用して、接続を繰り返し確立するオーバーヘッドを削減します。詳細については、「高同時実行数のシナリオ」をご参照ください。
リクエストパラメーター
SpeechSynthesisParam のチェーンメソッドを使用して、モデルやボイスなどのパラメーターを構成します。構成済みのパラメーター・オブジェクトを、SpeechSynthesizer クラスのコンストラクターに渡します。
|
パラメーター |
型 |
必須 |
説明 |
|
model |
String |
はい |
音声合成モデルです。各モデルバージョンには互換性のあるボイスが必要です:
|
|
voice |
String |
はい |
音声合成に使用するボイスです。 対応するボイスの種類:
|
|
format |
enum |
いいえ |
音声エンコーディング形式およびサンプルレートです。 デフォルトは、22.05 kHz サンプルレートの MP3 形式です。 説明
デフォルトのサンプルレートは、選択したボイスに対して最適なレートを表します。出力はこのレートでデフォルトで行われますが、ダウンサンプリングおよびアップサンプリングもサポートされています。 対応する音声エンコーディング形式およびサンプルレートは以下のとおりです:
|
|
volume |
int |
いいえ |
ボリュームです。 デフォルト値:50。 有効範囲:[0, 100]。値は線形にスケーリングされます。0 は無音、50 はデフォルト、100 は最大です。 |
|
speechRate |
float |
いいえ |
話速です。 デフォルト値:1.0。 有効範囲:[0.5, 2.0]。1.0 は標準の話速です。1.0 より小さい値は話速を遅くし、1.0 より大きい値は話速を速くします。 |
|
pitchRate |
float |
いいえ |
ピッチ倍率です。知覚されるピッチとの関係は線形でも対数でもありません。適切な値を見つけるためにはテストが必要です。 デフォルト値:1.0。 有効範囲:[0.5, 2.0]。1.0 はボイスの自然なピッチです。1.0 より大きい値はピッチを上げ、1.0 より小さい値はピッチを下げます。 |
|
bit_rate |
int |
いいえ |
音声ビットレート(kbps)。音声形式が Opus の場合、 デフォルト値:32。 有効範囲:[6, 510]。 説明
parameter メソッドを使用した設定
parameters メソッドを使用した設定
|
|
enableWordTimestamp |
boolean |
いいえ |
単語レベルのタイムスタンプを有効にするかどうかを指定します。 デフォルト値:false。
この機能は、cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 モデルのクローニングボイスおよび、音声一覧で「対応」と明記されたシステムボイスでのみ利用可能です。 タイムスタンプの結果は、コールバックインターフェイスでのみ利用可能です。 |
|
seed |
int |
いいえ |
生成中に使用される乱数シードです。異なるシードは異なる合成結果を生成します。モデル、テキスト、ボイス、その他のパラメーターが同一の場合、同じシードを使用すると同一の出力を再現できます。 デフォルト値:0。 有効範囲:[0, 65535]。 |
|
languageHints |
List |
いいえ |
音声合成の対象言語を指定することで、合成効果を向上させます。 数字、略語、記号、またはあまり使われない言語の発音や合成品質が低い場合に使用します:
有効な値:
注: このパラメーターは配列ですが、現在のバージョンでは先頭の要素のみが処理されます。そのため、1 つの値のみを渡すことを推奨します。 重要
このパラメーターは音声合成の対象言語を指定します。この設定は、音声クローニングで使用するサンプル音声の言語とは独立しています。クローニングタスクのソース言語を設定するには、「CosyVoice 音声クローニング/デザイン API」をご参照ください。 |
|
instruction |
String |
いいえ |
方言、感情、話し方のスタイルなどの合成効果を制御する命令を設定します。この機能は、cosyvoice-v3.5-flash、cosyvoice-v3.5-plus、cosyvoice-v3-flash モデルのクローニングボイスおよび、音声一覧で「Instruct 対応」と明記されたシステムボイスでのみ利用可能です。 長さ制限: 100 文字。 中国語文字(簡体字/繁体字、日本語漢字、韓国語漢字)は 1 文字につき 2 文字としてカウントされます。句読点、英数字、ひらがな・カタカナ、ハングルなどのその他の文字は 1 文字としてカウントされます。 使用要件(モデルによって異なります):
|
|
enable_aigc_tag |
boolean |
いいえ |
生成された音声に不可視の AIGC 不可視識別子を追加するかどうかを指定します。true に設定すると、対応するフォーマット(WAV、MP3、Opus)の音声に不可視の識別子が埋め込まれます。 デフォルト値:false。 この機能は cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがサポートしています。 説明
parameter メソッドを使用した設定
parameters メソッドを使用した設定
|
|
aigc_propagator |
String |
いいえ |
不可視の AIGC 不可視識別子の デフォルト値:Alibaba Cloud UID。 この機能は cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがサポートしています。 説明
parameter メソッドを使用した設定
parameters メソッドを使用した設定
|
|
aigc_propagate_id |
String |
いいえ |
不可視の AIGC 不可視識別子の デフォルト値:現在の音声合成リクエストのリクエスト ID。 この機能は cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2 のみがサポートしています。 説明
parameter メソッドを使用した設定
parameters メソッドを使用した設定
|
|
hotFix |
ParamHotFix |
いいえ |
テキストホットパッチの構成です。特定の単語の発音をカスタマイズしたり、合成前にテキストを置き換えたりできます。この機能は cosyvoice-v3-flash のクローニングボイスでのみ利用可能です。 パラメーターの説明:
例:
|
|
enable_markdown_filter |
boolean |
false |
Markdown フィルターを有効にするかどうかを指定します。有効にすると、システムは合成前に入力テキストから Markdown シンボルを自動的に削除し、それらが読み上げられないようにします。この機能は cosyvoice-v3-flash のクローニングボイスでのみ利用可能です。 デフォルト値:false。 有効な値:
説明
parameter メソッドを使用した設定
parameters メソッドを使用した設定
|
主要インターフェイス
SpeechSynthesizer クラス
SpeechSynthesizer クラスは import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer; を使用してインポートします。音声合成の主要インターフェイスを提供します。
|
インターフェイス/メソッド |
パラメーター |
戻り値 |
説明 |
|
|
|
コンストラクターです。
|
|
|
|
テキスト(プレーンテキストまたはSSML を含む)を音声に変換します。
重要
|
|
|
なし |
テキストをストリームとして送信します。SSML はサポートされていません。 このインターフェイスを複数回呼び出して、テキストを複数の部分に分けてサーバーに送信します。合成結果は ResultCallback インターフェイスの 詳細な呼び出しフローおよび参考例については、「双方向ストリーミング呼び出し」をご参照ください。 |
|
なし |
なし |
ストリーミング音声合成を終了します。 このメソッドは、以下のいずれかの条件が発生するまでブロックします:
詳細な呼び出しフローおよび参考例については、「双方向ストリーミング呼び出し」をご参照ください。 重要
双方向ストリーミング呼び出しを行う際は、合成音声の一部が欠落しないように、必ずこのメソッドを呼び出してください。 |
|
|
合成結果( |
非ストリーミングのテキスト入力(SSML を含むテキストはサポートされていません)を、リアルタイムでストリーミング音声出力に変換します。合成結果は Flowable オブジェクト内のストリームで返されます。 詳細な呼び出しフローおよび参考例については、「Flowable を使用した呼び出し」をご参照ください。 |
|
code:WebSocket クローズコード reason:クローズ理由 これらのパラメーターの構成方法については、「The WebSocket Protocol」ドキュメントをご参照ください。 |
true |
タスク完了後、例外が発生したかどうかにかかわらず、WebSocket 接続を閉じる必要があります。これにより、接続リークを防ぎます。接続を再利用して効率を向上させる方法については、「高同時実行数のシナリオ」をご参照ください。 |
|
|
合成結果( |
ストリーミングのテキスト入力(SSML を含むテキストはサポートされていません)を、リアルタイムでストリーミング音声出力に変換します。合成結果は Flowable オブジェクト内のストリームで返されます。 詳細な呼び出しフローおよび参考例については、「Flowable を使用した呼び出し」をご参照ください。 |
|
なし |
前回のタスクのリクエスト ID。 |
前回のタスクのリクエスト ID を取得します。 |
|
なし |
現在のタスクの最初のパケット遅延。 |
最初のパケット遅延をミリ秒単位で返します(テキスト送信から最初の音声受信までの時間)。タスク完了後に呼び出してください。 最初のパケット遅延に影響する要因:
一般的な遅延:
遅延が常に 2,000 ms を超える場合:
|
ResultCallback インターフェイス
ストリーミング呼び出し(単方向または双方向)の場合、ResultCallback を介して結果を取得します。インポート:import com.alibaba.dashscope.common.ResultCallback;。
|
インターフェイス/メソッド |
パラメーター |
戻り値 |
説明 |
|
|
なし |
サーバーが音声データをプッシュしたときに呼び出されます。
SpeechSynthesisResult の |
|
なし |
なし |
すべての合成データが返され、音声合成が完了した後に非同期で呼び出されます。 |
|
|
なし |
例外が発生したときに非同期で呼び出されます。
|
応答
サーバーはバイナリ音声データを返します:
-
非ストリーミング呼び出し:SpeechSynthesizer クラスの
callメソッドが返すバイナリ音声データを処理します。 -
単方向ストリーミング呼び出しまたは双方向ストリーミング呼び出し:ResultCallback インターフェイスの
onEventメソッドのパラメーター(型:SpeechSynthesisResult)を処理します。SpeechSynthesisResultの主要インターフェイスは以下のとおりです:インターフェイス/メソッド
パラメーター
戻り値
説明
public ByteBuffer getAudioFrame()なし
バイナリ音声データ
現在のセグメントのバイナリ音声を返します(新しいデータがない場合は空の場合があります)。
セグメントを結合して完全なファイルにするか、互換性のあるプレーヤーにストリーミングします。
重要-
ストリーミング音声合成では、MP3 や Opus などの圧縮形式の場合、セグメント化された音声データはストリーミングプレーヤーを使用して再生する必要があります。フレームごとに再生するとデコードに失敗するため、行わないでください。
ストリーミングプレーヤーには、FFmpeg、PyAudio (Python)、AudioFormat (Java)、MediaSource (JavaScript) などがあります。
-
音声データを結合して完全な音声ファイルを作成する場合は、追記モードで同一ファイルに書き込みます。
-
ストリーミング音声合成による WAV および MP3 音声では、最初のフレームにのみヘッダー情報が含まれます。後続のフレームには音声データのみが含まれます。
public String getRequestId()なし
タスクのリクエスト ID。
タスクのリクエスト ID を取得します。
getAudioFrameを呼び出してバイナリ音声データを取得する場合、getRequestIdメソッドの戻り値はnullです。public SpeechSynthesisUsage getUsage()なし
SpeechSynthesisUsage:現在までのリクエストにおける課金対象文字数。SpeechSynthesisUsageまたはnullを返します。SpeechSynthesisUsageのgetCharactersメソッドは、現在までのリクエストにおける課金対象文字数を返します。最後に受信したSpeechSynthesisUsageを最終値として使用します。public Sentence getTimestamp()なし
Sentence:現在までのリクエストで課金対象となっている文。enableWordTimestamp単語レベルのタイムスタンプ機能を有効にする必要があります。Sentenceまたはnullを返します。Sentenceのメソッド:-
getIndex:文番号を取得します(0 から始まります)。 -
getWords:文を構成する文字配列List<Word>を取得します。最後に受信したSentenceを最終値として使用します。
Wordのメソッド:-
getText:文字のテキストを取得します。 -
getBeginIndex:文中の文字の開始位置インデックスを取得します(0 から始まります)。 -
getEndIndex:文中の文字の終了位置インデックスを取得します(1 から始まります)。 -
getBeginTime:文字に対応する音声の開始タイムスタンプをミリ秒単位で取得します。 -
getEndTime:文字に対応する音声の終了タイムスタンプをミリ秒単位で取得します。
-
エラーコード
エラーが発生した場合は、「エラーメッセージ」をご参照のうえ、トラブルシューティングを行ってください。
その他の例
その他の例については、GitHub をご参照ください。
よくある質問
機能、課金、レート制限
Q:発音が不正確な場合はどうすればよいですか?
A:「SSML」を使用して発音を修正してください。
Q:音声合成は文字数で課金されます。各合成リクエストのテキスト長を確認するにはどうすればよいですか?
-
非ストリーミング呼び出し:文字数カウント規則に従ってご自身で計算する必要があります。
-
その他の呼び出し方法:応答 SpeechSynthesisResult の
getUsageメソッドを使用します。最後に受信した応答結果を最終値として使用してください。
トラブルシューティング
コードエラーが発生した場合は、「エラーコード」をご参照のうえ、トラブルシューティングを行ってください。
Q:リクエスト ID を取得するにはどうすればよいですか?
以下のいずれかの方法で取得します:
-
ResultCallback インターフェイスの
onEventメソッドで、SpeechSynthesisResult のgetRequestIdメソッドを呼び出します。getRequestIdメソッドの戻り値は null の場合があります。詳細については、SpeechSynthesisResult のgetRequestIdメソッドの説明をご参照ください。 -
SpeechSynthesizer の
getLastRequestIdメソッドを呼び出します。
Q:SSML 機能が失敗するのはなぜですか?
トラブルシューティング:
-
制限事項と制約を確認します。
-
正しいインターフェイスを使用していることを確認します:SpeechSynthesizer クラスの
callメソッドのみが SSML をサポートしています。 -
合成対象のテキストがプレーンテキスト形式であり、フォーマット要件を満たしていることを確認します。詳細については、「SSML マークアップ言語の概要」をご参照ください。
Q:TTS 音声合成の音声持続時間が、WAV ファイルの表示持続時間と異なるのはなぜですか?たとえば、WAV ファイルの表示が 7 秒でも、実際の音声は 5 秒未満の場合などです。
TTS はストリーミング合成メカニズムを使用しており、データを段階的に合成して返します。そのため、WAV ファイルヘッダーには推定値が含まれており、多少の誤差が生じる可能性があります。正確な持続時間が必要な場合は、フォーマットを PCM に設定し、完全な合成結果を取得した後に手動で WAV ヘッダー情報を追加することで、より正確な持続時間を得ることができます。
Q:音声が再生できないのはなぜですか?
以下のシナリオを順に確認してください:
-
音声が完全なファイル(xx.mp3 など)として保存されている場合。
-
フォーマットの一貫性:リクエストフォーマットがファイル拡張子と一致していることを確認します(例:WAV は .wav であり、.mp3 ではない)。
-
プレーヤーの互換性:ご利用のプレーヤーが音声ファイルのフォーマットとサンプルレートをサポートしていることを確認します。一部のプレーヤーは、高いサンプルレートや特定の音声エンコーディングをサポートしていない場合があります。
-
-
オーディオはストリームで再生されます。
-
音声ストリームを完全なファイルとして保存し、プレーヤーで再生してみてください。ファイルが再生できない場合は、シナリオ 1 のトラブルシューティング方法をご参照ください。
-
ファイルが正常に再生される場合は、ストリーミング再生の実装に問題がある可能性があります。ご利用のプレーヤーがストリーミング再生をサポートしていることを確認してください。
ストリーミング再生をサポートする一般的なツールやライブラリには、FFmpeg、PyAudio (Python)、AudioFormat (Java)、MediaSource (JavaScript) などがあります。
-
Q:音声再生が途切れるのはなぜですか?
以下のシナリオを順に確認してください:
-
テキスト送信速度の確認:テキストセグメント間の間隔が適切であることを確認します。前の音声セグメントの再生が終了した後に、次のセグメントが速やかに送信されない状況を避けてください。
-
コールバック関数のパフォーマンスの確認:
-
コールバック関数内で重いビジネスロジックを実行すると、ブロッキングの原因となるため避けてください。
-
コールバックは WebSocket スレッドで実行されます。ブロッキングが発生すると、パケットのタイムリーな受信が妨げられ、音声再生が途切れる原因となります。
-
WebSocket スレッドのブロッキングを避けるため、音声データを別のバッファーに書き込み、別のスレッドで処理することを推奨します。
-
-
ネットワークの安定性の確認:ネットワークの変動による音声伝送の中断や遅延を避けるため、ネットワーク接続が安定していることを確認してください。
Q:音声合成に時間がかかるのはなぜですか?
以下の手順でトラブルシューティングを行ってください:
-
入力間隔の確認
入力間隔を確認します。ストリーミング音声合成を使用している場合、テキストセグメントの送信間隔が長すぎないか(たとえば、数秒の遅延)を確認します。間隔が長いと、合計合成時間が増加します。
-
パフォーマンスメトリクスの分析
-
最初のパケット遅延:通常は約 500 ms です。
-
RTF(RTF = 合計合成時間 / 音声持続時間):通常は 1.0 未満です。
-
Q:合成音声の発音が不正確な場合はどうすればよいですか?
A:SSML の <phoneme> タグを使用して、正しい発音を指定してください。
Q:末尾の一部のテキストが音声に変換されない、または音声が返されないのはなぜですか?
A:SpeechSynthesizer クラスの streamingComplete メソッドを呼び出しているか確認してください。音声合成中、サーバーは十分なテキストをキャッシュした後にのみ合成を開始します。streamingComplete を呼び出さないと、バッファーに残っているテキストが合成されない可能性があります。
権限と認証
Q:API キーを CosyVoice 音声合成サービスのみに制限する(権限隔離)にはどうすればよいですか?
A:ワークスペースを作成し、特定のモデルにのみ権限を付与することで、API キーの範囲を制限できます。詳細については、「ワークスペースの管理」をご参照ください。
その他の質問
GitHub の QA をご参照ください。