全部产品
Search
文档中心

Alibaba Cloud Model Studio:Referensi API kloning suara Qwen-TTS

更新时间:Jan 21, 2026

Kloning suara menggunakan model untuk mengekstraksi fitur vokal dari sampel audio tanpa memerlukan pelatihan apa pun. Dengan menyediakan klip audio berdurasi 10 hingga 20 detik, Anda dapat menghasilkan suara kustom yang terdengar alami dan sangat mirip dengan suara aslinya. Kloning suara dan sintesis suara merupakan dua langkah berurutan. Dokumen ini menjelaskan parameter dan detail API untuk kloning suara. Untuk sintesis suara, lihat Sintesis suara Real-time - Qwen.

Panduan pengguna: Untuk ikhtisar model dan saran pemilihan, lihat Sintesis suara Real-time - Qwen.

Persyaratan audio

Hasil kloning yang optimal memerlukan input audio berkualitas tinggi.

Item

Persyaratan

Format yang didukung

WAV (16-bit), MP3, M4A

Durasi audio

Disarankan: 10 hingga 20 detik. Durasi maksimum adalah 60 detik.

Ukuran file

< 10 MB

Tingkat sampel

≥ 24 kHz

Saluran suara

Mono

Konten

Audio harus berisi minimal 3 detik pembacaan yang jelas dan berkelanjutan tanpa suara latar. Sisa audio hanya boleh berisi jeda pendek (≤ 2 detik). Seluruh klip audio harus bebas dari musik latar, kebisingan, atau suara lainnya untuk memastikan kualitas konten bacaan utama. Gunakan audio ucapan normal sebagai input. Jangan unggah lagu atau rekaman bernyanyi untuk memastikan akurasi dan kegunaan suara hasil kloning.

Bahasa

Cina (zh), Inggris (en), Jerman (de), Italia (it), Portugis (pt), Spanyol (es), Jepang (ja), Korea (ko), Prancis (fr), dan Rusia (ru)

Memulai: Dari kloning hingga sintesis

image

1. Alur kerja

Kloning suara dan sintesis suara adalah dua langkah berbeda namun saling terkait yang mengikuti alur kerja "buat dulu, lalu gunakan":

  1. Buat suara

    Panggil API Buat suara dan unggah klip audio. Sistem menganalisis audio dan membuat suara kloning kustom. Pada langkah ini, Anda harus menggunakan parameter target_model untuk menentukan model sintesis suara yang akan digunakan bersama suara yang dibuat.

    Jika Anda telah membuat suara sebelumnya, Anda dapat memanggil API Kueri daftar suara untuk mengambilnya dan melewati langkah ini.

  2. Gunakan suara untuk sintesis suara

    Panggil API sintesis suara dan masukkan ID suara yang diperoleh pada langkah sebelumnya. Model sintesis suara yang ditentukan pada langkah ini harus sesuai dengan target_model yang ditentukan saat pembuatan suara.

2. Konfigurasi model dan persiapan

Pilih model yang sesuai dan lengkapi persiapan yang diperlukan.

Konfigurasi model

Saat melakukan kloning suara, tentukan dua model berikut:

  • Model kloning suara: qwen-voice-enrollment

  • Model sintesis suara yang akan digunakan bersama suara tersebut:

    • qwen3-tts-vc-realtime-2026-01-15

    • qwen3-tts-vc-realtime-2025-11-27

Persiapan

  1. Dapatkan Kunci API: Dapatkan Kunci API. Untuk keamanan, atur Kunci API sebagai variabel lingkungan.

  2. Instal SDK: Pastikan Anda telah menginstal versi terbaru SDK DashScope.

  3. Persiapkan audio untuk kloning: Audio harus memenuhi persyaratan audio.

3. Contoh end-to-end

Contoh berikut menunjukkan cara menggunakan suara kloning kustom untuk sintesis suara. Output audio hasil sintesis sangat mirip dengan suara aslinya.

  • Prinsip utama: target_model yang ditentukan saat kloning suara harus sesuai dengan model yang digunakan dalam panggilan API sintesis suara selanjutnya. Jika tidak, sintesis akan gagal.

  • Contoh ini menggunakan file audio lokal voice.mp3 untuk kloning suara. Saat menjalankan kode, gantilah file ini dengan file audio Anda sendiri.

Python

# coding=utf-8
# Petunjuk instalasi pyaudio:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   atau
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import pyaudio
import os
import requests
import base64
import pathlib
import threading
import time
import dashscope  # Versi SDK Python DashScope harus 1.23.9 atau lebih baru.
from dashscope.audio.qwen_tts_realtime import QwenTtsRealtime, QwenTtsRealtimeCallback, AudioFormat

# ======= Konfigurasi konstan =======
DEFAULT_TARGET_MODEL = "qwen3-tts-vc-realtime-2026-01-15"  # Model yang sama harus digunakan untuk kloning suara dan sintesis suara.
DEFAULT_PREFERRED_NAME = "guanyu"
DEFAULT_AUDIO_MIME_TYPE = "audio/mpeg"
VOICE_FILE_PATH = "voice.mp3"  # Jalur relatif file audio lokal untuk kloning suara.

TEXT_TO_SYNTHESIZE = [
    'Benar? Saya sangat suka supermarket seperti ini,',
    'terutama saat Tahun Baru.',
    'Pergi ke supermarket',
    'benar-benar membuat saya merasa',
    'sangat, sangat senang!',
    'Saya ingin membeli banyak sekali barang!'
]

