Skip to main content
Qwen-Audio-TTS

Qwen-Audio-TTS iOS SDK

Gunakan SDK iOS Qwen-Audio-TTS 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

Qwen-Audio-TTS 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.
  1. playStreamInputTts() atau asyncPlayStreamInputTts() — 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.
  2. onStreamInputTtsDataCallback() — Menerima data audio.
  3. TTS_EVENT_SYNTHESIS_COMPLETE — Sintesis selesai.
Streaming input: paling cocok untuk percakapan waktu nyata atau skenario "speak-while-synthesizing" bentuk panjang. Mode ini tidak mendukung markup SSML.
  1. startStreamInputTts() — Inisialisasi SDK dan atur delegasi callback serta parameter koneksi.
  2. sendStreamInputTts() — Terus-menerus mengirim fragmen teks untuk disintesis.
  3. onStreamInputTtsDataCallback() — Menerima data audio.
  4. stopStreamInputTts() atau asyncStopStreamInputTts() — Kirim permintaan akhir sintesis. Yang pertama bersifat sinkron dan kembali setelah sintesis selesai; yang kedua bersifat asinkron dan langsung kembali setelah mengirim permintaan.
  5. TTS_EVENT_SYNTHESIS_COMPLETE — Sintesis selesai.

startStreamInputTts

Memulai tugas sintesis suara streaming dan membuka koneksi ke server. Signature metode
- (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Parameter
ParameterTipeDeskripsi
ticketchar*String JSON yang menyimpan pengaturan autentikasi, koneksi, dan debugging.
parameterschar*String JSON yang menyimpan pengaturan efek sintesis suara.
sessionIdchar*ID sesi yang ditentukan klien. Jika diabaikan, server akan membuatnya.
logLevelNuiSdkLogLevelLevel cetak untuk log internal SDK.
saveLogBOOLApakah 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.
Nilai kembalian Mengembalikan kode kesalahan. Contoh JSON ticket: Contoh berikut tidak mencantumkan setiap bidang. Tambahkan bidang lainnya sesuai kebutuhan kode Anda:
{
  "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
  "apikey": "st-****",
  "device_id": "my_device_id"
}
bidang ticket
BidangTipeWajibDeskripsi
urlstringYaAlamat layanan:
  • wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • Tiongkok (Beijing): wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference
  • Singapura: wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference
Ganti {WorkspaceId} dengan ID Workspace Anda yang sebenarnya.
apikeystringYaAPI key. Untuk membatasi paparan jika key berumur panjang bocor, gunakan API key berumur pendek sebagai gantinya.
device_idstringYaPengidentifikasi 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_msintTidakTimeout, dalam milidetik, untuk menunggu event sintesis selesai (TTS_EVENT_SYNTHESIS_COMPLETE) setelah Anda memanggil stopStreamInputTts.Default: 10000.
debug_pathstringTidakJalur 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_sizeintTidakUkuran 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_levelintTidakLevel filter untuk log yang dikirim melalui callback log (onStreamInputTtsLogTrackCallback).Default: 2.Nilai yang valid:
  • 0: LOG_LEVEL_VERBOSE
  • 1: LOG_LEVEL_DEBUG
  • 2: LOG_LEVEL_INFO
  • 3: LOG_LEVEL_WARNING
  • 4: LOG_LEVEL_ERROR
  • 5: LOG_LEVEL_NONE (menonaktifkan callback)
Catatan: 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.
Contoh JSON parameters: Contoh berikut tidak mencantumkan setiap bidang. Tambahkan bidang lainnya sesuai kebutuhan kode Anda:
{
  "model": "qwen-audio-3.0-tts-flash",
  "voice": "longanlingxi",
  "format": "mp3",
  "sample_rate": 24000,
  "volume": 50,
  "rate": 1,
  "pitch": 1,
  "language_hints": ["zh"],
  "enable_ssml": false
}
bidang parameters
BidangTipeWajibDeskripsi
modelstringYaNama model.
voicestringYaSuara yang digunakan untuk sintesis suara.
  • Suara sistem: Lihat Qwen-Audio-TTS daftar suara
  • Suara kloning: Suara kustom yang dibuat melalui kloning suara
  • Suara kustom: Suara kustom yang dibuat melalui desain suara
formatstringTidakFormat pengkodean audio.Nilai yang valid:
  • pcm
  • wav
  • mp3 (default)
  • opus
enable_audio_decoderBOOLTidakApakah 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.
volumeintTidakTingkat volume.Nilai default: 50.Nilai yang valid: [0, 100].
sample_rateintTidakTingkat sampel audio dalam Hz.Nilai yang valid: 8000, 16000, 22050 (default), 24000, 44100, 48000.
ratefloatTidakKecepatan bicara.Nilai default: 1.0.Nilai yang valid: [0.5, 2.0].
pitchfloatTidakPitch.Nilai default: 1.0.Nilai yang valid: [0.5, 2.0].
bit_rateintTidakBit 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].
enable_ssmlbooleanTidakApakah akan mengaktifkan SSML.Default: false.
  • true: diaktifkan.
  • false: dinonaktifkan.
