All Products
Search
Document Center

Alibaba Cloud Model Studio:Referensi API - Qwen-LiveTranslate Java SDK

Last Updated:Sep 02, 2026

Terjemahkan ucapan secara real-time menggunakan DashScope Java SDK dan model qwen3.5-livetranslate-flash-realtime . SDK terhubung melalui WebSocket, mengalirkan input audio, dan mengembalikan teks terjemahan beserta ucapan hasil sintesis.

Sebelum memulai

  1. Instal DashScope SDK versi 2.22.5 atau yang lebih baru.
  2. Dapatkan Kunci API.
  3. Tetapkan Kunci API sebagai variabel lingkungan:
   # Linux / macOS
   export DASHSCOPE_API_KEY=<your-api-key>
   source ~/.bashrc

   # Windows
   set DASHSCOPE_API_KEY=<your-api-key>
  1. Tinjau ikhtisar model Qwen-LiveTranslate untuk daftar bahasa dan suara yang didukung.

PentingAlibaba Cloud Model Studio telah merilis domain khusus ruang kerja untuk wilayah China (Beijing) dan Singapura. Domain khusus baru ini memberikan performa unggul dan stabilitas lebih tinggi untuk permintaan inferensi. Kami merekomendasikan migrasi ke domain baru berikut:

  • China (Beijing): dari wss://dashscope.aliyuncs.com ke wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapura: dari wss://dashscope-intl.aliyuncs.com ke wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} adalah ID ruang kerja Anda, yang dapat ditemukan pada halaman Detail Ruang Kerja di konsol Alibaba Cloud Model Studio. Domain lama tetap berfungsi sepenuhnya.

Mulai cepat

Hubungkan, kirim audio, dan terima teks terjemahan:

import com.alibaba.dashscope.audio.omni.*;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.JsonObject;
import java.util.Arrays;

// 1. Bangun parameter koneksi
OmniRealtimeParam param = OmniRealtimeParam.builder()
        .model("qwen3.5-livetranslate-flash-realtime")
        // Berikut adalah URL wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        .url("wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime")
        .apikey(System.getenv("DASHSCOPE_API_KEY"))
        .build();

// 2. Definisikan callback untuk menangani event server
OmniRealtimeCallback callback = new OmniRealtimeCallback() {
    @Override public void onOpen() { System.out.println("Connected"); }

    @Override
    public void onEvent(JsonObject message) {
        String type = message.get("type").getAsString();
        if ("response.audio_transcript.done".equals(type)) {
            System.out.println("Translation: " + message.get("transcript").getAsString());
        }
    }

    @Override
    public void onClose(int code, String reason) {
        System.out.println("Closed: " + code + " " + reason);
    }
};

// 3. Buka sesi dan mulai mengalirkan audio
OmniRealtimeConversation conversation = new OmniRealtimeConversation(param, callback);
conversation.connect();

// 4. Konfigurasi bahasa target terjemahan
OmniRealtimeConfig config = OmniRealtimeConfig.builder()
        .modalities(Arrays.asList(OmniRealtimeModality.AUDIO, OmniRealtimeModality.TEXT))
        .translationConfig(OmniRealtimeTranslationParam.builder()
                .language("en")
                .build())
        .build();
conversation.updateSession(config);

// 5. Kirim chunk audio dalam format Base64 (PCM 16 kHz, 16-bit, mono)
conversation.appendAudio(audioBase64);

// 6. Akhiri sesi setelah selesai
conversation.endSession();

Parameter permintaan

OmniRealtimeParam

Buat parameter ini dengan OmniRealtimeParam.builder() untuk membuat koneksi WebSocket.

Klik untuk melihat contoh kode

OmniRealtimeParam param = OmniRealtimeParam.builder()
        .model("qwen3.5-livetranslate-flash-realtime")
        // Berikut adalah URL wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        .url("wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime")
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        // Jika variabel lingkungan tidak dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apikey("sk-xxx")
        .apikey(System.getenv("DASHSCOPE_API_KEY"))
        .build();

