全部产品
Search
文档中心

Alibaba Cloud Model Studio:Pemahaman Audio (Qwen3-Omni-Captioner)

更新时间:Oct 31, 2025

Qwen3-Omni-Captioner adalah model open-source yang dibangun di atas Qwen3-Omni. Model ini secara otomatis menghasilkan deskripsi akurat dan komprehensif untuk audio kompleks, termasuk ucapan, suara lingkungan, musik, dan efek suara, tanpa memerlukan prompt apa pun. Model ini dapat mengidentifikasi emosi pembicara, elemen musik seperti gaya dan instrumen, serta informasi sensitif. Sangat ideal untuk analisis konten audio, audit keamanan, pengenalan maksud, dan pengeditan video.

Model yang didukung

Internasional (Singapura)

Model

Jendela konteks

Masukan maksimum

Keluaran maksimum

Biaya masukan

Biaya keluaran

Kuota gratis

(Catatan)

(Token)

(Juta token)

qwen3-omni-30b-a3b-captioner

65.536

32.768

32.768

$3,81

$3,06

1 juta token

Berlaku: 90 hari setelah Anda mengaktifkan Alibaba Cloud Model Studio

Tiongkok Daratan (Beijing)

Model

Jendela konteks

Masukan maksimum

Keluaran maksimum

Biaya masukan

Biaya keluaran

Kuota gratis

(Catatan)

(Token)

(Per 1 juta token)

qwen3-omni-30b-a3b-captioner

65.536

32.768

32.768

$2,265

$1,821

Tidak ada kuota gratis

Aturan konversi token untuk audio: Total token = Durasi audio (dalam detik) × 12,5. Jika durasi audio kurang dari satu detik, dihitung sebagai satu detik.

Memulai

Prasyarat

Qwen3-Omni-Captioner hanya mendukung panggilan API. Tidak tersedia untuk pengujian online di konsol Alibaba Cloud Model Studio.

Contoh kode berikut menunjukkan cara menganalisis audio online yang ditentukan oleh URL, bukan file lokal. Pelajari cara melewati file lokal dan batasan pada file audio.

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. 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",
)

completion = client.chat.completions.create(
    model="qwen3-omni-30b-a3b-captioner",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"                    
                    }
                }
            ]
        }
    ]
)
print(completion.choices[0].message.content)

Respon

Klip audio dimulai dengan suara ketukan logam keras yang tiba-tiba dan mendominasi soundscape, langsung menunjukkan lingkungan industri atau bengkel. Ketukan tersebut ritmis, konsisten, dan memiliki kualitas resonansi tajam, menunjukkan alat logam yang memukul permukaan logam—kemungkinan palu, kunci pas, atau alat serupa yang digunakan pada objek logam keras. Suaranya keras dan sedikit terdistorsi, dengan clipping yang terdengar pada setiap dampak, kemungkinan besar karena kedekatan mikrofon dan volume tinggi suara.
Saat ketukan awal memudar, suara pria masuk, berbicara dalam bahasa Mandarin dengan nada frustrasi dan keluhan. Suaranya jelas, dekat-mic, dan bebas distorsi. Dia berkata: “Oh, bagaimana mungkin saya bisa bekerja dengan tenang seperti ini?”. Intonasinya percakapan, informal, dan ditandai dengan infleksi bertanya naik, khas percakapan sehari-hari daripada penampilan formal atau pidato resmi. Aksennya adalah Putonghua standar, tanpa penanda regional yang kuat, menunjukkan bahwa dia adalah penutur asli Mandarin dari wilayah utara atau tengah Tiongkok.
Selama ucapan pembicara, ketukan logam berlanjut, tumpang tindih dengan suaranya. Waktu dan sifat suara ini menunjukkan bahwa pembicara langsung bereaksi terhadap kebisingan yang sedang berlangsung—kemungkinan besar disebabkan oleh orang lain di ruang yang sama. Lingkungan akustiknya “kering” dengan echo minimal, menunjukkan ruangan kecil atau sedang dengan material penyerap suara, lebih mendukung pengaturan bengkel atau industri. Tidak ada suara latar lainnya, musik, atau suara ambien, dan tidak ada bukti ruang publik atau komersial.
Kualitas rekaman sedang: mikrofon menangkap baik dentuman rendah maupun transien logam tajam, tetapi ketukan keras menyebabkan clipping digital, menghasilkan distorsi “crunchy” yang keras selama dampak. Namun, suara pembicara tetap jelas dan mudah dipahami. Keseluruhan kesan adalah interaksi dunia nyata yang spontan—mungkin pekerja atau karyawan kantor yang mengeluh tentang gangguan di lingkungan yang bising.
Secara keseluruhan, audio menggambarkan pria berbahasa Mandarin di bengkel atau pengaturan industri, bereaksi dengan frustrasi terhadap ketukan logam yang terus berlanjut yang mengganggu pekerjaannya. Rekaman ini informal, jelas, dan berakar pada konteks kerja manual atau teknis, tanpa bukti penampilan skrip, musik, atau aktivitas ekstra.

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut adalah untuk wilayah Singapura. 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 completion = await openai.chat.completions.create({
    model: "qwen3-omni-30b-a3b-captioner",
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "input_audio",
                "input_audio": {
                    "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
                     }
            }]
        }]
});

