All Products
Search
Document Center

Alibaba Cloud Model Studio:Pengenalan file audio - Qwen

Last Updated:Mar 06, 2026

Model pengenalan file audio Qwen mengonversi rekaman audio menjadi teks. Model ini mendukung fitur seperti pengenalan multibahasa, pengenalan suara bernyanyi, dan penolakan noise.

Fitur utama

  • Pengenalan multibahasa: Mendukung pengenalan ucapan dalam berbagai bahasa, termasuk Mandarin serta dialek seperti Kanton dan Sichuan.

  • Adaptasi terhadap lingkungan kompleks: Mampu menangani lingkungan akustik yang kompleks, mendukung deteksi bahasa otomatis dan penyaringan cerdas terhadap suara non-manusia.

  • Pengenalan suara bernyanyi: Dapat mentranskripsikan seluruh lagu, bahkan dengan musik latar (BGM).

  • Pengenalan emosi: Mendukung pengenalan berbagai keadaan emosional, termasuk terkejut, tenang, bahagia, sedih, jijik, marah, dan takut.

Ketersediaan

Model yang didukung:

Layanan ini menyediakan dua model inti:

  • Qwen3-ASR-Flash-Filetrans: Dirancang untuk pengenalan asinkron file audio hingga 12 jam. Cocok untuk skenario seperti transkripsi rapat dan wawancara.

  • Qwen3-ASR-Flash: Dirancang untuk pengenalan sinkron atau streaming file audio hingga 5 menit. Cocok untuk skenario seperti pesan suara dan keterangan real-time.

Internasional

Dalam mode penyebaran internasional, titik akhir dan penyimpanan data berlokasi di wilayah Singapura. Sumber daya komputasi inferensi model dijadwalkan secara dinamis di seluruh dunia (tidak termasuk Tiongkok daratan).

Saat memanggil model berikut, pilih API key dari wilayah Singapura:

  • Qwen3-ASR-Flash-Filetrans: qwen3-asr-flash-filetrans (versi stabil, saat ini setara dengan qwen3-asr-flash-filetrans-2025-11-17), qwen3-asr-flash-filetrans-2025-11-17 (versi snapshot)

  • Qwen3-ASR-Flash: qwen3-asr-flash (versi stabil, saat ini setara dengan qwen3-asr-flash-2025-09-08), qwen3-asr-flash-2026-02-10 (versi snapshot terbaru), qwen3-asr-flash-2025-09-08 (versi snapshot)

AS

Dalam mode penyebaran AS, titik akhir dan penyimpanan data berlokasi di wilayah AS (Virginia). Sumber daya komputasi inferensi model dibatasi hanya di AS.

Saat memanggil model berikut, pilih API key dari wilayah AS:

Qwen3-ASR-Flash: qwen3-asr-flash-us (versi stabil, saat ini setara dengan qwen3-asr-flash-2025-09-08-us), qwen3-asr-flash-2025-09-08-us (versi snapshot)

Tiongkok daratan

Dalam mode penyebaran Tiongkok daratan, titik akhir dan penyimpanan data berlokasi di wilayah Beijing. Sumber daya komputasi inferensi model dibatasi hanya di Tiongkok daratan.

Saat memanggil model berikut, pilih API key dari wilayah Beijing:

  • Qwen3-ASR-Flash-Filetrans: qwen3-asr-flash-filetrans (versi stabil, saat ini setara dengan qwen3-asr-flash-filetrans-2025-11-17), qwen3-asr-flash-filetrans-2025-11-17 (versi snapshot)

  • Qwen3-ASR-Flash: qwen3-asr-flash (versi stabil, saat ini setara dengan qwen3-asr-flash-2025-09-08), qwen3-asr-flash-2026-02-10 (versi snapshot terbaru), qwen3-asr-flash-2025-09-08 (versi snapshot)

Untuk informasi lebih lanjut, lihat Daftar model.

Pemilihan model

Skenario

Direkomendasikan

Alasan

Catatan

Pengenalan Audio Panjang

qwen3-asr-flash-filetrans

Mendukung rekaman hingga 12 jam. Menyediakan pengenalan emosi dan timestamp tingkat kalimat/kata, cocok untuk pengindeksan dan analisis lanjutan.

Ukuran file audio tidak boleh melebihi 2 GB, dan durasi tidak boleh melebihi 12 jam.

Pengenalan audio pendek

