All Products
Search
Document Center

Alibaba Cloud Model Studio:Sintesis suara Real-time - CosyVoice

Last Updated:Mar 22, 2026

Sintesis Suara, juga dikenal sebagai Text-to-Speech (TTS), adalah teknologi yang mengonversi teks menjadi suara alami. Teknologi ini menggunakan algoritma pembelajaran mesin untuk menganalisis data ucapan secara ekstensif serta mempelajari ritme, intonasi, dan pola pelafalan suatu bahasa, sehingga mampu menghasilkan ucapan menyerupai manusia dari input teks.

Fitur utama

  • Menghasilkan suara berkualitas tinggi dan terdengar alami secara real-time, mendukung berbagai bahasa seperti Mandarin dan Inggris.

  • Menawarkan dua metode kustomisasi suara: Voice Cloning dan Voice Design.

  • Mendukung input dan output streaming dengan latensi rendah untuk interaksi real-time.

  • Memungkinkan penyesuaian Speech Rate, Pitch, Volume, dan Bitrate guna memberikan kontrol detail halus atas output audio.

  • Mendukung format audio utama dan laju sampel output hingga 48 kHz.

Ketersediaan

Model yang Didukung:

Internasional

Dalam mode penyebaran internasional, Titik Akses dan Penyimpanan Data berlokasi di Wilayah Singapura. Resource komputasi Inferensi Model dijadwalkan secara dinamis di seluruh dunia, tidak termasuk Tiongkok daratan.

Saat memanggil model berikut, pilih Kunci API untuk Wilayah Singapura:

  • CosyVoice: cosyvoice-v3-plus, cosyvoice-v3-flash

Tiongkok daratan

Dalam mode penyebaran Tiongkok daratan, Titik Akses dan Penyimpanan Data berlokasi di Wilayah Beijing. Resource komputasi Inferensi Model dibatasi hanya untuk Tiongkok daratan.

Saat memanggil model berikut, pilih Kunci API untuk Wilayah Beijing:

  • CosyVoice: cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-plus, cosyvoice-v3-flash, cosyvoice-v2, cosyvoice-v1

Untuk informasi selengkapnya, lihat Daftar Model.

Pemilihan model

Skenario

Model yang Direkomendasikan

Alasan

Catatan

Membuat Suara Merek Unik dari Teks

cosyvoice-v3.5-plus

Mendukung Voice Design, yang membuat suara kustom hanya dari teks—tanpa memerlukan sampel audio. Ideal untuk membangun suara merek eksklusif dari awal.

cosyvoice-v3.5-plus hanya tersedia di wilayah Beijing dan tidak mendukung system voices.

Mereplikasi Suara Tertentu dari Sampel Audio

cosyvoice-v3.5-plus

Mendukung Voice Cloning untuk mereplikasi suara secara cepat dari sampel audio, menciptakan voiceprint merek yang berkualitas tinggi, konsisten, dan menyerupai manusia.

cosyvoice-v3.5-plus hanya tersedia di wilayah Beijing dan tidak mendukung system voices.

Layanan Pelanggan Cerdas / Asisten Suara

cosyvoice-v3-flash, cosyvoice-v3.5-flash

Lebih hemat biaya dibandingkan model plus. Model-model ini mendukung Streaming Interaction dan ekspresi emosional untuk memberikan respons cepat dengan latensi rendah.

cosyvoice-v3.5-flash hanya tersedia di wilayah Beijing dan tidak mendukung system voices.

Penyiaran Dialek Regional

cosyvoice-v3.5-plus

Mendukung berbagai dialek Mandarin, seperti Mandarin Timur Laut dan Minnan. Ini menjadikannya ideal untuk penyiaran konten lokal.

cosyvoice-v3.5-plus hanya tersedia di wilayah Beijing dan tidak mendukung system voices.

Aplikasi Pendidikan (termasuk Pembacaan Rumus)

cosyvoice-v2, cosyvoice-v3-flash, cosyvoice-v3-plus

Sangat baik untuk instruksi matematika, fisika, dan kimia karena mengonversi rumus LaTeX menjadi ucapan.

cosyvoice-v2 dan cosyvoice-v3-plus lebih mahal ($0,286706 per 10.000 karakter).

Penyiaran Suara Terstruktur (Berita atau Pengumuman)

cosyvoice-v3-plus, cosyvoice-v3-flash, cosyvoice-v2

Mendukung SSML untuk mengontrol elemen seperti laju ucapan, jeda, dan pelafalan, yang meningkatkan kualitas siaran.

Menghasilkan SSML memerlukan logika khusus. Ekspresi emosional tidak didukung.

Penyelarasan Ucapan-Teks yang Presisi (misalnya, untuk Pembuatan Takarir dan Pemutaran Pelajaran)

cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2

Mendukung output Timestamp untuk menyinkronkan ucapan hasil sintesis dengan teks sumber.

Anda harus secara eksplisit mengaktifkan fitur Timestamp, karena secara default dinonaktifkan.

Aplikasi Multibahasa untuk Pasar Global

cosyvoice-v3-flash, cosyvoice-v3-plus

Mendukung sintesis ucapan dalam berbagai bahasa.

Fitur dan ketersediaan bervariasi berdasarkan model dan wilayah. Sebelum memilih model, tinjau bagian Bandingkan Model.

Memulai

Contoh kode berikut menunjukkan cara memanggil API. Untuk lebih banyak Contoh Kode yang mencakup skenario umum, lihat GitHub.

Dapatkan Kunci API dan ekspor Kunci API sebagai Variabel lingkungan. Jika Anda menggunakan SDK untuk melakukan panggilan, instal SDK DashScope.

CosyVoice

Penting

Model cosyvoice-v3.5-plus dan cosyvoice-v3.5-flash hanya tersedia di wilayah Beijing dan khusus untuk voice design dan voice cloning. Model-model ini tidak mendukung system voices. Sebelum menggunakannya untuk sintesis suara, Anda harus terlebih dahulu membuat suara target dengan API voice cloning/design CosyVoice. Setelah suara dibuat, perbarui parameter voice dalam kode Anda dengan ID suara baru dan atur parameter model ke model yang sesuai.