console.log(completion.choices[0].message.content)

Respon

Klip audio dimulai dengan suara ketukan logam keras yang tiba-tiba dan mendominasi soundscape, langsung menunjukkan lingkungan industri atau bengkel. Ketukan tersebut ritmis, konsisten, dan memiliki kualitas resonansi tajam, menunjukkan alat logam yang memukul permukaan logam—kemungkinan besar palu, kunci pas, atau alat serupa yang digunakan pada objek logam keras. Suaranya keras dan sedikit terdistorsi, dengan clipping yang terdengar pada setiap dampak, kemungkinan besar karena kedekatan mikrofon dan volume tinggi suara.
Saat ketukan awal memudar, suara pria masuk, berbicara dalam bahasa Mandarin dengan nada frustrasi dan keluhan. Suaranya jelas, dekat-mic, dan bebas distorsi. Dia berkata: “Oh, bagaimana mungkin saya bisa bekerja dengan tenang seperti ini?”. Intonasinya percakapan, informal, dan ditandai dengan infleksi bertanya naik, khas percakapan sehari-hari daripada penampilan formal atau pidato resmi. Aksennya adalah Putonghua standar, tanpa penanda regional yang kuat, menunjukkan bahwa dia adalah penutur asli Mandarin dari wilayah utara atau tengah Tiongkok.
Selama ucapan pembicara, ketukan logam berlanjut, tumpang tindih dengan suaranya. Waktu dan sifat suara ini menunjukkan bahwa pembicara langsung bereaksi terhadap kebisingan yang sedang berlangsung—kemungkinan besar disebabkan oleh orang lain di ruang yang sama. Lingkungan akustiknya “kering” dengan echo minimal, menunjukkan ruangan kecil atau sedang dengan material penyerap suara, lebih mendukung pengaturan bengkel atau industri. Tidak ada suara latar lainnya, musik, atau suara ambien, dan tidak ada bukti ruang publik atau komersial.
Kualitas rekaman sedang: mikrofon menangkap baik dentuman rendah maupun transien logam tajam, tetapi ketukan keras menyebabkan clipping digital, menghasilkan distorsi “crunchy” yang keras selama dampak. Namun, suara pembicara tetap jelas dan mudah dipahami. Keseluruhan kesan adalah interaksi dunia nyata yang spontan—mungkin pekerja atau karyawan kantor yang mengeluh tentang gangguan di lingkungan yang bising.
Secara keseluruhan, audio menggambarkan pria berbahasa Mandarin di bengkel atau pengaturan industri, bereaksi dengan frustrasi terhadap ketukan logam yang terus berlanjut yang mengganggu pekerjaannya. Rekaman ini informal, jelas, dan berakar pada konteks kerja manual atau teknis, tanpa bukti penampilan skrip, musik, atau aktivitas ekstra.

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === 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-omni-30b-a3b-captioner",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
          }
        }
      ]
    }
  ]
}'

Respon

