すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:CosyVoice iOS SDK

最終更新日:Sep 28, 2026

CosyVoice iOS SDKを使用して、iOSアプリでテキストを高品質で表現力豊かな音声に変換します。

NeoNui

アーキテクチャのハイライト:
  • シングルトンパターン:[StreamInputTts get_instance]を通じてグローバルインスタンスを取得します。
  • コールバック駆動:StreamInputTtsDelegateプロトコルを通じてイベントと音声データを受信します。
  • JSON設定:パラメータをJSON文字列として渡します。

呼び出しフロー

CosyVoiceは、一括入力とストリーミング入力の2つの呼び出しモードをサポートしています。

一括入力:短文合成やSSMLマークアップが必要な場合に最適です。

  1. playStreamInputTts()またはasyncPlayStreamInputTts() — 完全なテキストを送信して合成を開始します。前者は同期式で合成完了後に戻り、後者は非同期式で合成開始後すぐに戻ります。
  2. onStreamInputTtsDataCallback() — 音声データを受信します。
  3. TTS_EVENT_SYNTHESIS_COMPLETE — 合成完了。

ストリーミング入力:リアルタイム会話や長時間の「合成しながら発話」シナリオに最適です。このモードではSSMLマークアップはサポートされていません。

  1. startStreamInputTts() — SDKを初期化し、コールバックデリゲートと接続パラメータを設定します。
  2. sendStreamInputTts() — 合成するテキストフラグメントを継続的に送信します。
  3. onStreamInputTtsDataCallback() — 音声データを受信します。
  4. stopStreamInputTts()またはasyncStopStreamInputTts() — 合成終了リクエストを送信します。前者は同期式で合成完了後に戻り、後者は非同期式でリクエスト送信後すぐに戻ります。
  5. TTS_EVENT_SYNTHESIS_COMPLETE — 合成完了。

startStreamInputTts

ストリーミング音声合成タスクを開始し、サーバーへの接続を開きます。