Parameter

Tipe

Wajib

Deskripsi

model

String

Ya

Nama model. Kami merekomendasikan qwen3.5-livetranslate-flash-realtime. qwen3-livetranslate-flash-realtime adalah model lawas.

url

String

Ya

Titik akhir WebSocket. Gunakan wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime (China (Beijing)) atau wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime (Singapura).

Ganti {WorkspaceId} dengan ID ruang kerja aktual Anda.

apikey

String

Tidak

Kunci API untuk otentikasi. Jika tidak ditetapkan, konfigurasikan melalui variabel lingkungan DASHSCOPE_API_KEY.

OmniRealtimeConfig

Buat parameter ini dengan OmniRealtimeConfig.builder(), lalu panggil conversation.updateSession(config) setelah terhubung.

Klik untuk melihat contoh kode

// Tetapkan frasa terjemahan kustom
Map<String, Object> phrases = new HashMap<>();
phrases.put("Inteligencia Artificial", "Artificial Intelligence");
phrases.put("Aprendizaje Automático", "Machine Learning");

OmniRealtimeConfig config = OmniRealtimeConfig.builder()
        .modalities(Arrays.asList(OmniRealtimeModality.AUDIO, OmniRealtimeModality.TEXT))
        .voice("Cherry")
        .inputAudioFormat(OmniRealtimeAudioFormat.PCM_16000HZ_MONO_16BIT)
        .outputAudioFormat(OmniRealtimeAudioFormat.PCM_24000HZ_MONO_16BIT)
        .InputAudioTranscription("qwen3-asr-flash-realtime")
        .translationConfig(OmniRealtimeTranslationParam.builder()
                .language("en")
                .corpus(OmniRealtimeTranslationParam.Corpus.builder()
                        .phrases(phrases)
                        .build())
                .build())
        .build();

conversation.updateSession(config);

Parameter

Type

Wajib

Deskripsi

modalities

List<OmniRealtimeModality>

Tidak

Modalitas output. Default: [AUDIO, TEXT]. Gunakan [TEXT] untuk output hanya teks.

voice

String

Tidak

Suara untuk ucapan hasil sintesis. Suara default bervariasi berdasarkan model: Tina untuk qwen3.5-livetranslate-flash-realtime dan Cherry untuk qwen3-livetranslate-flash-realtime. Lihat suara yang didukung.

inputAudioFormat

OmniRealtimeAudioFormat

Tidak

Format audio input. Default: PCM_16000HZ_MONO_16BIT.

outputAudioFormat

OmniRealtimeAudioFormat

Tidak

Format audio output. Default: PCM_24000HZ_MONO_16BIT.

InputAudioTranscription

String

Tidak

Model ASR untuk mentranskripsikan ucapan asli. Tetapkan ke qwen3-asr-flash-realtime untuk menerima transkripsi bahasa sumber bersamaan dengan terjemahan.

translationConfig

OmniRealtimeTranslationParam

Tidak

Pengaturan terjemahan. Lihat OmniRealtimeTranslationParam di bawah.

enableTurnDetection

boolean

Tidak

Apakah akan mengaktifkan VAD (Voice Activity Detection).

Nilai default: true, yang mengaktifkan mode VAD di mana server secara otomatis mendeteksi awal/akhir ucapan dan memicu terjemahan.

Tetapkan ke false untuk beralih ke mode Manual, di mana klien secara manual mengirimkan audio melalui metode commit(). Untuk deskripsi parameter lengkap, lihat penjelasan turn_detection dalam dokumen Event klien.

OmniRealtimeTranslationParam

Tentukan bahasa target dan terminologi kustom dengan OmniRealtimeTranslationParam.builder().

Klik untuk melihat contoh kode