qwen3-asr-flash atau qwen3-asr-flash-us

Pengenalan audio pendek, latensi rendah.

Ukuran file audio tidak boleh melebihi 10 MB, dan durasi tidak boleh melebihi 5 menit.

Pemeriksaan kualitas layanan pelanggan

qwen3-asr-flash-filetrans, qwen3-asr-flash, atau qwen3-asr-flash-us

Dapat menganalisis emosi pelanggan.

Tidak mendukung filter kata sensitif atau speaker diarization. Pilih model yang sesuai berdasarkan durasi audio.

Generasi keterangan untuk berita atau wawancara

qwen3-asr-flash-filetrans

Audio panjang, prediksi tanda baca, dan timestamp memungkinkan generasi langsung keterangan terstruktur.

Memerlukan post-processing untuk menghasilkan file subtitle standar. Pilih model yang sesuai berdasarkan durasi audio.

Lokalisasi video multibahasa

qwen3-asr-flash-filetrans, qwen3-asr-flash, atau qwen3-asr-flash-us

Mencakup berbagai bahasa dan dialek, cocok untuk produksi keterangan lintas bahasa.

Pilih model yang sesuai berdasarkan durasi audio.

Analisis audio bernyanyi

qwen3-asr-flash-filetrans, qwen3-asr-flash, atau qwen3-asr-flash-us

Mengenali lirik dan menganalisis emosi, cocok untuk pengindeksan dan rekomendasi lagu.

Pilih model yang sesuai berdasarkan durasi audio.

Untuk informasi lebih lanjut, lihat Bandingkan model.

Memulai

Sebelum memulai, dapatkan API key. Untuk menggunakan SDK, instal versi terbaru SDK.

DashScope

Qwen3-ASR-Flash-Filetrans

Qwen3-ASR-Flash-Filetrans dirancang untuk transkripsi asinkron file audio dan mendukung rekaman hingga 12 jam. Model ini memerlukan URL file audio yang dapat diakses publik sebagai input dan tidak mendukung unggahan langsung file lokal. Ini adalah API non-streaming yang mengembalikan hasil pengenalan lengkap setelah tugas selesai.

cURL

Saat menggunakan cURL untuk pengenalan ucapan, pertama-tama kirimkan tugas untuk mendapatkan ID tugas (task_id), lalu gunakan ID tersebut untuk mengambil hasil tugas.

Kirim tugas

# ======= Penting =======
# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/audio/asr/transcription' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-Async: enable" \
-d '{
    "model": "qwen3-asr-flash-filetrans",
    "input": {
        "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
    },
    "parameters": {
        "channel_id":[
            0
        ], 
        "enable_itn": false,
        "enable_words": true
    }
}'

Ambil hasil tugas

# ======= Penting =======
# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}. Ganti {task_id} dengan ID tugas aktual Anda.
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X GET 'https://dashscope-intl.aliyuncs.com/api/v1/tasks/{task_id}' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "X-DashScope-Async: enable" \
-H "Content-Type: application/json"

Contoh lengkap