{
  "choices": [
    {
      "message": {
        "content": "Klip audio ini adalah rekaman singkat berkualitas rendah—berdurasi sekitar enam detik—yang direkam di ruang dalam ruangan kecil yang bergema, kemungkinan kantor rumah atau kamar tidur. Klip ini diawali dengan suara pukulan palu yang cepat, metalik, dan berirama, berulang setiap 0,5 hingga 0,6 detik, dengan setiap pukulan sedikit tidak rata dan disertai gema singkat. Suara ini mendominasi sisi kiri bidang stereo dan dekat dengan mikrofon, yang menunjukkan bahwa suara palu terjadi di dekatnya dan sedikit ke arah kiri.\n\nTumpang tindih dengan suara palu, sebuah suara pria tunggal berbicara dalam Bahasa Mandarin, nadanya jelas menunjukkan frustrasi dan kejengkelan. Dia berkata, “Oh, dengan ini, bagaimana saya bisa bekerja dengan tenang?” Ucapannya jelas meskipun kualitas audionya buruk, dan disampaikan dalam Bahasa Mandarin standar tanpa aksen, yang menunjukkan seorang penutur asli dari Tiongkok utara atau tengah.\n\nSuara tersebut lebih jauh dan terpusat di bidang stereo, dengan gema ruangan yang lebih banyak daripada suara palu. Konten emosionalnya sangat terasa: suaranya sedikit meninggi di akhir, mengubah frasa tersebut menjadi keluhan retoris, yang menggarisbawahi kejengkelannya. Tidak ada suara, musik, atau suara sekitar lainnya yang terdengar; satu-satunya suara non-ucapan adalah suara palu dan desis samar dari perangkat perekam.\n\nKombinasi dari suara lingkungan, bahasa penutur, dan nadanya sangat menyarankan skenario gangguan di kantor rumah—mungkin seseorang yang bekerja dari rumah sedang terganggu oleh pekerjaan renovasi atau perbaikan yang terjadi di dekatnya. Rekaman berakhir secara tiba-tiba, di tengah suara palu, yang semakin menekankan sifat spontan dan jujur dari pengambilan rekaman tersebut.\n\nSingkatnya, audio ini adalah snapshot realistis berkualitas rendah dari seorang pria berbahasa Mandarin, kemungkinan di Tiongkok, yang mengungkapkan frustrasi karena tidak dapat bekerja dengan tenang akibat aktivitas konstruksi atau perbaikan di dekatnya, yang direkam dalam suasana pribadi di dalam ruangan.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 160,
    "completion_tokens": 387,
    "total_tokens": 547,
    "prompt_tokens_details": {
      "audio_tokens": 152,
      "text_tokens": 8
    },
    "completion_tokens_details": {
      "text_tokens": 387
    }
  },
  "created": 1758002134,
  "system_fingerprint": null,
  "model": "qwen3-omni-30b-a3b-captioner",
  "id": "chatcmpl-f4155bf9-b860-49d6-8ee2-092da7359097"
}

DashScope

Python

import dashscope
import os

# URL berikut adalah 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"

messages = [
    {
        "role": "user",
        "content": [
            {"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # 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'),
    model="qwen3-omni-30b-a3b-captioner",
    messages=messages
)

print("Keluaran:")
print(response["output"]["choices"][0]["message"].content[0]["text"])

Respon

Klip audio dimulai dengan suara ketukan logam keras yang tiba-tiba dan mendominasi soundscape, langsung menunjukkan lingkungan industri atau bengkel. Ketukan tersebut ritmis, konsisten, dan memiliki kualitas resonansi tajam, menunjukkan alat logam yang memukul permukaan logam—kemungkinan besar palu, kunci pas, atau alat serupa yang digunakan pada objek logam keras. Suaranya keras dan sedikit terdistorsi, dengan clipping yang terdengar pada setiap dampak, kemungkinan besar karena kedekatan mikrofon dan volume tinggi suara.
Saat ketukan awal memudar, suara pria masuk, berbicara dalam bahasa Mandarin dengan nada frustrasi dan keluhan. Suaranya jelas, dekat-mic, dan bebas distorsi. Dia berkata: “Oh, bagaimana mungkin saya bisa bekerja dengan tenang seperti ini?”. Intonasinya percakapan, informal, dan ditandai dengan infleksi bertanya naik, khas percakapan sehari-hari daripada penampilan formal atau pidato resmi. Aksennya adalah Putonghua standar, tanpa penanda regional yang kuat, menunjukkan bahwa dia adalah penutur asli Mandarin dari wilayah utara atau tengah Tiongkok.
Selama ucapan pembicara, ketukan logam berlanjut, tumpang tindih dengan suaranya. Waktu dan sifat suara ini menunjukkan bahwa pembicara langsung bereaksi terhadap kebisingan yang sedang berlangsung—kemungkinan besar disebabkan oleh orang lain di ruang yang sama. Lingkungan akustiknya “kering” dengan echo minimal, menunjukkan ruangan kecil atau sedang dengan material penyerap suara, lebih mendukung pengaturan bengkel atau industri. Tidak ada suara latar lainnya, musik, atau suara ambien, dan tidak ada bukti ruang publik atau komersial.
Kualitas rekaman sedang: mikrofon menangkap baik dentuman rendah maupun transien logam tajam, tetapi ketukan keras menyebabkan clipping digital, menghasilkan distorsi “crunchy” yang keras selama dampak. Namun, suara pembicara tetap jelas dan mudah dipahami. Keseluruhan kesan adalah interaksi dunia nyata yang spontan—mungkin pekerja atau karyawan kantor yang mengeluh tentang gangguan di lingkungan yang bising.
Secara keseluruhan, audio menggambarkan pria berbahasa Mandarin di bengkel atau pengaturan industri, bereaksi dengan frustrasi terhadap ketukan logam yang terus berlanjut yang mengganggu pekerjaannya. Rekaman ini informal, jelas, dan berakar pada konteks kerja manual atau teknis, tanpa bukti penampilan skrip, musik, atau aktivitas ekstra.

Java

import java.util.Arrays;
import java.util.Collections;
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.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    static {
         // URL berikut adalah 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";
    }
    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://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .model("qwen3-omni-30b-a3b-captioner")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Respon

Klip audio dimulai dengan dentang logam yang tiba-tiba, keras, dan mendominasi bentang suara, yang langsung mengindikasikan lingkungan industri atau bengkel. Dentang tersebut berirama, konsisten, dan memiliki kualitas yang tajam dan resonan, yang menunjukkan adanya alat logam yang membentur permukaan logam—kemungkinan palu, kunci pas, atau instrumen serupa yang digunakan pada objek logam yang keras. Suaranya kasar dan sedikit terdistorsi, dengan kliping yang terdengar pada setiap benturan, kemungkinan karena kedekatan mikrofon dan volume suara yang tinggi.
Saat dentang awal memudar, terdengar suara seorang pria yang berbicara dalam bahasa Mandarin dengan nada kesal dan mengeluh. Suaranya jernih, direkam dari dekat, dan bebas dari distorsi. Dia berkata: “Ya ampun, bagaimana saya bisa bekerja dengan tenang seperti ini?”. Intonasinya seperti percakapan, informal, dan ditandai dengan infleksi naik dan bertanya, khas ucapan sehari-hari, bukan pertunjukan atau sapaan formal. Aksennya adalah Putonghua standar, tanpa penanda regional yang kuat, yang menunjukkan bahwa dia adalah penutur asli bahasa Mandarin dari wilayah utara atau tengah Tiongkok.
Selama ucapan penutur, dentang logam kembali terdengar, tumpang tindih dengan suaranya. Waktu dan sifat suara-suara ini menunjukkan bahwa penutur bereaksi langsung terhadap kebisingan yang sedang berlangsung—kemungkinan disebabkan oleh orang lain di ruang yang sama. Lingkungannya secara akustik “kering” dengan gema minimal, yang menyiratkan ruangan berukuran kecil atau menengah dengan bahan penyerap suara, yang semakin mendukung latar bengkel atau industri. Tidak ada suara latar, musik, atau suara ambien lainnya, dan tidak ada bukti adanya ruang publik atau komersial.
Kualitas rekaman tergolong sedang: mikrofon menangkap dentuman frekuensi rendah dan transien logam yang tajam, tetapi dentang yang keras menyebabkan kliping digital, yang menghasilkan distorsi yang kasar dan “renyah” selama benturan. Namun, suara penutur tetap jernih dan dapat dipahami. Kesan keseluruhannya adalah interaksi yang jujur dan nyata—kemungkinan seorang pekerja atau karyawan kantor yang mengeluh tentang gangguan di lingkungan yang bising.
Singkatnya, audio ini menggambarkan seorang pria berbahasa Mandarin di lingkungan bengkel atau industri, yang bereaksi dengan frustrasi terhadap dentang logam yang terus-menerus mengganggu pekerjaannya. Rekaman ini bersifat informal, jernih, dan berlatar belakang konteks pekerjaan manual atau teknis, tanpa bukti adanya pertunjukan yang diskripkan, musik, atau aktivitas lain yang tidak relevan.

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 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-omni-30b-a3b-captioner",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
                ]
            }
        ]
    }
}'