System voices

Contoh berikut menunjukkan cara mensintesis suara menggunakan system voices. Untuk informasi selengkapnya, lihat Daftar Suara.

Simpan ke file

Python

# coding=utf-8

import os
import dashscope
from dashscope.audio.tts_v2 import *

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

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'

# Tentukan model.
# Versi model yang berbeda memerlukan suara yang sesuai:
# cosyvoice-v3-flash/cosyvoice-v3-plus: Gunakan suara seperti longanyang.
# cosyvoice-v2: Gunakan suara seperti longxiaochun_v2.
# Setiap suara mendukung bahasa yang berbeda. Saat mensintesis bahasa non-Mandarin seperti Jepang atau Korea, pilih suara yang mendukung bahasa target. Untuk detailnya, lihat daftar suara CosyVoice.
model = "cosyvoice-v3-flash"
# Tentukan suara.
voice = "longanyang"

# Buat instance SpeechSynthesizer dan masukkan parameter seperti model dan suara dalam konstruktor.
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# Kirim teks untuk disintesis dan terima data audio biner.
audio = synthesizer.call("How is the weather today?")
# Pertama kali Anda mengirim teks, koneksi WebSocket harus dibuat. Oleh karena itu, latensi paket pertama mencakup waktu yang diperlukan untuk membuat koneksi.
print('[Metric] Request ID: {}, first-packet latency: {} ms'.format(
    synthesizer.get_last_request_id(),
    synthesizer.get_first_package_delay()))

# Simpan audio ke file lokal.
with open('output.mp3', 'wb') as f:
    f.write(audio)

Java

import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
import com.alibaba.dashscope.utils.Constants;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

public class Main {
    // Tentukan model.
    // Versi model yang berbeda memerlukan suara yang sesuai:
    // cosyvoice-v3-flash/cosyvoice-v3-plus: Gunakan suara seperti longanyang.
    // cosyvoice-v2: Gunakan suara seperti longxiaochun_v2.
    // Setiap suara mendukung bahasa yang berbeda. Saat mensintesis bahasa non-Mandarin seperti Jepang atau Korea, pilih suara yang mendukung bahasa target. Untuk detailnya, lihat daftar suara CosyVoice.
    private static String model = "cosyvoice-v3-flash";
    // Tentukan suara.
    private static String voice = "longanyang";

