Skip to main content
Qwen-Audio-TTS

Qwen-Audio-TTS Android SDK

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.
  1. playStreamInputTts() atau asyncPlayStreamInputTts() — 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.
  2. onStreamInputTtsDataCallback() — menerima data audio.
  3. STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE — sintesis selesai.
Input streaming cocok untuk percakapan waktu nyata dan skenario "speak as you go" bentuk panjang. SSML tidak didukung dalam mode ini.
  1. startStreamInputTts() — menginisialisasi SDK dan mengonfigurasi parameter callback dan koneksi.
  2. sendStreamInputTts() — mengirim teks secara berkelanjutan saat teks tersedia.
  3. onStreamInputTtsDataCallback() — menerima data audio.
  4. stopStreamInputTts() atau asyncStopStreamInputTts() — 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.
  5. 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:
public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback,
                                            String ticket,
                                            String parameters,
                                            String session_id,
                                            int log_level,
                                            boolean save_log)
Parameter:
ParameterTipeDeskripsi
callbackINativeStreamInputTtsCallbackImplementasi Anda untuk antarmuka callback peristiwa dan data.
ticketStringString JSON yang menyimpan pengaturan autentikasi, koneksi, dan debug. Lihat referensi parameter ticket di bawah ini.
parametersStringString JSON yang mengontrol output sintesis ucapan. Lihat referensi parameter di bawah ini.
session_idStringID sesi yang ditentukan klien. Jika diabaikan, server akan membuatnya secara otomatis.
log_levelintMengontrol tingkat detail log internal SDK.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 pencatatan log)
save_logbooleanApakah 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.
Nilai pengembalian: Mengembalikan kode kesalahan. contoh JSON tiket:
{
    "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
    "apikey": "sk-****",
    "device_id": "my_device_id"
}
parameter tiket:
ParameterTipeWajibDeskripsi
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 Anda. Untuk membatasi dampak jika key berumur panjang terekspos, gunakan API key sementara berumur pendek sebagai gantinya.
device_idStringYaPengidentifikasi 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_msintTidakSetelah Anda memanggil metode stop, waktu dalam milidetik untuk menunggu event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE sebelum waktu habis.Default: 10000.
debug_pathStringTidakJalur 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_sizeintTidakUkuran 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_levelintTidakTingkat filter untuk log yang dikirimkan 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 pencatatan log)
Catatan: 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.
contoh JSON parameter:
{
    "model": "qwen-audio-3.0-tts-flash",
    "voice": "longanlingxi",
    "format": "mp3",
    "volume": 50,
    "rate": 1.0,
    "pitch": 1.0
}
referensi parameter:
ParameterTipeWajibDeskripsi
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_decoderbooleanTidakApakah 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.
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.
Timestamp kata dikembalikan dalam field all_response dari INativeStreamInputTtsCallback.
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_hintsString[]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, panggil metode ini untuk mendorong teks secara berkelanjutan. Ketika Anda telah mengirim semua teks, panggil stopStreamInputTts atau asyncStopStreamInputTts untuk mengakhiri input. Signature metode:
public synchronized int sendStreamInputTts(String text)
Parameter:
ParameterTipeDeskripsi
textStringTeks yang akan disintesis. SSML tidak didukung. Tag SSML dalam input dibaca dengan keras sebagai teks biasa alih-alih diuraikan.
Nilai pengembalian: Mengembalikan kode kesalahan.

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:
public synchronized int stopStreamInputTts()
Nilai pengembalian: Mengembalikan kode kesalahan.

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:
public synchronized int asyncStopStreamInputTts()
Nilai pengembalian: Mengembalikan kode kesalahan.

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:
public synchronized int cancelStreamInputTts()
Nilai pengembalian: Mengembalikan kode kesalahan.

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:
public synchronized int playStreamInputTts(INativeStreamInputTtsCallback callback,
                                           String ticket,
                                           String parameters,
                                           String text,
                                           String session_id,
                                           int log_level,
                                           boolean save_log)
Parameter: Parameter callback, ticket, dan parameter bersama lainnya memiliki arti yang sama seperti pada startStreamInputTts.
ParameterTipeDeskripsi
textStringTeks yang akan disintesis. Mendukung SSML.
Nilai pengembalian: Mengembalikan kode kesalahan.

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:
public synchronized int asyncPlayStreamInputTts(INativeStreamInputTtsCallback callback,
                                           String ticket,
                                           String parameters,
                                           String text,
                                           String session_id,
                                           int log_level,
                                           boolean save_log)