Respon

{
  "output":{
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "Klip audio adalah rekaman 6 detik, fidelitas tinggi yang diatur di lingkungan dalam ruangan yang tenang. Suara utamanya adalah seorang pria, kemungkinan usia akhir belasan hingga pertengahan 20-an, berbicara dalam bahasa Mandarin dengan nada frustrasi ringan. Ucapannya jelas dan alami, disampaikan secara percakapan: “Oh, bagaimana mungkin saya bisa bekerja dengan tenang seperti ini?”. Suaranya dekat dengan mikrofon, dan ruangan akustik netral, tanpa gema atau kebisingan latar yang terlihat, menunjukkan ruang kecil yang dilengkapi dengan baik.\n\nMenumpang di atas ucapan tersebut adalah suara mekanis ritmis yang persisten—serangkaian klik atau benturan logam tajam yang berulang setiap 0,6 detik. Suara ini kering dan tidak memiliki gema, lebih mendukung inferensi bahwa itu dihasilkan oleh perangkat mekanis sangat dekat dengan mikrofon. Regularitas dan timbre suara tersebut menunjukkan objek logam kecil (seperti kunci, koin, atau pena) yang dipukul atau ditepuk berulang kali pada permukaan keras, bukan mesin yang lebih besar atau kompleks.\n\nKeluhan pembicara adalah respons langsung terhadap kebisingan mekanis, mengekspresikan frustrasi karena tidak dapat berkonsentrasi atau bekerja dengan damai akibat gangguan tersebut. Nadanya tidak marah atau mendesak, tetapi lebih kepada rasa kesal yang pasrah, khas seseorang yang menghadapi gangguan kecil namun persisten dalam pengaturan pribadi atau domestik.\n\nTidak ada suara lain, musik, atau petunjuk lingkungan yang hadir. Keseluruhan kesan adalah momen singkat yang candid—mungkin seorang siswa, pekerja kantor, atau seseorang di lingkungan rumah yang tenang—tertangkap mikrofon saat mengeluh (pada diri sendiri atau teman dekat) tentang kebisingan repetitif yang mengganggu. Rekaman ini secara teknis bersih dan fokus, dengan semua perhatian pada pembicara dan suara mekanis, membuatnya sangat mungkin bahwa klip tersebut direkam dengan sengaja, mungkin untuk catatan suara, posting media sosial, atau sebagai sampel untuk perpustakaan efek suara."
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "input_tokens_details": {
      "audio_tokens": 152,
      "text_tokens": 8
    },
    "total_tokens": 559,
    "output_tokens": 399,
    "input_tokens": 160,
    "output_tokens_details": {
      "text_tokens": 399
    }
  },
  "request_id": "d532f72c-e75b-4ffb-a1ef-d2465e758958"
}