    public static void streamAudioDataToSpeaker() {
        // Atur parameter permintaan.
        SpeechSynthesisParam param =
                SpeechSynthesisParam.builder()
                        // Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
                        // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                        .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                        .model(model) // Tentukan model.
                        .voice(voice) // Tentukan suara.
                        .build();

        // Mode sinkron: Nonaktifkan callback (parameter kedua adalah null).
        SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
        ByteBuffer audio = null;
        try {
            // Blokir thread hingga data audio dikembalikan.
            audio = synthesizer.call("How is the weather today?");
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            // Tutup koneksi WebSocket setelah tugas selesai.
            synthesizer.getDuplexApi().close(1000, "bye");
        }
        if (audio != null) {
            // Simpan data audio ke file lokal output.mp3.
            File file = new File("output.mp3");
            // Pertama kali Anda mengirim teks, koneksi WebSocket harus dibuat. Oleh karena itu, latensi paket pertama mencakup waktu yang diperlukan untuk membuat koneksi.
            System.out.println(
                    "[Metric] Request ID: "
                            + synthesizer.getLastRequestId()
                            + ", first-packet latency (ms): "
                            + synthesizer.getFirstPackageDelay());
            try (FileOutputStream fos = new FileOutputStream(file)) {
                fos.write(audio.array());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void main(String[] args) {
        // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
        Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
        streamAudioDataToSpeaker();
        System.exit(0);
    }
}

Mainkan suara real-time

Contoh berikut menunjukkan cara mengonversi teks yang dialirkan dari model bahasa besar (LLM) Qwen menjadi suara dan memutarnya secara real-time.

Python

Sebelum menjalankan contoh Python, Anda harus menginstal library pemutaran audio pihak ketiga menggunakan pip.

# 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
#   or
#   pip install pyaudio
# CentOS
#   sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
#   python -m pip install pyaudio

import os
import pyaudio
import dashscope
from dashscope.audio.tts_v2 import *


from http import HTTPStatus
from dashscope import Generation

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

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'

# Versi model yang berbeda memerlukan suara yang sesuai:
# cosyvoice-v3-flash/cosyvoice-v3-plus: Gunakan suara seperti longanyang.
# cosyvoice-v2: Gunakan suara seperti longxiaochun_v2.
# Setiap suara mendukung bahasa yang berbeda. Saat mensintesis bahasa non-Mandarin seperti Jepang atau Korea, pilih suara yang mendukung bahasa target. Untuk detailnya, lihat daftar suara CosyVoice.
model = "cosyvoice-v3-flash"
voice = "longanyang"


class Callback(ResultCallback):
    _player = None
    _stream = None

    def on_open(self):
        print("websocket is open.")
        self._player = pyaudio.PyAudio()
        self._stream = self._player.open(
            format=pyaudio.paInt16, channels=1, rate=22050, output=True
        )

    def on_complete(self):
        print("speech synthesis task complete successfully.")

    def on_error(self, message: str):
        print(f"speech synthesis task failed, {message}")

    def on_close(self):
        print("websocket is closed.")
        # Hentikan pemutar.
        self._stream.stop_stream()
        self._stream.close()
        self._player.terminate()

    def on_event(self, message):
        print(f"Received speech synthesis message: {message}")

    def on_data(self, data: bytes) -> None:
        print("audio result length:", len(data))
        self._stream.write(data)


def synthesizer_with_llm():
    callback = Callback()
    synthesizer = SpeechSynthesizer(
        model=model,
        voice=voice,
        format=AudioFormat.PCM_22050HZ_MONO_16BIT,
        callback=callback,
    )

    messages = [{"role": "user", "content": "Please introduce yourself"}]
    responses = Generation.call(
        model="qwen-turbo",
        messages=messages,
        result_format="message",  # Atur format hasil ke 'message'.
        stream=True,  # Aktifkan output streaming.
        incremental_output=True,  # Aktifkan output inkremental.
    )
    for response in responses:
        if response.status_code == HTTPStatus.OK:
            print(response.output.choices[0]["message"]["content"], end="")
            synthesizer.streaming_call(response.output.choices[0]["message"]["content"])
        else:
            print(
                "Request id: %s, Status code: %s, error code: %s, error message: %s"
                % (
                    response.request_id,
                    response.status_code,
                    response.code,
                    response.message,
                )
            )
    synthesizer.streaming_complete()
    print('requestId: ', synthesizer.get_last_request_id())


if __name__ == "__main__":
    synthesizer_with_llm()

Java

Suara hasil kloning

image

Voice cloning dan sintesis suara adalah dua langkah terpisah namun terkait yang mengikuti alur kerja "buat, lalu gunakan":

  1. Siapkan file rekaman audio

    Unggah file audio yang memenuhi persyaratan dalam Voice cloning: Format audio input ke lokasi yang dapat diakses publik, seperti Object Storage Service (OSS). Pastikan URL-nya dapat diakses publik.

  2. Buat suara

    Panggil API Create voice. Pada langkah ini, Anda harus menentukan parameter target_model/targetModel untuk menentukan model sintesis suara mana yang akan digunakan dengan suara yang dibuat.

    Jika Anda sudah membuat suara, Anda dapat melewati langkah ini. Untuk memeriksa suara yang sudah ada, panggil API Query voice list.

  3. Gunakan suara untuk sintesis ucapan

    Setelah Anda membuat suara menggunakan API Create voice, sistem mengembalikan voice_id/voiceID.

    • Gunakan voice_id atau voiceID ini sebagai nilai parameter voice dalam panggilan sintesis suara berikutnya.

    • Beberapa mode panggilan didukung, termasuk sintesis non-streaming, streaming unidireksional, dan streaming bidireksional.

    • Model sintesis suara harus sama dengan model yang ditentukan oleh parameter target_model/targetModel saat pembuatan suara. Jika tidak, sintesis akan gagal.

Kode Contoh

import os
import time
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer

# 1. Siapkan lingkungan.
# Kami menyarankan Anda menyetel Kunci API sebagai variabel lingkungan.
# Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
# Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
if not dashscope.api_key:
    raise ValueError("DASHSCOPE_API_KEY environment variable not set.")

# URL WebSocket untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'
# URL HTTP untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/api/v1.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'


# 2. Tentukan parameter kloning.
TARGET_MODEL = "cosyvoice-v3.5-plus" 
# Tentukan awalan yang bermakna untuk suara.
VOICE_PREFIX = "myvoice" # Hanya digit dan huruf kecil yang diizinkan. Panjang awalan harus kurang dari 10 karakter.
# Tentukan URL yang dapat diakses publik untuk file audio.
AUDIO_URL = "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav" # Ini adalah URL contoh. Ganti dengan milik Anda sendiri.

# 3. Buat suara (tugas asinkron).
print("--- Step 1: Creating voice enrollment ---")
service = VoiceEnrollmentService()
try:
    voice_id = service.create_voice(
        target_model=TARGET_MODEL,
        prefix=VOICE_PREFIX,
        url=AUDIO_URL
    )
    print(f"Voice enrollment submitted successfully. Request ID: {service.get_last_request_id()}")
    print(f"Generated Voice ID: {voice_id}")
except Exception as e:
    print(f"Error during voice creation: {e}")
    raise e
# 4. Periksa status suara.
print("\n--- Step 2: Polling for voice status ---")
max_attempts = 30
poll_interval = 10 # detik
for attempt in range(max_attempts):
    try:
        voice_info = service.query_voice(voice_id=voice_id)
        status = voice_info.get("status")
        print(f"Attempt {attempt + 1}/{max_attempts}: Voice status is '{status}'")
        
        if status == "OK":
            print("Voice is ready for synthesis.")
            break
        elif status == "UNDEPLOYED":
            print(f"Voice processing failed with status: {status}. Please check audio quality or contact support.")
            raise RuntimeError(f"Voice processing failed with status: {status}")
        # Jika statusnya adalah keadaan antara seperti "DEPLOYING", lanjutkan polling.
        time.sleep(poll_interval)
    except Exception as e:
        print(f"Error during status polling: {e}")
        time.sleep(poll_interval)
else:
    print("Polling timed out. The voice is not ready after several attempts.")
    raise RuntimeError("Polling timed out. The voice is not ready after several attempts.")

# 5. Gunakan suara hasil kloning untuk sintesis suara.
print("\n--- Step 3: Synthesizing speech with the new voice ---")
try:
    synthesizer = SpeechSynthesizer(model=TARGET_MODEL, voice=voice_id)
    text_to_synthesize = "Congratulations! You have successfully cloned and synthesized your own voice!"
    
    # Metode call() mengembalikan data audio biner.
    audio_data = synthesizer.call(text_to_synthesize)
    print(f"Speech synthesis successful. Request ID: {synthesizer.get_last_request_id()}")

    # 6. Simpan file audio.
    output_file = "my_custom_voice_output.mp3"
    with open(output_file, "wb") as f:
        f.write(audio_data)
    print(f"Audio saved to {output_file}")

except Exception as e:
    print(f"Error during speech synthesis: {e}")

Suara hasil desain

image

Voice design dan sintesis suara adalah dua langkah terpisah namun terkait yang mengikuti alur kerja "buat, lalu gunakan":

  1. Siapkan deskripsi suara dan teks pratinjau untuk voice design.

    • voice description (voice_prompt): Menggambarkan karakteristik suara target. Untuk informasi selengkapnya, lihat "Voice design: Menulis deskripsi suara berkualitas tinggi?".

    • preview text (preview_text): Teks yang akan dibaca oleh suara target untuk pratinjau audio. Misalnya, "Halo semuanya, dan selamat datang."

  2. Panggil API Create voice untuk membuat suara kustom dan mendapatkan ID suara serta audio pratinjau.

    Pada langkah ini, Anda harus menentukan parameter target_model untuk menentukan model sintesis suara mana yang akan digunakan dengan suara yang dibuat.

    Dengarkan audio pratinjau. Jika sesuai harapan, lanjutkan ke langkah berikutnya. Jika tidak, desain ulang suara tersebut.

    Jika Anda sudah membuat suara, Anda dapat melewati langkah ini. Untuk memeriksa suara yang sudah ada, panggil API Query voice list.

  3. Gunakan suara untuk sintesis suara.

    Setelah Anda membuat suara menggunakan API Create voice, sistem mengembalikan voice_id/voiceID.

    • Gunakan voice_id atau voiceID ini sebagai nilai parameter voice dalam panggilan sintesis suara berikutnya.

    • Beberapa mode panggilan didukung, termasuk sintesis non-streaming, streaming unidireksional, dan streaming bidireksional.

    • Model sintesis suara harus sama dengan model yang ditentukan oleh parameter target_model/targetModel saat pembuatan suara. Jika tidak, sintesis akan gagal.

Kode Contoh

  1. Hasilkan suara kustom dan pratinjau hasilnya. Jika Anda puas dengan hasilnya, lanjutkan ke langkah berikutnya. Jika tidak, hasilkan ulang suara tersebut.

    Python

    import requests
    import base64
    import os
    
    def create_voice_and_play():
        # Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-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")
        
        if not api_key:
            print("Error: The DASHSCOPE_API_KEY environment variable is not set.")
            return None, None, None
        
        # Siapkan data permintaan.
        headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
        
        data = {
            "model": "voice-enrollment",
            "input": {
                "action": "create_voice",
                "target_model": "cosyvoice-v3.5-plus",
                "voice_prompt": "A composed, middle-aged male announcer with a deep, rich, and magnetic voice, a steady speaking speed, and clear articulation, suitable for news broadcasting or documentary commentary.",
                "preview_text": "Dear listeners, hello everyone. Welcome to the evening news.",
                "prefix": "announcer"
            },
            "parameters": {
                "sample_rate": 24000,
                "response_format": "wav"
            }
        }
        
        # 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"
        
        try:
            # Kirim permintaan.
            response = requests.post(
                url,
                headers=headers,
                json=data,
                timeout=60  # Tambahkan timeout.
            )
            
            if response.status_code == 200:
                result = response.json()
                
                # Dapatkan ID suara.
                voice_id = result["output"]["voice_id"]
                print(f"Voice ID: {voice_id}")
                
                # Dapatkan data audio pratinjau.
                base64_audio = result["output"]["preview_audio"]["data"]
                
                # Dekode data audio Base64.
                audio_bytes = base64.b64decode(base64_audio)
                
                # Simpan file audio ke perangkat lokal Anda.
                filename = f"{voice_id}_preview.wav"
                
                # Tulis data audio ke file lokal.
                with open(filename, 'wb') as f:
                    f.write(audio_bytes)
                
                print(f"The audio is saved to the local file: {filename}")
                print(f"File path: {os.path.abspath(filename)}")
                
                return voice_id, audio_bytes, filename
            else:
                print(f"Request failed. Status code: {response.status_code}")
                print(f"Response content: {response.text}")
                return None, None, None
                
        except requests.exceptions.RequestException as e:
            print(f"A network request error occurred: {e}")
            return None, None, None
        except KeyError as e:
            print(f"The response data is in an invalid format. The required field is missing: {e}")
            print(f"Response content: {response.text if 'response' in locals() else 'No response'}")
            return None, None, None
        except Exception as e:
            print(f"An unknown error occurred: {e}")
            return None, None, None
    
    if __name__ == "__main__":
        print("Creating the voice...")
        voice_id, audio_data, saved_filename = create_voice_and_play()
        
        if voice_id:
            print(f"\nVoice '{voice_id}' is created.")
            print(f"The audio file is saved: '{saved_filename}'")
            print(f"File size: {os.path.getsize(saved_filename)} bytes")
        else:
            print("\nFailed to create the voice.")

    Java

    Anda perlu mengimpor dependensi Gson. Jika Anda menggunakan Maven atau Gradle, tambahkan dependensi sebagai berikut.

    Maven

    Tambahkan konten berikut ke file pom.xml Anda:

    <!-- 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 Anda:

    // https://mvnrepository.com/artifact/com.google.code.gson/gson
    implementation("com.google.code.gson:gson:2.13.1")
    import com.google.gson.JsonObject;
    import com.google.gson.JsonParser;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Base64;
    
    public class Main {
        public static void main(String[] args) {
            Main example = new Main();
            example.createVoice();
        }
    
        public void createVoice() {
            // Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-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");
    
            // Buat string body permintaan JSON.
            String jsonBody = "{\n" +
                    "    \"model\": \"voice-enrollment\",\n" +
                    "    \"input\": {\n" +
                    "        \"action\": \"create_voice\",\n" +
                    "        \"target_model\": \"cosyvoice-v3.5-plus\",\n" +
                    "        \"voice_prompt\": \"A composed, middle-aged male announcer with a deep, rich, and magnetic voice, a steady speaking speed, and clear articulation, suitable for news broadcasting or documentary commentary.\",\n" +
                    "        \"preview_text\": \"Dear listeners, hello everyone. Welcome to the evening news.\",\n" +
                    "        \"prefix\": \"announcer\"\n" +
                    "    },\n" +
                    "    \"parameters\": {\n" +
                    "        \"sample_rate\": 24000,\n" +
                    "        \"response_format\": \"wav\"\n" +
                    "    }\n" +
                    "}";
    
            HttpURLConnection connection = null;
            try {
                // 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 url = new URL("https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization");
                connection = (HttpURLConnection) url.openConnection();
    
                // Atur metode dan header permintaan.
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Authorization", "Bearer " + apiKey);
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setDoOutput(true);
                connection.setDoInput(true);
    
                // Kirim body permintaan.
                try (OutputStream os = connection.getOutputStream()) {
                    byte[] input = jsonBody.getBytes("UTF-8");
                    os.write(input, 0, input.length);
                    os.flush();
                }
    
                // Dapatkan respons.
                int responseCode = connection.getResponseCode();
                if (responseCode == HttpURLConnection.HTTP_OK) {
                    // Baca konten respons.
                    StringBuilder response = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getInputStream(), "UTF-8"))) {
                        String responseLine;
                        while ((responseLine = br.readLine()) != null) {
                            response.append(responseLine.trim());
                        }
                    }
    
                    // Uraikan respons JSON.
                    JsonObject jsonResponse = JsonParser.parseString(response.toString()).getAsJsonObject();
                    JsonObject outputObj = jsonResponse.getAsJsonObject("output");
                    JsonObject previewAudioObj = outputObj.getAsJsonObject("preview_audio");
    
                    // Dapatkan ID suara.
                    String voiceId = outputObj.get("voice_id").getAsString();
                    System.out.println("Voice ID: " + voiceId);
    
                    // Dapatkan data audio yang dienkripsi Base64.
                    String base64Audio = previewAudioObj.get("data").getAsString();
    
                    // Dekode data audio Base64.
                    byte[] audioBytes = Base64.getDecoder().decode(base64Audio);
    
                    // Simpan audio ke file lokal.
                    String filename = voiceId + "_preview.wav";
                    saveAudioToFile(audioBytes, filename);
    
                    System.out.println("The audio is saved to the local file: " + filename);
    
                } else {
                    // Baca respons kesalahan.
                    StringBuilder errorResponse = new StringBuilder();
                    try (BufferedReader br = new BufferedReader(
                            new InputStreamReader(connection.getErrorStream(), "UTF-8"))) {
                        String responseLine;
                        while ((responseLine = br.readLine()) != null) {
                            errorResponse.append(responseLine.trim());
                        }
                    }
    
                    System.out.println("Request failed. Status code: " + responseCode);
                    System.out.println("Error response: " + errorResponse.toString());
                }
    
            } catch (Exception e) {
                System.err.println("A request error occurred: " + e.getMessage());
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    
        private void saveAudioToFile(byte[] audioBytes, String filename) {
            try {
                File file = new File(filename);
                try (FileOutputStream fos = new FileOutputStream(file)) {
                    fos.write(audioBytes);
                }
                System.out.println("The audio is saved to: " + file.getAbsolutePath());
            } catch (IOException e) {
                System.err.println("An error occurred while saving the audio file: " + e.getMessage());
                e.printStackTrace();
            }
        }
    }
  2. Gunakan suara kustom yang dihasilkan pada langkah sebelumnya untuk sintesis suara.

    Langkah ini merujuk pada contoh panggilan non-streaming. Ganti nilai parameter voice dengan ID suara kustom yang dihasilkan oleh voice design.

    Prinsip Utama: Model (target_model) yang digunakan untuk voice design harus sama dengan model (model) yang digunakan untuk sintesis suara berikutnya. Jika tidak, sintesis akan gagal.

    Python

    # coding=utf-8
    
    import dashscope
    from dashscope.audio.tts_v2 import *
    import os
    
    # Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
    
    # URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
    dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'
    
    # Gunakan model yang sama untuk voice design dan sintesis suara.
    model = "cosyvoice-v3.5-plus"
    # Ganti nilai parameter voice dengan ID suara kustom yang dihasilkan oleh voice design.
    voice = "your_voice_id"
    
    # Buat instance SpeechSynthesizer dan masukkan parameter seperti model dan suara dalam konstruktor.
    synthesizer = SpeechSynthesizer(model=model, voice=voice)
    # Kirim teks untuk disintesis dan terima data audio biner.
    audio = synthesizer.call("How is the weather today?")
    # Pertama kali Anda mengirim teks, koneksi WebSocket harus dibuat. Oleh karena itu, latensi paket pertama mencakup waktu yang diperlukan untuk membuat koneksi.
    print('[Metric] Request ID: {}, first-packet latency: {} ms'.format(
        synthesizer.get_last_request_id(),
        synthesizer.get_first_package_delay()))
    
    # Simpan audio ke file lokal.
    with open('output.mp3', 'wb') as f:
        f.write(audio)

    Java

    import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesisParam;
    import com.alibaba.dashscope.audio.ttsv2.SpeechSynthesizer;
    import com.alibaba.dashscope.utils.Constants;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    
    public class Main {
        // Gunakan model yang sama untuk voice design dan sintesis suara.
        private static String model = "cosyvoice-v3.5-plus";
        // Ganti nilai parameter voice dengan ID suara kustom yang dihasilkan oleh voice design.
        private static String voice = "your_voice_id";
    
        public static void streamAudioDataToSpeaker() {
            // Atur parameter permintaan.
            SpeechSynthesisParam param =
                    SpeechSynthesisParam.builder()
                            // Kunci API berbeda untuk wilayah Singapura dan Beijing. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
                            // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                            .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                            .model(model) // Tentukan model.
                            .voice(voice) // Tentukan suara.
                            .build();
    
            // Mode sinkron: Nonaktifkan callback (parameter kedua adalah null).
            SpeechSynthesizer synthesizer = new SpeechSynthesizer(param, null);
            ByteBuffer audio = null;
            try {
                // Blokir thread hingga data audio dikembalikan.
                audio = synthesizer.call("How is the weather today?");
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                // Tutup koneksi WebSocket setelah tugas selesai.
                synthesizer.getDuplexApi().close(1000, "bye");
            }
            if (audio != null) {
                // Simpan data audio ke file lokal output.mp3.
                File file = new File("output.mp3");
                // Pertama kali Anda mengirim teks, koneksi WebSocket harus dibuat. Oleh karena itu, latensi paket pertama mencakup waktu yang diperlukan untuk membuat koneksi.
                System.out.println(
                        "[Metric] Request ID: "
                                + synthesizer.getLastRequestId()
                                + ", first-packet latency (ms): "
                                + synthesizer.getFirstPackageDelay());
                try (FileOutputStream fos = new FileOutputStream(file)) {
                    fos.write(audio.array());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    
        public static void main(String[] args) {
            // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan wss://dashscope.aliyuncs.com/api-ws/v1/inference.
            Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
            streamAudioDataToSpeaker();
            System.exit(0);
        }
    }

Voice cloning: Persyaratan audio

Penting

Fitur ini tidak didukung di Wilayah Singapura.

Audio input berkualitas tinggi sangat penting untuk hasil Voice Cloning yang luar biasa.

Item

Persyaratan

Format yang Didukung

WAV (16-bit), MP3, dan M4A

Durasi Audio

Disarankan: 10 hingga 20 detik. Maksimum: 60 detik.

Ukuran File

≤ 10 MB

Laju Sampel

≥ 16 kHz

Saluran Audio

Mono atau Stereo. Untuk audio Stereo, hanya saluran pertama yang diproses. Pastikan saluran pertama berisi ucapan manusia yang jelas.

Konten

Agar hasil optimal, file audio Anda harus memenuhi persyaratan berikut:

Voice design: Menulis deskripsi suara berkualitas tinggi

Penting

Fitur ini tidak didukung di Wilayah Singapura.

Persyaratan dan batasan

Saat menulis deskripsi suara (voice_prompt), Anda harus mengikuti batasan teknis berikut:

  • Batas panjang: voice_prompt tidak boleh lebih dari 500 karakter.

  • Bahasa yang didukung: Deskripsi harus dalam bahasa Mandarin atau Inggris.

Prinsip inti

Deskripsi suara berkualitas tinggi (voice_prompt) adalah kunci keberhasilan dalam menciptakan suara ideal Anda. Deskripsi ini berperan sebagai cetak biru untuk voice design, yang secara langsung membimbing model untuk menghasilkan suara dengan karakteristik tertentu.

Ikuti prinsip inti berikut saat mendeskripsikan suara:

  1. Bersifat spesifik, bukan samar: Gunakan kata-kata yang menggambarkan kualitas suara konkret, seperti "dalam," "jernih," atau "cepat bicara." Hindari istilah subjektif dan tidak informatif seperti "bersuara bagus" atau "biasa saja."

  2. Bersifat multidimensi, bukan satu dimensi: Deskripsi yang baik biasanya menggabungkan beberapa dimensi, seperti jenis kelamin, usia, dan emosi (seperti dijelaskan di bawah). Deskripsi satu dimensi, seperti "suara perempuan," terlalu luas untuk menghasilkan kualitas suara yang khas.

  3. Bersifat objektif, bukan subjektif: Fokuslah pada karakteristik fisik dan persepsi suara itu sendiri, bukan pada preferensi pribadi. Misalnya, gunakan "nada sedikit lebih tinggi dengan pengucapan energetik" daripada "suara favorit saya."

  4. Bersifat orisinal, bukan imitatif: Gambarkan karakteristik suara daripada meminta peniruan individu tertentu, seperti selebriti atau aktor. Permintaan semacam itu berisiko melanggar hak cipta, dan model tidak mendukung peniruan langsung.

  5. Bersifat ringkas, bukan berulang: Pastikan setiap kata memberikan makna. Hindari pengulangan sinonim atau penggunaan intensifier yang tidak berarti, seperti "suara yang sangat, sangat, sangat bagus."

Dimensi deskriptif

Dimensi

Contoh

Jenis kelamin

Laki-laki, perempuan, netral

Usia

Anak (5–12), remaja (13–18), dewasa muda (19–35), paruh baya (36–55), lansia (55+)

Pitch

Tinggi, sedang, rendah, agak tinggi, agak rendah

Laju ucapan

Cepat, sedang, lambat, agak cepat, agak lambat

Emosi

Ceria, tenang, lembut, serius, hidup, tenang, menenangkan

Karakteristik

Magnetis, jernih, serak, lembut, manis, kaya, kuat

Tujuan

Penyiaran berita, sulih suara iklan, buku audio, karakter animasi, asisten suara, narasi dokumenter

Perbandingan contoh

✅ Contoh yang direkomendasikan

  • "Suara perempuan muda yang hidup dengan laju ucapan cepat dan intonasi naik yang jelas, cocok untuk memperkenalkan produk fesyen."

    Analisis: Deskripsi ini menggabungkan usia, kepribadian, laju ucapan, dan intonasi, serta menentukan kasus penggunaan, sehingga menciptakan profil suara yang jelas dan lengkap.

  • "Suara laki-laki paruh baya yang tenang dengan laju ucapan lambat dan timbre dalam yang magnetis, cocok untuk membaca berita atau narasi dokumenter."

    Analisis: Deskripsi ini secara jelas menentukan jenis kelamin, rentang usia, laju ucapan, karakteristik suara, dan tujuan penggunaan.

  • "Suara anak yang lucu, sekitar perempuan berusia 8 tahun, dengan pengucapan yang agak kekanak-kanakan, cocok untuk suara karakter animasi."

    Analisis: Deskripsi ini menentukan usia spesifik dan kualitas suara (kekanak-kanakan) serta mendefinisikan tujuan yang jelas.

  • "Suara perempuan yang lembut dan intelektual, sekitar usia 30 tahun, dengan nada tenang, cocok untuk narasi buku audio."

    Analisis: Deskripsi ini menggunakan kata-kata seperti 'intelektual' dan 'tenang' untuk secara efektif menyampaikan emosi dan gaya suara.

❌ Contoh tidak efektif dan saran perbaikan

Contoh Buruk

Masalah Utama

Saran Perbaikan

"Suara yang enak didengar"

Terlalu samar dan subjektif, tidak memiliki karakteristik yang dapat ditindaklanjuti.

Tambahkan dimensi spesifik, misalnya: "Suara perempuan dewasa muda dengan nada jernih dan intonasi lembut."

"Suara seperti selebriti"

Berisiko melanggar hak cipta. Model tidak mendukung peniruan langsung.

Gambarkan karakteristik suaranya. Misalnya: "Suara laki-laki dewasa dengan timbre magnetis dan laju ucapan tenang."

"Suara perempuan yang sangat, sangat, sangat bagus"

Informasi berulang. Mengulang kata tidak membantu mendefinisikan suara.

Hapus pengulangan dan tambahkan deskripsi yang efektif, seperti: "Suara perempuan berusia 20 hingga 24 tahun dengan nada ringan dan ceria, pitch hidup, dan kualitas manis."

"123456"

Input tidak valid. Model tidak dapat menguraikannya sebagai karakteristik suara.

Berikan deskripsi teks yang bermakna. Lihat contoh yang direkomendasikan di atas.

API

Perbandingan model

Internasional

Dalam mode penyebaran internasional, titik akses dan penyimpanan data berada di wilayah Singapura. Resource komputasi inferensi model dijadwalkan secara global, tidak termasuk Tiongkok daratan.

Fitur

cosyvoice-v3-plus

cosyvoice-v3-flash

Bahasa yang didukung

Suara sistem (bervariasi tergantung suara): Bahasa Tionghoa (Mandarin, Timur Laut, Minnan, dan Shaanxi), Bahasa Inggris, Bahasa Jepang, dan Bahasa Korea.

Suara sistem (bervariasi tergantung suara): Bahasa Mandarin dan Bahasa Inggris.

Format audio

PCM, WAV, MP3, dan Opus

Laju sampel audio

8 kHz, 16 kHz, 22,05 kHz, 24 kHz, 44,1 kHz, dan 48 kHz

Voice cloning

Tidak didukung

Voice design

Tidak didukung

SSML

Didukung

Fitur ini tersedia untuk system voices yang ditandai mendukung SSML dalam daftar suara.
Untuk menggunakan fitur ini, lihat pengenalan bahasa markup SSML.

LaTeX

Didukung

Untuk menggunakan fitur ini, lihat rumus LaTeX ke ucapan.

Penyesuaian volume

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan volume.

Penyesuaian laju ucapan

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan speech_rate.
Dalam SDK Java, parameter ini adalah speechRate.

Penyesuaian pitch

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan pitch_rate.
Dalam SDK Java, parameter ini adalah pitchRate.

Penyesuaian bitrate

Didukung

Fitur ini hanya mendukung format audio Opus.
Untuk menggunakan fitur ini, tentukan parameter permintaan bit_rate.
Dalam SDK Java, parameter ini adalah bitRate.

Timestamp

Didukung (dinonaktifkan secara default).

Fitur ini tersedia untuk system voices yang ditandai mendukung timestamp dalam daftar suara.
Untuk menggunakan fitur ini, tentukan parameter permintaan word_timestamp_enabled.
Dalam SDK Java, parameter ini adalah enableWordTimestamp.

Kontrol instruksi (Instruct)

Tidak didukung

Didukung

Fitur ini tersedia untuk system voices yang ditandai mendukung Instruct dalam daftar suara.
Untuk menggunakan fitur ini, tentukan parameter permintaan instruction.

Streaming Input

Didukung

Streaming Output

Didukung

Batas laju (RPS)

3

Jenis koneksi

SDK Java dan Python, serta API WebSocket

Harga

$0,26 per 10.000 karakter

$0,13 per 10.000 karakter

Tiongkok daratan

Dalam mode penyebaran Tiongkok daratan, titik akses dan penyimpanan data berada di wilayah Beijing, dan resource komputasi inferensi model dibatasi hanya untuk Tiongkok daratan.

Fitur

cosyvoice-v3.5-plus

cosyvoice-v3.5-flash

cosyvoice-v3-plus

cosyvoice-v3-flash

cosyvoice-v2

Bahasa yang didukung

Tidak tersedia system voices. Untuk suara hasil kloning, model ini mendukung Mandarin (Mandarin, Kanton, Henan, Hubei, Minnan, Ningxia, Shaanxi, Shandong, Shanghai, dan Sichuan), Inggris, Prancis, Jerman, Jepang, Korea, Rusia, Portugis, Thailand, Indonesia, dan Vietnam.

Untuk suara hasil desain, model ini mendukung Mandarin (Mandarin) dan Inggris.

Suara sistem (berbeda tergantung wilayah): Cina (Mandarin, Timur Laut, Minnan, dan Shaanxi), Inggris, Jepang, dan Korea.

Suara hasil kloning: Mandarin (Mandarin), Inggris, Prancis, Jerman, Jepang, Korea, dan Rusia.

System voices (bervariasi tergantung suara): Mandarin (Mandarin) dan Inggris.

Suara yang dikloning mencakup bahasa berikut: Bahasa Tionghoa (Mandarin, Kanton, Timur Laut, Gansu, Guizhou, Henan, Hubei, Jiangxi, Minnan, Ningxia, Shanxi, Shaanxi, Shandong, Shanghai, Sichuan, Tianjin, dan Yunnan), Bahasa Inggris, Bahasa Prancis, Bahasa Jerman, Bahasa Jepang, Bahasa Korea, Bahasa Rusia, Bahasa Portugis, Bahasa Thailand, Bahasa Indonesia, dan Bahasa Vietnam.

Suara sistem (berbeda-beda tergantung pada suara): Mandarin Tiongkok, Inggris, Korea, dan Jepang.

Suara hasil kloning: Mandarin (Mandarin) dan Inggris.

Format audio

PCM, WAV, MP3, dan Opus

Laju sampel audio

8 kHz, 16 kHz, 22,05 kHz, 24 kHz, 44,1 kHz, dan 48 kHz

Voice cloning

Didukung

Untuk menggunakan fitur ini, lihat API Voice Cloning/Design CosyVoice.
Bahasa yang didukung untuk voice cloning:
cosyvoice-v2: Bahasa Mandarin dan Bahasa Inggris.
cosyvoice-v3-flash: Bahasa Tionghoa (Mandarin, Kanton, dialek Timur Laut, Gansu, Guizhou, Henan, Hubei, Jiangxi, Minnan, Ningxia, Shanxi, Shaanxi, Shandong, Shanghai, Sichuan, Tianjin, dan Yunnan), serta bahasa Inggris, Prancis, Jerman, Jepang, Korea, Rusia, Portugis, Thailand, Indonesia, dan Vietnam.
cosyvoice-v3-plus: Mandarin (Mandarin), Inggris, Prancis, Jerman, Jepang, Korea, dan Rusia.
cosyvoice-v3.5-plus dan cosyvoice-v3.5-flash: Bahasa Tiongkok (Mandarin, Kanton, Henan, Hubei, Minnan, Ningxia, Shaanxi, Shandong, Shanghai, dan Sichuan), bahasa Inggris, bahasa Prancis, bahasa Jerman, bahasa Jepang, bahasa Korea, bahasa Rusia, bahasa Portugis, bahasa Thailand, bahasa Indonesia, dan bahasa Vietnam.

Voice design

Didukung untuk model cosyvoice-v3.5; tidak didukung untuk model cosyvoice-v3.

Untuk model yang didukung, lihat API Voice Cloning/Design CosyVoice.
Bahasa yang didukung untuk voice design: Mandarin dan Inggris.

Tidak didukung

SSML

Didukung

Fitur ini tersedia untuk suara hasil kloning dan untuk system voices yang ditandai mendukung SSML dalam daftar suara.
Untuk menggunakan fitur ini, lihat pengenalan bahasa markup SSML.

LaTeX

Didukung

Untuk menggunakan fitur ini, lihat rumus LaTeX ke ucapan.

Penyesuaian volume

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan volume.

Penyesuaian laju ucapan

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan speech_rate.
Dalam SDK Java, parameter ini adalah speechRate.

Penyesuaian pitch

Didukung

Untuk menggunakan fitur ini, tentukan parameter permintaan pitch_rate.
Dalam SDK Java, parameter ini adalah pitchRate.

Penyesuaian bitrate

Didukung

Fitur ini hanya mendukung format audio Opus.
Untuk menggunakan fitur ini, tentukan parameter permintaan bit_rate.
Dalam SDK Java, parameter ini adalah bitRate.

Timestamp

Didukung (dinonaktifkan secara default).

Fitur ini tersedia untuk suara hasil kloning dan untuk system voices yang ditandai mendukung timestamp dalam daftar suara.
Untuk menggunakan fitur ini, tentukan parameter permintaan word_timestamp_enabled.
Dalam SDK Java, parameter ini adalah enableWordTimestamp.

Kontrol instruksi (Instruct)

Didukung

Fitur ini tersedia untuk suara hasil kloning dan untuk system voices yang ditandai mendukung Instruct dalam daftar suara.
Untuk menggunakan fitur ini, tentukan parameter permintaan instruction.

Tidak didukung

Didukung

Fitur ini tersedia untuk suara hasil kloning dan untuk system voices yang ditandai mendukung Instruct dalam daftar suara.
Untuk menggunakan fitur ini, tentukan parameter permintaan instruction.

Tidak didukung

Input streaming

Didukung

Streaming Output

Didukung

Batas laju (RPS)

3

Jenis koneksi

SDK Java dan Python, serta API WebSocket

Harga

CNY 0,22 per 10.000 karakter

CNY 0,116 per 10.000 karakter

CNY 0,286706 per 10.000 karakter

CNY 0,14335 per 10.000 karakter

CNY 0,286706 per 10.000 karakter

Suara sistem yang didukung

Daftar Suara CosyVoice

FAQ

T: Bagaimana cara memperbaiki pelafalan yang salah dan kata-kata dengan banyak pelafalan?

  • Ganti kata-kata dengan banyak pelafalan dengan homofon sebagai solusi cepat.

  • Gunakan Speech Synthesis Markup Language (SSML) untuk mengontrol pelafalan.

T: Bagaimana cara memecahkan masalah audio diam dari Suara Hasil Kloning?

  1. Verifikasi status suara

    Panggil API voice cloning/design CosyVoice untuk memastikan status suara adalah OK.

  2. Pastikan konsistensi versi model

    Pastikan Parameter target_model untuk Voice Cloning sesuai dengan Parameter model untuk Sintesis Suara. Misalnya:

    • Untuk Voice Cloning, gunakan cosyvoice-v3-plus.

    • Untuk Sintesis Suara, Anda juga harus menggunakan cosyvoice-v3-plus.

  3. Verifikasi kualitas audio sumber

    Pastikan Audio Sumber untuk Voice Cloning memenuhi persyaratan dalam dokumentasi API voice cloning/design CosyVoice:

    • Durasi audio: 10–20 detik

    • Kualitas audio jernih

    • Tidak ada Noise Latar Belakang

  4. Periksa Parameter permintaan

    Periksa apakah Parameter voice dalam permintaan Sintesis Suara diatur ke ID Suara Hasil Kloning.

T: Bagaimana cara memperbaiki audio tidak stabil atau tidak lengkap dari Suara Hasil Kloning?

Audio hasil sintesis dari Suara Hasil Kloning mungkin memiliki masalah berikut:

  • Pemutaran tidak lengkap, di mana hanya sebagian teks yang diucapkan.

  • Kualitas sintesis tidak konsisten.

  • Jeda tak terduga atau segmen diam dalam audio.

Kemungkinan penyebab: Kualitas Audio Sumber tidak memenuhi persyaratan.

Solusi: Periksa apakah Audio Sumber Anda memenuhi persyaratan berikut. Kami menyarankan merekam ulang audio dengan mengikuti Panduan Operasi Perekaman.

  • Periksa kontinuitas audio: Pastikan ucapan dalam Audio Sumber Anda berkelanjutan dan hindari jeda panjang atau segmen diam (lebih dari 2 detik). Jika audio berisi segmen diam yang signifikan, model mungkin menginterpretasikan keheningan atau Noise tersebut sebagai Fitur Suara, sehingga menurunkan kualitas output.

  • Periksa rasio aktivitas ucapan: Pastikan ucapan aktif mencakup minimal 60% dari total durasi audio. Noise Latar Belakang atau segmen non-ucapan yang berlebihan dapat mengganggu ekstraksi Fitur Suara.

  • Verifikasi detail kualitas audio:

    • Durasi audio: 10–20 detik (disarankan 15 detik).

    • Pelafalan jelas dan laju ucapan stabil.

    • Tidak ada Noise Latar Belakang, gema, atau statis.

    • Tingkat audio konsisten tanpa segmen diam yang panjang.