Parameter: Parameter callback, ticket, dan parameter bersama lainnya memiliki arti yang sama seperti pada startStreamInputTts.
ParameterTipeDeskripsi
textStringTeks yang akan disintesis. Mendukung SSML.
Nilai pengembalian: Mengembalikan kode kesalahan.

INativeStreamInputTtsCallback

Antarmuka callback TTS streaming Qwen-Audio-TTS mengirimkan event sintesis, data audio, dan log.

onStreamInputTtsEventCallback: menerima peristiwa

Signature metode:
void onStreamInputTtsEventCallback(StreamInputTtsEvent event,
                                   String task_id,
                                   String session_id,
                                   int ret_code,
                                   String error_msg,
                                   String timestamp,
                                   String all_response);
Parameter:
ParameterTipeDeskripsi
eventStreamInputTtsEventPeristiwa yang sedang dikirimkan.
task_idStringID tugas sintesis.
session_idStringID sesi. Dikembalikan sesuai yang diberikan oleh klien; dibuat oleh server jika diabaikan.
ret_codeintKode error. Hanya valid dengan event STREAM_INPUT_TTS_EVENT_TASK_FAILED.
error_msgStringPesan error. Hanya valid dengan event STREAM_INPUT_TTS_EVENT_TASK_FAILED.
timestampStringInformasi stempel waktu untuk hasil sintesis.
all_responseStringRespons 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:
void onStreamInputTtsDataCallback(byte[] data);
Parameter:
ParameterTipeDeskripsi
databyte[]Data audio untuk segmen saat ini. Gunakan untuk:
  • Rakit file audio yang lengkap dan putar kembali.
  • Putar secara real-time dengan pemutar yang mendukung streaming.
Catatan:
  • Untuk format terkompresi seperti mp3 dan opus, pemutaran tersegmentasi memerlukan pemutar streaming. Dekoding dapat gagal jika Anda memutar segmen frame demi frame.
  • Untuk menyusun file lengkap, buka dalam mode append dan tulis setiap segmen secara berurutan.
  • Untuk wav dan mp3, hanya pemanggilan onStreamInputTtsDataCallback pertama yang berisi header file. Pemanggilan berikutnya membawa audio mentah. Gabungkan semua chunk buffer secara berurutan. Untuk opus, setiap frame adalah halaman Ogg yang mandiri dan dapat digabungkan secara langsung.

onStreamInputTtsLogTrackCallback: menerima log pelacakan

Gunakan callback ini untuk menerima log internal terperinci dari SDK, yang membantu dalam pemecahan masalah dan debugging. Signature metode:
default void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log)

StreamInputTtsEvent

Enumerasi jenis peristiwa untuk sintesis suara streaming Qwen-Audio-TTS.
EventDeskripsi
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTEDServer telah menerima permintaan dan mulai memproses. Tidak lama setelah event ini, onStreamInputTtsDataCallback mulai mengembalikan data audio pertama.
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESISInformasi runtime tentang sintesis, termasuk data penagihan.
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETEServer 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_FAILEDTugas gagal. Baca field all_response dari INativeStreamInputTtsCallback untuk task_id, error_code, dan error_message guna mengidentifikasi penyebabnya.
{
    "header": {
        "task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
        "event": "task-failed",
        "error_code": "InvalidParameter",
        "error_message": "[tts:]Engine return error code: 418",
        "attributes": {}
    },
    "payload": {}
}

Kode contoh

  1. 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.
  2. 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 dari android_libs dan header dari android_include di 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

ModeDeskripsi
Input teks satu kaliLangkah:
  1. Inisialisasi SDK dan komponen pemutar.
  2. Konfigurasikan parameter untuk skenario Anda.
  3. Panggil playStreamInputTts atau asyncPlayStreamInputTts untuk mengirimkan teks dan memulai sintesis.
  4. Menerima event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE — sintesis selesai.
Kasus penggunaan:
  • Sintesis teks pendek
  • Skenario yang memerlukan markup SSML
Input teks streamingLangkah:
  1. Inisialisasi SDK dan komponen pemutar.
  2. Konfigurasikan parameter untuk skenario Anda.
  3. Panggil startStreamInputTts untuk memulai sintesis streaming.
  4. Panggil sendStreamInputTts untuk mengirim teks secara berkelanjutan saat teks tersedia.
  5. Terima data audio biner di onStreamInputTtsDataCallback.
  6. Panggil stopStreamInputTts atau asyncStopStreamInputTts untuk mengakhiri input dan menunggu sintesis selesai.
  7. Menerima event STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE — sintesis selesai.
Kasus penggunaan:
  • Percakapan real-time dan skenario bentuk panjang "speak as you go"
  • Markup SSML tidak didukung dalam mode ini

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