Untuk batasan penggunaan SSML (model, suara, dan API yang didukung), lihat Batasan.
word_timestamp_enabledbooleanTidakMenentukan apakah akan mengaktifkan stempel waktu tingkat kata.Nilai default: false.Hanya tersedia dalam mode output streaming. Suara hasil kloning didukung. Untuk suara sistem yang didukung, lihat Qwen-Audio-TTS voice list.
Stempel waktu dikembalikan dalam all_response dari onStreamInputTtsEventCallback.
seedintTidakSeed 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].
language_hintsarray[string]Tidak
  • Parameter ini adalah array, tetapi versi saat ini hanya memproses elemen pertama. Berikan satu nilai.
  • Parameter ini menentukan bahasa target untuk sintesis ucapan. Ini tidak terkait dengan bahasa sampel audio yang digunakan dalam kloning suara. Untuk mengatur bahasa sumber untuk tugas kloning, lihat referensi API kloning suara.
Menentukan bahasa target untuk sintesis ucapan guna meningkatkan kualitas output.Ketika pengucapan angka, ekspansi singkatan, pembacaan simbol, atau sintesis bahasa minoritas tidak sesuai harapan, gunakan parameter ini. Misalnya:
  • Pengucapan angka yang tidak terduga: "hello, this is 110" dibaca sebagai "hello, this is one zero" alih-alih pengucapan bahasa Mandarin yang diharapkan
  • Pengucapan simbol yang tidak akurat: "@" dibaca sebagai padanan bahasa Mandarin, bukan "at"
  • Kualitas sintesis bahasa minor yang buruk dengan hasil yang tidak wajar
  • zh: Tiongkok
  • en: Inggris
  • fr: Prancis
  • de: Jerman
  • ja: Jepang
  • ko: Korea
  • ru: Rusia
  • pt: Portugis
  • th: Thai
  • id: Indonesia
  • vi: Vietnam
  • es: Spanyol
  • it: Italia
  • ms: Malaysia
  • fil: Filipina
  • ar: Arab
instructionstringTidakMengontrol karakteristik sintesis seperti dialek, emosi, atau gaya bicara.Untuk detail penggunaan, lihat Kontrol instruksi.
enable_aigc_tagbooleanTidakMenentukan 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.
aigc_propagatorstringTidakMengatur field ContentPropagator dalam watermark AIGC, yang mengidentifikasi penyebar konten. Hanya berlaku jika enable_aigc_tag adalah true.Nilai default: UID Alibaba Cloud.
aigc_propagate_idstringTidakMengatur 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.
hot_fixobjectTidakKonfigurasi hot-fix teks untuk menyesuaikan pengucapan kata-kata tertentu atau mengganti teks sebelum sintesis.Field:
  • pronunciation: Menentukan anotasi pinyin untuk kata-kata yang pengucapan defaultnya perlu dikoreksi.
  • replace: Mengganti kata-kata tertentu sebelum sintesis. Teks pengganti digunakan sebagai input sintesis aktual.
