このトピックでは、CosyVoice 音声合成 Java SDK のパラメーターとインターフェイスの詳細について説明します。
中国 (北京) リージョンのモデルを使用するには、中国 (北京) リージョンの API キーページに移動してください
ユーザーガイド:モデルの詳細とモデル選択のガイダンスについては、「リアルタイム音声合成 - CosyVoice」をご参照ください。
前提条件
Model Studio を有効化し、API キーを作成済みであること。セキュリティリスクを防ぐため、API キーをコードにハードコーディングするのではなく、環境変数としてエクスポートしてください。
説明サードパーティのアプリケーションやユーザーに一時的なアクセス権限を付与する場合、または機密データへのアクセスや削除などのリスクの高い操作を厳密に制御したい場合は、一時的な認証トークンの使用を推奨します。
長期的な API キーと比較して、一時的な認証トークンは有効期間が短い (60 秒) ため、より安全です。これらは一時的な呼び出しシナリオに適しており、API キー漏洩のリスクを効果的に低減できます。
一時的なトークンを使用するには、コード内の認証に使用される API キーを一時的な認証トークンに置き換えます。
モデルと料金
モデル | 料金 | 無料クォータ (注) |
cosyvoice-v3-plus | $0.286706/10,000 文字 | 無料クォータなし |
cosyvoice-v3-flash | $0.14335/10,000 文字 | |
cosyvoice-v2 | $0.286706/10,000 文字 |
テキストとフォーマットの制限
テキスト長の制限
非ストリーミング呼び出し、単方向ストリーミング呼び出し、または Flowable 単方向ストリーミング呼び出し:1 回のリクエストのテキストは 20,000 文字を超えることはできません。
双方向ストリーミング呼び出しまたは Flowable 双方向ストリーミング呼び出し:1 回のリクエストのテキストは 20,000 文字を超えることはできず、テキストの合計長は 200,000 文字を超えることはできません。
文字数カウントルール
簡体字または繁体字中国語、日本の漢字、韓国の漢字を含む漢字は、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 エンコーディングを使用してください。
数式のサポート
数式解析機能は現在、cosyvoice-v2、cosyvoice-v3-flash、および cosyvoice-v3-plus モデルでのみ利用可能です。この機能は、基本的な算術、代数、幾何学など、小中学校で習う一般的な数式をサポートしています。
「LaTeX 数式から音声へ」をご参照ください。
SSML のサポート
音声合成マークアップ言語 (SSML) 機能は現在、cosyvoice-v3-flash、cosyvoice-v3-plus、および cosyvoice-v2 モデルのクローン音声、および「音声リスト」でサポートされていると示されているシステム音声でのみ利用可能です。以下の条件を満たす必要があります:
DashScope SDK 2.20.3 以降を使用してください。
非ストリーミング呼び出しと 単方向ストリーミング呼び出し (SpeechSynthesizer クラスの
callメソッドを使用) のみがサポートされています。双方向ストリーミング呼び出し (SpeechSynthesizer クラスのstreamingCallメソッドを使用) または Flowable 呼び出しはサポートされていません。使用方法は標準の音声合成と同じです。SSML を含むテキストを SpeechSynthesizer クラスの
callメソッドに渡します。
はじめに
SpeechSynthesizer クラスは、音声合成のためのインターフェイスを提供し、以下の呼び出しメソッドをサポートしています:
非ストリーミング呼び出し:完全なテキストを一度に送信し、完全な音声を直接返すブロッキング呼び出しです。このメソッドは、短いテキストの合成シナリオに適しています。
単方向ストリーミング呼び出し:完全なテキストを一度に送信し、コールバック関数を使用して音声データを受信する非ブロッキング呼び出しです。音声データはチャンクで配信される場合があります。このメソッドは、低遅延が要求される短いテキストの合成シナリオに適しています。
双方向ストリーミング呼び出し:テキストをフラグメントで送信し、コールバック関数を使用して合成された音声ストリームをリアルタイムでインクリメンタルに受信する非ブロッキング呼び出しです。このメソッドは、低遅延が要求される長いテキストの合成シナリオに適しています。
非ストリーミング呼び出し
音声合成タスクを同期的に送信し、完全な結果を直接取得します。
SpeechSynthesizer クラスをインスタンス化し、リクエストパラメーターを設定し、call メソッドを呼び出してバイナリ音声データを合成および取得します。
テキスト長は 2,000 文字を超えることはできません。「SpeechSynthesizer クラス」の call メソッドをご参照ください。
call メソッドを呼び出すたびに、新しい SpeechSynthesizer インスタンスを作成する必要があります。
単方向ストリーミング呼び出し
ResultCallback コールバックを登録することで、音声合成タスクを非同期に送信し、リアルタイムで音声セグメントをフレームごとに受信します。
SpeechSynthesizer クラスをインスタンス化し、リクエストパラメーターと ResultCallback インターフェイスを設定し、その後 call メソッドを呼び出して音声を合成します。ResultCallback インターフェイスの onEvent メソッドは、合成結果をリアルタイムで提供します。
テキスト長は 2,000 文字を超えることはできません。「SpeechSynthesizer クラス」の call メソッドをご参照ください。
call メソッドを呼び出すたびに、新しい SpeechSynthesizer インスタンスを作成する必要があります。
双方向ストリーミング呼び出し
ResultCallback コールバックを登録することで、テキストを複数回に分けて送信し、リアルタイムで音声セグメントデータをフレームごとに受信します。
ストリーミング入力の場合、
streamingCallを複数回呼び出してテキストフラグメントを順次送信できます。サーバーがテキストフラグメントを受信すると、自動的にテキストを文に分割します:完全な文はすぐに合成されます。
不完全な文は、完全になるまでキャッシュされてから合成されます。
streamingCompleteを呼び出すと、サーバーは不完全な文を含む、受信したが未処理のすべてのテキストフラグメントを合成します。テキストフラグメントの送信間隔は 23 秒を超えることはできません。超えた場合、「request timeout after 23 seconds」例外が発生します。
送信するテキストがこれ以上ない場合は、
streamingCompleteを呼び出してタスクを速やかに終了してください。サーバーは 23 秒のタイムアウトを強制します。クライアント側で変更することはできません。
SpeechSynthesizer クラスをインスタンス化する
SpeechSynthesizer クラスをインスタンス化し、リクエストパラメーターと ResultCallback インターフェイスを設定します。
データのストリーミング
SpeechSynthesizer クラスの
streamingCallメソッドを複数回呼び出して、合成するテキストをセグメントに分けてサーバーに送信します。テキストを送信すると、サーバーは ResultCallback インターフェイスの
onEventメソッドを介して、合成結果をリアルタイムでクライアントに返します。streamingCallメソッドを呼び出すたびに、テキストセグメント (つまりtext) の長さは 2,000 文字を超えることはできません。送信されるすべてのテキストの合計長は 200,000 文字を超えることはできません。処理の終了
SpeechSynthesizer クラスの
streamingCompleteメソッドを呼び出して、音声合成タスクを終了します。このメソッドは、ResultCallback インターフェイスの
onCompleteまたはonErrorコールバックがトリガーされるまで現在のスレッドをブロックし、その後スレッドのブロックを解除します。このメソッドを呼び出す必要があります。そうしないと、最後のテキストフラグメントが音声に正常に変換されない可能性があります。
Flowable を介した呼び出し
Flowable は、Apache 2.0 ライセンスでリリースされている、ワークフローおよびビジネスプロセス管理のためのオープンソースフレームワークです。Flowable の使用方法の詳細については、「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 | いいえ | 音声コーディング形式とサンプルレート。
説明 デフォルトのサンプルレートは、現在の音声に最適なレートです。デフォルトでは、出力はこのサンプルレートを使用します。ダウンサンプリングとアップサンプリングもサポートされています。 以下の音声コーディング形式とサンプルレートが利用可能です:
|
volume | int | いいえ | 音量。 デフォルト値:50。 有効値:[0, 100]。値 50 が標準の音量です。音量はこの値と線形の関係にあります。0 はミュート、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-flash および cosyvoice-v3-plus のクローン音声、および「音声リスト」で instruct をサポートしているとマークされたシステム音声でのみ利用可能です。 制限事項:
機能:
|
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 メソッドを使用した設定 |
主要なインターフェイス
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 を取得します。このメソッドは、 |
| なし | 現在のタスクの初回パケット遅延。 | 現在のタスクの初回パケット遅延を取得します。通常は約 500 ms です。このメソッドはタスク完了後に使用します。 初回パケット遅延は、テキストの送信が開始されてから最初の音声パケットが受信されるまでの時間で、ミリ秒単位で測定されます。 最初にテキストを送信する際に WebSocket 接続を確立する必要があるため、初回パケット遅延には接続確立にかかる時間が含まれます。高同時実行シナリオで接続が再利用される場合、接続時間は含まれません。 |
コールバックインターフェイス (ResultCallback)
単方向ストリーミング呼び出しまたは双方向ストリーミング呼び出しを行う場合、ResultCallback インターフェイスから合成結果を取得できます。このインターフェイスは import com.alibaba.dashscope.common.ResultCallback; を使用してインポートされます。
インターフェイス/メソッド | パラメーター | 戻り値 | 説明 |
|
| なし | サーバーが音声合成データをプッシュすると、このコールバックが非同期で呼び出されます。 SpeechSynthesisResult の 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:発音が不正確な場合、どうすれば修正できますか?
SSML を使用して音声合成の出力をカスタマイズできます。
Q:音声合成はテキストの文字数に基づいて課金されます。各合成のテキスト長を確認または取得するにはどうすればよいですか?
非ストリーミング呼び出し:文字数カウントルールに基づいて手動で計算する必要があります。
その他の呼び出しタイプの場合:SpeechSynthesisResult 応答の
getUsageメソッドを使用して文字数を取得できます。最終応答の値が最終的な合計になります。
トラブルシューティング
コードエラーが発生した場合は、「エラーコード」でトラブルシューティング情報をご参照ください。
Q:リクエスト ID を取得するにはどうすればよいですか?
以下の 2 つの方法のいずれかで取得できます:
ResultCallback の
onEventメソッドで、SpeechSynthesisResult のgetRequestIdメソッドを呼び出すことができます。getRequestIdメソッドの戻り値は null になる場合があります。「SpeechSynthesisResult」のgetRequestIdメソッドの説明をご参照ください。SpeechSynthesizer の
getLastRequestIdメソッドを呼び出します。
Q:SSML 機能が失敗するのはなぜですか?
この問題をトラブルシューティングするには、以下の手順を実行してください:
制限と制約が正しいことを確認します。
正しいインターフェイスを使用していることを確認します。SSML は SpeechSynthesizer クラスの
callメソッドでのみサポートされています。合成するテキストがプレーンテキストであり、フォーマット要件を満たしていることを確認します。「SSML マークアップ言語」をご参照ください。
Q:音声が再生できないのはなぜですか?
以下のシナリオに基づいてこの問題をトラブルシューティングしてください:
オーディオは、.mp3 ファイルなどの完全なファイルとして保存されます。
音声フォーマットの一貫性:リクエストパラメーターで指定された音声フォーマットがファイル拡張子と一致していることを確認します。例えば、リクエストパラメーターで音声フォーマットが WAV に設定されているのに、ファイルの拡張子が .mp3 の場合、再生が失敗する可能性があります。
プレーヤーの互換性:ご使用のプレーヤーが音声ファイルのフォーマットとサンプルレートをサポートしていることを確認します。例えば、一部のプレーヤーは高いサンプルレートや特定の音声エンコーディングをサポートしていない場合があります。
音声がストリーミングモードで再生される場合。
音声ストリームを完全なファイルとして保存し、再生を試みます。ファイルの再生に失敗した場合は、最初のシナリオのトラブルシューティング手順をご参照ください。
ファイルが正しく再生される場合、問題はストリーミング再生の実装にある可能性があります。ご使用のプレーヤーがストリーミング再生をサポートしていることを確認してください。
ストリーミング再生をサポートする一般的なツールとライブラリには、ffmpeg、pyaudio (Python)、AudioFormat (Java)、MediaSource (JavaScript) などがあります。
Q:音声再生が途切れるのはなぜですか?
以下のシナリオに基づいてこの問題をトラブルシューティングしてください:
テキスト送信速度の確認: テキストの送信間隔が合理的であることを確認します。前のセグメントの音声再生が終了した後に、次のテキストセグメントの送信が遅れないようにします。
コールバック関数のパフォーマンスの確認:
コールバック関数に、ブロックを引き起こす可能性のある過剰なビジネスロジックが含まれていないか確認します。
コールバック関数は WebSocket スレッドで実行されます。このスレッドがブロックされると、WebSocket がネットワークパケットを受信する能力が妨げられ、音声の途切れが発生する可能性があります。
WebSocket スレッドのブロックを避けるために、音声データを別の音声バッファーに書き込み、別のスレッドで読み取って処理します。
ネットワークの安定性の確認: ネットワーク接続が安定していることを確認し、ネットワークの変動による音声伝送の中断や遅延を防ぎます。
Q:音声合成が遅い (合成時間が長い) のはなぜですか?
以下のトラブルシューティング手順を実行してください:
入力間隔の確認
ストリーミング音声合成を使用している場合、テキストの送信間隔が長すぎないか確認します。例えば、次のセグメントを送信する前に数秒の遅延があると、合計合成時間が増加します。
パフォーマンスメトリックの分析
初回パケット遅延:通常は約 500 ms です。
リアルタイム係数 (RTF):合計合成時間 / 音声の長さで計算されます。RTF は通常 1.0 未満です。
Q:合成された音声の発音が不正確な場合はどうすればよいですか?
SSML の <phoneme> タグを使用して、正しい発音を指定します。
Q:音声が返されないのはなぜですか?テキストの末尾が音声に正常に変換されないのはなぜですか?(合成音声の欠落)
SpeechSynthesizer クラスの streamingComplete メソッドを呼び出したかどうかを確認してください。音声合成中、サーバーはテキストをキャッシュし、十分な量のテキストがキャッシュされた後にのみ合成を開始します。streamingComplete メソッドを呼び出さないと、キャッシュに残っているテキストが音声に合成されない可能性があります。
権限と認証
Q:API キーを CosyVoice 音声合成サービス専用にし、他の Model Studio モデルには使用しないようにしたいのですが (権限の分離)、どうすればよいですか?
ワークスペースを作成し、特定のモデルのみを承認することで、API キーの範囲を制限できます。「ワークスペースの管理」をご参照ください。
その他の質問
GitHub の Q&A をご参照ください。