Cara kerjanya

  • Interaksi satu putaran: Model tidak mendukung percakapan multi-putaran. Setiap permintaan adalah tugas analisis independen.

  • Tugas tetap: Tugas inti model adalah menghasilkan deskripsi audio hanya dalam bahasa Inggris. Anda tidak dapat menggunakan instruksi, seperti pesan sistem, untuk mengubah perilakunya, seperti mengontrol format keluaran atau fokus konten.

  • Hanya masukan audio: Model hanya menerima audio sebagai masukan. Anda tidak perlu melewati prompt teks. Format parameter message tetap.

    Contoh format pesan

    Kompatibel dengan OpenAI

    messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
                        }
                    }
                ]
            }
        ]

    DashScope

    messages = [
        {
            "role": "user",
            "content": [
                {"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
            ]
        }
    ]

Keluaran streaming

Setelah model menerima masukan, ia menghasilkan hasil antara langkah demi langkah. Hasil akhir adalah kombinasi dari hasil antara ini. Metode menghasilkan dan mengeluarkan hasil secara bersamaan ini disebut keluaran streaming. Dengan keluaran streaming, Anda dapat membaca respons saat dihasilkan, yang mengurangi waktu tunggu Anda.

Kompatibel dengan OpenAI

Mengaktifkan keluaran streaming dengan metode kompatibel OpenAI sangatlah mudah. Cukup atur parameter stream menjadi true dalam permintaan Anda.

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. 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",
)