// Tetapkan frasa terjemahan
Map<String, Object> phrases = new HashMap<>();
phrases.put("Inteligencia Artificial", "Artificial Intelligence");  // Kata dalam bahasa sumber: Terjemahan dalam bahasa target
phrases.put("Aprendizaje Automático", "Machine Learning");

OmniRealtimeTranslationParam translationParam = OmniRealtimeTranslationParam.builder()
        .language("en")  // Kode bahasa target
        .corpus(OmniRealtimeTranslationParam.Corpus.builder()
                .phrases(phrases)
                .build())
        .build();

Parameter

Tipe

Wajib

Deskripsi

language

String

Tidak

Kode bahasa target. Default: en. Lihat bahasa yang didukung.

corpus

Corpus

Tidak

Terminologi kustom untuk istilah spesifik domain.

corpus.phrases

Map<String, Object>

Tidak

Pemetaan istilah: kunci adalah istilah sumber, nilai adalah terjemahan target. Contoh: {"Inteligencia Artificial": "Artificial Intelligence"}

Antarmuka utama

OmniRealtimeConversation

Mengelola koneksi WebSocket dan siklus hidup aliran audio.

Impor: com.alibaba.dashscope.audio.omni.OmniRealtimeConversation

Metode

Deskripsi

OmniRealtimeConversation(OmniRealtimeParam param, OmniRealtimeCallback callback)

Membuat instans percakapan dengan parameter koneksi dan callback event.

void connect()

Membuka koneksi WebSocket. Memicu event session.created dan session.updated. Melemparkan NoApiKeyException, InterruptedException.

void updateSession(OmniRealtimeConfig config)

Memperbarui konfigurasi sesi setelah terhubung. Memicu event session.updated. Hanya tetapkan parameter yang diperlukan; nilai default berlaku untuk parameter yang dihilangkan.

void appendAudio(String audioBase64)

Mengirim chunk audio dalam format Base64 ke server. Server secara otomatis mendeteksi batas ucapan dan memicu terjemahan.

void commit()

Dalam mode Manual, mengirimkan audio yang sebelumnya ditambahkan ke buffer server melalui metode appendAudio. Server secara otomatis mulai menghasilkan respons terjemahan setelah menerima commit. Dalam mode VAD, metode ini tidak perlu dipanggil karena server melakukan commit secara otomatis. Memicu event input_audio_buffer.committed.

void clearAppendedAudio()

Menghapus data audio yang belum dikomit dari buffer server. Memicu event input_audio_buffer.cleared.

void endSession()

Mengakhiri sesi secara elegan. Server menyelesaikan terjemahan yang sedang berlangsung sebelum mengirim session.finished. Melemparkan InterruptedException.

void close(int code, String reason)

Menghentikan tugas dan menutup koneksi WebSocket.

String getSessionId()

Mengembalikan ID sesi.

String getResponseId()

Mengembalikan ID respons dari respons server terbaru.

long getFirstTextDelay()

Mengembalikan delay teks pertama dari respons terbaru (milidetik).

long getFirstAudioDelay()

Mengembalikan delay audio pertama dari respons terbaru (milidetik).

OmniRealtimeCallback

Menangani event server yang dikirimkan melalui WebSocket. Perluas kelas ini dan implementasikan metode yang sesuai untuk memproses event.

Impor: com.alibaba.dashscope.audio.omni.OmniRealtimeCallback

Metode

Parameter

Deskripsi

void onOpen()

Tidak ada

Dipanggil saat koneksi WebSocket berhasil dibuat.

abstract void onEvent(JsonObject message)

message: Objek JSON yang berisi event sisi server.

Dipanggil untuk setiap event server. Uraikan bidang type untuk menentukan jenis event.

abstract void onClose(int code, String reason)

code: Kode status WebSocket. reason: Deskripsi penutupan.

Dipanggil saat koneksi WebSocket ditutup.