def create_voice(file_path: str,
                 target_model: str = DEFAULT_TARGET_MODEL,
                 preferred_name: str = DEFAULT_PREFERRED_NAME,
                 audio_mime_type: str = DEFAULT_AUDIO_MIME_TYPE) -> str:
    """
    Buat suara dan kembalikan parameter suara.
    """
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key/.
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")

    file_path_obj = pathlib.Path(file_path)
    if not file_path_obj.exists():
        raise FileNotFoundError(f"File audio tidak ditemukan: {file_path}")

    base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"

    # URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
    payload = {
        "model": "qwen-voice-enrollment", # Jangan ubah nilai ini.
        "input": {
            "action": "create",
            "target_model": target_model,
            "preferred_name": preferred_name,
            "audio": {"data": data_uri}
        }
    }
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    resp = requests.post(url, json=payload, headers=headers)
    if resp.status_code != 200:
        raise RuntimeError(f"Gagal membuat suara: {resp.status_code}, {resp.text}")

    try:
        return resp.json()["output"]["voice"]
    except (KeyError, ValueError) as e:
        raise RuntimeError(f"Gagal mengurai respons suara: {e}")

def init_dashscope_api_key():
    """
    Inisialisasi Kunci API untuk SDK DashScope.
    """
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key/.
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

# ======= Kelas callback =======
class MyCallback(QwenTtsRealtimeCallback):
    """
    Callback streaming TTS kustom.
    """
    def __init__(self):
        self.complete_event = threading.Event()
        self._player = pyaudio.PyAudio()
        self._stream = self._player.open(
            format=pyaudio.paInt16, channels=1, rate=24000, output=True
        )

    def on_open(self) -> None:
        print('[TTS] Koneksi berhasil dibuat.')

    def on_close(self, close_status_code, close_msg) -> None:
        self._stream.stop_stream()
        self._stream.close()
        self._player.terminate()
        print(f'[TTS] Koneksi ditutup code={close_status_code}, msg={close_msg}')

    def on_event(self, response: dict) -> None:
        try:
            event_type = response.get('type', '')
            if event_type == 'session.created':
                print(f'[TTS] Sesi dimulai: {response["session"]["id"]}')
            elif event_type == 'response.audio.delta':
                audio_data = base64.b64decode(response['delta'])
                self._stream.write(audio_data)
            elif event_type == 'response.done':
                print(f'[TTS] Respons selesai, ID Respons: {qwen_tts_realtime.get_last_response_id()}')
            elif event_type == 'session.finished':
                print('[TTS] Sesi selesai.')
                self.complete_event.set()
        except Exception as e:
            print(f'[Error] Gagal memproses event callback: {e}')

    def wait_for_finished(self):
        self.complete_event.wait()

# ======= Logika eksekusi utama =======
if __name__ == '__main__':
    init_dashscope_api_key()
    print('[System] Menginisialisasi Qwen TTS Realtime ...')

    callback = MyCallback()
    qwen_tts_realtime = QwenTtsRealtime(
        model=DEFAULT_TARGET_MODEL,
        callback=callback,
        # URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: wss://dashscope.aliyuncs.com/api-ws/v1/realtime
        url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime'
    )
    qwen_tts_realtime.connect()
    
    qwen_tts_realtime.update_session(
        voice=create_voice(VOICE_FILE_PATH), # Ganti parameter suara dengan suara kustom yang dihasilkan melalui kloning.
        response_format=AudioFormat.PCM_24000HZ_MONO_16BIT,
        mode='server_commit'
    )

    for text_chunk in TEXT_TO_SYNTHESIZE:
        print(f'[Kirim teks]: {text_chunk}')
        qwen_tts_realtime.append_text(text_chunk)
        time.sleep(0.1)

    qwen_tts_realtime.finish()
    callback.wait_for_finished()

    print(f'[Metrik] session_id={qwen_tts_realtime.get_session_id()}, '
          f'first_audio_delay={qwen_tts_realtime.get_first_audio_delay()}s')

Java

Impor dependensi Gson. Jika Anda menggunakan Maven atau Gradle, tambahkan dependensi sebagai berikut:

Maven

Tambahkan konten berikut ke file pom.xml:

<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.13.1</version>
</dependency>

Gradle

Tambahkan konten berikut ke file build.gradle:

// https://mvnrepository.com/artifact/com.google.code.gson/gson
implementation("com.google.code.gson:gson:2.13.1")
import com.alibaba.dashscope.audio.qwen_tts_realtime.*;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import com.google.gson.JsonObject;

import javax.sound.sampled.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.Queue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicBoolean;

public class Main {
    // ===== Definisi konstanta =====
    // Model yang sama harus digunakan untuk kloning suara dan sintesis suara.
    private static final String TARGET_MODEL = "qwen3-tts-vc-realtime-2026-01-15";
    private static final String PREFERRED_NAME = "guanyu";
    // Jalur relatif file audio lokal untuk kloning suara.
    private static final String AUDIO_FILE = "voice.mp3";
    private static final String AUDIO_MIME_TYPE = "audio/mpeg";
    private static String[] textToSynthesize = {
            "Benar? Saya sangat suka supermarket seperti ini,",
            "terutama saat Tahun Baru.",
            "Pergi ke supermarket",
            "benar-benar membuat saya merasa",
            "sangat, sangat senang!",
            "Saya ingin membeli banyak sekali barang!"
    };

    // Hasilkan URI data.
    public static String toDataUrl(String filePath) throws IOException {
        byte[] bytes = Files.readAllBytes(Paths.get(filePath));
        String encoded = Base64.getEncoder().encodeToString(bytes);
        return "data:" + AUDIO_MIME_TYPE + ";base64," + encoded;
    }