Contoh:
"hot_fix": {
  "pronunciation": [
    {"天气": "tian1 qi4"}
  ],
  "replace": [
    {"今天": "金天"}
  ]
}

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
- (int) sendStreamInputTts:(const char *)text;
Parameter
ParameterTipeDeskripsi
textchar*Teks yang akan disintesis. SSML tidak didukung. Tag SSML dalam input dibaca sebagai teks biasa alih-alih diuraikan.
Nilai kembalian Mengembalikan kode kesalahan.

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
- (int) stopStreamInputTts;
Nilai kembalian Mengembalikan kode kesalahan.

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
- (int) asyncStopStreamInputTts;
Nilai kembalian Mengembalikan kode kesalahan.

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
- (int) cancelStreamInputTts;
Nilai kembalian Mengembalikan kode kesalahan.

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
- (int) playStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Parameter ticket, parameters, dan parameter bersama lainnya menggunakan definisi yang sama dengan startStreamInputTts.
ParameterTipeDeskripsi
textchar*Teks yang akan disintesis. Mendukung SSML.
Nilai kembalian Mengembalikan kode kesalahan.

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
- (int) asyncPlayStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
Parameter ticket, parameters, dan parameter bersama lainnya menggunakan definisi yang sama dengan startStreamInputTts.
ParameterTipeDeskripsi
textchar*Teks yang akan disintesis. Mendukung SSML.
Nilai kembalian Mengembalikan kode kesalahan.

StreamInputTtsDelegate

Protokol callback untuk sintesis ucapan streaming Qwen-Audio-TTS. Implementasikan protokol ini untuk menerima event sintesis, data audio, dan log.

onStreamInputTtsEventCallback: mendengarkan event

