Gunakan SDK iOS CosyVoice untuk mengubah teks menjadi ucapan yang ekspresif dan berkualitas tinggi di aplikasi iOS Anda.
NeoNui
Sorotan arsitektur:
- Pola singleton: dapatkan instance global melalui
[StreamInputTts get_instance]. - Berbasis callback: menerima event dan data audio melalui protokol
StreamInputTtsDelegate. - Konfigurasi JSON: teruskan parameter sebagai string JSON.
Alur pemanggilan
CosyVoice mendukung dua mode pemanggilan: input satu kali dan input streaming.
One-shot input: paling cocok untuk sintesis teks pendek atau ketika Anda memerlukan markup SSML.
playStreamInputTts()atauasyncPlayStreamInputTts()— Kirim teks lengkap dan mulai sintesis. Yang pertama bersifat sinkron dan kembali setelah sintesis selesai; yang kedua bersifat asinkron dan langsung kembali setelah memulai sintesis.onStreamInputTtsDataCallback()— Menerima data audio.TTS_EVENT_SYNTHESIS_COMPLETE— Sintesis selesai.
startStreamInputTts()— Inisialisasi SDK dan atur delegasi callback serta parameter koneksi.sendStreamInputTts()— Terus-menerus mengirim fragmen teks untuk disintesis.onStreamInputTtsDataCallback()— Menerima data audio.stopStreamInputTts()atauasyncStopStreamInputTts()— Kirim permintaan akhir sintesis. Yang pertama bersifat sinkron dan kembali setelah sintesis selesai; yang kedua bersifat asinkron dan langsung kembali setelah mengirim permintaan.TTS_EVENT_SYNTHESIS_COMPLETE— Sintesis selesai.
startStreamInputTts
Memulai tugas sintesis suara streaming dan membuka koneksi ke server.
Signature metode
| Parameter | Tipe | Deskripsi |
|---|---|---|
ticket | char* | String JSON yang menyimpan pengaturan autentikasi, koneksi, dan debugging. |
parameters | char* | String JSON yang menyimpan pengaturan efek sintesis suara. |
sessionId | char* | ID sesi yang ditentukan klien. Jika diabaikan, server akan membuatnya. |
logLevel | NuiSdkLogLevel | Level cetak untuk log internal SDK. |
saveLog | BOOL | Apakah akan menyimpan log secara lokal. Jika diatur ke YES, Anda harus menentukan path dengan debug_path dan dapat membatasi ukuran file dengan max_log_file_size. |
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
url | string | Ya | Alamat layanan:
{WorkspaceId} dengan ID Workspace Anda yang sebenarnya. |
apikey | string | Ya | API key. Untuk membatasi paparan jika key berumur panjang bocor, gunakan API key berumur pendek sebagai gantinya. |
device_id | string | Ya | Pengidentifikasi unik untuk pengguna akhir. Atur ini ke ID pengguna dalam aplikasi atau pengidentifikasi perangkat yang dibuat klien. ID ini digunakan untuk pelacakan log dan pemecahan masalah. |
complete_waiting_ms | int | Tidak | Timeout, dalam milidetik, untuk menunggu event sintesis selesai (TTS_EVENT_SYNTHESIS_COMPLETE) setelah Anda memanggil stopStreamInputTts.Default: 10000. |
debug_path | string | Tidak | Jalur lokal tempat file log disimpan.Bidang ini hanya berlaku ketika saveLog diatur ke YES di startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts. Dalam kasus tersebut, Anda harus mengatur path ini; jika tidak, error akan dikembalikan.Maksimal dua file log disimpan secara lokal. |
max_log_file_size | int | Tidak | Ukuran maksimum file log, dalam byte.Bidang ini hanya berlaku ketika saveLog diatur ke YES di startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts.Default: 104857600 (100 × 1024 × 1024 byte, yaitu 100 MiB). |
log_track_level | int | Tidak | Level filter untuk log yang dikirim melalui callback log (onStreamInputTtsLogTrackCallback).Default: 2.Nilai yang valid:
log_track_level dan logLevel (diatur melalui startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts) bersama-sama menentukan log mana yang mencapai callback. Log memicu callback hanya ketika levelnya berada pada atau di atas kedua ambang batas. Misalnya, jika log_track_level adalah 2 (INFO) dan logLevel adalah 3 (WARNING), hanya log pada WARNING atau lebih tinggi (level >= 3) yang dikirimkan. |
| Bidang | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | Ya | Nama model. |
voice | string | Ya | Suara yang digunakan untuk sintesis suara.
|
format | string | Tidak | Format pengkodean audio.Nilai yang valid:
cosyvoice-v1 tidak mendukung format opus. |
enable_audio_decoder | BOOL | Tidak | Apakah akan mengaktifkan decoder internal SDK. Default: NO.Parameter ini hanya berlaku ketika format pengodean audio adalah opus atau mp3. Saat diaktifkan, SDK mendekode data audio opus atau mp3 menjadi data PCM sebelum mengembalikannya. |
volume | int | Tidak | Tingkat volume.Nilai default: 50.Nilai yang valid: [0, 100]. |
sample_rate | int | Tidak | Tingkat sampel audio dalam Hz.Nilai yang valid: 8000, 16000, 22050 (default), 24000, 44100, 48000. |
rate | float | Tidak | Kecepatan bicara.Nilai default: 1.0.Nilai yang valid: [0.5, 2.0]. |
pitch | float | Tidak | Pitch.Nilai default: 1.0.Nilai yang valid: [0.5, 2.0]. |
bit_rate | int | Tidak | Bit rate audio dalam kbps. Saat format audio adalah mp3 atau opus, gunakan bit_rate untuk menyesuaikan bit rate.Nilai default: 32.Nilai yang valid: [6, 510].cosyvoice-v1 tidak mendukung parameter ini. |
enable_ssml | boolean | Tidak | Apakah akan mengaktifkan SSML.Default: false.
|
word_timestamp_enabled | boolean | Tidak | Menentukan apakah akan mengaktifkan stempel waktu tingkat kata.Nilai default: false.Hanya tersedia dalam mode output streaming. Suara yang didukung: suara kloning dari cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2, serta suara sistem yang ditandai sebagai didukung dalam CosyVoice Voice list. Suara kloning dari model lain tidak mendukung fitur ini.Stempel waktu dikembalikan dalam |
seed | int | Tidak | Seed acak untuk mengontrol variasi dalam output sintesis. Ketika versi model, teks, suara, dan parameter lainnya tidak berubah, menggunakan seed yang sama akan menghasilkan hasil yang identik.Nilai default: 0.Nilai yang valid: [0, 65535]. cosyvoice-v1 tidak mendukung parameter ini. |
language_hints | array[string] | Tidak | Menentukan bahasa target untuk sintesis ucapan guna meningkatkan kualitas output. cosyvoice-v1 tidak mendukung fitur ini.
Nilai yang valid
|
instruction | string | Tidak | Mengontrol karakteristik sintesis seperti dialek, emosi, atau gaya bicara.Untuk detail penggunaan, lihat Kontrol instruksi. |
enable_aigc_tag | boolean | Tidak | Menentukan apakah akan menyematkan watermark AIGC dalam audio yang dihasilkan. Jika diatur ke true, watermark disematkan dalam file audio dengan format yang didukung (wav/mp3/opus).Nilai default: false. Hanya cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 yang mendukung fitur ini. |
aigc_propagator | string | Tidak | Mengatur field ContentPropagator dalam watermark AIGC, yang mengidentifikasi penyebar konten. Hanya berlaku jika enable_aigc_tag adalah true.Nilai default: UID Alibaba Cloud.Hanya cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 yang mendukung fitur ini. |
aigc_propagate_id | string | Tidak | Mengatur field PropagateID dalam watermark AIGC, yang secara unik mengidentifikasi tindakan penyebaran tertentu. Hanya berlaku jika enable_aigc_tag adalah true.Nilai default: ID permintaan dari permintaan sintesis suara saat ini.Hanya cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 yang mendukung fitur ini. |
hot_fix | object | Tidak | Konfigurasi hot-fix teks untuk menyesuaikan pengucapan kata-kata tertentu atau mengganti teks sebelum sintesis. cosyvoice-v2, cosyvoice-v1 tidak mendukung fitur ini.
|
enable_markdown_filter | BOOL | Tidak | Hanya suara kloning dari cosyvoice-v3-flash yang mendukung fitur ini. NO.Nilai yang valid:
|
sendStreamInputTts
Mengirim teks yang akan disintesis. Gunakan metode ini bersama dengan startStreamInputTts.
Setelah Anda memanggil startStreamInputTts, gunakan metode ini untuk mendorong teks secara terus-menerus.
Setelah semua teks dikirim, panggil stopStreamInputTts atau asyncStopStreamInputTts untuk memberi sinyal akhir input.
Signature metode
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | char* | Teks yang akan disintesis. SSML tidak didukung. Tag SSML dalam input dibaca sebagai teks biasa alih-alih diuraikan. |
stopStreamInputTts
Metode sinkron. Memberi tahu server bahwa semua teks telah dikirim, lalu memblokir hingga setiap chunk audio disintesis dan TTS_EVENT_SYNTHESIS_COMPLETE diterima.
Batas waktu blokir dikontrol oleh complete_waiting_ms.
Signature metode
asyncStopStreamInputTts
Metode asinkron. Memberi tahu server bahwa semua teks telah dikirim dan segera mengembalikan nilai. Sintesis berlanjut di latar belakang.
Gunakan TTS_EVENT_SYNTHESIS_COMPLETE untuk mendeteksi kapan sintesis selesai.
Signature metode
cancelStreamInputTts
Segera memutus koneksi ke server dan mengakhiri tugas sintesis saat ini. Setelah metode ini dipanggil, tidak ada lagi callback data audio yang dipicu.
Signature metode
playStreamInputTts
Metode sintesis satu kali yang sinkron. Mengirim teks dan memblokir saat semua data audio diterima, lalu kembali setelah sintesis selesai. Anda tidak perlu memanggil stopStreamInputTts setelahnya.
Metode ini mengaktifkan SSML secara default. Untuk menonaktifkan SSML, atur bidang enable_ssml di parameters menjadi false.
Signature metode
ticket, parameters, dan parameter bersama lainnya menggunakan definisi yang sama dengan startStreamInputTts.
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | char* | Teks yang akan disintesis. Mendukung SSML. |
asyncPlayStreamInputTts
Metode ini mengirim semua teks untuk sintesis secara asinkron. Metode ini langsung kembali tanpa menunggu data audio. Anda tidak perlu memanggil stopStreamInputTts setelahnya.
Metode ini mengaktifkan SSML secara default. Untuk menonaktifkan SSML, atur bidang enable_ssml di parameters menjadi false.
Signature metode
ticket, parameters, dan parameter bersama lainnya menggunakan definisi yang sama dengan startStreamInputTts.
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | char* | Teks yang akan disintesis. Mendukung SSML. |
StreamInputTtsDelegate
Protokol callback untuk sintesis ucapan streaming CosyVoice. Implementasikan protokol ini untuk menerima event sintesis, data audio, dan log.
onStreamInputTtsEventCallback: mendengarkan event
Signature metode
| Parameter | Tipe | Deskripsi |
|---|---|---|
event | StreamInputTtsCallbackEvent | Event callback. |
taskid | char* | ID tugas sintesis suara. |
sessionId | char* | ID Sesi. Nilai yang diberikan klien dikembalikan apa adanya. Jika none diberikan, server akan membuatnya. |
ret_code | int | Kode error. Hanya valid untuk event TTS_EVENT_TASK_FAILED. Lihat error codes. |
error_msg | char* | Pesan error. Hanya valid untuk event TTS_EVENT_TASK_FAILED. |
timestamp | char* | Informasi stempel waktu untuk hasil sintesis. |
all_response | char* | Respons JSON lengkap. Uraikan string ini untuk mengekstrak bidang yang Anda butuhkan. |
onStreamInputTtsDataCallback: mendengarkan data audio
SDK memicu callback ini berulang kali selama sintesis. Baca data audio dari callback.
Signature metode
| Parameter | Tipe | Deskripsi |
|---|---|---|
buffer | char* | Data audio untuk segmen saat ini. Gunakan data ini untuk:
|
len | int | Panjang data audio, dalam byte. |
onStreamInputTtsLogTrackCallback: mendengarkan log pelacakan
Callback ini memberikan log internal SDK yang detail untuk membantu pemecahan masalah dan debugging.
Signature metode
| Parameter | Tipe | Deskripsi |
|---|---|---|
level | NuiSdkLogLevel | Level log. |
log | char* | Konten log. |
StreamInputTtsCallbackEvent
Enum jenis event untuk sintesis suara streaming CosyVoice.
| Event | Deskripsi |
|---|---|
TTS_EVENT_SYNTHESIS_STARTED | Server menerima permintaan dan mulai memproses. onStreamInputTtsDataCallback biasanya mengirimkan segmen audio pertama tidak lama setelah event ini. |
TTS_EVENT_SENTENCE_SYNTHESIS | Informasi progres yang dihasilkan selama sintesis, termasuk data penagihan. |
TTS_EVENT_SYNTHESIS_COMPLETE | Server telah selesai mengirim semua data audio. onStreamInputTtsDataCallback tidak dipanggil lagi. Event ini adalah sinyal akhir stream yang pasti. |
TTS_EVENT_TASK_FAILED | Tugas gagal. Baca task_id, error_code, dan error_message dari all_response di onStreamInputTtsEventCallback untuk mendiagnosis kegagalan. |
NuiSdkLogLevel
Enum level log SDK yang mengontrol output log.
| Level | Deskripsi |
|---|---|
| 0: LOG_LEVEL_VERBOSE | Level log paling detail. Mencakup semua informasi debug. |
| 1: LOG_LEVEL_DEBUG | Log level debug. |
| 2: LOG_LEVEL_INFO | Log informasional umum (default). |
| 3: LOG_LEVEL_WARNING | Log level warning. |
| 4: LOG_LEVEL_ERROR | Log level error. |
| 5: LOG_LEVEL_NONE | Menonaktifkan output log. |
Kode contoh
- Dapatkan API key Anda: Mendapatkan API key.
Untuk aplikasi pihak ketiga atau pengguna akhir yang memerlukan akses sementara, atau ketika Anda want kontrol ketat atas operasi sensitif seperti akses dan penghapusan data, gunakan temporary API key sebagai gantinya. API key sementara berlaku selama 60 detik yang tetap dan harus dibuat ulang setelah kedaluwarsa.
-
Unduh SDK dan jalankan kode contoh:
- Unduh bundel SDK terbaru.
- Ekstrak arsip ZIP dan tambahkan
nuisdk.frameworkke proyek Xcode Anda. - Di Build Phases > Link Binary With Libraries, tambahkan
nuisdk.framework. - Di General > Frameworks, Libraries, and Embedded Content, atur
nuisdk.frameworkke Embed & Sign. - Buka proyek contoh di Xcode. Kode contoh ada di
DashCosyVoiceStreamInputTTSViewController.m. Ganti placeholder API key dengan milik Anda sendiri dan jalankan aplikasi untuk mencobanya.
Mode pemanggilan
| Mode pemanggilan | Deskripsi |
|---|---|
Input one-shot | Langkah:
|
Input streaming | Langkah:
|
Fitur lanjutan
Markup SSML
Tujuan: Sematkan tag XML dalam teks input untuk mengontrol pelafalan, kecepatan bicara, jeda, dan detail prosodi lainnya secara presisi.
Batasan: SSML hanya didukung dengan One-shot input (metode playStreamInputTts dan asyncPlayStreamInputTts). Ini tidak didukung dengan Streaming input (metode sendStreamInputTts).
Cara menggunakan: Saat Anda memanggil playStreamInputTts atau asyncPlayStreamInputTts, SDK mengaktifkan SSML secara otomatis. Berikan teks yang berisi tag SSML secara langsung di parameter text.
Untuk detail lebih lanjut, lihat SSML.
Ekspresi matematika
Tujuan: Membuat model membaca rumus dan ekspresi matematika umum dengan benar.
Cara menggunakan: Berikan teks yang berisi ekspresi matematika dalam format LaTeX secara langsung di parameter text. Untuk detail lebih lanjut, lihat Convert LaTeX formulas to speech (Chinese language only).