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
1. Alur kerja
Kloning suara dan sintesis suara adalah dua langkah berbeda namun saling terkait yang mengikuti alur kerja "buat dulu, lalu gunakan":
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_modeluntuk 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.
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_modelyang 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
Dapatkan Kunci API: Dapatkan Kunci API. Untuk keamanan, atur Kunci API sebagai variabel lingkungan.
Instal SDK: Pastikan Anda telah menginstal versi terbaru SDK DashScope.
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_modelyang 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.mp3untuk 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/customizationInternasional:
POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customizationHeader permintaan
Parameter
Tipe
Wajib
Deskripsi
Authorization
string
Token otentikasi. Formatnya adalah
Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.Content-Type
string
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.
PentingPerhatikan perbedaan antara parameter berikut:
model: Model kloning suara. Nilainya tetapqwen-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
-
Model kloning suara. Nilainya tetap
qwen-voice-enrollment.action
string
-
Jenis operasi. Nilainya tetap
create.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.
preferred_name
string
-
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
-
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:
Format:
data:<jenismedia>;base64,<data><jenismedia>: Jenis Multipurpose Internet Mail Extensions (MIME)WAV:
audio/wavMP3:
audio/mpegM4A:
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
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
-
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
-
Bahasa audio di
audio.data.Mendukung
zh(Cina),en(Inggris),de(Jerman),it(Italia),pt(Portugis),es(Spanyol),ja(Jepang),ko(Korea),fr(Prancis), danru(Rusia).Jika Anda menggunakan parameter ini, bahasa yang ditentukan harus sesuai dengan bahasa audio yang digunakan untuk kloning.
Parameter respons
Parameter-parameter tersebut adalah sebagai berikut:
Parameter
Tipe
Deskripsi
voice
string
Nama suara. Anda dapat langsung menggunakan nama ini sebagai parameter
voicedalam 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
PentingPerhatikan perbedaan antara parameter berikut:
model: Model kloning suara. Nilainya tetapqwen-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_KEYdalam 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/customizationInternasional:
POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customizationHeader permintaan
Parameter
Tipe
Wajib
Deskripsi
Authorization
string
Token otentikasi. Formatnya adalah
Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.Content-Type
string
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.
Pentingmodel: Model kloning suara. Nilainya tetapqwen-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
-
Model kloning suara. Nilainya tetap
qwen-voice-enrollment.action
string
-
Jenis operasi. Nilainya tetap
list.page_index
integer
0
Nomor halaman. Nilai valid: [0, 1000000].
page_size
integer
10
Jumlah entri per halaman. Nilai valid: [0, 1000000].
Parameter respons
Parameter respons berikut penting:
Parameter
Tipe
Deskripsi
voice
string
Nama suara. Anda dapat langsung menggunakan nama ini sebagai parameter
voicedalam 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
countselalu 0.Kode contoh
Pentingmodel: Model kloning suara. Nilainya tetapqwen-voice-enrollment. Jangan ubah nilai ini.cURL
Jika Anda belum menyetel Kunci API sebagai variabel lingkungan, ganti
$DASHSCOPE_API_KEYdalam 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/customizationInternasional:
POST https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customizationHeader permintaan
Parameter
Tipe
Wajib
Deskripsi
Authorization
string
Token otentikasi. Formatnya adalah
Bearer <kunci_api_anda>. Ganti "<kunci_api_anda>" dengan Kunci API aktual Anda.Content-Type
string
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:
Pentingmodel: Model kloning suara. Nilainya tetapqwen-voice-enrollment. Jangan ubah nilai ini.{ "model": "qwen-voice-enrollment", "input": { "action": "delete", "voice": "yourVoice" } }Parameter permintaan
Parameter
Tipe
Bawaan
Wajib
Deskripsi
model
string
-
Model kloning suara. Nilainya tetap
qwen-voice-enrollment.action
string
-
Jenis operasi. Nilainya tetap
delete.voice
string
-
Suara yang akan dihapus.
Parameter respons
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
countselalu 0.Kode contoh
Pentingmodel: Model kloning suara. Nilainya tetapqwen-voice-enrollment. Jangan ubah nilai ini.cURL
Jika Anda belum menyetel Kunci API sebagai variabel lingkungan, ganti
$DASHSCOPE_API_KEYdalam 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.
CatatanKuota 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:
Tutup pintu dan jendela untuk menghalangi suara luar.
Matikan AC, kipas, atau peralatan lainnya.
Tarik gorden untuk mengurangi pantulan dari kaca.
Letakkan pakaian atau selimut di atas meja untuk mengurangi pantulan dari permukaan.
Pahami naskah terlebih dahulu. Tentukan nada karakter dan bacalah dengan suara alami.
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.