Signature metode
- (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;
Parameter
ParameterTipeDeskripsi
eventStreamInputTtsCallbackEventEvent callback.
taskidchar*ID tugas sintesis suara.
sessionIdchar*ID Sesi. Nilai yang diberikan klien dikembalikan apa adanya. Jika none diberikan, server akan membuatnya.
ret_codeintKode error. Hanya valid untuk event TTS_EVENT_TASK_FAILED. Lihat error codes.
error_msgchar*Pesan error. Hanya valid untuk event TTS_EVENT_TASK_FAILED.
timestampchar*Informasi stempel waktu untuk hasil sintesis.
all_responsechar*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
- (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len;
Parameter
ParameterTipeDeskripsi
bufferchar*Data audio untuk segmen saat ini. Gunakan data ini untuk:
  • Rangkai file audio lengkap dan putar.
  • Streaming data ke pemutar yang mendukung pemutaran streaming.
Catatan:
  • Untuk format mp3 dan opus yang terkompresi, gunakan pemutar streaming. Memutar segmen demi frame dapat menyebabkan kegagalan decoding.
  • Saat merangkai file lengkap, tambahkan setiap segmen ke file yang sama.
  • Untuk format wav dan mp3, hanya pemanggilan onStreamInputTtsDataCallback pertama yang menyertakan header file; pemanggilan berikutnya mengembalikan data audio mentah. Gabungkan semua nilai buffer secara berurutan. Untuk format opus, setiap frame adalah halaman Ogg yang berdiri sendiri yang dapat Anda gabungkan secara langsung.
lenintPanjang data audio, dalam byte.

onStreamInputTtsLogTrackCallback: mendengarkan log pelacakan

Callback ini memberikan log internal SDK yang detail untuk membantu pemecahan masalah dan debugging. Signature metode
- (void)onStreamInputTtsLogTrackCallback:(NuiSdkLogLevel)level
                            logMessage:(const char *)log;
Parameter
ParameterTipeDeskripsi
levelNuiSdkLogLevelLevel log.
logchar*Konten log.

StreamInputTtsCallbackEvent

Enum jenis event untuk sintesis suara streaming Qwen-Audio-TTS.
EventDeskripsi
TTS_EVENT_SYNTHESIS_STARTEDServer menerima permintaan dan mulai memproses. onStreamInputTtsDataCallback biasanya mengirimkan segmen audio pertama tidak lama setelah event ini.
TTS_EVENT_SENTENCE_SYNTHESISInformasi progres yang dihasilkan selama sintesis, termasuk data penagihan.
TTS_EVENT_SYNTHESIS_COMPLETEServer telah selesai mengirim semua data audio. onStreamInputTtsDataCallback tidak dipanggil lagi. Event ini adalah sinyal akhir stream yang pasti.
TTS_EVENT_TASK_FAILEDTugas gagal. Baca task_id, error_code, dan error_message dari all_response di onStreamInputTtsEventCallback untuk mendiagnosis kegagalan.
{
        "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

Enum level log SDK yang mengontrol output log.
LevelDeskripsi
0: LOG_LEVEL_VERBOSELevel log paling detail. Mencakup semua informasi debug.
1: LOG_LEVEL_DEBUGLog level debug.
2: LOG_LEVEL_INFOLog informasional umum (default).
3: LOG_LEVEL_WARNINGLog level warning.
4: LOG_LEVEL_ERRORLog level error.
5: LOG_LEVEL_NONEMenonaktifkan output log.

Kode contoh

  1. 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.
  1. Unduh SDK dan jalankan kode contoh:
    • Unduh bundel SDK terbaru.
    • Ekstrak arsip ZIP dan tambahkan nuisdk.framework ke proyek Xcode Anda.
    • Di Build Phases > Link Binary With Libraries, tambahkan nuisdk.framework.
    • Di General > Frameworks, Libraries, and Embedded Content, atur nuisdk.framework ke Embed & Sign.
    • Buka proyek contoh di Xcode. Kode contoh ada di DashQwen-Audio-TTSStreamInputTTSViewController.m. Ganti placeholder API key dengan milik Anda sendiri dan jalankan aplikasi untuk mencobanya.

Mode pemanggilan

Mode pemanggilanDeskripsi
Input one-shotLangkah:
  1. Inisialisasi SDK dan komponen pemutar.
  2. Konfigurasikan parameter untuk skenario Anda.
  3. Panggil playStreamInputTts atau asyncPlayStreamInputTts untuk mengirim teks dan memulai sintesis.
  4. Tunggu callback TTS_EVENT_SYNTHESIS_COMPLETE, yang menandakan bahwa sintesis telah selesai.
Kasus penggunaan:
  • Sintesis teks pendek.
  • Skenario yang memerlukan markup SSML.
Input streamingLangkah:
  1. Inisialisasi SDK dan komponen pemutar.
  2. Konfigurasikan parameter untuk skenario Anda.
  3. Panggil startStreamInputTts untuk memulai sintesis streaming.
  4. Panggil sendStreamInputTts berulang kali untuk mengirim teks dalam bentuk potongan.
  5. Baca data audio biner dari onStreamInputTtsDataCallback.
  6. Panggil stopStreamInputTts atau asyncStopStreamInputTts untuk berhenti mengirim teks dan menunggu sintesis selesai.
  7. Tunggu callback TTS_EVENT_SYNTHESIS_COMPLETE, yang menandakan bahwa sintesis telah selesai.
Kasus penggunaan:
  • Percakapan waktu nyata atau skenario bentuk panjang "ucapkan sambil mensintesis".
  • Mode ini tidak mendukung markup SSML.

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).
Pembuatan Gambar
  • FAQ
Video Generation
Model Dunia
Audio
  • Pembuatan audio
Realtime API
Penyematan Teks
TokenPlan
Model production