    // Panggil API untuk membuat suara.
    public static String createVoice() throws Exception {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key/.
        // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        String jsonPayload =
                "{"
                        + "\"model\": \"qwen-voice-enrollment\"," // Jangan ubah nilai ini.
                        + "\"input\": {"
                        +     "\"action\": \"create\","
                        +     "\"target_model\": \"" + TARGET_MODEL + "\","
                        +     "\"preferred_name\": \"" + PREFERRED_NAME + "\","
                        +     "\"audio\": {"
                        +         "\"data\": \"" + toDataUrl(AUDIO_FILE) + "\""
                        +     "}"
                        + "}"
                        + "}";

        HttpURLConnection con = (HttpURLConnection) new URL("https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization").openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("Authorization", "Bearer " + apiKey);
        con.setRequestProperty("Content-Type", "application/json");
        con.setDoOutput(true);

        try (OutputStream os = con.getOutputStream()) {
            os.write(jsonPayload.getBytes(StandardCharsets.UTF_8));
        }

        int status = con.getResponseCode();
        System.out.println("Kode status HTTP: " + status);

        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(status >= 200 && status < 300 ? con.getInputStream() : con.getErrorStream(),
                        StandardCharsets.UTF_8))) {
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                response.append(line);
            }
            System.out.println("Konten respons: " + response);

            if (status == 200) {
                JsonObject jsonObj = new Gson().fromJson(response.toString(), JsonObject.class);
                return jsonObj.getAsJsonObject("output").get("voice").getAsString();
            }
            throw new IOException("Gagal membuat suara: " + status + " - " + response);
        }
    }

    // Kelas pemutar PCM real-time
    public static class RealtimePcmPlayer {
        private int sampleRate;
        private SourceDataLine line;
        private AudioFormat audioFormat;
        private Thread decoderThread;
        private Thread playerThread;
        private AtomicBoolean stopped = new AtomicBoolean(false);
        private Queue<String> b64AudioBuffer = new ConcurrentLinkedQueue<>();
        private Queue<byte[]> RawAudioBuffer = new ConcurrentLinkedQueue<>();

        // Konstruktor menginisialisasi format audio dan jalur audio.
        public RealtimePcmPlayer(int sampleRate) throws LineUnavailableException {
            this.sampleRate = sampleRate;
            this.audioFormat = new AudioFormat(this.sampleRate, 16, 1, true, false);
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
            line = (SourceDataLine) AudioSystem.getLine(info);
            line.open(audioFormat);
            line.start();
            decoderThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (!stopped.get()) {
                        String b64Audio = b64AudioBuffer.poll();
                        if (b64Audio != null) {
                            byte[] rawAudio = Base64.getDecoder().decode(b64Audio);
                            RawAudioBuffer.add(rawAudio);
                        } else {
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            });
            playerThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (!stopped.get()) {
                        byte[] rawAudio = RawAudioBuffer.poll();
                        if (rawAudio != null) {
                            try {
                                playChunk(rawAudio);
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        } else {
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            });
            decoderThread.start();
            playerThread.start();
        }

        // Putar chunk audio dan blokir hingga pemutaran selesai.
        private void playChunk(byte[] chunk) throws IOException, InterruptedException {
            if (chunk == null || chunk.length == 0) return;

            int bytesWritten = 0;
            while (bytesWritten < chunk.length) {
                bytesWritten += line.write(chunk, bytesWritten, chunk.length - bytesWritten);
            }
            int audioLength = chunk.length / (this.sampleRate*2/1000);
            // Tunggu hingga audio dalam buffer selesai diputar.
            Thread.sleep(audioLength - 10);
        }

        public void write(String b64Audio) {
            b64AudioBuffer.add(b64Audio);
        }

        public void cancel() {
            b64AudioBuffer.clear();
            RawAudioBuffer.clear();
        }

        public void waitForComplete() throws InterruptedException {
            while (!b64AudioBuffer.isEmpty() || !RawAudioBuffer.isEmpty()) {
                Thread.sleep(100);
            }
            line.drain();
        }

        public void shutdown() throws InterruptedException {
            stopped.set(true);
            decoderThread.join();
            playerThread.join();
            if (line != null && line.isRunning()) {
                line.drain();
                line.close();
            }
        }
    }

    public static void main(String[] args) throws Exception {
        QwenTtsRealtimeParam param = QwenTtsRealtimeParam.builder()
                .model(TARGET_MODEL)
                // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: wss://dashscope.aliyuncs.com/api-ws/v1/realtime
                .url("wss://dashscope-intl.aliyuncs.com/api-ws/v1/realtime")
                // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key/.
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apikey("sk-xxx")
                .apikey(System.getenv("DASHSCOPE_API_KEY"))
                .build();
        AtomicReference<CountDownLatch> completeLatch = new AtomicReference<>(new CountDownLatch(1));
        final AtomicReference<QwenTtsRealtime> qwenTtsRef = new AtomicReference<>(null);

        // Buat instance pemutar audio real-time.
        RealtimePcmPlayer audioPlayer = new RealtimePcmPlayer(24000);

        QwenTtsRealtime qwenTtsRealtime = new QwenTtsRealtime(param, new QwenTtsRealtimeCallback() {
            @Override
            public void onOpen() {
                // Tangani pembentukan koneksi.
            }
            @Override
            public void onEvent(JsonObject message) {
                String type = message.get("type").getAsString();
                switch(type) {
                    case "session.created":
                        // Tangani pembuatan sesi.
                        break;
                    case "response.audio.delta":
                        String recvAudioB64 = message.get("delta").getAsString();
                        // Putar audio secara real-time.
                        audioPlayer.write(recvAudioB64);
                        break;
                    case "response.done":
                        // Tangani penyelesaian respons.
                        break;
                    case "session.finished":
                        // Tangani penghentian sesi.
                        completeLatch.get().countDown();
                    default:
                        break;
                }
            }
            @Override
            public void onClose(int code, String reason) {
                // Tangani penutupan koneksi.
            }
        });
        qwenTtsRef.set(qwenTtsRealtime);
        try {
            qwenTtsRealtime.connect();
        } catch (NoApiKeyException e) {
            throw new RuntimeException(e);
        }
        QwenTtsRealtimeConfig config = QwenTtsRealtimeConfig.builder()
                .voice(createVoice()) // Ganti parameter suara dengan suara kustom yang dihasilkan melalui kloning.
                .responseFormat(QwenTtsRealtimeAudioFormat.PCM_24000HZ_MONO_16BIT)
                .mode("server_commit")
                .build();
        qwenTtsRealtime.updateSession(config);
        for (String text:textToSynthesize) {
            qwenTtsRealtime.appendText(text);
            Thread.sleep(100);
        }
        qwenTtsRealtime.finish();
        completeLatch.get().await();

        // Tunggu hingga audio selesai diputar lalu matikan pemutar.
        audioPlayer.waitForComplete();
        audioPlayer.shutdown();
        System.exit(0);
    }
}

