CosyVoice iOS SDKを使用して、iOSアプリでテキストを高品質で表現力豊かな音声に変換します。
NeoNui
アーキテクチャのハイライト:- シングルトンパターン:
[StreamInputTts get_instance]を通じてグローバルインスタンスを取得します。 - コールバック駆動:
StreamInputTtsDelegateプロトコルを通じてイベントと音声データを受信します。 - JSON設定:パラメータをJSON文字列として渡します。
呼び出しフロー
CosyVoiceは、一括入力とストリーミング入力の2つの呼び出しモードをサポートしています。
一括入力:短文合成やSSMLマークアップが必要な場合に最適です。
playStreamInputTts()またはasyncPlayStreamInputTts()— 完全なテキストを送信して合成を開始します。前者は同期式で合成完了後に戻り、後者は非同期式で合成開始後すぐに戻ります。onStreamInputTtsDataCallback()— 音声データを受信します。TTS_EVENT_SYNTHESIS_COMPLETE— 合成完了。
ストリーミング入力:リアルタイム会話や長時間の「合成しながら発話」シナリオに最適です。このモードではSSMLマークアップはサポートされていません。
startStreamInputTts()— SDKを初期化し、コールバックデリゲートと接続パラメータを設定します。sendStreamInputTts()— 合成するテキストフラグメントを継続的に送信します。onStreamInputTtsDataCallback()— 音声データを受信します。stopStreamInputTts()またはasyncStopStreamInputTts()— 合成終了リクエストを送信します。前者は同期式で合成完了後に戻り、後者は非同期式でリクエスト送信後すぐに戻ります。TTS_EVENT_SYNTHESIS_COMPLETE— 合成完了。
startStreamInputTts
ストリーミング音声合成タスクを開始し、サーバーへの接続を開きます。
メソッドシグネチャ- (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
ticket | char* | 認証、接続、およびデバッグの設定を保持するJSON文字列。 |
parameters | char* | 音声合成効果の設定を保持するJSON文字列。 |
sessionId | char* | クライアント指定のセッションID。省略した場合、サーバーが生成します。 |
logLevel | NuiSdkLogLevel | SDKの内部ログの出力レベル。 |
saveLog | BOOL | ログをローカルに保存するかどうか。YESに設定した場合、debug_pathでパスを指定する必要があり、max_log_file_sizeでファイルサイズの上限を設定できます。 |
エラーコード を返します。 ticket JSONの例: 次の例ではすべてのフィールドをリストしていません。コードが必要とする他のフィールドを追加してください。
{
"url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
"apikey": "st-****",
"device_id": "my_device_id"
}
ticketフィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
url | string | はい | サービスアドレス:
|
apikey | string | はい | APIキー。長期キーが漏洩した場合の露出を制限するには、代わりに短期APIキーを使用します。 |
device_id | string | はい | エンドユーザーの一意の識別子。アプリ内ユーザーIDまたはクライアント生成のデバイス識別子に設定します。このIDはログのトレースとトラブルシューティングに使用されます。 |
complete_waiting_ms | int | いいえ | stopStreamInputTtsを呼び出した後、合成完了イベント(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。 有効な値:
注: |
parameters JSONの例:次の例ではすべてのフィールドをリストしていません。コードが必要とする他のフィールドを追加してください。
{
"model": "cosyvoice-v3-plus",
"voice": "longanyang",
"format": "mp3",
"sample_rate": 24000,
"volume": 50,
"rate": 1,
"pitch": 1,
"language_hints": ["zh"],
"enable_ssml": false
}
parametersフィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | はい | モデル名。 |
voice | string | はい | 音声合成に使用される音声。
|
format | string | いいえ | オーディオエンコーディング形式。 有効な値:
注記cosyvoice-v1はopus形式をサポートしていません。 |
enable_audio_decoder | BOOL | いいえ | SDKの内部デコーダーを有効にするかどうか。デフォルト: NO。このパラメータは、音声エンコーディングフォーマットが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 | array[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 | BOOL | いいえ | 注記この機能はcosyvoice-v3-flashのクローン音声のみでサポートされています。 合成前に入力テキストからMarkdownマークアップをフィルタリングして、マークアップが読み上げられないようにするかどうか。 デフォルト: 有効な値:
|
sendStreamInputTts
合成するテキストを送信します。このメソッドはstartStreamInputTtsと一緒に使用します。
startStreamInputTtsを呼び出した後、このメソッドを使用してテキストを継続的にプッシュします。
すべてのテキストを送信した後、stopStreamInputTtsまたはasyncStopStreamInputTtsを呼び出して入力の終了を通知してください。
- (int) sendStreamInputTts:(const char *)text;
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
text | char* | 合成するテキスト。SSMLはサポートされていません。入力内のSSMLタグは解析されず、プレーンテキストとして読み上げられます。 |
エラーコード を返します。
stopStreamInputTts
同期メソッドです。すべてのテキストが送信されたことをサーバーに通知し、すべての音声チャンクが合成されてTTS_EVENT_SYNTHESIS_COMPLETEが受信されるまでブロックします。
ブロックタイムアウトはcomplete_waiting_msによって制御されます。
- (int) stopStreamInputTts;
戻り値
エラーコード を返します。
asyncStopStreamInputTts
非同期メソッド。すべてのテキストが送信されたことをサーバーに通知し、すぐに返ります。合成はバックグラウンドで続行されます。
合成が完了したことを検出するには、TTS_EVENT_SYNTHESIS_COMPLETEを使用します。
- (int) asyncStopStreamInputTts;
戻り値
エラーコード を返します。
cancelStreamInputTts
サーバーへの接続を即座に切断し、現在の合成タスクを終了します。このメソッドが呼び出された後、それ以上の音声データコールバックは発生しません。
メソッドシグネチャ- (int) cancelStreamInputTts;
戻り値
エラーコード を返します。
playStreamInputTts
同期ワンショット合成メソッドです。テキストを送信し、すべての音声データが受信されるまでブロックし、合成が完了した後に戻ります。その後、stopStreamInputTtsを呼び出す必要はありません。
このメソッドはデフォルトでSSMLを有効にします。SSMLを無効にするには、parameters内のenable_ssmlフィールドをfalseに設定します。
- (int) playStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
パラメータ
ticket、parameters、およびその他の共有パラメータは、startStreamInputTtsと同じ定義を使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
text | char* | 合成するテキスト。SSMLをサポートします。 |
エラーコード を返します。
asyncPlayStreamInputTts
このメソッドは、合成用のすべてのテキストを非同期に送信します。音声データを待たずにすぐに戻ります。その後、stopStreamInputTtsを呼び出す必要はありません。
このメソッドはデフォルトでSSMLを有効にします。SSMLを無効にするには、parameters内のenable_ssmlフィールドをfalseに設定します。
- (int) asyncPlayStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
パラメータ
ticket、parameters、およびその他の共有パラメータは、startStreamInputTtsと同じ定義を使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
text | char* | 合成するテキスト。SSMLをサポートします。 |
エラーコード を返します。
StreamInputTtsDelegate
CosyVoiceストリーミング音声合成用のコールバックプロトコルです。合成イベント、音声データ、およびログを受信するには、このプロトコルを実装してください。
onStreamInputTtsEventCallback:イベントのリッスン
メソッドシグネチャ- (void)onStreamInputTtsEventCallback:(StreamInputTtsCallbackEvent)event taskId:(char*)taskid sessionId:(char*)sessionId ret_code:(int)ret_code error_msg:(char*)error_msg timestamp:(char*)timestamp all_response:(char*)all_response;
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
event | StreamInputTtsCallbackEvent | コールバックイベント。 |
taskid | char* | 音声合成タスクID。 |
sessionId | char* | セッションID。クライアントが指定した値はそのまま返されます。指定がnoneの場合、サーバーが生成します。 |
ret_code | int | エラーコード。TTS_EVENT_TASK_FAILEDイベントに対してのみ有効です。エラーコードを参照してください。 |
error_msg | char* | エラーメッセージ。TTS_EVENT_TASK_FAILEDイベントに対してのみ有効です。 |
timestamp | char* | 合成結果のタイムスタンプ情報。 |
all_response | char* | 完全なJSONレスポンス。この文字列を解析して、必要なフィールドを抽出します。 |
onStreamInputTtsDataCallback:音声データのリッスン
SDKは合成中にこのコールバックを繰り返し発生させます。コールバックから音声データを読み取ります。
メソッドシグネチャ- (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len;
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
buffer | char* | 現在のセグメントの音声データ。このデータを使用して以下を行います:
注意:
|
len | int | 音声データの長さ(バイト単位)。 |
onStreamInputTtsLogTrackCallback:トレースログのリッスン
このコールバックは、トラブルシューティングとデバッグに役立つ詳細なSDK内部ログを配信します。
メソッドシグネチャ- (void)onStreamInputTtsLogTrackCallback:(NuiSdkLogLevel)level
logMessage:(const char *)log;
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
level | NuiSdkLogLevel | ログレベル。 |
log | char* | ログ内容。 |
StreamInputTtsCallbackEvent
CosyVoiceストリーミング音声合成のイベントタイプ列挙型。
| イベント | 説明 |
|---|---|
TTS_EVENT_SYNTHESIS_STARTED | サーバーがリクエストを受け付け、処理を開始しました。通常、このイベントの直後にonStreamInputTtsDataCallbackによって最初の音声セグメントが配信されます。 |
TTS_EVENT_SENTENCE_SYNTHESIS | 合成中に出力される進捗情報(課金データを含む)。 |
TTS_EVENT_SYNTHESIS_COMPLETE | サーバーはすべての音声データの送信を完了しました。onStreamInputTtsDataCallbackは再度呼び出されません。このイベントは、ストリーム終了の確定シグナルです。 |
TTS_EVENT_TASK_FAILED | タスクが失敗しました。失敗を診断するには、onStreamInputTtsEventCallbackのall_responseからtask_id、error_code、およびerror_messageを読み取ってください。 |
NuiSdkLogLevel
ログ出力を制御するSDKのログレベル列挙型。
| レベル | 説明 |
|---|---|
| 0: LOG_LEVEL_VERBOSE | 最も詳細なログレベル。すべてのデバッグ情報を含みます。 |
| 1: LOG_LEVEL_DEBUG | デバッグレベルのログ。 |
| 2: LOG_LEVEL_INFO | 一般的な情報ログ(デフォルト)。 |
| 3: LOG_LEVEL_WARNING | 警告レベルのログ。 |
| 4: LOG_LEVEL_ERROR | エラーレベルのログ。 |
| 5: LOG_LEVEL_NONE | ログ出力を無効にします。 |
サンプルコード
- APIキーの取得: APIキーの取得。
注記一時的なアクセスを必要とするサードパーティアプリまたはエンドユーザーの場合、あるいはデータアクセスや削除などの機密性の高い操作に対してwant厳密な制御を行う場合は、代わりに一時的なAPIキーを使用してください。一時的なAPIキーは固定の60秒間有効であり、有効期限が切れた後は再生成する必要があります。
-
SDKをダウンロードしてサンプルコードを実行します:
- 最新のSDKバンドルのダウンロード。
- ZIPアーカイブを抽出し、
nuisdk.frameworkをXcodeプロジェクトに追加します。 - Build Phases > Link Binary With Librariesで、
nuisdk.frameworkを追加します。 - General > Frameworks, Libraries, and Embedded Contentで、
nuisdk.frameworkをEmbed & Signに設定します。 - Xcodeでサンプルプロジェクトを開きます。サンプルコードは
DashCosyVoiceStreamInputTTSViewController.mにあります。プレースホルダーのAPIキーを自身のものに置き換えて、アプリを実行してお試しください。
呼び出しモード
| 呼び出しモード | 説明 |
|---|---|
| 一括入力 | 手順:
|
| ストリーミング入力 | 手順:
|
高度な機能
SSMLマークアップ
目的: 入力テキストにXMLタグを埋め込んで、発音、話速、ポーズ、その他のプロソディ詳細を正確に制御します。
制限事項:SSMLはワンショット入力(playStreamInputTtsおよびasyncPlayStreamInputTtsメソッド)でのみサポートされています。ストリーミング入力(sendStreamInputTtsメソッド)ではサポートされていません。
使用方法:playStreamInputTtsまたはasyncPlayStreamInputTtsを呼び出すと、SDKは自動的にSSMLを有効にします。SSMLタグを含むテキストをtextパラメータに直接渡してください。
詳細については、SSMLを参照してください。
数式
目的: モデルに一般的な数式や表現を正しく読み上げさせます。
使用方法:LaTeX形式の数式を含むテキストをtextパラメータに直接渡してください。詳細については、LaTeX数式を音声に変換する(中国語のみ)を参照してください。