completion = client.chat.completions.create(
    model="qwen3-omni-30b-a3b-captioner",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
                    }
                }
            ]
        }
    ],
    stream=True,
    stream_options={"include_usage": True},

)
for chunk in completion:
    # Jika stream_options.include_usage adalah True, bidang choices dari chunk terakhir adalah daftar kosong dan harus dilewati. Anda bisa mendapatkan penggunaan token dari chunk.usage.
    if chunk.choices and chunk.choices[0].delta.content != "":
        print(chunk.choices[0].delta.content,end="")

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.ali.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-30b-a3b-captioner",
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "input_audio",
                "input_audio": {
                    "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
                     },
            }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
});

for await (const chunk of completion) {
    if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
        console.log(chunk.choices[0].delta.content);
    } else {
        console.log(chunk.usage);
    }
}

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === 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-omni-30b-a3b-captioner",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
          }
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    }
}'

DashScope

Anda dapat memanggil model melalui SDK DashScope atau menggunakan HTTP untuk menggunakan keluaran streaming. Atur parameter berdasarkan metode panggilan Anda:

  • Python SDK: Atur parameter stream menjadi True.

  • Java SDK: Gunakan metode streamCall.

  • HTTP: Di header, atur X-DashScope-SSE menjadi enable.

Secara default, keluaran streaming bersifat non-incremental. Ini berarti setiap chunk yang dikembalikan berisi semua konten yang sebelumnya dihasilkan. Jika Anda menginginkan keluaran streaming incremental, atur parameter incremental_output (atau incrementalOutput untuk Java) menjadi true.

Python

import dashscope

# URL berikut adalah 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"