Jenis event umum yang diterima dalam onEvent:

Tipe Peristiwa

Deskripsi

input_audio_buffer.speech_started

Server mendeteksi adanya ucapan dalam aliran audio.

input_audio_buffer.speech_stopped

Server mendeteksi akhir segmen ucapan.

conversation.item.input_audio_transcription.completed

Transkripsi bahasa sumber siap. Baca message.get("transcript"). Memerlukan pengaturan InputAudioTranscription.

response.audio_transcript.done

Teks terjemahan siap. Baca message.get("transcript").

response.audio.delta

Sebuah chunk audio terjemahan tersedia. Baca message.get("delta") untuk data audio dalam format Base64.

error

Terjadi kesalahan. Baca message.get("error").getAsJsonObject().get("message") untuk detailnya.

Contoh lengkap

Contoh ini menangkap audio dari mikrofon, menerjemahkannya secara real-time, dan memutar ucapan hasil terjemahan melalui speaker sistem.

Apa yang dilakukan:

  1. Terhubung ke Qwen-LiveTranslate melalui WebSocket.
  2. Mengonfigurasi terjemahan dari Spanyol ke Inggris dengan terminologi kustom.
  3. Mengalirkan audio mikrofon dalam potongan 100 ms.
  4. Mencetak transkripsi asli dan teks terjemahan.
  5. Memutar audio terjemahan melalui speaker.

Kode contoh untuk terjemahan real-time dari mikrofon

import com.alibaba.dashscope.audio.omni.*;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.google.gson.JsonObject;

import javax.sound.sampled.*;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;

/**
 * Contoh penggunaan mikrofon dengan model terjemahan audio dan video real-time.
 */
public class Main {
    private static final int INPUT_CHUNK_SIZE = 3200;   // 100 ms audio 16 kHz, 16-bit, mono
    private static final int OUTPUT_CHUNK_SIZE = 4800;  // 100 ms audio 24 kHz, 16-bit, mono
    private static final AtomicBoolean running = new AtomicBoolean(true);
    private static SourceDataLine speaker;  // Speaker