Java

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import okhttp3.*;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class Main {
    // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription
    private static final String API_URL_SUBMIT = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/asr/transcription";
    // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/tasks/
    private static final String API_URL_QUERY = "https://dashscope-intl.aliyuncs.com/api/v1/tasks/";
    private static final Gson gson = new Gson();

    public static void main(String[] args) {
        // 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: String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        OkHttpClient client = new OkHttpClient();

        // 1. Kirim tugas
        /*String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false,
                        "language": "zh"
                    }
                }
                """;*/
        String payloadJson = """
                {
                    "model": "qwen3-asr-flash-filetrans",
                    "input": {
                        "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                    },
                    "parameters": {
                        "channel_id": [0],
                        "enable_itn": false,
                        "enable_words": true
                    }
                }
                """;

        RequestBody body = RequestBody.create(payloadJson, MediaType.get("application/json; charset=utf-8"));
        Request submitRequest = new Request.Builder()
                .url(API_URL_SUBMIT)
                .addHeader("Authorization", "Bearer " + apiKey)
                .addHeader("Content-Type", "application/json")
                .addHeader("X-DashScope-Async", "enable")
                .post(body)
                .build();

        String taskId = null;

        try (Response response = client.newCall(submitRequest).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                String respBody = response.body().string();
                ApiResponse apiResp = gson.fromJson(respBody, ApiResponse.class);
                if (apiResp.output != null) {
                    taskId = apiResp.output.taskId;
                    System.out.println("Tugas dikirim. task_id: " + taskId);
                } else {
                    System.out.println("Konten respons pengiriman: " + respBody);
                    return;
                }
            } else {
                System.out.println("Pengiriman tugas gagal! Kode HTTP: " + response.code());
                if (response.body() != null) {
                    System.out.println(response.body().string());
                }
                return;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // 2. Periksa status tugas secara berkala
        boolean finished = false;
        while (!finished) {
            try {
                TimeUnit.SECONDS.sleep(2);  // Tunggu 2 detik sebelum memeriksa lagi
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                return;
            }

            String queryUrl = API_URL_QUERY + taskId;
            Request queryRequest = new Request.Builder()
                    .url(queryUrl)
                    .addHeader("Authorization", "Bearer " + apiKey)
                    .addHeader("X-DashScope-Async", "enable")
                    .addHeader("Content-Type", "application/json")
                    .get()
                    .build();

            try (Response response = client.newCall(queryRequest).execute()) {
                if (response.body() != null) {
                    String queryResponse = response.body().string();
                    ApiResponse apiResp = gson.fromJson(queryResponse, ApiResponse.class);

                    if (apiResp.output != null && apiResp.output.taskStatus != null) {
                        String status = apiResp.output.taskStatus;
                        System.out.println("Status tugas saat ini: " + status);
                        if ("SUCCEEDED".equalsIgnoreCase(status)
                                || "FAILED".equalsIgnoreCase(status)
                                || "UNKNOWN".equalsIgnoreCase(status)) {
                            finished = true;
                            System.out.println("Tugas selesai. Hasil akhir: ");
                            System.out.println(queryResponse);
                        }
                    } else {
                        System.out.println("Konten respons pemeriksaan: " + queryResponse);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
        }
    }

    static class ApiResponse {
        @SerializedName("request_id")
        String requestId;
        Output output;
    }

    static class Output {
        @SerializedName("task_id")
        String taskId;
        @SerializedName("task_status")
        String taskStatus;
    }
}

Python

import os
import time
import requests
import json

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription
API_URL_SUBMIT = "https://dashscope-intl.aliyuncs.com/api/v1/services/audio/asr/transcription"
# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/tasks/
API_URL_QUERY_BASE = "https://dashscope-intl.aliyuncs.com/api/v1/tasks/"


def main():
    # 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: api_key = "sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY")

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
        "X-DashScope-Async": "enable"
    }

    # 1. Kirim tugas
    payload = {
        "model": "qwen3-asr-flash-filetrans",
        "input": {
            "file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
        },
        "parameters": {
            "channel_id": [0],
            # "language": "zh",
            "enable_itn": False,
            "enable_words": True
        }
    }

    print("Mengirim tugas transkripsi ASR...")
    try:
        submit_resp = requests.post(API_URL_SUBMIT, headers=headers, data=json.dumps(payload))
    except requests.RequestException as e:
        print(f"Gagal mengirim permintaan tugas: {e}")
        return

    if submit_resp.status_code != 200:
        print(f"Pengiriman tugas gagal! Kode HTTP: {submit_resp.status_code}")
        print(submit_resp.text)
        return

    resp_data = submit_resp.json()
    output = resp_data.get("output")
    if not output or "task_id" not in output:
        print("Konten respons pengiriman tidak normal:", resp_data)
        return

    task_id = output["task_id"]
    print(f"Tugas dikirim. task_id: {task_id}")

    # 2. Periksa status tugas secara berkala
    finished = False
    while not finished:
        time.sleep(2)  # Tunggu 2 detik sebelum memeriksa lagi

        query_url = API_URL_QUERY_BASE + task_id
        try:
            query_resp = requests.get(query_url, headers=headers)
        except requests.RequestException as e:
            print(f"Gagal memeriksa tugas: {e}")
            return

        if query_resp.status_code != 200:
            print(f"Pemeriksaan tugas gagal! Kode HTTP: {query_resp.status_code}")
            print(query_resp.text)
            return

        query_data = query_resp.json()
        output = query_data.get("output")
        if output and "task_status" in output:
            status = output["task_status"]
            print(f"Status tugas saat ini: {status}")

            if status.upper() in ("SUCCEEDED", "FAILED", "UNKNOWN"):
                finished = True
                print("Tugas selesai. Hasil akhir:")
                print(json.dumps(query_data, indent=2, ensure_ascii=False))
        else:
            print("Konten respons pemeriksaan:", query_data)


if __name__ == "__main__":
    main()

Java SDK

import com.alibaba.dashscope.audio.qwen_asr.*;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
        QwenTranscriptionParam param =
                QwenTranscriptionParam.builder()
                        // 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: .apiKey("sk-xxx")
                        .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                        .model("qwen3-asr-flash-filetrans")
                        .fileUrl("https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_example_1.wav")
                        //.parameter("language", "zh")
                        //.parameter("channel_id", new ArrayList<String>(){{add("0");add("1");}})
                        .parameter("enable_itn", false)
                        .parameter("enable_words", true)
                        .build();
        try {
            QwenTranscription transcription = new QwenTranscription();
            // Kirim tugas
            QwenTranscriptionResult result = transcription.asyncCall(param);
            System.out.println("hasil membuat tugas: " + result);
            // Periksa status tugas
            result = transcription.fetch(QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("status tugas: " + result);
            // Tunggu hingga tugas selesai
            result =
                    transcription.wait(
                            QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("hasil tugas: " + result);
            // Dapatkan hasil pengenalan ucapan
            QwenTranscriptionTaskResult taskResult = result.getResult();
            if (taskResult != null) {
                // Dapatkan URL hasil pengenalan
                String transcriptionUrl = taskResult.getTranscriptionUrl();
                // Ambil hasil dari URL
                HttpURLConnection connection =
                        (HttpURLConnection) new URL(transcriptionUrl).openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                BufferedReader reader =
                        new BufferedReader(new InputStreamReader(connection.getInputStream()));
                // Format dan cetak hasil JSON
                Gson gson = new GsonBuilder().setPrettyPrinting().create();
                System.out.println(gson.toJson(gson.fromJson(reader, JsonObject.class)));
            }
        } catch (Exception e) {
            System.out.println("error: " + e);
        }
    }
}

Python SDK

import json
import os
import sys
from http import HTTPStatus

import dashscope
from dashscope.audio.qwen_asr import QwenTranscription
from dashscope.api_entities.dashscope_response import TranscriptionResponse


# jalankan skrip transkripsi
if __name__ == '__main__':
    # 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: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

    # URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
    dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
    task_response = QwenTranscription.async_call(
        model='qwen3-asr-flash-filetrans',
        file_url='https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_example_1.wav',
        #language="",
        enable_itn=False,
        enable_words=True
    )
    print(f'task_response: {task_response}')
    print(task_response.output.task_id)
    query_response = QwenTranscription.fetch(task=task_response.output.task_id)
    print(f'query_response: {query_response}')
    task_result = QwenTranscription.wait(task=task_response.output.task_id)
    print(f'task_result: {task_result}')

Qwen3-ASR-Flash

Qwen3-ASR-Flash mendukung rekaman hingga 5 menit. Model ini menerima URL file audio yang dapat diakses publik atau unggahan langsung file lokal sebagai input. Model ini juga dapat mengembalikan hasil pengenalan sebagai aliran (stream).

Input: URL file audio

Python SDK

import os
import dashscope

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {"role": "user", "content": [{"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"}]}
]

response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        #"language": "zh", # Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        "enable_itn":False
    }
)
print(response)

