Ubah teks menjadi ucapan yang ekspresif dan berkualitas tinggi di aplikasi Android Anda dengan SDK text-to-speech (TTS) Qwen-Audio-TTS.
NativeNui
SDK mendukung beberapa instance NativeNui dan menggunakan callback untuk mengirimkan event sintesis.
Sorotan arsitektur:
-
Beberapa instance: Buat instance dengan memanggil
new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS). -
Berbasis callback: Terima event dan data audio melalui antarmuka
INativeStreamInputTtsCallback. -
Jenis peristiwa:
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED: Tugas sintesis telah dimulai.onStreamInputTtsDataCallback: Data audio dikirimkan.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE: Tugas sintesis telah selesai.STREAM_INPUT_TTS_EVENT_TASK_FAILED: Tugas sintesis telah gagal.
Alur penggunaan
Qwen-Audio-TTS mendukung dua mode pemanggilan: input satu kali dan input streaming.
Input satu kali cocok untuk teks pendek dan skenario apa pun yang menggunakan markup SSML.
playStreamInputTts()atauasyncPlayStreamInputTts()— mengirim teks lengkap dan memulai sintesis. Metode pertama bersifat sinkron dan mengembalikan nilai setelah sintesis selesai; metode kedua bersifat asinkron dan mengembalikan nilai segera setelah sintesis dimulai.onStreamInputTtsDataCallback()— menerima data audio.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— sintesis selesai.
startStreamInputTts()— menginisialisasi SDK dan mengonfigurasi parameter callback dan koneksi.sendStreamInputTts()— mengirim teks secara berkelanjutan saat teks tersedia.onStreamInputTtsDataCallback()— menerima data audio.stopStreamInputTts()atauasyncStopStreamInputTts()— mengirim permintaan akhir sintesis. Metode pertama bersifat sinkron dan mengembalikan nilai setelah sintesis selesai; metode kedua bersifat asinkron dan mengembalikan nilai segera setelah permintaan dikirim.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— sintesis selesai.
startStreamInputTts
Memulai sintesis streaming dua arah, membuka koneksi ke layanan, dan mendaftarkan callback untuk event dan data audio.
Metode ini dapat memblokir. Panggil pada thread non-UI.
Signature metode:
| Parameter | Tipe | Deskripsi |
|---|---|---|
callback | INativeStreamInputTtsCallback | Implementasi Anda untuk antarmuka callback peristiwa dan data. |
ticket | String | String JSON yang menyimpan pengaturan autentikasi, koneksi, dan debug. Lihat referensi parameter ticket di bawah ini. |
parameters | String | String JSON yang mengontrol output sintesis ucapan. Lihat referensi parameter di bawah ini. |
session_id | String | ID sesi yang ditentukan klien. Jika diabaikan, server akan membuatnya secara otomatis. |
log_level | int | Mengontrol tingkat detail log internal SDK.Nilai yang valid:
|
save_log | boolean | Apakah akan menulis log ke file lokal. Jika true, atur debug_path dalam ticket untuk menentukan tujuan, dan secara opsional atur max_log_file_size untuk membatasi ukuran file. |
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
url | String | Ya | Alamat layanan:
{WorkspaceId} dengan ID Workspace Anda yang sebenarnya. |
apikey | String | Ya | API key Anda. Untuk membatasi dampak jika key berumur panjang terekspos, gunakan API key sementara berumur pendek sebagai gantinya. |
device_id | String | Ya | Pengidentifikasi unik untuk pengguna akhir. Atur ke ID pengguna dalam aplikasi Anda atau ke pengidentifikasi perangkat yang dibuat klien. ID ini terutama digunakan untuk korelasi log dan pemecahan masalah. |
complete_waiting_ms | int | Tidak | Setelah Anda memanggil metode stop, waktu dalam milidetik untuk menunggu event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE sebelum waktu habis.Default: 10000. |
debug_path | String | Tidak | Jalur lokal tempat file log ditulis.Parameter ini hanya berlaku ketika save_log diatur ke true untuk startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts. Dalam kasus tersebut, jalur wajib diisi; jika tidak, pemanggilan akan mengembalikan error.Paling banyak dua file log disimpan pada perangkat. |
max_log_file_size | int | Tidak | Ukuran file log maksimum dalam byte.Parameter ini hanya berlaku ketika save_log diatur ke true untuk startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts.Default: 104857600 (100 × 1024 × 1024 byte, atau 100 MiB). |
log_track_level | int | Tidak | Tingkat filter untuk log yang dikirimkan melalui callback log (onStreamInputTtsLogTrackCallback).Default: 2.Nilai yang valid:
log_track_level bekerja bersama dengan log_level (diatur pada startStreamInputTts, playStreamInputTts, atau asyncPlayStreamInputTts) untuk menentukan log mana yang mencapai callback. Entri log harus berada pada atau di atas log_track_level dan log_level agar dapat dikirim. Misalnya, jika log_track_level adalah 2 (INFO) dan log_level adalah 3 (WARNING), hanya WARNING dan di atasnya (level >= 3) yang mencapai callback. |
| Parameter | 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:
|
enable_audio_decoder | boolean | Tidak | Apakah akan mengaktifkan decoder internal SDK. Default: false.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]. |
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 hasil kloning didukung. Untuk suara sistem yang didukung, lihat Qwen-Audio-TTS voice list.
Timestamp kata dikembalikan dalam field all_response dari |
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]. |
language_hints | String[] | Tidak | 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:
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. |
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. |
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. |
hot_fix | object | Tidak | Konfigurasi hot-fix teks untuk menyesuaikan pengucapan kata-kata tertentu atau mengganti teks sebelum sintesis.Field:
|
sendStreamInputTts
Mengirim teks yang akan disintesis. Gunakan metode ini bersama dengan startStreamInputTts.
Setelah Anda memanggil startStreamInputTts, panggil metode ini untuk mendorong teks secara berkelanjutan.
Ketika Anda telah mengirim semua teks, panggil stopStreamInputTts atau asyncStopStreamInputTts untuk mengakhiri input.
Signature metode:
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | String | Teks yang akan disintesis. SSML tidak didukung. Tag SSML dalam input dibaca dengan keras sebagai teks biasa alih-alih diuraikan. |
stopStreamInputTts
Metode sinkron yang memberi tahu server bahwa semua teks telah dikirim dan memblokir hingga semua audio disintesis dan event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE diterima.
Waktu tunggu timeout dikontrol oleh complete_waiting_ms.
Signature metode:
asyncStopStreamInputTts
Metode asinkron yang memberi tahu server bahwa semua teks telah dikirim. Panggilan langsung kembali, dan sintesis berlanjut di latar belakang.
Gunakan event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE untuk mendeteksi kapan sintesis selesai.
Signature metode:
cancelStreamInputTts
Segera menutup koneksi ke server dan membatalkan tugas sintesis saat ini. Tidak ada callback audio lebih lanjut yang dikirimkan setelah panggilan ini.
Signature metode:
playStreamInputTts
Metode sintesis satu kali yang sinkron. Panggilan mengirim teks, memblokir saat audio diterima, dan kembali hanya setelah sintesis selesai. Anda tidak perlu memanggil metode stop setelahnya.
SSML diaktifkan secara default untuk metode ini. Untuk menggantinya, atur enable_ssml secara eksplisit.
Panggil metode ini pada thread non-UI.
Signature metode:
startStreamInputTts.
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | String | Teks yang akan disintesis. Mendukung SSML. |
asyncPlayStreamInputTts
Metode sintesis satu kali yang asinkron. Panggilan langsung kembali, sintesis berjalan di latar belakang, dan hasil dikirimkan melalui callback. Anda tidak perlu memanggil metode stop setelahnya.
SSML diaktifkan secara default untuk metode ini. Untuk menggantinya, atur enable_ssml secara eksplisit.
Signature metode:
startStreamInputTts.
| Parameter | Tipe | Deskripsi |
|---|---|---|
text | String | Teks yang akan disintesis. Mendukung SSML. |
INativeStreamInputTtsCallback
Antarmuka callback TTS streaming Qwen-Audio-TTS mengirimkan event sintesis, data audio, dan log.
onStreamInputTtsEventCallback: menerima peristiwa
Signature metode:
| Parameter | Tipe | Deskripsi |
|---|---|---|
event | StreamInputTtsEvent | Peristiwa yang sedang dikirimkan. |
task_id | String | ID tugas sintesis. |
session_id | String | ID sesi. Dikembalikan sesuai yang diberikan oleh klien; dibuat oleh server jika diabaikan. |
ret_code | int | Kode error. Hanya valid dengan event STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
error_msg | String | Pesan error. Hanya valid dengan event STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
timestamp | String | Informasi stempel waktu untuk hasil sintesis. |
all_response | String | Respons JSON lengkap. Uraikan untuk mengekstrak data tambahan apa pun yang Anda butuhkan. |
onStreamInputTtsDataCallback: menerima data audio
SDK memanggil callback ini berulang kali selama sintesis. Baca data audio dari callback.
Signature metode:
| Parameter | Tipe | Deskripsi |
|---|---|---|
data | byte[] | Data audio untuk segmen saat ini. Gunakan untuk:
|
onStreamInputTtsLogTrackCallback: menerima log pelacakan
Gunakan callback ini untuk menerima log internal terperinci dari SDK, yang membantu dalam pemecahan masalah dan debugging.
Signature metode:
StreamInputTtsEvent
Enumerasi jenis peristiwa untuk sintesis suara streaming Qwen-Audio-TTS.
| Event | Deskripsi |
|---|---|
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | Server telah menerima permintaan dan mulai memproses. Tidak lama setelah event ini, onStreamInputTtsDataCallback mulai mengembalikan data audio pertama. |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | Informasi runtime tentang sintesis, termasuk data penagihan. |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | Server telah mengirim semua data audio, dan onStreamInputTtsEventCallback tidak akan dipanggil lagi. Event ini adalah sinyal eksplisit bahwa stream audio telah berakhir. |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | Tugas gagal. Baca field all_response dari INativeStreamInputTtsCallback untuk task_id, error_code, dan error_message guna mengidentifikasi penyebabnya. |
Kode contoh
-
Dapatkan API key: Dapatkan API key. Untuk keamanan, simpan API key dalam variabel lingkungan.
Gunakan API key sementara ketika Anda perlu memberikan akses sementara ke aplikasi atau pengguna pihak ketiga, atau ketika Anda want mengontrol operasi berisiko tinggi seperti mengakses atau menghapus data sensitif secara ketat. API key sementara berlaku selama 60 detik, setelah itu Anda harus meminta yang baru.
-
Unduh SDK dan jalankan kode contoh:
- Unduh paket SDK terbaru.
- Ekstrak paket. SDK format AAR ada di
app/libs— tambahkan ke dependensi proyek Anda. Untuk integrasi C++ Android, dapatkan shared library dariandroid_libsdan header dariandroid_includedi dalam ZIP. - Buka proyek di Android Studio. Kode contoh ada di
DashQwen-Audio-TTSStreamTtsActivity.java— ganti API key dengan milik Anda sendiri untuk mencoba fitur ini.
Mode pemanggilan
| Mode | Deskripsi |
|---|---|
Input teks satu kali | Langkah:
|
Input teks streaming | Langkah:
|
Fitur lanjutan
Markup SSML
Tujuan: Sematkan tag XML dalam teks untuk menyempurnakan pengucapan, kecepatan bicara, jeda, dan detail prosodi lainnya.
Batasan: SSML hanya didukung dengan One-shot text input (metode playStreamInputTts atau asyncPlayStreamInputTts). Streaming text input (metode sendStreamInputTts) tidak mendukung SSML.
Penggunaan: Ketika Anda memanggil playStreamInputTts atau asyncPlayStreamInputTts, SDK mengaktifkan SSML secara otomatis. Berikan teks yang berisi tag SSML melalui parameter text.
Untuk informasi lebih lanjut, lihat SSML.
Ekspresi matematika
Tujuan: Membiarkan model membaca rumus dan ekspresi matematika umum dengan keras secara benar.
Penggunaan: Berikan teks yang berisi ekspresi matematika berformat LaTeX melalui parameter text. Untuk informasi lebih lanjut, lihat Mengonversi rumus LaTeX ke ucapan (hanya bahasa Mandarin).