メソッドシグネチャ
- (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
パラメータ
パラメータ型説明
ticketchar*認証、接続、およびデバッグの設定を保持するJSON文字列。
parameterschar*音声合成効果の設定を保持するJSON文字列。
sessionIdchar*クライアント指定のセッションID。省略した場合、サーバーが生成します。
logLevelNuiSdkLogLevelSDKの内部ログの出力レベル。
saveLogBOOLログをローカルに保存するかどうか。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フィールド
フィールド型必須説明
urlstringはいサービスアドレス:
  • wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • 中国(北京):wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference
  • シンガポール: wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference

{WorkspaceId}を実際のワークスペースIDに置き換えます。

apikeystringはいAPIキー。長期キーが漏洩した場合の露出を制限するには、代わりに短期APIキーを使用します。
device_idstringはいエンドユーザーの一意の識別子。アプリ内ユーザーIDまたはクライアント生成のデバイス識別子に設定します。このIDはログのトレースとトラブルシューティングに使用されます。
complete_waiting_msintいいえstopStreamInputTtsを呼び出した後、合成完了イベント(TTS_EVENT_SYNTHESIS_COMPLETE)を待機するタイムアウト時間(ミリ秒単位)。

デフォルト:10000。

debug_pathstringいいえログファイルが保存されるローカルパス。

このフィールドは、startStreamInputTts、playStreamInputTts、またはasyncPlayStreamInputTtsでsaveLogがYESに設定されている場合にのみ有効になります。その場合、このパスを設定する必要があります。設定されていない場合はエラーが返されます。

ローカルには最大2つのログファイルが保持されます。

max_log_file_sizeintいいえログファイルの最大サイズ(バイト単位)。

このフィールドは、startStreamInputTts、playStreamInputTts、またはasyncPlayStreamInputTtsでsaveLogがYESに設定されている場合にのみ有効になります。

デフォルト:104857600(100 × 1024 × 1024バイト、つまり100 MiB)。

log_track_levelintいいえログコールバック(onStreamInputTtsLogTrackCallback)を通じて配信されるログのフィルターレベル。

デフォルト:2。

有効な値:

  • 0: LOG_LEVEL_VERBOSE
  • 1: LOG_LEVEL_DEBUG
  • 2: LOG_LEVEL_INFO
  • 3: LOG_LEVEL_WARNING
  • 4: LOG_LEVEL_ERROR
  • 5: LOG_LEVEL_NONE(コールバックを無効化)

注:log_track_levelとlogLevel(startStreamInputTts、playStreamInputTts、またはasyncPlayStreamInputTtsを介して設定)は、どのログがコールバックに到達するかを共同で決定します。ログは、そのレベルが両方のしきい値以上である場合にのみコールバックをトリガーします。たとえば、log_track_levelが2(INFO)でlogLevelが3(WARNING)の場合、WARNING以上(レベル >= 3)のログのみが配信されます。

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フィールド
フィールド型必須説明
modelstringはいモデル名。
voicestringはい音声合成に使用される音声。
  • システム音声:CosyVoice音声リストを参照してください
  • クローン音声: 音声クローニングを通じて作成されたカスタム音声
  • カスタム音声: 音声デザインを通じて作成されたカスタム音声
formatstringいいえオーディオエンコーディング形式。

有効な値:

  • pcm
  • wav
  • mp3 (デフォルト)
  • opus

注記cosyvoice-v1はopus形式をサポートしていません。

enable_audio_decoderBOOLいいえSDKの内部デコーダーを有効にするかどうか。デフォルト: NO。

このパラメータは、音声エンコーディングフォーマットがopusまたはmp3の場合にのみ有効になります。有効にすると、SDKはopusまたはmp3の音声データをPCMデータにデコードしてから返します。

volumeintいいえ音量レベル。

デフォルト値:50。

有効な値:[0, 100]。

sample_rateintいいえオーディオサンプルレート (Hz)。

有効な値: 8000、16000、22050 (デフォルト)、24000、44100、48000。

ratefloatいいえ話速。

デフォルト値:1.0。

有効な値:[0.5, 2.0]。

pitchfloatいいえピッチ。

デフォルト値:1.0。

有効な値:[0.5, 2.0]。

bit_rateintいいえkbps単位の音声ビットレート。音声フォーマットがmp3またはopusの場合、bit_rateを使用してビットレートを調整します。

デフォルト値:32。

有効な値:[6, 510]。

注記cosyvoice-v1はこのパラメーターをサポートしていません。

enable_ssmlbooleanいいえSSMLを有効にするかどうか。

デフォルト:false。

  • true: 有効。
  • false: 無効。

SSMLの使用制限(サポートされているモデル、音声、API)については、制限事項を参照してください。

word_timestamp_enabledbooleanいいえ単語レベルのタイムスタンプを有効にするかどうかを指定します。

デフォルト値:false。

ストリーミング出力モードでのみ利用可能です。サポートされている音声:cosyvoice-v3.5-plus、cosyvoice-v3.5-flash、cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2のクローン音声、ならびにCosyVoice音声リストでサポート対象としてマークされているシステム音声。他のモデルのクローン音声では、この機能はサポートされていません。

タイムスタンプは、onStreamInputTtsEventCallbackのall_responseで返されます。

seedintいいえ合成出力のバリエーションを制御するためのランダムシード。モデルバージョン、テキスト、音声、およびその他のパラメータが変更されていない場合、同じシードを使用すると同一の結果が生成されます。

デフォルト値:0。

有効な値:[0, 65535]。

注記cosyvoice-v1はこのパラメーターをサポートしていません。

language_hintsarray[string]いいえ

重要

  • このパラメータは配列ですが、現在のバージョンでは最初の要素のみを処理します。単一の値を渡してください。
  • このパラメータは、音声合成のターゲット言語を指定します。音声クローンに使用される音声サンプルの言語とは無関係です。クローンタスクのソース言語を設定するには、音声クローンAPIリファレンスを参照してください。

出力品質を向上させるために音声合成のターゲット言語を指定します。

注記cosyvoice-v1はこの機能をサポートしていません。

数字の発音、略語の展開、記号の読み上げ、または少数民族言語の合成が期待通りでない場合は、このパラメータを使用します。例:

  • 予期しない数字の発音:「hello, this is 110」が、期待される中国語の発音ではなく「hello, this is one zero」と読み上げられる
  • 記号の発音が不正確:「@」が「at」ではなく中国語の相当する文字として読み上げられる
  • 少数言語の合成品質が低く、不自然な結果になる

有効な値

  • zh: 中国語
  • en: 英語
  • fr: フランス語
  • de: ドイツ語
  • ja: 日本語
  • ko: 韓国語
  • ru: ロシア語
  • pt: ポルトガル語
  • th: タイ語
  • id: インドネシア語
  • vi: ベトナム語
  • es: スペイン語
  • it: イタリア語
  • ms: マレー語
  • fil: フィリピン語
  • ar: アラビア語
instructionstringいいえ方言、感情、話し方などの合成特性を制御します。

使用法の詳細については、指示制御を参照してください。

enable_aigc_tagbooleanいいえ生成された音声にAIGCウォーターマークを埋め込むかどうかを指定します。trueに設定すると、サポートされているフォーマット(wav/mp3/opus)の音声ファイルにウォーターマークが埋め込まれます。

デフォルト値:false。

注記cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2のみがこの機能をサポートしています。

aigc_propagatorstringいいえAIGCウォーターマークのContentPropagatorフィールドを設定し、コンテンツ伝播者を識別します。enable_aigc_tagがtrueの場合にのみ有効になります。

デフォルト値: Alibaba Cloud UID。

注記cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2のみがこの機能をサポートしています。

aigc_propagate_idstringいいえAIGCウォーターマークのPropagateIDフィールドを設定し、特定の伝播アクションを一意に識別します。enable_aigc_tagがtrueの場合にのみ有効になります。

デフォルト値: 現在の音声合成リクエストのリクエストID。

注記cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v2のみがこの機能をサポートしています。

hot_fixobjectいいえ指定された単語の発音をカスタマイズしたり、合成前にテキストを置換したりするためのテキストホットフィックス設定。

注記cosyvoice-v2およびcosyvoice-v1はこの機能をサポートしていません。

フィールド:

  • pronunciation: デフォルトの発音を修正する必要がある単語のピンイン注釈を指定します。
  • replace: 合成前に指定された単語を置換します。置換テキストが実際の合成入力として使用されます。

例:

"hot_fix": {
  "pronunciation": [
    {"天气": "tian1 qi4"}
  ],
  "replace": [
    {"今天": "金天"}
  ]
}
enable_markdown_filterBOOLいいえ

注記この機能はcosyvoice-v3-flashのクローン音声のみでサポートされています。

合成前に入力テキストからMarkdownマークアップをフィルタリングして、マークアップが読み上げられないようにするかどうか。

デフォルト:NO。

有効な値:

  • YES: Markdownフィルタリングを有効にします。
  • NO: Markdownフィルタリングを無効にします。

sendStreamInputTts

合成するテキストを送信します。このメソッドはstartStreamInputTtsと一緒に使用します。

startStreamInputTtsを呼び出した後、このメソッドを使用してテキストを継続的にプッシュします。

すべてのテキストを送信した後、stopStreamInputTtsまたはasyncStopStreamInputTtsを呼び出して入力の終了を通知してください。

メソッドシグネチャ
- (int) sendStreamInputTts:(const char *)text;
パラメータ
パラメータ型説明
textchar*合成するテキスト。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と同じ定義を使用します。

パラメータ型説明
textchar*合成するテキスト。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と同じ定義を使用します。

パラメータ型説明
textchar*合成するテキスト。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;
パラメータ
パラメータ型説明
eventStreamInputTtsCallbackEventコールバックイベント。
taskidchar*音声合成タスクID。
sessionIdchar*セッションID。クライアントが指定した値はそのまま返されます。指定がnoneの場合、サーバーが生成します。
ret_codeintエラーコード。TTS_EVENT_TASK_FAILEDイベントに対してのみ有効です。エラーコードを参照してください。
error_msgchar*エラーメッセージ。TTS_EVENT_TASK_FAILEDイベントに対してのみ有効です。
timestampchar*合成結果のタイムスタンプ情報。
all_responsechar*完全なJSONレスポンス。この文字列を解析して、必要なフィールドを抽出します。

onStreamInputTtsDataCallback:音声データのリッスン

SDKは合成中にこのコールバックを繰り返し発生させます。コールバックから音声データを読み取ります。

メソッドシグネチャ
- (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len;
パラメータ
パラメータ型説明
bufferchar*現在のセグメントの音声データ。このデータを使用して以下を行います:
  • 完全な音声ファイルを組み立てて再生します。
  • ストリーミング再生をサポートするプレーヤーにデータをストリーミングします。

注意:

  • 圧縮されたmp3およびopus形式の場合は、ストリーミングプレーヤーを使用します。セグメントをフレームごとに再生すると、デコードエラーが発生する可能性があります。
  • 完全なファイルを組み立てる際は、各セグメントを同じファイルに追加します。
  • wavおよびmp3形式の場合、最初のonStreamInputTtsDataCallback呼び出しにのみファイルヘッダーが含まれ、それ以降の呼び出しでは生の音声データが返されます。すべてのbuffer値を順番に連結してください。opus形式の場合、各フレームは自己完結型のOggページであり、直接連結できます。
lenint音声データの長さ(バイト単位)。

onStreamInputTtsLogTrackCallback:トレースログのリッスン

このコールバックは、トラブルシューティングとデバッグに役立つ詳細なSDK内部ログを配信します。

メソッドシグネチャ
- (void)onStreamInputTtsLogTrackCallback:(NuiSdkLogLevel)level
                            logMessage:(const char *)log;
パラメータ
パラメータ型説明
levelNuiSdkLogLevelログレベル。
logchar*ログ内容。

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を読み取ってください。
{
        "header": {
            "task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
            "event": "task-failed",
            "error_code": "InvalidParameter",
            "error_message": "[tts:]Engine return error code: 418",
            "attributes": {}
        },
        "payload": {}
    }

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ログ出力を無効にします。

サンプルコード

  1. APIキーの取得: APIキーの取得。

注記一時的なアクセスを必要とするサードパーティアプリまたはエンドユーザーの場合、あるいはデータアクセスや削除などの機密性の高い操作に対してwant厳密な制御を行う場合は、代わりに一時的なAPIキーを使用してください。一時的なAPIキーは固定の60秒間有効であり、有効期限が切れた後は再生成する必要があります。

  1. 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キーを自身のものに置き換えて、アプリを実行してお試しください。

呼び出しモード

呼び出しモード説明
一括入力手順:
  1. SDKおよびプレーヤーコンポーネントを初期化します。
  2. シナリオに合わせてパラメーターを設定します。
  3. playStreamInputTtsまたはasyncPlayStreamInputTtsを呼び出してテキストを送信し、合成を開始します。
  4. 合成が完了したことを示すTTS_EVENT_SYNTHESIS_COMPLETEコールバックを待機します。
ユースケース:
  • 短文合成。
  • SSMLマークアップが必要なシナリオ。
ストリーミング入力手順:
  1. SDKおよびプレーヤーコンポーネントを初期化します。
  2. シナリオに合わせてパラメーターを設定します。
  3. startStreamInputTtsを呼び出してストリーミング合成を開始します。
  4. sendStreamInputTtsを繰り返し呼び出して、テキストをチャンク単位で送信します。
  5. onStreamInputTtsDataCallbackからバイナリ音声データを読み取ります。
  6. stopStreamInputTtsまたはasyncStopStreamInputTtsを呼び出してテキストの送信を停止し、合成が完了するのを待機します。
  7. 合成が完了したことを示すTTS_EVENT_SYNTHESIS_COMPLETEコールバックを待機します。
ユースケース:
  • リアルタイム会話または長文の「合成しながら再生」シナリオ。
  • このモードではSSMLマークアップはサポートされていません。

高度な機能

SSMLマークアップ

目的: 入力テキストにXMLタグを埋め込んで、発音、話速、ポーズ、その他のプロソディ詳細を正確に制御します。

制限事項:SSMLはワンショット入力(playStreamInputTtsおよびasyncPlayStreamInputTtsメソッド)でのみサポートされています。ストリーミング入力(sendStreamInputTtsメソッド)ではサポートされていません。

使用方法:playStreamInputTtsまたはasyncPlayStreamInputTtsを呼び出すと、SDKは自動的にSSMLを有効にします。SSMLタグを含むテキストをtextパラメータに直接渡してください。

詳細については、SSMLを参照してください。

数式

目的: モデルに一般的な数式や表現を正しく読み上げさせます。

使用方法:LaTeX形式の数式を含むテキストをtextパラメータに直接渡してください。詳細については、LaTeX数式を音声に変換する(中国語のみ)を参照してください。