Java SDK

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3")))
                .build();

        MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura/AS 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: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
                .model("qwen3-asr-flash")
                .message(sysMessage)
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= Penting =======
# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura/AS dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "us"
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-asr-flash",
    "input": {
        "messages": [
            {
                "content": [
                    {
                        "text": ""
                    }
                ],
                "role": "system"
            },
            {
                "content": [
                    {
                        "audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                    }
                ],
                "role": "user"
            }
        ]
    },
    "parameters": {
        "asr_options": {
            "enable_itn": false
        }
    }
}'

Masukan: Berkas audio berkode Base64

Masukkan data terenkripsi Base64 (Data URL) dalam format: data:<mediatype>;base64,<data>.

  • <mediatype>: Jenis MIME

    Bervariasi tergantung format audio, contohnya:

    • WAV: audio/wav

    • MP3: audio/mpeg

  • <data>: String audio terenkripsi Base64

    Pengkodean Base64 meningkatkan ukuran file. Pastikan file asli cukup kecil agar data terenkripsi tetap dalam batas input 10 MB.

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

    Lihat contoh kode

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

Python SDK

Contoh menggunakan file audio: welcome.mp3.

import base64
import dashscope
import os
import pathlib

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Ganti dengan jalur file audio aktual Anda
file_path = "welcome.mp3"
# Ganti dengan jenis MIME file audio aktual Anda
audio_mime_type = "audio/mpeg"

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}"