    public static void main(String[] args) throws InterruptedException {
        String apiKey = System.getenv("DASHSCOPE_API_KEY");
        if (apiKey == null || apiKey.isEmpty()) {
            System.err.println("Setel variabel lingkungan DASHSCOPE_API_KEY.");
            System.exit(1);
        }

        // Buat parameter koneksi.
        OmniRealtimeParam param = OmniRealtimeParam.builder()
                .model("qwen3.5-livetranslate-flash-realtime")
                .url("wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime")
                .apikey(apiKey)
                .build();

        // Buat penangan callback.
        OmniRealtimeCallback callback = new OmniRealtimeCallback() {
            @Override
            public void onOpen() {
                System.out.println("[Koneksi berhasil]");
            }

            @Override
            public void onEvent(JsonObject message) {
                String type = message.get("type").getAsString();
                switch (type) {
                    case "input_audio_buffer.speech_started":
                        System.out.println("====== Input ucapan terdeteksi ======");
                        break;
                    case "input_audio_buffer.speech_stopped":
                        System.out.println("====== Input ucapan berakhir ======");
                        break;
                    case "conversation.item.input_audio_transcription.completed":
                        String originalText = message.get("transcript").getAsString();
                        System.out.println("[Teks asli] " + originalText);
                        break;
                    case "response.audio_transcript.done":
                        String translatedText = message.get("transcript").getAsString();
                        System.out.println("[Hasil terjemahan] " + translatedText);
                        break;
                    case "response.audio.delta":
                        // Dekode dan putar audio terjemahan.
                        String audioB64 = message.get("delta").getAsString();
                        byte[] audioBytes = Base64.getDecoder().decode(audioB64);
                        if (speaker != null) {
                            speaker.write(audioBytes, 0, audioBytes.length);
                        }
                        break;
                    case "error":
                        JsonObject error = message.get("error").getAsJsonObject();
                        System.err.println("[Kesalahan] " + error.get("message").getAsString());
                        break;
                }
            }

            @Override
            public void onClose(int code, String reason) {
                System.out.println("[Koneksi ditutup] kode: " + code + ", alasan: " + reason);
            }
        };

        // Buat sesi.
        OmniRealtimeConversation conversation = new OmniRealtimeConversation(param, callback);

        try {
            // Inisialisasi speaker (untuk memutar ucapan hasil terjemahan).
            AudioFormat speakerFormat = new AudioFormat(24000, 16, 1, true, false);
            DataLine.Info speakerInfo = new DataLine.Info(SourceDataLine.class, speakerFormat);
            speaker = (SourceDataLine) AudioSystem.getLine(speakerInfo);
            speaker.open(speakerFormat, OUTPUT_CHUNK_SIZE * 4);
            speaker.start();

            // Inisialisasi mikrofon (untuk menangkap input ucapan).
            AudioFormat micFormat = new AudioFormat(16000, 16, 1, true, false);
            DataLine.Info micInfo = new DataLine.Info(TargetDataLine.class, micFormat);
            if (!AudioSystem.isLineSupported(micInfo)) {
                System.err.println("Mikrofon tidak tersedia.");
                System.exit(1);
            }
            TargetDataLine microphone = (TargetDataLine) AudioSystem.getLine(micInfo);
            microphone.open(micFormat);
            microphone.start();

            // Hubungkan ke server.
            conversation.connect();

            // Konfigurasi parameter terjemahan.
            Map<String, Object> phrases = new HashMap<>();
            phrases.put("Inteligencia Artificial", "Artificial Intelligence");
            phrases.put("Aprendizaje Automático", "Machine Learning");

            OmniRealtimeConfig config = OmniRealtimeConfig.builder()
                    .modalities(Arrays.asList(OmniRealtimeModality.AUDIO, OmniRealtimeModality.TEXT))
                    .voice("Cherry")
                    .inputAudioFormat(OmniRealtimeAudioFormat.PCM_16000HZ_MONO_16BIT)
                    .outputAudioFormat(OmniRealtimeAudioFormat.PCM_24000HZ_MONO_16BIT)
                    .InputAudioTranscription("qwen3-asr-flash-realtime")
                    .translationConfig(OmniRealtimeTranslationParam.builder()
                            .language("en")
                            .corpus(OmniRealtimeTranslationParam.Corpus.builder()
                                    .phrases(phrases)
                                    .build())
                            .build())
                    .build();

            conversation.updateSession(config);

            // Daftarkan shutdown hook.
            Runtime.getRuntime().addShutdownHook(new Thread(() -> {
                System.out.println("\n[Keluar...]");
                running.set(false);
                microphone.stop();
                microphone.close();
                speaker.stop();
                speaker.close();
                try {
                    conversation.endSession();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
                conversation.close(1000, "User stopped");
            }));

            System.out.println("[Memulai terjemahan real-time] Bicara ke mikrofon. Tekan Ctrl+C untuk keluar.");

            // Secara terus-menerus menangkap dan mengirim audio mikrofon.
            byte[] buffer = new byte[INPUT_CHUNK_SIZE];
            while (running.get()) {
                int bytesRead = microphone.read(buffer, 0, buffer.length);
                if (bytesRead > 0) {
                    conversation.appendAudio(Base64.getEncoder().encodeToString(buffer));
                }
            }

        } catch (NoApiKeyException e) {
            System.err.println("Kesalahan Kunci API: " + e.getMessage());
        } catch (Exception e) {
            System.err.println("Terjadi pengecualian: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Ganti placeholder berikut dengan nilai Anda:

Placeholder

Deskripsi

Contoh

<your-api-key>

Kunci API Model Studio

sk-xxxxxxxx

Topik terkait