Referensi API

Saat menggunakan API yang berbeda, pastikan Anda menggunakan akun yang sama untuk semua operasi.

Buat suara

Mengunggah file audio untuk membuat suara kloning kustom.

  • URL

    Tiongkok Daratan:

    POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization

    Internasional:

    POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
  • Header permintaan

    Parameter

    Tipe

    Wajib

    Deskripsi

    Authorization

    string

    Didukung

    Token otentikasi. Formatnya adalah Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.

    Content-Type

    string

    Ya

    Jenis media data dalam badan permintaan. Nilainya tetap application/json.

  • Isi permintaan

    Badan permintaan berikut mencakup semua parameter permintaan. Anda dapat menghilangkan parameter opsional sesuai kebutuhan.

    Penting

    Perhatikan perbedaan antara parameter berikut:

    • model: Model kloning suara. Nilainya tetap qwen-voice-enrollment.

    • target_model: Model sintesis suara yang akan menggunakan suara hasil kloning. Parameter ini harus sesuai dengan model yang digunakan dalam panggilan API sintesis suara selanjutnya. Jika tidak, operasi sintesis akan gagal.

    {
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "create",
            "target_model": "qwen3-tts-vc-realtime-2026-01-15",
            "preferred_name": "guanyu",
            "audio": {
                "data": "https://xxx.wav"
            },
            "text": "Opsional. Teks yang sesuai dengan audio di audio.data.",
            "language": "Opsional. Bahasa audio di audio.data, misalnya zh."
        }
    }
  • Parameter permintaan

    Parameter

    Tipe

    Bawaan

    Wajib

    Deskripsi

    model

    string

    -

    Didukung

    Model kloning suara. Nilainya tetap qwen-voice-enrollment.

    action

    string

    -

    Didukung

    Jenis operasi. Nilainya tetap create.

    target_model

    string

    -

    Ya

    Model sintesis suara yang menggerakkan suara. Model yang didukung:

    • qwen3-tts-vc-realtime-2026-01-15

    • qwen3-tts-vc-realtime-2025-11-27

    Parameter ini harus konsisten dengan model sintesis suara yang Anda gunakan saat memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal.

    preferred_name

    string

    -

    Didukung

    Nama yang mudah dikenali untuk suara tersebut. Nama hanya boleh berisi angka, huruf, dan garis bawah (_), serta tidak boleh lebih dari 16 karakter. Kami menyarankan menggunakan pengenal yang terkait dengan peran atau skenario.

    Kata kunci ini muncul dalam nama suara hasil kloning. Misalnya, jika kata kuncinya adalah "guanyu", nama suara akhirnya adalah "qwen-tts-vc-guanyu-voice-20250812105009984-838b".

    audio.data

    string

    -

    Didukung

    Audio untuk kloning. Saat merekam audio, ikuti Panduan perekaman. Audio harus memenuhi persyaratan audio.

    Anda dapat mengirimkan data audio dengan salah satu dari dua cara berikut:

    1. Data URL

      Format: data:<jenismedia>;base64,<data>

      • <jenismedia>: Jenis Multipurpose Internet Mail Extensions (MIME)

        • WAV: audio/wav

        • MP3: audio/mpeg

        • M4A: audio/mp4

      • <data>: Data audio dalam bentuk string yang dikodekan Base64.

        Pengkodean Base64 meningkatkan ukuran file. Kendalikan ukuran file sumber agar file yang dikodekan tetap lebih kecil dari 10 MB.

      • Contoh: data:audio/wav;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5LjEwMAAAAAAAAAAAAAAA//PAxABQ/BXRbMPe4IQAhl9

        Klik untuk melihat contoh kode

        import base64, pathlib
        
        # input.mp3 adalah file audio lokal untuk kloning suara. Gantilah dengan jalur file audio Anda dan pastikan memenuhi persyaratan audio.
        file_path = pathlib.Path("input.mp3")
        base64_str = base64.b64encode(file_path.read_bytes()).decode()
        data_uri = f"data:audio/mpeg;base64,{base64_str}"
        import java.nio.file.*;
        import java.util.Base64;
        
        public class Main {
            /**
             * filePath adalah file audio lokal untuk kloning suara. Gantilah dengan jalur file audio Anda dan pastikan memenuhi persyaratan audio.
             */
            public static String toDataUrl(String filePath) throws Exception {
                byte[] bytes = Files.readAllBytes(Paths.get(filePath));
                String encoded = Base64.getEncoder().encodeToString(bytes);
                return "data:audio/mpeg;base64," + encoded;
            }
        
            // Contoh penggunaan
            public static void main(String[] args) throws Exception {
                System.out.println(toDataUrl("input.mp3"));
            }
        }
    2. URL audio. Kami menyarankan mengunggah audio ke OSS.

      • Ukuran file tidak boleh melebihi 10 MB.

      • URL harus dapat diakses dari jaringan publik dan tidak memerlukan autentikasi.

    text

    string

    -

    Tidak

    Teks yang sesuai dengan konten audio audio.data.

    Jika Anda memberikan parameter ini, server akan membandingkan audio dengan teks. Jika perbedaannya terlalu besar, server akan mengembalikan Audio.PreprocessError.

    language

    string

    -

    Tidak

    Bahasa audio di audio.data.

    Mendukung zh (Cina), en (Inggris), de (Jerman), it (Italia), pt (Portugis), es (Spanyol), ja (Jepang), ko (Korea), fr (Prancis), dan ru (Rusia).

    Jika Anda menggunakan parameter ini, bahasa yang ditentukan harus sesuai dengan bahasa audio yang digunakan untuk kloning.

  • Parameter respons

    Klik untuk melihat contoh respons

    {
        "output": {
            "voice": "yourVoice",
            "target_model": "qwen3-tts-vc-realtime-2026-01-15"
        },
        "usage": {
            "count": 1
        },
        "request_id": "yourRequestId"
    }

    Parameter-parameter tersebut adalah sebagai berikut:

    Parameter

    Tipe

    Deskripsi

    voice

    string

    Nama suara. Anda dapat langsung menggunakan nama ini sebagai parameter voice dalam API sintesis suara.

    target_model

    string

    Model sintesis suara yang menggerakkan suara. Model yang didukung:

    • qwen3-tts-vc-realtime-2026-01-15

    • qwen3-tts-vc-realtime-2025-11-27

    Parameter ini harus konsisten dengan model sintesis suara yang Anda gunakan saat memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal.

    request_id

    string

    ID permintaan.

    count

    integer

    Ini adalah jumlah operasi "buat suara" yang ditagih untuk permintaan ini. Biaya permintaan ini adalah $ .

    Saat Anda membuat suara, nilai count selalu 1.

  • Kode contoh

    Penting

    Perhatikan perbedaan antara parameter berikut:

    • model: Model kloning suara. Nilainya tetap qwen-voice-enrollment.

    • target_model: Model sintesis suara yang akan menggunakan suara hasil kloning. Parameter ini harus sesuai dengan model yang digunakan dalam panggilan API sintesis suara selanjutnya. Jika tidak, operasi sintesis akan gagal.

    cURL

    Jika Anda belum menyetel Kunci API sebagai variabel lingkungan, ganti $DASHSCOPE_API_KEY dalam contoh dengan Kunci API aktual Anda.

    https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization<a data-init-id="9f104f338c7kz" href="https://poc-dashscope.aliyuncs.com/api/v1/services/audio/tts/customization" id="35ebbc67890ds">https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization</a># ======= Penting =======
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # === Hapus komentar ini sebelum menjalankan perintah. ===
    
    curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "create",
            "target_model": "qwen3-tts-vc-realtime-2026-01-15",
            "preferred_name": "guanyu",
            "audio": {
                "data": "https://xxx.wav"
            }
        }
    }'

    Python

    import os
    import requests
    import base64, pathlib
    
    target_model = "qwen3-tts-vc-realtime-2026-01-15"
    preferred_name = "guanyu"
    audio_mime_type = "audio/mpeg"
    
    file_path = pathlib.Path("input.mp3")
    base64_str = base64.b64encode(file_path.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"
    
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
    
    payload = {
        "model": "qwen-voice-enrollment", # Jangan ubah nilai ini.
        "input": {
            "action": "create",
            "target_model": target_model,
            "preferred_name": preferred_name,
            "audio": {
                "data": data_uri
            }
        }
    }
    
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    # Kirim permintaan POST.
    resp = requests.post(url, json=payload, headers=headers)
    
    if resp.status_code == 200:
        data = resp.json()
        voice = data["output"]["voice"]
        print(f"Parameter suara yang dihasilkan: {voice}")
    else:
        print("Permintaan gagal:", resp.status_code, resp.text)

    Java

    import com.google.gson.Gson;
    import com.google.gson.JsonObject;
    
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.file.*;
    import java.util.Base64;
    
    public class Main {
        private static final String TARGET_MODEL = "qwen3-tts-vc-realtime-2026-01-15";
        private static final String PREFERRED_NAME = "guanyu";
        private static final String AUDIO_FILE = "input.mp3";
        private static final String AUDIO_MIME_TYPE = "audio/mpeg";
    
        public static String toDataUrl(String filePath) throws Exception {
            byte[] bytes = Files.readAllBytes(Paths.get(filePath));
            String encoded = Base64.getEncoder().encodeToString(bytes);
            return "data:" + AUDIO_MIME_TYPE + ";base64," + encoded;
        }
    
        public static void main(String[] args) {
            // Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
            // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: String apiKey = "sk-xxx"
            String apiKey = System.getenv("DASHSCOPE_API_KEY");
            // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
            String apiUrl = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization";
    
            try {
                // Buat badan permintaan JSON. Perhatikan bahwa tanda kutip internal harus di-escape.
                String jsonPayload =
                        "{"
                                + "\"model\": \"qwen-voice-enrollment\"," // Jangan ubah nilai ini.
                                + "\"input\": {"
                                +     "\"action\": \"create\","
                                +     "\"target_model\": \"" + TARGET_MODEL + "\","
                                +     "\"preferred_name\": \"" + PREFERRED_NAME + "\","
                                +     "\"audio\": {"
                                +         "\"data\": \"" + toDataUrl(AUDIO_FILE) + "\""
                                +     "}"
                                + "}"
                                + "}";
    
                HttpURLConnection con = (HttpURLConnection) new URL(apiUrl).openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("Authorization", "Bearer " + apiKey);
                con.setRequestProperty("Content-Type", "application/json");
                con.setDoOutput(true);
    
                // Kirim badan permintaan.
                try (OutputStream os = con.getOutputStream()) {
                    os.write(jsonPayload.getBytes("UTF-8"));
                }
    
                int status = con.getResponseCode();
                InputStream is = (status >= 200 && status < 300)
                        ? con.getInputStream()
                        : con.getErrorStream();
    
                StringBuilder response = new StringBuilder();
                try (BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"))) {
                    String line;
                    while ((line = br.readLine()) != null) {
                        response.append(line);
                    }
                }
    
                System.out.println("Kode status HTTP: " + status);
                System.out.println("Konten respons: " + response.toString());
    
                if (status == 200) {
                    // Uraikan JSON.
                    Gson gson = new Gson();
                    JsonObject jsonObj = gson.fromJson(response.toString(), JsonObject.class);
                    String voice = jsonObj.getAsJsonObject("output").get("voice").getAsString();
                    System.out.println("Parameter suara yang dihasilkan: " + voice);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Kueri daftar suara

Menjalankan kueri terpaginasi untuk mengambil daftar suara yang telah Anda buat.

  • URL

    Tiongkok Daratan:

    POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization

    Internasional:

    POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
  • Header permintaan

    Parameter

    Tipe

    Wajib

    Deskripsi

    Authorization

    string

    Didukung

    Token otentikasi. Formatnya adalah Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.

    Content-Type

    string

    Ya

    Jenis media data dalam badan permintaan. Nilainya tetap application/json.

  • Isi pesan

    Badan permintaan berikut mencakup semua parameter permintaan. Anda dapat menghilangkan parameter opsional sesuai kebutuhan.

    Penting

    model: Model kloning suara. Nilainya tetap qwen-voice-enrollment. Jangan ubah nilai ini.

    {
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "list",
            "page_size": 2,
            "page_index": 0
        }
    }
  • Parameter permintaan

    Parameter

    Tipe

    Bawaan

    Wajib

    Deskripsi

    model

    string

    -

    Didukung

    Model kloning suara. Nilainya tetap qwen-voice-enrollment.

    action

    string

    -

    Didukung

    Jenis operasi. Nilainya tetap list.

    page_index

    integer

    0

    Tidak

    Nomor halaman. Nilai valid: [0, 1000000].

    page_size

    integer

    10

    Tidak

    Jumlah entri per halaman. Nilai valid: [0, 1000000].

  • Parameter respons

    Klik untuk melihat contoh respons

    {
        "output": {
            "voice_list": [
                {
                    "voice": "yourVoice1",
                    "gmt_create": "2025-08-11 17:59:32",
                    "target_model": "qwen3-tts-vc-realtime-2026-01-15"
                },
                {
                    "voice": "yourVoice2",
                    "gmt_create": "2025-08-11 17:38:10",
                    "target_model": "qwen3-tts-vc-realtime-2026-01-15"
                }
            ]
        },
        "usage": {
            "count": 0
        },
        "request_id": "yourRequestId"
    }

    Parameter respons berikut penting:

    Parameter

    Tipe

    Deskripsi

    voice

    string

    Nama suara. Anda dapat langsung menggunakan nama ini sebagai parameter voice dalam API sintesis suara.

    gmt_create

    string

    Waktu saat suara dibuat.

    target_model

    string

    Model sintesis suara yang menggerakkan suara. Model yang didukung:

    • qwen3-tts-vc-realtime-2026-01-15

    • qwen3-tts-vc-realtime-2025-11-27

    Parameter ini harus konsisten dengan model sintesis suara yang Anda gunakan saat memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal.

    request_id

    string

    ID permintaan.

    count

    integer

    Ini adalah jumlah operasi "buat suara" yang ditagih untuk permintaan ini. Biaya permintaan ini adalah $ .

    Kueri suara tidak dikenai biaya. Oleh karena itu, nilai count selalu 0.

  • Kode contoh

    Penting

    model: Model kloning suara. Nilainya tetap qwen-voice-enrollment. Jangan ubah nilai ini.

    cURL

    Jika Anda belum menyetel Kunci API sebagai variabel lingkungan, ganti $DASHSCOPE_API_KEY dalam contoh dengan Kunci API aktual Anda.

    # ======= Penting =======
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # === Hapus komentar ini sebelum menjalankan perintah. ===
    
    curl --location --request POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization' \
    --header 'Authorization: Bearer $DASHSCOPE_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "list",
            "page_size": 10,
            "page_index": 0
        }
    }'

    Python

    import os
    import requests
    
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
    
    payload = {
        "model": "qwen-voice-enrollment", # Jangan ubah nilai ini.
        "input": {
            "action": "list",
            "page_size": 10,
            "page_index": 0
        }
    }
    
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(url, json=payload, headers=headers)
    
    print("Kode status HTTP:", response.status_code)
    
    if response.status_code == 200:
        data = response.json()
        voice_list = data["output"]["voice_list"]
    
        print("Daftar suara yang dikueri:")
        for item in voice_list:
            print(f"- Suara: {item['voice']}  Waktu pembuatan: {item['gmt_create']}  Model: {item['target_model']}")
    else:
        print("Permintaan gagal:", response.text)

    Java

    import com.google.gson.Gson;
    import com.google.gson.JsonArray;
    import com.google.gson.JsonObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class Main {
        public static void main(String[] args) {
            // Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
            // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: String apiKey = "sk-xxx"
            String apiKey = System.getenv("DASHSCOPE_API_KEY");
            // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
            String apiUrl = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization";
    
            // Badan permintaan JSON (versi Java lama tidak memiliki """ untuk string multibaris)
            String jsonPayload =
                    "{"
                            + "\"model\": \"qwen-voice-enrollment\"," // Jangan ubah nilai ini.
                            + "\"input\": {"
                            +     "\"action\": \"list\","
                            +     "\"page_size\": 10,"
                            +     "\"page_index\": 0"
                            + "}"
                            + "}";
    
            try {
                HttpURLConnection con = (HttpURLConnection) new URL(apiUrl).openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("Authorization", "Bearer " + apiKey);
                con.setRequestProperty("Content-Type", "application/json");
                con.setDoOutput(true);
    
                try (OutputStream os = con.getOutputStream()) {
                    os.write(jsonPayload.getBytes("UTF-8"));
                }
    
                int status = con.getResponseCode();
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        status >= 200 && status < 300 ? con.getInputStream() : con.getErrorStream(), "UTF-8"));
    
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    response.append(line);
                }
                br.close();
    
                System.out.println("Kode status HTTP: " + status);
                System.out.println("JSON yang dikembalikan: " + response.toString());
    
                if (status == 200) {
                    Gson gson = new Gson();
                    JsonObject jsonObj = gson.fromJson(response.toString(), JsonObject.class);
                    JsonArray voiceList = jsonObj.getAsJsonObject("output").getAsJsonArray("voice_list");
    
                    System.out.println("\n Daftar suara yang dikueri:");
                    for (int i = 0; i < voiceList.size(); i++) {
                        JsonObject voiceItem = voiceList.get(i).getAsJsonObject();
                        String voice = voiceItem.get("voice").getAsString();
                        String gmtCreate = voiceItem.get("gmt_create").getAsString();
                        String targetModel = voiceItem.get("target_model").getAsString();
    
                        System.out.printf("- Suara: %s  Waktu pembuatan: %s  Model: %s\n",
                                voice, gmtCreate, targetModel);
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Hapus suara

Menghapus suara tertentu dan melepaskan kuota yang sesuai.

  • URL

    Tiongkok Daratan:

    POST https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization

    Internasional:

    POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
  • Header permintaan

    Parameter

    Tipe

    Wajib

    Deskripsi

    Authorization

    string

    Didukung

    Token otentikasi. Formatnya adalah Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.

    Content-Type

    string

    Ya

    Jenis media data dalam badan permintaan. Nilainya tetap application/json.

  • Isi permintaan

    Badan permintaan berikut mencakup semua parameter permintaan. Anda dapat menghilangkan parameter opsional sesuai kebutuhan:

    Penting

    model: Model kloning suara. Nilainya tetap qwen-voice-enrollment. Jangan ubah nilai ini.

    {
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "delete",
            "voice": "yourVoice"
        }
    }
  • Parameter permintaan

    Parameter

    Tipe

    Bawaan

    Wajib

    Deskripsi

    model

    string

    -

    Didukung

    Model kloning suara. Nilainya tetap qwen-voice-enrollment.

    action

    string

    -

    Didukung

    Jenis operasi. Nilainya tetap delete.

    voice

    string

    -

    Didukung

    Suara yang akan dihapus.

  • Parameter respons

    Klik untuk melihat contoh respons

    {
        "usage": {
            "count": 0
        },
        "request_id": "yourRequestId"
    }

    Parameter respons berikut penting:

    Parameter

    Tipe

    Deskripsi

    request_id

    string

    ID permintaan.

    count

    integer

    Ini adalah jumlah operasi "buat suara" yang ditagih untuk permintaan ini. Biaya permintaan ini adalah $ .

    Menghapus suara tidak dikenai biaya. Oleh karena itu, nilai count selalu 0.

  • Kode contoh

    Penting

    model: Model kloning suara. Nilainya tetap qwen-voice-enrollment. Jangan ubah nilai ini.

    cURL

    Jika Anda belum menyetel Kunci API sebagai variabel lingkungan, ganti $DASHSCOPE_API_KEY dalam contoh dengan Kunci API aktual Anda.

    # ======= Penting =======
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # === Hapus komentar ini sebelum menjalankan perintah. ===
    
    curl --location --request POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization' \
    --header 'Authorization: Bearer $DASHSCOPE_API_KEY' \
    --header 'Content-Type: application/json' \
    --data '{
        "model": "qwen-voice-enrollment",
        "input": {
            "action": "delete",
            "voice": "yourVoice"
        }
    }'

    Python

    import os
    import requests
    
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")
    # Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
    url = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization"
    
    voice_to_delete = "yourVoice"  # Suara yang akan dihapus (ganti dengan nilai aktual).
    
    payload = {
        "model": "qwen-voice-enrollment", # Jangan ubah nilai ini.
        "input": {
            "action": "delete",
            "voice": voice_to_delete
        }
    }
    
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    response = requests.post(url, json=payload, headers=headers)
    
    print("Kode status HTTP:", response.status_code)
    
    if response.status_code == 200:
        data = response.json()
        request_id = data["request_id"]
    
        print(f"Penghapusan berhasil")
        print(f"ID Permintaan: {request_id}")
    else:
        print("Permintaan gagal:", response.text)

    Java

    import com.google.gson.Gson;
    import com.google.gson.JsonObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class Main {
        public static void main(String[] args) {
            // Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-an-api-key
            // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: String apiKey = "sk-xxx"
            String apiKey = System.getenv("DASHSCOPE_API_KEY");
            // Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/tts/customization
            String apiUrl = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization";
            String voiceToDelete = "yourVoice"; // Suara yang akan dihapus (ganti dengan nilai aktual).
    
            // Buat badan permintaan JSON (penggabungan string untuk kompatibilitas Java 8).
            String jsonPayload =
                    "{"
                            + "\"model\": \"qwen-voice-enrollment\"," // Jangan ubah nilai ini.
                            + "\"input\": {"
                            +     "\"action\": \"delete\","
                            +     "\"voice\": \"" + voiceToDelete + "\""
                            + "}"
                            + "}";
    
            try {
                // Buat koneksi POST.
                HttpURLConnection con = (HttpURLConnection) new URL(apiUrl).openConnection();
                con.setRequestMethod("POST");
                con.setRequestProperty("Authorization", "Bearer " + apiKey);
                con.setRequestProperty("Content-Type", "application/json");
                con.setDoOutput(true);
    
                // Kirim badan permintaan.
                try (OutputStream os = con.getOutputStream()) {
                    os.write(jsonPayload.getBytes("UTF-8"));
                }
    
                int status = con.getResponseCode();
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        status >= 200 && status < 300 ? con.getInputStream() : con.getErrorStream(), "UTF-8"));
    
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    response.append(line);
                }
                br.close();
    
                System.out.println("Kode status HTTP: " + status);
                System.out.println("JSON yang dikembalikan: " + response.toString());
    
                if (status == 200) {
                    Gson gson = new Gson();
                    JsonObject jsonObj = gson.fromJson(response.toString(), JsonObject.class);
                    String requestId = jsonObj.get("request_id").getAsString();
    
                    System.out.println("Penghapusan berhasil");
                    System.out.println("ID Permintaan: " + requestId);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Sintesis suara

Untuk informasi lebih lanjut tentang cara menggunakan suara kustom yang dihasilkan melalui kloning suara untuk mensintesis ucapan yang dipersonalisasi, lihat Memulai: Dari kloning hingga sintesis.

Model sintesis suara untuk kloning suara, seperti qwen3-tts-vc-realtime-2026-01-15, adalah model khusus. Model-model ini hanya mendukung suara kustom yang dibuat melalui kloning dan tidak mendukung suara preset publik, seperti Chelsie, Serena, Ethan, atau Cherry.

Kuota suara dan aturan pembersihan otomatis

  • Batas total: 1.000 suara per akun

    Jumlah total suara tidak dikembalikan oleh API. Anda dapat memanggil operasi Kueri daftar suara untuk menghitung jumlah suara Anda.
  • Pembersihan otomatis: Sistem secara otomatis menghapus suara yang tidak digunakan untuk permintaan sintesis suara apa pun dalam satu tahun terakhir.

Penagihan

Kloning suara dan sintesis suara ditagih secara terpisah:

  • Kloning suara: Pembuatan suara ditagih sebesar $0,01 per suara. Anda tidak dikenai biaya untuk upaya pembuatan yang gagal.

    Catatan

    Kuota gratis (hanya tersedia di Alibaba Cloud China Website (www.aliyun.com) di wilayah Beijing dan di Alibaba Cloud International Website (www.alibabacloud.com) di wilayah Singapura):

    • Anda menerima kuota gratis sebanyak 1.000 pembuatan suara, berlaku selama 90 hari setelah Anda mengaktifkan Alibaba Cloud Model Studio.

    • Upaya pembuatan yang gagal tidak mengurangi kuota gratis Anda.

    • Menghapus suara tidak mengembalikan kuota gratis Anda.

    • Setelah kuota gratis habis atau kedaluwarsa, pembuatan suara ditagih sebesar $0,01 per suara.

  • Sintesis suara yang menggunakan suara kustom hasil kloning suara ditagih berdasarkan sistem bayar sesuai penggunaan berdasarkan jumlah karakter teks. Untuk informasi lebih lanjut, lihat Sintesis suara Real-time - Qwen.

Hak cipta dan legalitas

Anda bertanggung jawab atas kepemilikan audio apa pun yang Anda berikan dan penggunaannya secara legal. Harap baca Ketentuan Layanan.

Panduan perekaman

Peralatan perekaman

Gunakan mikrofon dengan fitur penghilangan derau, atau rekam dari jarak dekat menggunakan ponsel di lingkungan yang tenang untuk memastikan sumber audio yang bersih.

Lingkungan perekaman

Lokasi

  • Rekam di ruang kecil tertutup berukuran kurang dari 10 meter persegi.

  • Pilih ruangan dengan bahan penyerap suara, seperti busa akustik, karpet, atau gorden.

  • Hindari aula besar, ruang konferensi, atau ruang kelas terbuka yang memiliki gema tinggi.

Kontrol kebisingan

  • Kebisingan luar ruangan: Tutup pintu dan jendela untuk menghalangi suara luar seperti lalu lintas dan konstruksi.

  • Kebisingan dalam ruangan: Matikan AC, kipas, ballast lampu neon, atau perangkat lainnya. Anda dapat merekam suara latar dengan ponsel dan memutarnya dengan volume tinggi untuk mengidentifikasi sumber kebisingan potensial.

Kontrol gema

  • Gema dapat menyebabkan efek buram pada suara dan mengurangi kejelasannya.

  • Kurangi pantulan dari permukaan halus: Tarik gorden, buka pintu lemari, dan tutupi meja atau kabinet dengan pakaian atau seprai.

  • Gunakan benda tidak beraturan, seperti rak buku atau furnitur berlapis kain, untuk menyebarkan gelombang suara.

Naskah perekaman

  • Sesuaikan naskah agar sesuai dengan skenario aplikasi target. Misalnya, naskah untuk skenario layanan pelanggan harus bersifat percakapan. Jangan sertakan kata-kata sensitif atau ilegal, seperti yang terkait dengan politik, pornografi, atau kekerasan. Jika tidak, proses kloning akan gagal.

  • Hindari frasa pendek seperti "Halo" atau "Ya." Gunakan kalimat lengkap.

  • Bacalah naskah dengan lancar dan koheren. Hindari jeda yang sering, dan berbicaralah minimal selama 3 detik tanpa gangguan.

  • Sampaikan emosi target, seperti keramahan atau keseriusan. Hindari pembacaan yang terlalu dramatis dan pertahankan nada yang alami.

Saran operasional

Sebagai contoh, pertimbangkan kamar tidur standar:

  1. Tutup pintu dan jendela untuk menghalangi suara luar.

  2. Matikan AC, kipas, atau peralatan lainnya.

  3. Tarik gorden untuk mengurangi pantulan dari kaca.

  4. Letakkan pakaian atau selimut di atas meja untuk mengurangi pantulan dari permukaan.

  5. Pahami naskah terlebih dahulu. Tentukan nada karakter dan bacalah dengan suara alami.

  6. Berdirilah sekitar 10 cm dari perangkat perekam untuk menghindari suara popping atau sinyal lemah.

Pesan error

Jika Anda mengalami error, lihat Pesan error untuk informasi troubleshooting.