messages = [
    {"role": "user", "content": [{"audio": data_uri}]}
]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        "enable_itn":False
    }
)
print(response)

Java SDK

Contoh menggunakan file audio: welcome.mp3.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    // Ganti dengan jalur file audio aktual Anda
    private static final String AUDIO_FILE = "welcome.mp3";
    // Ganti dengan jenis MIME file audio aktual Anda
    private static final String AUDIO_MIME_TYPE = "audio/mpeg";

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException, IOException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", toDataUrl())))
                .build();

        MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura/AS 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: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
                .model("qwen3-asr-flash")
                .message(sysMessage)
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }

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

Input: Jalur mutlak ke file audio lokal

Saat menggunakan SDK DashScope untuk memproses file gambar lokal, Anda harus menyediakan jalur file. Tabel berikut menunjukkan cara membuat jalur file untuk skenario dan sistem operasi spesifik Anda.

Sistem

SDK

Jalur file input

Contoh

Linux atau macOS

Python SDK

file://{jalur file mutlak}

file:///home/images/test.png

Java SDK

Windows

Python SDK

file://{jalur file mutlak}

file://D:/images/test.png

Java SDK

file:///{jalur file mutlak}

file:///D:images/test.png

Penting

Saat menggunakan file lokal, batas pemanggilan API adalah 100 QPS dan tidak dapat diskalakan. Jangan gunakan metode ini di lingkungan produksi, skenario konkurensi tinggi, atau uji stres. Untuk konkurensi lebih tinggi, unggah file ke OSS dan panggil API menggunakan URL file audio.

Python SDK

Contoh menggunakan file audio: welcome.mp3.

import os
import dashscope

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur mutlak ke file audio lokal Anda
audio_file_path = "file://ABSOLUTE_PATH/welcome.mp3"

messages = [
    {"role": "user", "content": [{"audio": audio_file_path}]}
]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        "enable_itn":False
    }
)
print(response)

Java SDK

Contoh menggunakan file audio: welcome.mp3.

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        // Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur mutlak ke file lokal Anda
        String localFilePath = "file://ABSOLUTE_PATH/welcome.mp3";
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", localFilePath)))
                .build();

        MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 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: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
                .model("qwen3-asr-flash")
                .message(sysMessage)
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(JsonUtils.toJson(result));
    }
    public static void main(String[] args) {
        try {
            // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Keluaran streaming

Model menghasilkan hasil secara bertahap, bukan sekaligus. Keluaran non-streaming menunggu hingga model selesai menghasilkan lalu mengembalikan hasil lengkap. Keluaran streaming mengembalikan hasil antara secara real-time, memungkinkan Anda membaca hasil saat dihasilkan dan mengurangi waktu tunggu. Atur parameter berbeda berdasarkan metode pemanggilan Anda untuk mengaktifkan keluaran streaming:

  • DashScope Python SDK: Atur parameter stream ke true.

  • DashScope Java SDK: Gunakan antarmuka streamCall.

  • DashScope HTTP: Atur header X-DashScope-SSE ke enable.

Python SDK

import os
import dashscope

# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {"role": "user", "content": [{"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"}]}
]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        "enable_itn":False
    },
    stream=True
)

for response in response:
    try:
        print(response["output"]["choices"][0]["message"].content[0]["text"])
    except:
        pass

Java SDK

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
import io.reactivex.Flowable;

