Layanan kloning suara CosyVoice menggunakan model suara generatif skala besar untuk menghasilkan suara kustom yang sangat mirip dan terdengar alami hanya dari cuplikan audio berdurasi 10 hingga 20 detik, tanpa memerlukan pelatihan tradisional. Kloning suara dan sintesis suara merupakan dua langkah berurutan. Dokumen ini menjelaskan parameter API dan detail terkait kloning suara. Untuk sintesis suara, lihat Sintesis suara Real-time - CosyVoice/Sambert.
Dokumen ini hanya berlaku untuk wilayah China (Beijing). Untuk menggunakan model ini, Anda harus menggunakan Kunci API dari wilayah China (Beijing).
Panduan pengguna: Untuk pengenalan model dan cara memilihnya, lihat Sintesis suara Real-time - CosyVoice/Sambert.
Persyaratan audio
Audio input berkualitas tinggi sangat penting untuk mendapatkan hasil kloning yang berkualitas tinggi.
Item | Persyaratan |
Format yang didukung | WAV (16-bit), MP3, M4A |
Durasi audio | Direkomendasikan: 10 hingga 20 detik. Maksimum: 60 detik. |
Ukuran file | ≤ 10 MB |
Sample rate | ≥ 16 kHz |
Saluran suara | Mono / Stereo. Untuk audio stereo, hanya saluran pertama yang diproses. Pastikan saluran pertama berisi ucapan manusia yang valid. |
Konten | Audio harus berisi minimal 5 detik pembacaan yang kontinu dan jelas tanpa suara latar. Sisa audio hanya boleh berisi jeda pendek (≤ 2 detik). Seluruh cuplikan audio harus bebas dari musik latar, kebisingan, atau suara lain untuk memastikan kualitas konten bacaan utama. Gunakan audio ucapan normal sebagai input. Jangan mengunggah lagu atau audio bernyanyi untuk memastikan akurasi dan kegunaan suara yang dikloning. |
Bahasa | Bervariasi tergantung pada model sintesis suara yang menggerakkan suara tersebut (ditentukan oleh parameter
|
Memulai: Dari kloning hingga sintesis
1. Alur kerja
Kloning suara dan sintesis suara adalah dua langkah yang saling terkait namun berbeda. Proses ini mengikuti alur "buat terlebih dahulu, lalu gunakan":
Buat suara
Panggil API Create voice dan unggah cuplikan audio. Sistem menganalisis audio dan membuat suara kloning unik. Pada langkah ini, Anda harus menentukan
target_model/targetModeluntuk memilih model sintesis suara yang akan digunakan bersama suara yang dibuat.Jika Anda telah membuat suara sebelumnya, Anda dapat melewati langkah ini. Panggil API Query voice list untuk memeriksa suara yang sudah ada.
Gunakan suara untuk sintesis suara
Panggil API sintesis suara dan masukkan ID suara yang Anda peroleh pada langkah sebelumnya. Model sintesis suara yang ditentukan pada langkah ini harus sama dengan
target_model/targetModelyang ditentukan pada langkah sebelumnya.
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: voice-enrollment
Model sintesis suara yang akan digunakan bersama suara tersebut:
Untuk hasil terbaik, gunakan
cosyvoice-v3-plusjika sumber daya dan anggaran Anda memungkinkan.Versi
Skenario
cosyvoice-v3-plus
Untuk kualitas suara dan ekspresivitas terbaik dengan anggaran yang mencukupi.
cosyvoice-v3-flash
Untuk keseimbangan antara performa dan biaya, menawarkan nilai tinggi.
cosyvoice-v2
Untuk kompatibilitas dengan versi lama atau skenario dengan persyaratan rendah.
Persiapan
Buat Kunci API: Buat Kunci API. Untuk alasan keamanan, ekspor Kunci API sebagai Variabel lingkungan.
Instal SDK: Pastikan Anda telah menginstal versi terbaru SDK DashScope.
Persiapkan URL audio: Unggah file audio yang memenuhi persyaratan audio ke lokasi yang dapat diakses publik, seperti Object Storage Service (OSS).
3. Contoh end-to-end: Dari kloning hingga sintesis
Contoh berikut menunjukkan cara menggunakan suara kustom yang dihasilkan melalui kloning suara dalam sintesis suara untuk menghasilkan output yang sangat mirip dengan suara aslinya.
Prinsip utama: Saat melakukan kloning suara,
target_model(model sintesis suara yang akan digunakan bersama suara tersebut) harus sama dengan model sintesis suara yang Anda tentukan saat memanggil API sintesis suara. Jika tidak, sintesis akan gagal.Jangan lupa mengganti
AUDIO_URLdalam contoh dengan URL audio aktual Anda.
import os
import time
import dashscope
from dashscope.audio.tts_v2 import VoiceEnrollmentService, SpeechSynthesizer
# 1. Persiapkan lingkungan
# Konfigurasikan Kunci API sebagai variabel lingkungan.
# export DASHSCOPE_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")
if not dashscope.api_key:
raise ValueError("Variabel lingkungan DASHSCOPE_API_KEY belum diatur.")
# 2. Tentukan parameter kloning
TARGET_MODEL = "cosyvoice-v3-plus"
# Berikan awalan yang bermakna untuk suara tersebut.
VOICE_PREFIX = "myvoice" # Hanya digit dan huruf kecil yang diizinkan, kurang dari 10 karakter.
# URL audio yang dapat diakses publik
AUDIO_URL = "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/cosyvoice/cosyvoice-zeroshot-sample.wav" # URL contoh, ganti dengan URL Anda sendiri.
# 3. Buat suara (tugas asinkron)
print("--- Langkah 1: Membuat pendaftaran suara ---")
service = VoiceEnrollmentService()
try:
voice_id = service.create_voice(
target_model=TARGET_MODEL,
prefix=VOICE_PREFIX,
url=AUDIO_URL
)
print(f"Pendaftaran suara berhasil dikirim. Request ID: {service.get_last_request_id()}")
print(f"ID Suara yang Dihasilkan: {voice_id}")
except Exception as e:
print(f"Terjadi kesalahan saat pembuatan suara: {e}")
raise e
# 4. Periksa status suara secara berkala
print("\n--- Langkah 2: Memeriksa status suara ---")
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"Percobaan {attempt + 1}/{max_attempts}: Status suara adalah '{status}'")
if status == "OK":
print("Suara siap digunakan untuk sintesis.")
break
elif status == "UNDEPLOYED":
print(f"Pemrosesan suara gagal dengan status: {status}. Periksa kualitas audio atau hubungi dukungan teknis.")
raise RuntimeError(f"Pemrosesan suara gagal dengan status: {status}")
# Untuk status antara seperti "DEPLOYING", lanjutkan menunggu.
time.sleep(poll_interval)
except Exception as e:
print(f"Terjadi kesalahan saat memeriksa status: {e}")
time.sleep(poll_interval)
else:
print("Waktu pemeriksaan habis. Suara belum siap setelah beberapa percobaan.")
raise RuntimeError("Waktu pemeriksaan habis. Suara belum siap setelah beberapa percobaan.")
# 5. Lakukan sintesis suara menggunakan suara yang dikloning
print("\n--- Langkah 3: Melakukan sintesis suara dengan suara baru ---")
try:
synthesizer = SpeechSynthesizer(model=TARGET_MODEL, voice=voice_id)
text_to_synthesize = "Selamat, Anda telah berhasil mengkloning dan mensintesis suara Anda sendiri!"
# Metode call() mengembalikan data audio biner.
audio_data = synthesizer.call(text_to_synthesize)
print(f"Sintesis suara berhasil. 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 disimpan ke {output_file}")
except Exception as e:
print(f"Terjadi kesalahan saat sintesis suara: {e}")Referensi API
Saat menggunakan API yang berbeda, pastikan semua operasi dilakukan menggunakan akun yang sama.
Create voice
Mengunggah file audio untuk kloning guna membuat suara kustom.
Python SDK
Deskripsi API
def create_voice(self, target_model: str, prefix: str, url: str, language_hints: List[str] = None) -> str:
'''
Membuat suara kustom baru.
param: target_model Model sintesis suara yang menggerakkan suara. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus.
param: prefix Nama yang mudah diingat untuk suara (hanya digit, huruf besar dan kecil, serta garis bawah yang diizinkan, maksimal 10 karakter). Gunakan pengenal yang terkait dengan peran atau skenario. Kata kunci ini muncul dalam nama suara yang dikloning. Format nama suara yang dihasilkan adalah: model_name-prefix-unique_identifier, misalnya, cosyvoice-v3-plus-myvoice-xxxxxxxx.
param: url URL file audio untuk kloning suara. URL harus dapat diakses publik.
param: language_hints Menentukan bahasa dari audio sampel yang digunakan untuk mengekstraksi fitur suara target. Parameter ini hanya berlaku untuk model cosyvoice-v3-flash dan cosyvoice-v3-plus.
Parameter ini membantu model mengidentifikasi bahasa audio sampel (audio referensi asli) agar ekstraksi fitur suara lebih akurat dan meningkatkan hasil kloning.
Jika petunjuk bahasa yang ditentukan tidak sesuai dengan bahasa audio aktual, misalnya menetapkan 'en' untuk file audio berbahasa Mandarin, sistem akan mengabaikan petunjuk tersebut dan mendeteksi bahasa secara otomatis dari konten audio.
Nilai yang valid: zh (default), en, fr, de, ja, ko, ru. Parameter ini berupa array, tetapi versi saat ini hanya memproses elemen pertama. Kirim hanya satu nilai.
return: voice_id ID suara. Dapat langsung digunakan untuk parameter voice dalam API sintesis suara.
'''target_model: Model sintesis suara yang akan digunakan bersama suara tersebut. Nilai ini harus sama dengan model sintesis suara yang Anda gunakan saat memanggil API sintesis suara. Jika tidak, sintesis akan gagal.language_hints: Menentukan bahasa dari audio sampel yang digunakan untuk mengekstraksi fitur timbre suara target. Parameter ini hanya berlaku untuk model cosyvoice-v3-flash dan cosyvoice-v3-plus.Deskripsi: Parameter ini membantu model mengidentifikasi bahasa audio sampel (audio referensi asli) agar ekstraksi fitur suara lebih akurat dan meningkatkan hasil kloning. Jika petunjuk bahasa yang ditentukan tidak sesuai dengan bahasa audio aktual, misalnya menetapkan
enuntuk file audio berbahasa Mandarin, sistem akan mengabaikan petunjuk tersebut dan mendeteksi bahasa secara otomatis dari konten audio.Nilai yang valid:
zh: (default)
en: Bahasa Inggris
fr: Bahasa Prancis
de: Bahasa Jerman
ja: Bahasa Jepang
ko: Bahasa Korea
ru: Bahasa Rusia
Catatan: Parameter ini berupa array, tetapi versi saat ini hanya memproses elemen pertama. Kirim hanya satu nilai.
Contoh permintaan
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
# Hindari pemanggilan berulang. Setiap panggilan membuat suara baru. Anda tidak dapat membuat lebih banyak suara setelah mencapai batas kuota.
voice_id = service.create_voice(
target_model='cosyvoice-v3-plus',
prefix='myvoice',
url='https://your-audio-file-url',
language_hints=['en']
)
print(f"Request ID: {service.get_last_request_id()}")
print(f"ID Suara: {voice_id}")Java SDK
Deskripsi API
/**
* Membuat suara kustom baru.
*
* @param targetModel Model sintesis suara yang menggerakkan suara. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus.
* @param prefix Nama yang mudah diingat untuk suara (hanya digit, huruf besar dan kecil, serta garis bawah yang diizinkan, maksimal 10 karakter). Gunakan pengenal yang terkait dengan peran atau skenario. Kata kunci ini muncul dalam nama suara yang dikloning. Format nama suara yang dihasilkan adalah: model_name-prefix-unique_identifier, misalnya, cosyvoice-v3-plus-myvoice-xxxxxxxx.
* @param url URL file audio untuk kloning suara. URL harus dapat diakses publik.
* @param customParam Parameter kustom. Anda dapat menentukan languageHints di sini.
* languageHints menentukan bahasa dari audio sampel yang digunakan untuk mengekstraksi fitur suara target. Parameter ini hanya berlaku untuk model cosyvoice-v3-flash dan cosyvoice-v3-plus.
* Parameter ini membantu model mengidentifikasi bahasa audio sampel (audio referensi asli) agar ekstraksi fitur suara lebih akurat dan meningkatkan hasil kloning.
* Jika petunjuk bahasa yang ditentukan tidak sesuai dengan bahasa audio aktual, misalnya menetapkan 'en' untuk file audio berbahasa Mandarin, sistem akan mengabaikan petunjuk tersebut dan mendeteksi bahasa secara otomatis dari konten audio.
* Nilai yang valid: zh (default), en, fr, de, ja, ko, ru. Parameter ini berupa array, tetapi versi saat ini hanya memproses elemen pertama. Kirim hanya satu nilai.
* @return Voice Objek suara yang baru dibuat. Anda dapat memperoleh ID suara menggunakan metode getVoiceId dari objek Voice. ID tersebut dapat langsung digunakan untuk parameter voice dalam API sintesis suara.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public Voice createVoice(String targetModel, String prefix, String url, VoiceEnrollmentParam customParam) throws NoApiKeyException, InputRequiredExceptiontargetModel: Model sintesis suara yang akan digunakan bersama suara tersebut. Nilai ini harus sama dengan model sintesis suara yang Anda gunakan saat memanggil API sintesis suara. Jika tidak, sintesis akan gagal.languageHints: Menentukan bahasa dari audio sampel yang digunakan untuk mengekstraksi fitur timbre suara target. Parameter ini hanya berlaku untuk model cosyvoice-v3-flash dan cosyvoice-v3-plus.Deskripsi: Parameter ini membantu model mengidentifikasi bahasa audio sampel (audio referensi asli) agar ekstraksi fitur suara lebih akurat dan meningkatkan hasil kloning. Jika petunjuk bahasa yang ditentukan tidak sesuai dengan bahasa audio aktual, misalnya menetapkan
enuntuk file audio berbahasa Mandarin, sistem akan mengabaikan petunjuk tersebut dan mendeteksi bahasa secara otomatis dari konten audio.Nilai yang valid:
zh: (default)
en: Bahasa Inggris
fr: Bahasa Prancis
de: Bahasa Jerman
ja: Bahasa Jepang
ko: Bahasa Korea
ru: Bahasa Rusia
Catatan: Parameter ini berupa array, tetapi versi saat ini hanya memproses elemen pertama. Kirim hanya satu nilai.
Contoh permintaan
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentParam;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collections;
public class Main {
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) {
String apiKey = System.getenv("DASHSCOPE_API_KEY");
String targetModel = "cosyvoice-v3-plus";
String prefix = "myvoice";
String fileUrl = "https://your-audio-file-url";
String cloneModelName = "voice-enrollment";
try {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
Voice myVoice = service.createVoice(
targetModel,
prefix,
fileUrl,
VoiceEnrollmentParam.builder()
.model(cloneModelName)
.languageHints(Collections.singletonList("en")).build());
logger.info("Pembuatan suara berhasil dikirim. Request ID: {}", service.getLastRequestId());
logger.info("ID Suara yang Dihasilkan: {}", myVoice.getVoiceId());
} catch (Exception e) {
logger.error("Gagal membuat suara", e);
}
}
}RESTful API
Informasi dasar
URL | |
Metode permintaan | POST |
Header permintaan | |
Isi pesan | Isi pesan yang berisi semua parameter permintaan adalah sebagai berikut. Anda dapat menghilangkan bidang opsional sesuai kebutuhan: Penting
|
Parameter permintaan
Parameter | Tipe | Nilai default | Wajib | Deskripsi |
model | string | - | Ya | Model kloning suara. Nilainya harus |
action | string | - | Ya | Jenis operasi. Nilainya tetap |
target_model | string | - | Ya | Model sintesis suara yang menggerakkan suara. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. |
prefix | string | - | Ya | Nama yang mudah diingat untuk suara (hanya digit, huruf besar dan kecil, serta garis bawah yang diizinkan, maksimal 10 karakter). Gunakan pengenal yang terkait dengan peran atau skenario. Kata kunci ini muncul dalam nama suara yang dikloning. Format nama suara yang dihasilkan adalah: |
url | string | - | Ya | URL file audio untuk kloning suara. URL harus dapat diakses publik. |
language_hints | array[string] | - | Tidak | Menentukan bahasa dari audio sampel yang digunakan untuk mengekstraksi fitur suara target. Parameter ini hanya berlaku untuk model cosyvoice-v3-flash dan cosyvoice-v3-plus. Deskripsi: Parameter ini membantu model mengidentifikasi bahasa audio sampel (audio referensi asli) agar ekstraksi fitur suara lebih akurat dan meningkatkan hasil kloning. Jika petunjuk bahasa yang ditentukan tidak sesuai dengan bahasa audio aktual, misalnya menetapkan Nilai yang valid:
Catatan: Parameter ini berupa array, tetapi versi saat ini hanya memproses elemen pertama. Kirim hanya satu nilai. |
Parameter respons
Parameter | Tipe | Deskripsi |
voice_id | string | ID suara. Dapat langsung digunakan untuk parameter |
Query voice list
Mengambil daftar suara yang telah dibuat menggunakan kueri berhalaman.
Python SDK
Deskripsi API
def list_voices(self, prefix=None, page_index: int = 0, page_size: int = 10) -> List[dict]:
'''
Mengkueri semua suara yang telah dibuat.
param: prefix Awalan kustom untuk suara. Hanya digit dan huruf kecil yang diizinkan, maksimal 10 karakter.
param: page_index Indeks halaman untuk kueri.
param: page_size Ukuran halaman untuk kueri.
return: List[dict] Daftar suara. Termasuk ID, waktu pembuatan, waktu modifikasi, dan status setiap suara. Format: [{'gmt_create': '2025-10-09 14:51:01', 'gmt_modified': '2025-10-09 14:51:07', 'status': 'OK', 'voice_id': 'cosyvoice-v3-myvoice-xxx'}]
Terdapat tiga status suara:
DEPLOYING: Sedang ditinjau
OK: Disetujui dan siap digunakan
UNDEPLOYED: Tidak disetujui dan tidak dapat digunakan
'''Contoh permintaan
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
# Filter berdasarkan awalan, atau atur ke None untuk mengkueri semua.
voices = service.list_voices(prefix='myvoice', page_index=0, page_size=10)
print(f"Request ID: {service.get_last_request_id()}")
print(f"Suara yang ditemukan: {voices}")Contoh respons
[
{
"gmt_create": "2024-09-13 11:29:41",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
},
{
"gmt_create": "2024-09-13 13:22:38",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 13:22:38",
"status": "OK"
}
]Parameter respons
Parameter | Type | Deskripsi |
voice_id | string | ID suara. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
Java SDK
Deskripsi API
// Terdapat tiga status suara:
// DEPLOYING: Sedang ditinjau
// OK: Disetujui dan siap digunakan
// UNDEPLOYED: Tidak disetujui dan tidak dapat digunakan
/**
* Mengkueri semua suara yang telah dibuat. Indeks halaman default adalah 0, dan ukuran halaman default adalah 10.
*
* @param prefix Awalan kustom untuk suara. Hanya digit dan huruf kecil yang diizinkan, maksimal 10 karakter. Bisa null.
* @return Voice[] Array objek Voice. Objek Voice mengenkapsulasi ID suara, waktu pembuatan, waktu modifikasi, dan status.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public Voice[] listVoice(String prefix) throws NoApiKeyException, InputRequiredException
/**
* Mengkueri semua suara yang telah dibuat.
*
* @param prefix Awalan kustom untuk suara. Hanya digit dan huruf kecil yang diizinkan, maksimal 10 karakter.
* @param pageIndex Indeks halaman untuk kueri.
* @param pageSize Ukuran halaman untuk kueri.
* @return Voice[] Array objek Voice. Objek Voice mengenkapsulasi ID suara, waktu pembuatan, waktu modifikasi, dan status.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public Voice[] listVoice(String prefix, int pageIndex, int pageSize) throws NoApiKeyException, InputRequiredExceptionContoh permintaan
Anda harus mengimpor library pihak ketiga com.google.gson.Gson.
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // Jika Anda belum mengonfigurasi variabel lingkungan, ganti ini dengan Kunci API Anda.
private static String prefix = "myvoice"; // Ganti ini dengan nilai aktual Anda.
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// Kueri suara.
Voice[] voices = service.listVoice(prefix, 0, 10);
logger.info("Daftar berhasil. Request ID: {}", service.getLastRequestId());
logger.info("Detail Suara: {}", new Gson().toJson(voices));
}
}Contoh respons
[
{
"gmt_create": "2024-09-13 11:29:41",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
},
{
"gmt_create": "2024-09-13 13:22:38",
"voice_id": "yourVoiceId",
"gmt_modified": "2024-09-13 13:22:38",
"status": "OK"
}
]Parameter respons
Parameter | Tipe | Deskripsi |
voice_id | string | ID suara. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
RESTful API
Informasi dasar
URL | |
Metode permintaan | POST |
Header permintaan | |
Isi pesan | Isi pesan yang berisi semua parameter permintaan adalah sebagai berikut. Anda dapat menghilangkan bidang opsional sesuai kebutuhan: Penting
|
Parameter permintaan
Parameter | Tipe | Nilai default | Wajib | Deskripsi |
model | string | - | Ya | Model kloning suara. Nilainya tetap |
action | string | - | Ya | Jenis operasi. Nilainya tetap |
prefix | string | null | Tidak | Awalan kustom untuk suara. Hanya digit dan huruf kecil yang diizinkan, maksimal 10 karakter. |
page_index | integer | 0 | Tidak | Indeks nomor halaman, dimulai dari 0. |
page_size | integer | 10 | Tidak | Jumlah entri data per halaman. |
Parameter respons
Parameter | Tipe | Deskripsi |
voice_id | string | ID suara. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
Query a specific voice
Mengambil detail suara tertentu.
Python SDK
Deskripsi API
def query_voice(self, voice_id: str) -> List[str]:
'''
Mengkueri detail suara tertentu.
param: voice_id ID suara yang akan dikueri.
return: List[str] Detail suara, termasuk status, waktu pembuatan, tautan audio, dan lainnya.
'''Contoh permintaan
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
voice_id = 'cosyvoice-v3-plus-myvoice-xxxxxxxx'
voice_details = service.query_voice(voice_id=voice_id)
print(f"Request ID: {service.get_last_request_id()}")
print(f"Detail Suara: {voice_details}")Contoh respons
{
"gmt_create": "2024-09-13 11:29:41",
"resource_link": "https://yourAudioFileUrl",
"target_model": "cosyvoice-v3-plus",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
}Parameter respons
Parameter | Type | Deskripsi |
resource_link | string | URL audio yang dikloning. |
target_model | string | Model sintesis suara yang menggerakkan suara. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
Java SDK
Deskripsi API
/**
* Mengkueri detail suara tertentu.
*
* @param voiceId ID suara yang akan dikueri.
* @return Voice Detail suara, termasuk status, waktu pembuatan, tautan audio, dan lainnya.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public Voice queryVoice(String voiceId) throws NoApiKeyException, InputRequiredExceptionContoh permintaan
Anda harus mengimpor library pihak ketiga com.google.gson.Gson.
import com.alibaba.dashscope.audio.ttsv2.enrollment.Voice;
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // Jika Anda belum mengonfigurasi variabel lingkungan, ganti ini dengan Kunci API Anda.
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // Ganti ini dengan nilai aktual Anda.
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
Voice voice = service.queryVoice(voiceId);
logger.info("Kueri berhasil. Request ID: {}", service.getLastRequestId());
logger.info("Detail Suara: {}", new Gson().toJson(voice));
}
}Contoh respons
{
"gmt_create": "2024-09-13 11:29:41",
"resource_link": "https://yourAudioFileUrl",
"target_model": "cosyvoice-v3-plus",
"gmt_modified": "2024-09-13 11:29:41",
"status": "OK"
}Parameter respons
Parameter | Tipe | Deskripsi |
resource_link | string | URL audio yang dikloning. |
target_model | string | Model sintesis suara yang menggerakkan suara. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
RESTful API
Informasi dasar
URL | |
Metode permintaan | POST |
Header permintaan | |
Isi pesan | Isi pesan yang berisi semua parameter permintaan adalah sebagai berikut. Anda dapat menghilangkan bidang opsional sesuai kebutuhan: Penting
|
Parameter permintaan
Parameter | Type | Nilai default | Wajib | Deskripsi |
model | string | - | Ya | Model kloning suara. Nilainya tetap |
action | string | - | Ya | Jenis operasi. Nilainya tetap |
voice_id | string | - | Ya | ID suara yang akan dikueri. |
Parameter respons
Parameter | Tipe | Deskripsi |
resource_link | string | URL audio yang dikloning. |
target_model | string | Model sintesis suara yang menggerakkan suara. Model yang direkomendasikan adalah cosyvoice-v3-flash atau cosyvoice-v3-plus. Nilai ini harus sama dengan model sintesis suara yang digunakan saat Anda memanggil API sintesis suara nanti. Jika tidak, sintesis akan gagal. |
gmt_create | string | Waktu saat suara dibuat. |
gmt_modified | string | Waktu saat suara dimodifikasi. |
status | string | Status suara:
|
Update a voice
Memperbarui suara yang sudah ada dengan file audio baru.
Python SDK
Deskripsi API
def update_voice(self, voice_id: str, url: str) -> None:
'''
Memperbarui suara.
param: voice_id ID suara.
param: url URL file audio untuk kloning suara.
'''Contoh permintaan
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
service.update_voice(
voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx',
url='https://your-new-audio-file-url'
)
print(f"Pembaruan berhasil dikirim. Request ID: {service.get_last_request_id()}")Java SDK
Deskripsi API
/**
* Memperbarui suara.
*
* @param voiceId Suara yang akan diperbarui.
* @param url URL file audio untuk kloning suara.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public void updateVoice(String voiceId, String url)
throws NoApiKeyException, InputRequiredExceptionContoh permintaan
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // Jika Anda belum mengonfigurasi variabel lingkungan, ganti ini dengan Kunci API Anda.
private static String fileUrl = "https://your-audio-file-url"; // Ganti ini dengan nilai aktual Anda.
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // Ganti ini dengan nilai aktual Anda.
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// Perbarui suara.
service.updateVoice(voiceId, fileUrl);
logger.info("Pembaruan berhasil dikirim. Request ID: {}", service.getLastRequestId());
}
}RESTful API
Informasi dasar
URL | |
Metode permintaan | POST |
Header permintaan | |
Isi pesan | Isi pesan yang berisi semua parameter permintaan adalah sebagai berikut. Anda dapat menghilangkan bidang opsional sesuai kebutuhan: Penting
|
Parameter permintaan
Parameter | Type | Nilai default | Wajib | Deskripsi |
model | string | - | Ya | Model kloning suara. Nilainya tetap |
action | string | - | Ya | Jenis operasi. Nilainya tetap |
voice_id | string | - | Ya | ID suara yang akan diperbarui. |
url | string | - | Ya | URL file audio untuk memperbarui suara. URL harus dapat diakses publik. Untuk informasi tentang cara merekam audio, lihat Panduan perekaman. |
Delete a voice
Menghapus suara yang tidak lagi diperlukan untuk mengosongkan kuota Anda. Operasi ini tidak dapat dikembalikan.
Python SDK
Deskripsi API
def delete_voice(self, voice_id: str) -> None:
'''
Menghapus suara.
param: voice_id Suara yang akan dihapus.
'''Contoh permintaan
from dashscope.audio.tts_v2 import VoiceEnrollmentService
service = VoiceEnrollmentService()
service.delete_voice(voice_id='cosyvoice-v3-plus-myvoice-xxxxxxxx')
print(f"Penghapusan berhasil dikirim. Request ID: {service.get_last_request_id()}")Java SDK
Deskripsi API
/**
* Menghapus suara.
*
* @param voiceId Suara yang akan dihapus.
* @throws NoApiKeyException jika Kunci API kosong.
* @throws InputRequiredException jika parameter yang diperlukan kosong.
*/
public void deleteVoice(String voiceId) throws NoApiKeyException, InputRequiredException Contoh permintaan
import com.alibaba.dashscope.audio.ttsv2.enrollment.VoiceEnrollmentService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
public static String apiKey = System.getenv("DASHSCOPE_API_KEY"); // Jika Anda belum mengonfigurasi variabel lingkungan, ganti ini dengan Kunci API Anda.
private static String voiceId = "cosyvoice-v3-plus-myvoice-xxx"; // Ganti ini dengan nilai aktual Anda.
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args)
throws NoApiKeyException, InputRequiredException {
VoiceEnrollmentService service = new VoiceEnrollmentService(apiKey);
// Hapus suara.
service.deleteVoice(voiceId);
logger.info("Penghapusan berhasil dikirim. Request ID: {}", service.getLastRequestId());
}
}RESTful API
Informasi dasar
URL | |
Metode permintaan | POST |
Header permintaan | |
Isi pesan | Isi pesan yang berisi semua parameter permintaan adalah sebagai berikut. Anda dapat menghilangkan bidang opsional sesuai kebutuhan: Penting
|
Parameter permintaan
Parameter | Tipe | Nilai default | Wajib | Deskripsi |
model | string | - | Ya | Model kloning suara. Nilainya tetap |
action | string | - | Ya | Jenis operasi. Nilainya tetap |
voice_id | string | - | Ya | ID suara yang akan dihapus. |
Kuota suara dan aturan pembersihan otomatis
Batas total: 1.000 suara per akun
API ini tidak menyediakan fitur untuk mengkueri jumlah total suara. Anda dapat memanggil API Query voice list lalu menghitung jumlah suara dalam respons.
Pembersihan otomatis: Jika suara tidak digunakan untuk permintaan sintesis suara apa pun dalam satu tahun terakhir, sistem akan menghapusnya secara otomatis.
Penagihan
Kloning suara: Pembuatan, pengkuerian, pembaruan, dan penghapusan suara tidak dikenai biaya.
Sintesis suara menggunakan suara kustom: Anda ditagih berdasarkan jumlah karakter teks, lihat Sintesis suara Real-time - CosyVoice/Sambert.
Hak cipta dan legalitas
Anda bertanggung jawab untuk memastikan bahwa Anda memiliki kepemilikan dan hak hukum atas suara yang Anda berikan. Baca Ketentuan Layanan.
Kode kesalahan
Jika Anda mengalami kesalahan, lihat Pesan kesalahan untuk informasi troubleshooting.
FAQ
Fitur
T: Bagaimana cara menyesuaikan laju ucapan dan volume suara kustom?
J: Prosesnya sama seperti suara preset. Saat Anda memanggil API sintesis suara, Anda dapat mengirimkan parameter yang diperlukan. Misalnya, Anda dapat menggunakan speech_rate (Python) atau speechRate (Java) untuk menyesuaikan laju ucapan, dan volume untuk menyesuaikan volume. Untuk informasi lebih lanjut, lihat dokumentasi API sintesis suara (Java SDK / Python SDK / WebSocket API).
T: Bagaimana cara melakukan panggilan dalam bahasa lain, seperti Go, C#, atau Node.js?
J: Untuk manajemen suara, Anda dapat menggunakan RESTful API yang disediakan dalam dokumen ini. Untuk sintesis suara, Anda dapat menggunakan WebSocket API dan mengatur parameter voice ke voice_id yang Anda peroleh dari proses kloning.
Troubleshooting
Jika Anda mengalami kesalahan kode, lihat Kode kesalahan untuk informasi troubleshooting.
T: Mengapa saya tidak dapat menemukan kelas VoiceEnrollmentService?
J: Kesalahan ini terjadi karena versi SDK Anda sudah usang. Instal versi terbaru SDK.
T: Apa yang harus saya lakukan jika hasil kloning suara buruk, berisik, atau tidak jelas?
J: Masalah ini biasanya disebabkan oleh kualitas audio input yang rendah. Lihat Panduan perekaman untuk instruksi tentang cara merekam ulang dan mengunggah audio.