CosyVoice テキスト読み上げ(TTS)SDKを使用して、Androidアプリでテキストを表現力豊かで高品質な音声に変換します。
NativeNui
SDKは複数のNativeNuiインスタンスをサポートし、コールバックを使用して合成イベントを配信します。
アーキテクチャのハイライト:-
複数のインスタンス:
new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS)を呼び出してインスタンスを作成します。 -
コールバック駆動:
INativeStreamInputTtsCallbackインターフェースを通じてイベントと音声データを受信します。 -
イベントタイプ:
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED:合成タスクが開始されました。onStreamInputTtsDataCallback:音声データが配信されます。STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE:合成タスクが完了しました。STREAM_INPUT_TTS_EVENT_TASK_FAILED:合成タスクが失敗しました。
使用フロー
CosyVoiceは、一括入力とストリーミング入力の2つの呼び出しモードをサポートしています。
一括入力は、短いテキストやSSMLマークアップを使用するあらゆるシナリオに適しています。
playStreamInputTts()またはasyncPlayStreamInputTts()— 完全なテキストを送信して合成を開始します。前者は同期であり、合成が完了した後に戻ります。後者は非同期であり、合成を開始した直後に戻ります。onStreamInputTtsDataCallback()— 音声データを受信します。STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— 合成が完了しました。
ストリーミング入力は、リアルタイム会話や長文の「話しながら生成する」シナリオに適しています。このモードではSSMLはサポートされていません。
startStreamInputTts()— SDKを初期化し、コールバックと接続パラメータを設定します。sendStreamInputTts()— テキストが利用可能になり次第、継続的に送信します。onStreamInputTtsDataCallback()— 音声データを受信します。stopStreamInputTts()またはasyncStopStreamInputTts()— 合成終了リクエストを送信します。前者は同期であり、合成が完了した後に戻ります。後者は非同期であり、リクエストを送信した直後に戻ります。STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— 合成が完了しました。
startStreamInputTts
双方向ストリーミング合成を開始し、サービスへの接続を開き、イベントと音声データのコールバックを登録します。
このメソッドはブロックされる可能性があります。非 UI スレッドで呼び出してください。
メソッドシグネチャ:public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String session_id,
int log_level,
boolean save_log)
パラメーター:
| パラメータ | 型 | 説明 |
|---|---|---|
callback | INativeStreamInputTtsCallback | イベントおよびデータコールバックインターフェースの実装。 |
ticket | String | 認証、接続、およびデバッグ設定を保持するJSON文字列。以下のticketパラメータリファレンスを参照してください。 |
parameters | String | 音声合成の出力を制御するJSON文字列。以下のパラメータリファレンスを参照してください。 |
session_id | String | クライアント指定のセッションID。省略した場合、サーバーが自動的に生成します。 |
log_level | int | SDKの内部ログの詳細度を制御します。 有効な値:
|
save_log | boolean | ログをローカルファイルに書き込むかどうか。trueの場合、ticket内のdebug_pathを設定して保存先を指定し、オプションでmax_log_file_sizeを設定してファイルサイズの上限を指定します。 |
エラーコード を返します。
チケットJSONの例:{
"url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
"apikey": "sk-****",
"device_id": "my_device_id"
}
チケットパラメーター:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
url | String | はい | サービスアドレス:
|
apikey | String | はい | ご自身のAPIキー。長期間有効なキーが漏洩した場合の影響範囲を制限するには、代わりに短期間有効な一時的なAPIキーを使用してください。 |
device_id | String | はい | エンドユーザーの一意の識別子。アプリ内のユーザーIDまたはクライアント生成のデバイス識別子に設定します。このIDは主にログの相関付けとトラブルシューティングに使用されます。 |
complete_waiting_ms | int | いいえ | stopメソッドを呼び出した後、タイムアウトする前にSTREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEイベントを待機する時間(ミリ秒単位)。デフォルト:10000。 |
debug_path | String | いいえ | ログファイルが書き込まれるローカルパス。 このパラメータは、 デバイスには最大2つのログファイルが保持されます。 |
max_log_file_size | int | いいえ | ログファイルの最大サイズ (バイト単位)。 このパラメータは、 デフォルト: 104857600 (100 × 1024 × 1024バイト、または100 MiB)。 |
log_track_level | int | いいえ | ログコールバック(onStreamInputTtsLogTrackCallback)を通じて配信されるログのフィルターレベル。デフォルト:2。 有効な値:
注意: |
{
"model": "cosyvoice-v3-plus",
"voice": "longanyang",
"format": "mp3",
"volume": 50,
"rate": 1.0,
"pitch": 1.0
}
パラメーターリファレンス:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
model | String | はい | モデル名。 |
voice | String | はい | 音声合成に使用される音声。
|
format | String | いいえ | オーディオエンコーディング形式。 有効な値:
注記cosyvoice-v1はopus形式をサポートしていません。 |
enable_audio_decoder | boolean | いいえ | SDKの内部デコーダーを有効にするかどうか。デフォルト: false。 このパラメータは、音声エンコーディングフォーマットがopusまたはmp3の場合にのみ有効になります。有効にすると、SDKはopusまたはmp3の音声データをPCMデータにデコードしてから返します。 |
volume | int | いいえ | 音量レベル。 デフォルト値:50。 有効な値:[0, 100]。 |
sample_rate | int | いいえ | オーディオサンプルレート (Hz)。 有効な値: 8000、16000、22050 (デフォルト)、24000、44100、48000。 |
rate | float | いいえ | 話速。 デフォルト値:1.0。 有効な値:[0.5, 2.0]。 |
pitch | float | いいえ | ピッチ。 デフォルト値:1.0。 有効な値:[0.5, 2.0]。 |
bit_rate | int | いいえ | kbps単位の音声ビットレート。音声フォーマットがmp3またはopusの場合、bit_rateを使用してビットレートを調整します。デフォルト値:32。 有効な値:[6, 510]。 注記cosyvoice-v1はこのパラメーターをサポートしていません。 |
enable_ssml | boolean | いいえ | SSMLを有効にするかどうか。 デフォルト:false。
SSMLの使用制限(サポートされているモデル、音声、API)については、制限事項を参照してください。 |
word_timestamp_enabled | boolean | いいえ | 単語レベルのタイムスタンプを有効にするかどうかを指定します。 デフォルト値:false。 ストリーミング出力モードでのみ利用可能です。サポートされている音声:cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2のクローン音声、ならびにCosyVoice音声リストでサポート対象としてマークされているシステム音声。他のモデルのクローン音声では、この機能はサポートされていません。
|
seed | int | いいえ | 合成出力のバリエーションを制御するためのランダムシード。モデルバージョン、テキスト、音声、およびその他のパラメータが変更されていない場合、同じシードを使用すると同一の結果が生成されます。 デフォルト値:0。 有効な値:[0, 65535]。 注記cosyvoice-v1はこのパラメーターをサポートしていません。 |
language_hints | String[] | いいえ | 重要
出力品質を向上させるために音声合成のターゲット言語を指定します。 注記cosyvoice-v1はこの機能をサポートしていません。 数字の発音、略語の展開、記号の読み上げ、または少数民族言語の合成が期待通りでない場合は、このパラメータを使用します。例:
有効な値
|
instruction | String | いいえ | 方言、感情、話し方などの合成特性を制御します。 使用法の詳細については、指示制御を参照してください。 |
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のみがこの機能をサポートしています。 |
hot_fix | object | いいえ | 指定された単語の発音をカスタマイズしたり、合成前にテキストを置換したりするためのテキストホットフィックス設定。 注記cosyvoice-v2およびcosyvoice-v1はこの機能をサポートしていません。 フィールド:
例: |
enable_markdown_filter | boolean | いいえ | 注記この機能はcosyvoice-v3-flashのクローン音声のみでサポートされています。 合成前に入力テキストからMarkdownマークアップをフィルタリングして、マークアップが読み上げられないようにするかどうか。 デフォルト:false。 有効な値:
|
sendStreamInputTts
合成するテキストを送信します。このメソッドはstartStreamInputTtsと一緒に使用します。
startStreamInputTtsを呼び出した後、このメソッドを呼び出してテキストを継続的にプッシュします。
すべてのテキストを送信したら、stopStreamInputTtsまたはasyncStopStreamInputTtsを呼び出して入力を終了します。
public synchronized int sendStreamInputTts(String text)
パラメーター:
| パラメータ | 型 | 説明 |
|---|---|---|
text | String | 合成するテキスト。SSMLはサポートされていません。入力内のSSMLタグは解析されず、プレーンテキストとして読み上げられます。 |
エラーコード を返します。
stopStreamInputTts
すべてのテキストが送信されたことをサーバーに通知し、すべての音声が合成されてSTREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEイベントが受信されるまでブロックする同期メソッド。
待機タイムアウトはcomplete_waiting_msによって制御されます。
public synchronized int stopStreamInputTts()
戻り値:
エラーコード を返します。
asyncStopStreamInputTts
すべてのテキストが送信されたことをサーバーに通知する非同期メソッド。呼び出しはすぐに戻り、合成はバックグラウンドで続行されます。
合成が完了したことを検出するには、STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEイベントを使用します。
public synchronized int asyncStopStreamInputTts()
戻り値:
エラーコード を返します。
cancelStreamInputTts
サーバーへの接続を即座に閉じ、現在の合成タスクを中止します。この呼び出しの後、それ以上の音声コールバックは配信されません。
メソッドシグネチャ:public synchronized int cancelStreamInputTts()
戻り値:
エラーコード を返します。
playStreamInputTts
同期一括合成メソッド。呼び出しはテキストを送信し、音声の受信中はブロックされ、合成が完了した後にのみ戻ります。その後、stopメソッドを呼び出す必要はありません。
このメソッドではSSMLがデフォルトで有効になっています。オーバーライドするには、enable_ssmlを明示的に設定してください。
このメソッドは非UIスレッドで呼び出してください。
メソッドシグネチャ:public synchronized int playStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
パラメーター:
callback、ticket、およびその他の共有パラメータは、startStreamInputTtsと同じ意味を持ちます。
| パラメータ | 型 | 説明 |
|---|---|---|
text | String | 合成するテキスト。SSMLをサポートします。 |
エラーコード を返します。
asyncPlayStreamInputTts
非同期一括合成メソッド。呼び出しはすぐに戻り、合成はバックグラウンドで実行され、結果はコールバックを通じて配信されます。その後、stopメソッドを呼び出す必要はありません。
このメソッドではSSMLがデフォルトで有効になっています。オーバーライドするには、enable_ssmlを明示的に設定してください。
public synchronized int asyncPlayStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
パラメーター:
callback、ticket、およびその他の共有パラメータは、startStreamInputTtsと同じ意味を持ちます。
| パラメータ | 型 | 説明 |
|---|---|---|
text | String | 合成するテキスト。SSMLをサポートします。 |
エラーコード を返します。
INativeStreamInputTtsCallback
CosyVoiceストリーミングTTSコールバックインターフェースは、合成イベント、音声データ、およびログを配信します。
onStreamInputTtsEventCallback: イベントの受信
メソッドシグネチャ:void onStreamInputTtsEventCallback(StreamInputTtsEvent event,
String task_id,
String session_id,
int ret_code,
String error_msg,
String timestamp,
String all_response);
パラメーター:
| パラメータ | 型 | 説明 |
|---|---|---|
event | StreamInputTtsEvent | 配信されるイベント。 |
task_id | String | 合成タスクID。 |
session_id | String | セッションID。クライアントから指定された場合はそのまま返されます。省略された場合はサーバーで生成されます。 |
ret_code | int | エラーコード。STREAM_INPUT_TTS_EVENT_TASK_FAILEDイベントでのみ有効です。 |
error_msg | String | エラーメッセージ。STREAM_INPUT_TTS_EVENT_TASK_FAILEDイベントでのみ有効です。 |
timestamp | String | 合成結果のタイムスタンプ情報。 |
all_response | String | 完全なJSONレスポンス。必要な追加データを抽出するために解析してください。 |
onStreamInputTtsDataCallback: オーディオデータの受信
SDKは合成中にこのコールバックを繰り返し呼び出します。コールバックから音声データを読み取ります。
メソッドシグネチャ:void onStreamInputTtsDataCallback(byte[] data);
パラメーター:
| パラメータ | 型 | 説明 |
|---|---|---|
data | byte[] | 現在のセグメントのオーディオデータ。以下の用途に使用します:
注意事項:
|
onStreamInputTtsLogTrackCallback: トレースログの受信
このコールバックを使用してSDKから詳細な内部ログを受信します。これはトラブルシューティングとデバッグに役立ちます。
メソッドシグネチャ:default void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log)
StreamInputTtsEvent
CosyVoiceストリーミング音声合成のイベントタイプ列挙型。
| イベント | 説明 |
|---|---|
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | サーバーがリクエストを受け付け、処理を開始しました。このイベントの直後に、onStreamInputTtsDataCallbackが最初の音声データを返し始めます。 |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | 課金データを含む、合成に関するランタイム情報。 |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | サーバーがすべての音声データを送信し、onStreamInputTtsEventCallbackは再度呼び出されません。このイベントは、音声ストリームが終了したことを明示的に示すシグナルです。 |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | タスクが失敗しました。原因を特定するには、INativeStreamInputTtsCallbackのall_responseフィールドでtask_id、error_code、およびerror_messageを確認してください。 |
サンプルコード
-
APIキーの取得: APIキーの取得。セキュリティのため、APIキーは環境変数に保存してください。
注記サードパーティアプリやユーザーに一時的なアクセスを許可する必要がある場合、または機密データへのアクセスや削除などの高リスク操作を厳密に制御したい(want)場合は、一時的なAPIキーを使用してください。一時的なAPIキーは60秒間有効であり、その後は新しいキーをリクエストする必要があります。
-
SDKをダウンロードしてサンプルコードを実行します:
- 最新のSDKパッケージをダウンロードします。
- パッケージを解凍します。AARフォーマットのSDKは
app/libsにあります。これをプロジェクトの依存関係に追加してください。Android C++統合の場合、ZIP内のandroid_libsから共有ライブラリを、android_includeからヘッダーを取得します。 - Android Studioでプロジェクトを開きます。サンプルコードは
DashCosyVoiceStreamTtsActivity.javaにあります。APIキーをご自身のものに置き換えて、機能を試してください。
呼び出しモード
| モード | 説明 |
|---|---|
| 一括テキスト入力 | 手順:
|
| ストリーミングテキスト入力 | 手順:
|
高度な機能
SSMLマークアップ
目的:テキストにXMLタグを埋め込んで、発音、話す速度、ポーズ、その他の韻律の詳細を微調整します。
制限事項: SSMLは一括テキスト入力(playStreamInputTtsまたはasyncPlayStreamInputTtsメソッド)でのみサポートされています。ストリーミングテキスト入力(sendStreamInputTtsメソッド)ではSSMLはサポートされていません。
使用法:playStreamInputTtsまたはasyncPlayStreamInputTtsを呼び出すと、SDKはSSMLを自動的に有効にします。SSMLタグを含むテキストをtextパラメータを通じて渡してください。
詳細については、SSMLを参照してください。
数式
目的:モデルに一般的な数式や表現を正しく読み上げさせます。
使用法:LaTeX形式の数式を含むテキストをtextパラメータを通じて渡します。詳細については、LaTeX数式を音声に変換する(中国語のみ)を参照してください。