public class Main {
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("audio", "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3")))
                .build();

        MultiModalMessage sysMessage = MultiModalMessage.builder().role(Role.SYSTEM.getValue())
                .build();

        Map<String, Object> asrOptions = new HashMap<>();
        asrOptions.put("enable_itn", false);
        // asrOptions.put("language", "zh"); // Opsional. Jika bahasa audio diketahui, Anda dapat menentukannya menggunakan parameter ini untuk meningkatkan akurasi pengenalan.
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 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: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // Jika Anda menggunakan model di wilayah AS, tambahkan akhiran "-us" pada nama model, contoh: qwen3-asr-flash-us
                .model("qwen3-asr-flash")
                .message(sysMessage)
                .message(userMessage)
                .parameter("asr_options", asrOptions)
                .build();
        Flowable<MultiModalConversationResult> resultFlowable = conv.streamCall(param);
        resultFlowable.blockingForEach(item -> {
            try {
                System.out.println(item.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
            } catch (Exception e){
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        try {
            // URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

cURL

# ======= Penting =======
# URL berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS, ganti URL dengan: https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# 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 menggunakan model di wilayah AS, tambahkan akhiran "us"
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
    "model": "qwen3-asr-flash",
    "input": {
        "messages": [
            {
                "content": [
                    {
                        "text": ""
                    }
                ],
                "role": "system"
            },
            {
                "content": [
                    {
                        "audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                    }
                ],
                "role": "user"
            }
        ]
    },
    "parameters": {
        "incremental_output": true,
        "asr_options": {
            "enable_itn": false
        }
    }
}'

Kompatibel dengan OpenAI

Penting

Wilayah AS tidak mendukung mode kompatibel OpenAI.

Hanya model seri Qwen3-ASR-Flash yang mendukung pemanggilan kompatibel OpenAI. Mode kompatibel OpenAI hanya menerima URL file audio yang dapat diakses publik dan tidak mendukung jalur file lokal.

Gunakan OpenAI Python SDK versi 1.52.0 atau lebih baru, dan Node.js SDK versi 4.68.0 atau lebih baru.

Parameter asr_options bukan bagian dari standar OpenAI. Saat menggunakan SDK OpenAI, lewatkan melalui extra_body.

Input: URL file audio

Python SDK

from openai import OpenAI
import os

try:
    client = OpenAI(
        # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # URL berikut untuk wilayah Singapura/AS. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    

    stream_enabled = False  # Aktifkan keluaran streaming
    completion = client.chat.completions.create(
        model="qwen3-asr-flash",
        messages=[
            {
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                        }
                    }
                ],
                "role": "user"
            }
        ],
        stream=stream_enabled,
        # Jangan atur stream_options saat stream adalah False
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("Keluaran streaming:")
        for chunk in completion:
            # Jika stream_options.include_usage adalah True, field choices chunk terakhir adalah daftar kosong dan harus dilewati (penggunaan token dapat diperoleh melalui chunk.usage)
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"Konten lengkap: {full_content}")
    else:
        print(f"Keluaran non-streaming: {completion.choices[0].message.content}")
except Exception as e:
    print(f"Error: {e}")

Node.js SDK

// Persiapan sebelum menjalankan:
// Berfungsi di Windows/Mac/Linux:
// 1. Pastikan Node.js terinstal (versi >= 14 direkomendasikan)
// 2. Jalankan perintah ini untuk menginstal dependensi: npm install openai

import OpenAI from "openai";

const client = new OpenAI({
  // Kunci API untuk wilayah Singapura/AS 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: apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // URL berikut untuk wilayah Singapura/AS. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", 
});

async function main() {
  try {
    const streamEnabled = false; // Aktifkan keluaran streaming
    const completion = await client.chat.completions.create({
      model: "qwen3-asr-flash",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "input_audio",
              input_audio: {
                data: "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
              }
            }
          ]
        }
      ],
      stream: streamEnabled,
      // Jangan atur stream_options saat stream adalah False
      // stream_options: {
      //   "include_usage": true
      // },
      extra_body: {
        asr_options: {
          // language: "zh",
          enable_itn: false
        }
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("Keluaran streaming:");
      for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
        if (chunk.choices && chunk.choices.length > 0) {
          const delta = chunk.choices[0].delta;
          if (delta && delta.content) {
            fullContent += delta.content;
          }
        }
      }
      console.log(`Konten lengkap: ${fullContent}`);
    } else {
      console.log(`Keluaran non-streaming: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`Error: ${err}`);
  }
}

main();

cURL

# ======= Penting =======
# URL berikut untuk wilayah Singapura/AS. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah Singapura/AS dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-asr-flash",
    "messages": [
        {
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
                    }
                }
            ],
            "role": "user"
        }
    ],
    "stream":false,
    "asr_options": {
        "enable_itn": false
    }
}'

Input: File audio terenkode Base64

Masukkan data terenkripsi Base64 (Data URL) dalam format: data:<mediatype>;base64,<data>.

  • <mediatype>: Jenis MIME

    Bervariasi tergantung format audio, contohnya:

    • WAV: audio/wav

    • MP3: audio/mpeg

  • <data>: String audio terenkripsi Base64

    Pengkodean Base64 meningkatkan ukuran file. Pastikan file asli cukup kecil agar data terenkripsi tetap dalam batas input 10 MB.

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

    Lihat contoh kode

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

Python SDK

Contoh menggunakan file audio: welcome.mp3.

import base64
from openai import OpenAI
import os
import pathlib

try:
    # Ganti dengan jalur file audio aktual Anda
    file_path = "welcome.mp3"
    # Ganti dengan jenis MIME file audio aktual Anda
    audio_mime_type = "audio/mpeg"

    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}"

    client = OpenAI(
        # Kunci API untuk wilayah Singapura/AS 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: api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # URL berikut untuk wilayah Singapura/AS. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    

    stream_enabled = False  # Aktifkan keluaran streaming
    completion = client.chat.completions.create(
        model="qwen3-asr-flash",
        messages=[
            {
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": data_uri
                        }
                    }
                ],
                "role": "user"
            }
        ],
        stream=stream_enabled,
        # Jangan atur stream_options saat stream adalah False
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("Keluaran streaming:")
        for chunk in completion:
            # Jika stream_options.include_usage adalah True, field choices chunk terakhir adalah daftar kosong dan harus dilewati (penggunaan token dapat diperoleh melalui chunk.usage)
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"Konten lengkap: {full_content}")
    else:
        print(f"Keluaran non-streaming: {completion.choices[0].message.content}")
except Exception as e:
    print(f"Error: {e}")

Node.js SDK

Contoh menggunakan file audio: welcome.mp3.

// Persiapan sebelum menjalankan:
// Berfungsi di Windows/Mac/Linux:
// 1. Pastikan Node.js terinstal (versi >= 14 direkomendasikan)
// 2. Jalankan perintah ini untuk menginstal dependensi: npm install openai

import OpenAI from "openai";
import { readFileSync } from 'fs';

const client = new OpenAI({
  // Kunci API untuk wilayah Singapura/AS 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: apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // URL berikut untuk wilayah Singapura/AS. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", 
});

const encodeAudioFile = (audioFilePath) => {
    const audioFile = readFileSync(audioFilePath);
    return audioFile.toString('base64');
};

// Ganti dengan jalur file audio aktual Anda
const dataUri = `data:audio/mpeg;base64,${encodeAudioFile("welcome.mp3")}`;

async function main() {
  try {
    const streamEnabled = false; // Aktifkan keluaran streaming
    const completion = await client.chat.completions.create({
      model: "qwen3-asr-flash",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "input_audio",
              input_audio: {
                data: dataUri
              }
            }
          ]
        }
      ],
      stream: streamEnabled,
      // Jangan atur stream_options saat stream adalah False
      // stream_options: {
      //   "include_usage": true
      // },
      extra_body: {
        asr_options: {
          // language: "zh",
          enable_itn: false
        }
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("Keluaran streaming:");
      for await (const chunk of completion) {
        console.log(JSON.stringify(chunk));
        if (chunk.choices && chunk.choices.length > 0) {
          const delta = chunk.choices[0].delta;
          if (delta && delta.content) {
            fullContent += delta.content;
          }
        }
      }
      console.log(`Konten lengkap: ${fullContent}`);
    } else {
      console.log(`Keluaran non-streaming: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`Error: ${err}`);
  }
}

main();

Referensi API

Referensi API pengenalan file audio - Qwen

Bandingkan model

Set fitur untuk qwen3-asr-flash dan qwen3-asr-flash-2025-09-08 juga berlaku untuk rekanannya di wilayah AS (Virginia): qwen3-asr-flash-us dan qwen3-asr-flash-2025-09-08-us.

Fitur

qwen3-asr-flash-filetrans, qwen3-asr-flash-filetrans-2025-11-17

qwen3-asr-flash,qwen3-asr-flash-2026-02-10, qwen3-asr-flash-2025-09-08

Bahasa yang didukung

Chinese (Mandarin, Sichuanese, Minnan, Wu, Cantonese), English, Japanese, German, Korean, Russian, French, Portuguese, Arabic, Italian, Spanish, Hindi, Indonesian, Thai, Turkish, Ukrainian, Vietnamese, Czech, Danish, Filipino, Finnish, Icelandic, Malay, Norwegian, Polish, Swedish

Format audio

aac, amr, avi, flac, flv, m4a, mkv, mov, mp3, mp4, mpeg, ogg, opus, wav, webm, wma, wmv

aac, amr, avi, aiff, flac, flv, mkv, mp3, mpeg, ogg, opus, wav, webm, wma, wmv

Laju sampel

Bergantung pada format audio:

  • Audio PCM: 16 kHz

  • Format lain: Apa pun (server melakukan resampling audio ke 16 kHz sebelum pengenalan)

Saluran suara

Apa pun

Model menangani audio multi-saluran secara berbeda:

  • Qwen3-ASR-Flash-Filetrans: Tentukan indeks track menggunakan parameter channel_id

  • Qwen3-ASR-Flash: Secara otomatis menggabungkan audio multi-saluran sebelum pemrosesan

Metode input

URL file yang dapat diakses publik

File terenkripsi Base64, jalur file lokal mutlak, URL file yang dapat diakses publik

Ukuran/durasi audio

Ukuran file ≤ 2 GB, durasi ≤ 12 jam

Ukuran file ≤ 10 MB, durasi ≤ 5 menit

Pengenalan emosi

Didukung Selalu diaktifkan. Lihat hasil melalui parameter respons emotion

Timestamp

Didukung Selalu diaktifkan. Kontrol granularitas timestamp melalui parameter permintaan enable_words

Timestamp tingkat karakter hanya dijamin untuk: Chinese, English, Japanese, Korean, German, French, Spanish, Italian, Portuguese, Russian. Akurasi dapat bervariasi untuk bahasa lain.

Tidak didukung

Prediksi tanda baca

Didukung Selalu diaktifkan

ITN

Didukung Dinonaktifkan secara default, dapat diaktifkan. Hanya untuk Chinese dan English.

Pengenalan bernyanyi

Didukung Selalu diaktifkan

Penolakan noise

Didukung Selalu diaktifkan

Filter kata sensitif

Tidak didukung

Speaker diarization

Tidak didukung

Filter kata pengisi

Tidak didukung

VAD

Didukung Selalu diaktifkan

Tidak didukung

Batas laju (RPM)

100

Jenis koneksi

DashScope: Java/Python SDK, RESTful API

DashScope: Java/Python SDK, RESTful API

OpenAI: Python/Node.js SDK, RESTful API

Harga

Internasional: $0,000035/detik

AS: $0,000032/detik

Tiongkok daratan: $0,000032/detik

FAQ

T: Bagaimana cara menyediakan URL audio yang dapat diakses publik untuk API?

Kami merekomendasikan menggunakan Object Storage Service (OSS), yang menyediakan penyimpanan sangat tersedia dan andal serta mudah menghasilkan URL publik.

Verifikasi URL Anda dapat diakses publik: Buka URL di browser atau gunakan curl untuk memastikan file audio berhasil diunduh atau diputar (kode status HTTP 200).

T: Bagaimana cara memeriksa apakah format audio saya memenuhi persyaratan?

Gunakan alat open-source ffprobe untuk mendapatkan informasi audio terperinci dengan cepat:

# Periksa format kontainer (format_name), kodek (codec_name), laju sampel (sample_rate), dan jumlah saluran (channels)
ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 your_audio_file.mp3

T: Bagaimana cara memproses audio agar memenuhi persyaratan model?

Gunakan alat open-source FFmpeg untuk memotong atau mengonversi format audio:

  • Pemotongan audio: Ekstrak segmen dari file audio panjang

    # -i: File input
    # -ss 00:01:30: Waktu mulai (1 menit 30 detik)
    # -t 00:02:00: Durasi (2 menit)
    # -c copy: Salin aliran audio tanpa pengkodean ulang (cepat)
    # output_clip.wav: File output
    ffmpeg -i long_audio.wav -ss 00:01:30 -t 00:02:00 -c copy output_clip.wav
  • Konversi format

    Contohnya, konversi audio apa pun ke WAV 16 kHz, 16-bit, mono

    # -i: File input
    # -ac 1: Atur ke 1 saluran (mono)
    # -ar 16000: Atur laju sampel ke 16000 Hz (16 kHz)
    # -sample_fmt s16: Atur format sampel ke PCM integer bertanda 16-bit
    # output.wav: File output
    ffmpeg -i input.mp3 -ac 1 -ar 16000 -sample_fmt s16 output.wav