Pelajari tentang integrasi SDK HarmonyOS, parameter, API, callback, dan kode contoh untuk sintesis suara real-time.
NativeNui
HarmonyOS SDK menyediakan text-to-speech streaming melalui NativeNui.
- Buat instance text-to-speech streaming dengan memanggil
new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS).NativeNui.GetInstance()mengembalikan singletonMODE_DIALOGdan tidak dapat digunakan untuk text-to-speech streaming. - Jangan panggil
initialize()dalam mode text-to-speech streaming. Berikan kredensial dan parameter sintesis langsung kestartStreamInputTts(),playStreamInputTts(), atauasyncPlayStreamInputTts(). - Terima peristiwa sintesis dan audio melalui
INativeStreamInputTtsCallback. - SDK mengembalikan
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTEDsaat tugas dimulai, audio melaluionStreamInputTtsDataCallback,STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEsaat tugas berakhir, danSTREAM_INPUT_TTS_EVENT_TASK_FAILEDsaat sintesis gagal.
Alur panggilan
CosyVoice mendukung input satu kali dan input streaming.
Input satu kali cocok untuk teks pendek atau skenario yang memerlukan SSML.
- Panggil
playStreamInputTtsatauasyncPlayStreamInputTtsuntuk memberikan teks lengkap dan memulai sintesis. Yang pertama memblokir hingga sintesis selesai. Yang kedua segera mengembalikan dan mensintesis di latar belakang. Jangan panggilstartStreamInputTtsterlebih dahulu, dan jangan panggil metode stop setelahnya. - Terima audio di
onStreamInputTtsDataCallback. - Sintesis berakhir saat
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEditerima.
- Panggil
startStreamInputTtsuntuk membuka koneksi dan mengonfigurasi callback serta parameter. - Panggil
sendStreamInputTtsuntuk mengirim fragmen teks. - Terima audio di
onStreamInputTtsDataCallback. - Setelah semua teks dikirim, panggil
stopStreamInputTts. - Sintesis berakhir saat
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEditerima.
releaseStreamInputTts untuk melepaskan sumber daya.
Baik panjang input teks tunggal maupun panjang kumulatif dari beberapa input dibatasi. Lihat CosyVoice WebSocket API.
startStreamInputTts
Memulai sintesis streaming dua arah, membuka koneksi, dan mendaftarkan callback. Metode ini dapat memblokir. Jangan panggil pada thread UI.
| Parameter | Tipe | Deskripsi |
|---|---|---|
callback | INativeStreamInputTtsCallback | Callback peristiwa dan audio. |
ticket | string | String JSON yang berisi pengaturan autentikasi, koneksi, dan debugging. |
parameters | string | String JSON yang berisi pengaturan sintesis. |
session_id | string | ID sesi yang ditentukan klien. Berikan string kosong agar server membuatnya. |
log_level | number | Tingkat log SDK. Gunakan Constants.LogLevel nilai: 0 (VERBOSE), 1 (DEBUG), 2 (INFO), 3 (WARNING), 4 (ERROR), atau 5 (NONE). |
save_log | boolean | Apakah akan menyimpan log secara lokal. Jika diatur ke true, atur debug_path di ticket. |
Constants.NuiResultCode.SUCCESS (0) menunjukkan keberhasilan.
bidang ticket
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
url | string | Ya | Endpoint layanan. Gunakan endpoint publik wss://dashscope.aliyuncs.com/api-ws/v1/inference, atau endpoint khusus workspace: wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inferenceuntuk Beijing atau wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inferenceuntuk Singapura. Ganti {WorkspaceId} dengan ID workspace. |
apikey | string | Ya | Kunci API. Gunakan kunci API sementara untuk mengurangi risiko paparan kunci berumur panjang. |
device_id | string | Ya | Pengidentifikasi pengguna akhir yang unik, seperti ID pengguna dalam aplikasi atau ID perangkat yang dibuat klien. Ini digunakan terutama untuk pelacakan log dan pemecahan masalah. |
complete_waiting_ms | number | Tidak | Waktu dalam milidetik untuk menunggu peristiwa sintesis selesai setelah stopStreamInputTts(false). Default: 10000. |
debug_path | string | Tidak | Direktori log. Field ini wajib diisi ketika save_log adalah true. SDK menyimpan paling banyak dua file log. |
max_log_file_size | number | Tidak | Ukuran maksimum satu file log dalam byte. Default: 104857600 (100 MiB). Field ini hanya berlaku ketika save_log adalah true. |
log_track_level | number | Tidak | Tingkat filter log pelacakan internal. Default: 2. Nilai yang valid sama dengan log_level. Antarmuka callback HarmonyOS saat ini tidak mengekspos callback log TTS streaming, sehingga log yang difilter hanya ditulis oleh SDK. |
bidang parameters
| Field | Tipe | Wajib | Deskripsi |
|---|---|---|---|
model | string | Ya | Nama model. Lihat Model sintesis ucapan. |
voice | string | Ya | Suara. Untuk suara sistem, lihat suara CosyVoice. Anda juga dapat menggunakan suara yang dibuat melalui kloning suara atau Voice Design. |
format | string | Tidak | Format pengkodean audio: pcm, wav, mp3 (default), atau opus.cosyvoice-v1 tidak mendukung Opus. |
enable_audio_decoder | boolean | Tidak | Apakah akan mengaktifkan decoder SDK. Default: false. Untuk MP3 atau Opus, atur ini ke true untuk mendekode audio ke PCM sebelum dikembalikan melalui callback data. |
volume | number | Tidak | Volume. Default: 50. Rentang yang valid: [0, 100]. |
sample_rate | number | Tidak | Laju sampel dalam Hz. Nilai yang valid: 8000, 16000, 22050 (default), 24000, 44100, dan 48000. |
rate | number | Tidak | Laju ucapan. Default: 1.0. Rentang yang valid: [0.5, 2.0]. |
pitch | number | Tidak | Nada. Default: 1.0. Rentang yang valid: [0.5, 2.0]. |
bit_rate | number | Tidak | Bitrate MP3 atau Opus dalam kbps. Default: 32. Rentang yang valid: [6, 510].cosyvoice-v1 tidak mendukung field ini. |
enable_ssml | boolean | Tidak | Apakah akan mengaktifkan SSML. Default: false. Lihat Batasan SSML. |
word_timestamp_enabled | boolean | Tidak | Apakah akan mengembalikan stempel waktu tingkat kata. Default: false. Field ini hanya tersedia untuk output streaming. Ini mendukung 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 daftar suara CosyVoice. Suara kloning dari model lain tidak didukung. Hasil stempel waktu disertakan dalam all_response dari INativeStreamInputTtsCallback. |
seed | number | Tidak | Seed acak yang digunakan untuk memvariasikan hasil sintesis. Jika versi model, teks, suara, dan semua parameter lainnya sama, seed yang sama akan menghasilkan hasil yang sama. Default: 0. Rentang yang valid: [0, 65535].cosyvoice-v1 tidak mendukung field ini. |
language_hints | string[] | Tidak | Bahasa sintesis target. Pengaturan ini meningkatkan sintesis dan tidak bergantung pada bahasa audio sampel yang digunakan untuk kloning suara. Untuk mengatur bahasa sumber tugas kloning suara, lihat referensi API Voice Cloning. Versi saat ini hanya menggunakan elemen array pertama, jadi berikan satu nilai. Gunakan field ini ketika pembacaan angka, singkatan, atau simbol tidak sesuai harapan, atau ketika sintesis dalam bahasa yang kurang umum terdengar tidak wajar. Misalnya, ini dapat membuat "hello, this is 110" dibaca sebagai “one one zero” dalam bahasa Inggris alih-alih pembacaan bahasa Tiongkok, atau membuat @ dibaca sebagai “at”.
Nilai yang valid Nilai yang didukung: zh, en, fr, de, ja, ko, ru, pt, th, id, vi, es, it, ms, fil, dan ar.cosyvoice-v1 tidak mendukung field ini. |
instruction | string | Tidak | Instruksi yang mengontrol dialek, emosi, atau peran. Lihat Kontrol instruksi. |
enable_aigc_tag | boolean | Tidak | Apakah akan menyematkan tag AIGC tak terlihat. Default: false.Didukung oleh cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2. |
aigc_propagator | string | Tidak | ContentPropagator dalam tag AIGC. Hanya berlaku ketika enable_aigc_tag adalah true. Default: UID Alibaba Cloud. Model yang didukung sama dengan untuk enable_aigc_tag. |
aigc_propagate_id | string | Tidak | PropagateID dalam tag AIGC. Hanya berlaku ketika enable_aigc_tag adalah true. Default: ID permintaan saat ini. Model yang didukung sama dengan untuk enable_aigc_tag. |
hot_fix | object | Tidak | Pengaturan hot-fix teks untuk pengucapan kustom dan penggantian teks.cosyvoice-v2 dan cosyvoice-v1 tidak mendukung field ini. |
sendStreamInputTts
startStreamInputTts berhasil. Metode ini tidak mengurai tag SSML. Setelah semua teks dikirim, panggil stopStreamInputTts().
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | string | Teks yang akan disintesis. SSML tidak didukung. Tag SSML dibaca sebagai teks biasa. |
stopStreamInputTts
true(default): Akhiri secara asinkron dan segera kembalikan. TungguSTREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEuntuk memastikan bahwa sintesis telah selesai.false: Blokir hingga semua audio dan peristiwa sintesis selesai diterima. Waktu habis dikendalikan olehcomplete_waiting_ms.
| Parameter | Tipe | Deskripsi |
|---|---|---|
flag_async | boolean | Apakah akan mengakhiri secara asinkron. Default: true. true mengembalikan tanpa menunggu respons server. false memblokir hingga sintesis selesai. |
cancelStreamInputTts
cancelStreamInputTtsKeepConnection
playStreamInputTts
startStreamInputTts terlebih dahulu, dan jangan panggil metode stop setelahnya. SSML diaktifkan secara default. Jika enable_ssml diatur secara eksplisit, nilai tersebut akan diutamakan. Jangan panggil metode ini pada thread UI.
callback, ticket, parameters, session_id, log_level, dan save_log didefinisikan dalam startStreamInputTts. text adalah teks yang akan disintesis dan mendukung SSML. Metode ini mengembalikan kode error.
asyncPlayStreamInputTts
startStreamInputTts terlebih dahulu, dan jangan panggil metode stop setelahnya. SSML diaktifkan secara default. Jika enable_ssml diatur secara eksplisit, nilai tersebut akan diutamakan.
callback, ticket, parameters, session_id, log_level, dan save_log didefinisikan dalam startStreamInputTts. text adalah teks yang akan disintesis dan mendukung SSML. Metode ini mengembalikan kode error.
releaseStreamInputTts
INativeStreamInputTtsCallback
onStreamInputTtsEventCallback
| Parameter | Tipe | Deskripsi |
|---|---|---|
event | StreamInputTtsEvent | Peristiwa sintesis. |
task_id | string | ID tugas sintesis. |
session_id | string | ID sesi. Nilai yang ditentukan klien dikembalikan tanpa perubahan. Jika tidak, server akan membuatnya. |
ret_code | number | Kode error. Hanya valid untuk peristiwa tugas gagal. |
error_msg | string | Pesan error. Hanya valid untuk peristiwa tugas gagal. |
timestamp | string | Hasil stempel waktu. |
all_response | string | Respons server lengkap sebagai string JSON. Uraikan untuk penggunaan, stempel waktu, dan detail error. |
onStreamInputTtsDataCallback
- Data MP3 dan Opus memerlukan decoder streaming. Sebagai alternatif, atur
enable_audio_decoderketrueagar SDK mengembalikan PCM. - Untuk merakit file yang lengkap, tambahkan data callback secara berurutan.
- Untuk WAV dan MP3, hanya callback pertama yang berisi header file. Setiap frame Opus adalah halaman Ogg independen dan dapat digabungkan secara berurutan.
StreamInputTtsEvent
| Event | Deskripsi |
|---|---|
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | Server telah menerima permintaan dan mulai memproses. Data audio pertama biasanya tiba melalui onStreamInputTtsDataCallback segera setelah peristiwa ini. |
STREAM_INPUT_TTS_EVENT_SENTENCE_BEGIN | Server telah mulai mensintesis sebuah ucapan. |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | Informasi progres sintesis, termasuk informasi penagihan dan stempel waktu. |
STREAM_INPUT_TTS_EVENT_SENTENCE_END | Server telah menyelesaikan sintesis dari sebuah ucapan. |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | Server telah mengembalikan semua data audio. onStreamInputTtsEventCallback tidak dipanggil setelah peristiwa ini, yang merupakan sinyal akhir-stream yang eksplisit. Peristiwa ini tidak menunjukkan bahwa pemutaran lokal telah selesai. |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | Sintesis gagal. Ambil task_id, error_code, dan error_message dari all_response, atau gunakan ret_code dan error_msg argumen callback. |
Kode contoh
- Dapatkan API key. Jangan melakukan hard-code API key berumur panjang di aplikasi klien. Kami menyarankan agar server aplikasi Anda mendapatkan API key sementara dan mengirimkannya ke klien.
- Unduh paket SDK terbaru. Ekstrak paket tersebut, salin
entry/libs/neonui.harke direktorientry/libsaplikasi Anda, dan tambahkan dependensi keentry/oh-package.json5:
- Buka proyek contoh dari paket SDK di DevEco Studio. Halaman contohnya adalah
entry/src/main/ets/pages/dashscope/DashCosyVoiceStreamTtsPage.ets. Konfigurasikan API key dan jalankan proyek.
DashCosyVoiceStreamTtsPage.ets dalam paket SDK.
playStreamInputTts atau asyncPlayStreamInputTts:
Fitur lanjutan
SSML
Tujuan: Sematkan tag XML dalam teks untuk mengontrol pengucapan, kecepatan bicara, jeda, dan detail sintesis lainnya.
Batasan: Hanya API satu kali playStreamInputTts dan asyncPlayStreamInputTts yang mendukung SSML. API input streaming sendStreamInputTts tidak mendukungnya.
Penggunaan: SDK mengaktifkan SSML secara default untuk playStreamInputTts dan asyncPlayStreamInputTts. Berikan teks SSML di text. Untuk informasi selengkapnya, lihat SSML and LaTeX.
Ekspresi matematika
Tujuan: Membuat model membaca rumus dan ekspresi matematika umum dengan benar.
Penggunaan: Berikan teks yang berisi ekspresi matematis berformat LaTeX di text. Untuk sintaks yang didukung, lihat LaTeX text-to-speech.