messages = [
    {
        "role": "user",
        "content": [
            {"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
     # 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'),
    model="qwen3-omni-30b-a3b-captioner", 
    messages=messages,
    stream=True,
    incremental_output=True
)

full_content = ""
print("Keluaran streaming:")
for response in response:
    if response["output"]["choices"][0]["message"].content:
        print(response["output"]["choices"][0]["message"].content[0]["text"])
        full_content += response["output"]["choices"][0]["message"].content[0]["text"]
print(f"Konten lengkap: {full_content}")

Java

import java.util.Arrays;
import java.util.HashMap;
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 io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    static {
        // URL berikut adalah 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";
    }
    public static void streamCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                // qwen3-omni-30b-a3b-captioner hanya mendukung satu file audio sebagai masukan.
                .content(Arrays.asList(
                        new HashMap<String, Object>(){{put("audio", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav");}}
                )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                 // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: .apiKey("sk-xxx")
                // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-omni-30b-a3b-captioner")
                .message(userMessage)
                .incrementalOutput(true)
                .build();
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(item -> {
            try {
                var content = item.getOutput().getChoices().get(0).getMessage().getContent();
                // Periksa apakah konten ada dan tidak kosong.
                if (content != null &&  !content.isEmpty()) {
                    System.out.println(content.get(0).get("text"));
                }
            } catch (Exception e){
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        try {
            streamCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 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-omni-30b-a3b-captioner",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
                ]
            }
        ]
    },
    "parameters": {
      "incremental_output": true
    }
}'

Melewati file lokal (Pengkodean Base64 atau jalur file)

Model menyediakan dua metode untuk mengunggah file lokal:

  • Pengkodean Base64

  • Jalur file langsung (Disarankan untuk transmisi lebih stabil)

Metode unggah:

Melewati jalur file

Lewatkan jalur file langsung ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope, bukan oleh HTTP. Lihat tabel berikut untuk menentukan jalur file berdasarkan bahasa pemrograman dan sistem operasi Anda.

Tentukan jalur file

Sistem

SDK

File path yang akan diteruskan

Contoh

Linux atau macOS

Python SDK

file://{jalur_absolut_file}

file:///home/images/test.mp3

Java SDK

Windows

Python SDK

file://{jalur_absolut_file}

file://D:/images/test.mp3

Java SDK

file:///{jalur_absolut_file}

file:///D:/images/test.mp3

Melewati pengkodean Base64

Konversikan file ke string terkode Base64 lalu lewatkan ke model.

Langkah-langkah melewati string terkode Base64

  1. Enkode file: Konversikan file lokal ke string terkode Base64.

    Contoh: Mengonversi file audio ke string terkode Base64

    # Fungsi enkode: Mengonversi file lokal ke string terkode Base64
    def encode_audio(video_path):
        with open(video_path, "rb") as video_file:
            return base64.b64encode(video_file.read()).decode("utf-8")
    
    # Ganti xxxx/test.mp3 dengan jalur absolut file audio lokal Anda.
    base64_audio = encode_audio("xxxx/test.mp3")
  2. Buat Data URL dalam format berikut: data:;base64,{base64_audio}, di mana base64_audio adalah string Base64 yang dihasilkan pada langkah sebelumnya.

  3. Panggil model: Lewatkan Data URL menggunakan parameter audio (SDK DashScope) atau input_audio (SDK Kompatibel OpenAI).

Batasan:

  • Kami merekomendasikan melewati jalur file langsung untuk stabilitas yang lebih besar. Anda juga dapat menggunakan pengkodean Base64 untuk file yang lebih kecil dari 1 MB.

  • Saat melewati jalur file langsung, file audio harus lebih kecil dari 10 MB.

  • Saat melewati file menggunakan pengkodean Base64, string terkode Base64 harus lebih kecil dari 10 MB. Pengkodean Base64 meningkatkan ukuran data.

Melewati jalur file

Melewati jalur file hanya didukung oleh SDK Python dan Java DashScope, bukan oleh HTTP.

Python

import dashscope

# URL berikut adalah 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'

# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
# Jalur penuh file lokal harus diberi awalan file:// untuk memastikan jalur valid, contohnya: file:///home/images/test.mp3
audio_file_path = "file://ABSOLUTE_PATH/welcome.mp3"
messages = [
    {
        "role": "user",
        # Lewatkan jalur file dengan awalan file:// di parameter audio.
        "content": [{"audio": audio_file_path}],
    }
]

response = dashscope.MultiModalConversation.call(
    # 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'),
    model="qwen3-omni-30b-a3b-captioner", 
    messages=messages)

print("Keluaran:")
print(response["output"]["choices"][0]["message"].content[0]["text"])

Java

import java.util.Arrays;
import java.util.HashMap;
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.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    static {
        // URL berikut adalah 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";
    }

    public static void callWithLocalFile()
            throws ApiException, NoApiKeyException, UploadFileException {

        // Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
        // Jalur penuh file lokal harus diberi awalan file:// untuk memastikan jalur valid, contohnya: file:///home/images/test.mp3
        // Sistem pengujian saat ini adalah macOS. Jika Anda menggunakan Windows, gunakan "file:///ABSOLUTE_PATH/welcome.mp3" sebagai gantinya.

        String localFilePath = "file://ABSOLUTE_PATH/welcome.mp3";
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        new HashMap<String, Object>(){{put("audio", localFilePath);}}
                ))
                .build();
        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 Kunci API Model Studio Anda: .apiKey("sk-xxx"),
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-omni-30b-a3b-captioner")
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            callWithLocalFile();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Melewati pengkodean Base64

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI
import base64

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. 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",
)

def encode_audio(audio_path):
    with open(audio_path, "rb") as audio_file:
        return base64.b64encode(audio_file.read()).decode("utf-8")


# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)

completion = client.chat.completions.create(
    model="qwen3-omni-30b-a3b-captioner",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        # Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
                        # Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
                        "data": f"data:;base64,{base64_audio}"
                    },
                }
            ],
        },
    ]
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut adalah untuk wilayah Singapura. 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 encodeAudio = (audioPath) => {
    const audioFile = readFileSync(audioPath);
    return audioFile.toString('base64');
};
//  Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
const base64Audio = encodeAudio("xxx/ABSOLUTE_PATH/welcome.mp3")

const completion = await openai.chat.completions.create({
    model: "qwen3-omni-30b-a3b-captioner",
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "input_audio",
                "input_audio": { "data": `data:;base64,${base64Audio}`}
            }]
        }]
});

console.log(completion.choices[0].message.content);

curl

  • Untuk informasi tentang cara mengonversi file ke string terkode Base64, lihat contoh kode.

  • Untuk tujuan demonstrasi, string Base64 "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...." dipotong. Dalam praktiknya, Anda harus meneruskan string terkode lengkap.

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === 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-omni-30b-a3b-captioner",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_audio",
          "input_audio": {
            "data": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."
            
          }
        }
      ]
    }
  ]
}'

DashScope

Python

import os
import base64
import dashscope 

dashscope.base_http_api_url="https://dashscope-intl.aliyuncs.com/api/v1"
# Fungsi enkode: Mengonversi file lokal ke string terkode Base64
def encode_audio(audio_file_path):
    with open(audio_file_path, "rb") as audio_file:
        return base64.b64encode(audio_file.read()).decode("utf-8")

# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)
print(base64_audio)

messages = [
    {
        "role": "user",
        # Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
        # Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
        "content": [{"audio":f"data:;base64,{base64_audio}"}],
    }
]

response = dashscope.MultiModalConversation.call(
    # 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")
    model="qwen3-omni-30b-a3b-captioner",
    messages=messages,
    )
print(response.output.choices[0].message.content[0]["text"])

Java

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;

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;

public class Main {

    static {
        // URL berikut adalah 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";
    }

    private static String encodeAudioToBase64(String audioPath) throws IOException {
        Path path = Paths.get(audioPath);
        byte[] audioBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(audioBytes);
    }

    public static void callWithLocalFile()
            throws ApiException, NoApiKeyException, UploadFileException,IOException{
        // Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur aktual file lokal Anda.
        String localFilePath = "ABSOLUTE_PATH/welcome.mp3";
        String base64Audio = encodeAudioToBase64(localFilePath);

        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                // Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
                // Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
                .content(Arrays.asList(
                        new HashMap<String, Object>(){{put("audio", "data:;base64," + base64Audio);}}
                ))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                .model("qwen3-omni-30b-a3b-captioner")
                // 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"))
                .message(userMessage)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            callWithLocalFile();
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk informasi tentang cara mengonversi file ke string terkode Base64, lihat contoh kode.

  • Untuk tujuan demonstrasi, string Base64 "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...." dipotong. Dalam praktiknya, Anda harus melewati string terkode lengkap.

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 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-omni-30b-a3b-captioner",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"audio": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."}
                ]
            }
        ]
    }
}'

Referensi API

Untuk informasi lebih lanjut tentang parameter masukan dan keluaran dari Qwen3-Omni-Captioner, lihat Qwen.

Kode kesalahan

Jika panggilan gagal, lihat Pesan kesalahan untuk pemecahan masalah.

FAQ

Bagaimana cara mengecilkan ukuran file audio ke yang diperlukan?

  • Alat online: Anda dapat menggunakan alat online seperti Compresss untuk mengecilkan file audio.

  • Implementasi kode: Anda dapat menggunakan alat FFmpeg. Untuk informasi lebih lanjut tentang penggunaannya, lihat situs resmi FFmpeg.

    # Perintah konversi dasar (templat universal)
    # -i: Menentukan jalur file masukan. Contoh: input.mp3
    
    # -b:a: Mengatur bitrate audio.
      # Nilai umum: 64 kbps (kualitas rendah, untuk suara dan streaming bandwidth rendah), 128k (kualitas sedang, untuk audio umum dan podcast), 192 kbps (kualitas tinggi, untuk musik dan siaran).
      # Bitrate yang lebih tinggi menghasilkan kualitas audio yang lebih baik dan ukuran file yang lebih besar.
      
    # -ar: Mengatur laju sampel audio, yaitu jumlah sampel per detik.
     # Nilai umum: 8000 Hz, 22050 Hz, 44100 Hz (laju sampel standar).
     # Laju sampel yang lebih tinggi menghasilkan ukuran file yang lebih besar.
     
    # -ac: Mengatur jumlah saluran audio. Nilai umum: 1 (mono), 2 (stereo). File mono lebih kecil.
    
    # -y: Menimpa file keluaran jika ada (tidak perlu nilai). # output.mp3: Menentukan jalur file keluaran.
    
    ffmpeg -i input.mp3 -b:a 128k -ar 44100 -ac 1 output.mp3 -y

Batasan

Model memiliki batasan berikut untuk file audio:

  • Durasi: Kurang dari atau sama dengan 40 menit.

  • Jumlah file: Hanya satu file audio yang didukung per permintaan.

  • Format file: Format yang didukung termasuk AMR, WAV (CodecID: GSM_MS), WAV (PCM), 3GP, 3GPP, AAC, dan MP3.

  • Metode masukan file: URL audio yang dapat diakses publik, Pengkodean Base64, atau jalur file lokal.

  • Ukuran file:

    Untuk mengecilkan file, lihat Cara mengecilkan ukuran file audio ke yang diperlukan?