すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:音声ファイル文字起こし - Qwen

最終更新日:Mar 05, 2026

Qwen の音声ファイル文字起こしモデルは、録音された音声をテキストに変換します。これらのモデルは、多言語および歌唱音声の認識、ならびにノイズ除去機能をサポートしています。

主な機能

  • 多言語認識: 普通话(標準中国語)、広東語、四川語などの複数の言語および方言に対応した音声認識をサポートします。

  • 複雑な環境への適応: 難しい音響条件下でも動作可能です。自動言語検出および非音声部分のインテリジェントなフィルタリングをサポートします。

  • 歌唱音声認識: 背景音楽(BGM)が含まれている場合でも、フルソングの文字起こしが可能です。

  • 感情認識: 驚き、平静、喜び、悲しみ、嫌悪、怒り、恐怖など、複数の感情状態を検出できます。

適用範囲

サポートされるモデル:

本サービスでは、以下の 2 つのコアモデルを提供しています。

  • Qwen3-ASR-Flash-Filetrans: 長時間音声ファイル(最大 12 時間)の非同期文字起こし向けに設計されています。会議メモやインタビューの文字起こしにご利用いただけます。

  • Qwen3-ASR-Flash: 短時間音声ファイル(最大 5 分間)の同期またはストリーミング文字起こし向けに設計されています。音声メッセージやリアルタイム字幕の生成にご利用いただけます。

国際

国際デプロイメントモード」では、エンドポイントおよびデータストレージは シンガポールリージョン に配置されます。モデル推論には、グローバルなリージョン(中国本土を除く)で動的にスケジュールされた計算リソースが使用されます。

以下のモデルを呼び出す際には、シンガポールリージョンの API キーを使用する必要があります:API キー

  • Qwen3-ASR-Flash-Filetrans: qwen3-asr-flash-filetrans(安定版、現在は qwen3-asr-flash-filetrans-2025-11-17 と同等)。qwen3-asr-flash-filetrans-2025-11-17(スナップショット版)

  • Qwen3-ASR-Flash: qwen3-asr-flash(安定版、現在は qwen3-asr-flash-2025-09-08 と同等)。qwen3-asr-flash-2026-02-10(最新スナップショット版)。qwen3-asr-flash-2025-09-08(スナップショット版)

米国

米国デプロイメントモード」では、エンドポイントおよびデータストレージは 米国 (バージニア) リージョン に配置されます。モデル推論には、米国内の計算リソースのみが使用されます。

以下のモデルを呼び出す際には、米国リージョンの API キーを使用する必要があります:API キー

Qwen3-ASR-Flash: qwen3-asr-flash-us(安定版、現在は qwen3-asr-flash-2025-09-08-us と同等)。qwen3-asr-flash-2025-09-08-us(スナップショット版)

中国本土

中国本土デプロイメントモード」では、エンドポイントおよびデータストレージは 中国 (北京) リージョン に配置されます。モデル推論には、中国本土内の計算リソースのみが使用されます。

以下のモデルを呼び出す際には、中国 (北京) リージョンの API キーを使用する必要があります:API キー

  • Qwen3-ASR-Flash-Filetrans: qwen3-asr-flash-filetrans(安定版、現在は qwen3-asr-flash-filetrans-2025-11-17 と同等)。qwen3-asr-flash-filetrans-2025-11-17(スナップショット版)

  • Qwen3-ASR-Flash: qwen3-asr-flash(安定版、現在は qwen3-asr-flash-2025-09-08 と同等)。qwen3-asr-flash-2026-02-10(最新スナップショット版)。qwen3-asr-flash-2025-09-08(スナップショット版)

詳細については、「モデル一覧」をご参照ください。

モデル選択

シナリオ

推奨モデル

理由

備考

長時間音声の文字起こし

qwen3-asr-flash-filetrans

最大 12 時間の音声をサポート。感情認識および単語/文字レベルのタイムスタンプを含み、索引付けおよび分析に活用できます。

音声ファイルサイズは 2 GB を超えてはなりません。音声再生時間は 12 時間を超えてはなりません。

短時間音声の文字起こし

qwen3-asr-flash または qwen3-asr-flash-us

短時間音声向けの低遅延文字起こしを実現します。

音声ファイルサイズは 10 MB を超えてはなりません。音声再生時間は 5 分間を超えてはなりません。

カスタマーサポート品質監査

qwen3-asr-flash-filetrans、qwen3-asr-flash、または qwen3-asr-flash-us

顧客の感情を分析します。

禁止用語フィルターおよび話者分離機能はサポートしていません。音声の再生時間に応じてモデルを選択してください。

ニュースまたはインタビュープログラム向け字幕生成

qwen3-asr-flash-filetrans

長時間音声+句読点予測+タイムスタンプ。構造化された字幕を直接生成します。

標準的な字幕ファイルを生成するには、後処理が必要です。音声の再生時間に応じてモデルを選択してください。

多言語ビデオのローカライズ

qwen3-asr-flash-filetrans、qwen3-asr-flash、または qwen3-asr-flash-us

複数の言語および方言に対応しており、クロス言語字幕作成に適しています。

音声の再生時間に応じてモデルを選択してください。

歌唱音声分析

qwen3-asr-flash-filetrans、qwen3-asr-flash、または qwen3-asr-flash-us

歌詞の認識および感情分析を実行します。楽曲の索引付けおよびレコメンデーションに役立ちます。

音声の再生時間に応じてモデルを選択してください。

詳細については、「モデル機能比較」をご参照ください。

クイックスタート

API を使用するための前提条件:まずAPI キーを取得する必要があります。SDK を使用して API を呼び出す場合は、最新の SDK をインストールする必要があります。

DashScope

Qwen3-ASR-Flash-Filetrans

Qwen3-ASR-Flash-Filetrans モデルは、最大 12 時間の音声ファイルの非同期文字起こし向けに設計されています。音声ファイルは、パブリックネットワークからアクセス可能な URL を指定する必要があります。ローカルファイルの直接アップロードはサポートしていません。これは非ストリーミングインターフェイスであり、タスク完了後にすべての結果を一度に返します。

cURL

cURL を使用して音声を文字起こすには、まずタスク ID(task_id)を取得するためにタスクを送信する必要があります。その後、その ID を使用してタスクの結果を取得します。

タスクの送信

# ======= 重要なお知らせ =======
# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription に置き換えてください。
# 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===

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

タスク結果の取得

# ======= 重要なお知らせ =======
# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/tasks/{task_id} に置き換え、{task_id} を実際のタスク ID に置き換えてください。
# 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===

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"

完全な例

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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を 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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を 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) {
        // 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:String apiKey = "sk-xxx"
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        OkHttpClient client = new OkHttpClient();

        // 1. タスクの送信
        /*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("タスクを送信しました。task_id: " + taskId);
                } else {
                    System.out.println("応答: " + respBody);
                    return;
                }
            } else {
                System.out.println("タスク送信に失敗しました!HTTP コード: " + response.code());
                if (response.body() != null) {
                    System.out.println(response.body().string());
                }
                return;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // 2. タスクステータスのポーリング
        boolean finished = false;
        while (!finished) {
            try {
                TimeUnit.SECONDS.sleep(2);  // 再度クエリする前に 2 秒待機
            } 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);
                        if ("SUCCEEDED".equalsIgnoreCase(status)
                                || "FAILED".equalsIgnoreCase(status)
                                || "UNKNOWN".equalsIgnoreCase(status)) {
                            finished = true;
                            System.out.println("タスクが完了しました。最終結果:");
                            System.out.println(queryResponse);
                        }
                    } else {
                        System.out.println("クエリ応答: " + 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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を 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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/tasks/" に置き換えてください。
API_URL_QUERY_BASE = "https://dashscope-intl.aliyuncs.com/api/v1/tasks/"


def main():
    # 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください: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. タスクの送信
    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("ASR 文字起こしタスクを送信中...")
    try:
        submit_resp = requests.post(API_URL_SUBMIT, headers=headers, data=json.dumps(payload))
    except requests.RequestException as e:
        print(f"タスク送信リクエストに失敗しました: {e}")
        return

    if submit_resp.status_code != 200:
        print(f"タスク送信に失敗しました!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("予期しない応答: ", resp_data)
        return

    task_id = output["task_id"]
    print(f"タスクを送信しました。task_id: {task_id}")

    # 2. タスクステータスのポーリング
    finished = False
    while not finished:
        time.sleep(2)  # 再度クエリする前に 2 秒待機

        query_url = API_URL_QUERY_BASE + task_id
        try:
            query_resp = requests.get(query_url, headers=headers)
        except requests.RequestException as e:
            print(f"タスククエリリクエストに失敗しました: {e}")
            return

        if query_resp.status_code != 200:
            print(f"タスククエリに失敗しました!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}")

            if status.upper() in ("SUCCEEDED", "FAILED", "UNKNOWN"):
                finished = True
                print("タスクが完了しました。最終結果:")
                print(json.dumps(query_data, indent=2, ensure_ascii=False))
        else:
            print("クエリ応答: ", 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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。
        Constants.baseHttpApiUrl = "https://dashscope-intl.aliyuncs.com/api/v1";
        QwenTranscriptionParam param =
                QwenTranscriptionParam.builder()
                        // 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                        // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:.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();
            // タスクの送信
            QwenTranscriptionResult result = transcription.asyncCall(param);
            System.out.println("タスク作成結果: " + result);
            // タスクステータスのクエリ
            result = transcription.fetch(QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("タスクステータス: " + result);
            // タスク完了まで待機
            result =
                    transcription.wait(
                            QwenTranscriptionQueryParam.FromTranscriptionParam(param, result.getTaskId()));
            System.out.println("タスク結果: " + result);
            // 文字起こし結果の取得
            QwenTranscriptionTaskResult taskResult = result.getResult();
            if (taskResult != null) {
                // 文字起こし結果の URL を取得
                String transcriptionUrl = taskResult.getTranscriptionUrl();
                // URL から結果を取得
                HttpURLConnection connection =
                        (HttpURLConnection) new URL(transcriptionUrl).openConnection();
                connection.setRequestMethod("GET");
                connection.connect();
                BufferedReader reader =
                        new BufferedReader(new InputStreamReader(connection.getInputStream()));
                // JSON 結果を整形して表示
                Gson gson = new GsonBuilder().setPrettyPrinting().create();
                System.out.println(gson.toJson(gson.fromJson(reader, JsonObject.class)));
            }
        } catch (Exception e) {
            System.out.println("エラー: " + 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


# 文字起こしスクリプトを実行
if __name__ == '__main__':
    # 中国 (北京) リージョンおよびシンガポールリージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.getenv("DASHSCOPE_API_KEY")

    # 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を 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 モデルは、最大 5 分間の音声をサポートします。音声ファイルのパブリックネットワークからのアクセス可能な URL を指定するか、ローカルファイルを直接アップロードすることができます。また、ストリーミング出力もサポートしています。

入力:音声ファイル URL

Python SDK

import os
import dashscope

# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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(
    # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、qwen3-asr-flash-us を使用します。
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        #"language": "zh", # オプション。音声の言語を指定すると、認識精度が向上します。
        "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"); // オプション。音声の言語を指定すると、認識精度が向上します。
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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

# ======= 重要なお知らせ =======
# 以下の URL はシンガポールリージョン向けです。米国リージョンのモデルを使用する場合は、URL を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 米国リージョンのモデルを使用する場合は、"-us" サフィックスを追加してください。
# === 実行前にこのコメントを削除してください ===

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

入力:Base64 エンコード済み音声ファイル

この形式で Base64 エンコード済みデータ(Data URL)を入力できます:data:<mediatype>;base64,<data>

  • <mediatype>:MIME タイプ

    音声フォーマットによって異なります。たとえば、以下を使用できます:

    • WAV:audio/wav

    • MP3:audio/mpeg

  • <data>:音声の Base64 エンコード済み文字列

    Base64 エンコーディングによりファイルサイズが増加します。元のファイルが十分に小さいことを確認し、Base64 エンコード後のファイルサイズが 10 MB の音声サイズ制限内に収まるようにしてください。

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

    サンプルコードを表示

    import base64, pathlib
    
    # input.mp3 はボイスクローン用のローカル音声ファイルです。ご自身のファイルパスに置き換え、音声要件を満たしていることを確認してください。
    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 はボイスクローン用のローカル音声ファイルです。ご自身のファイルパスに置き換え、音声要件を満たしていることを確認してください。
         */
        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;
        }
    
        // 例としての使用方法
        public static void main(String[] args) throws Exception {
            System.out.println(toDataUrl("input.mp3"));
        }
    }

Python SDK

例で使用されている音声ファイルは:welcome.mp3 です。

import base64
import dashscope
import os
import pathlib

# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# 実際の音声ファイルのパスに置き換えてください
file_path = "welcome.mp3"
# 実際の音声ファイルの MIME タイプに置き換えてください
audio_mime_type = "audio/mpeg"

file_path_obj = pathlib.Path(file_path)
if not file_path_obj.exists():
    raise FileNotFoundError(f"音声ファイルが見つかりません: {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(
    # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、qwen3-asr-flash-us を使用します。
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # オプション。音声の言語を指定すると、認識精度が向上します。
        "enable_itn":False
    }
)
print(response)

Java SDK

例で使用されている音声ファイルは: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 {
    // 実際の音声ファイルのパスに置き換えてください
    private static final String AUDIO_FILE = "welcome.mp3";
    // 実際の音声ファイルの MIME タイプに置き換えてください
    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"); // オプション。音声の言語を指定すると、認識精度が向上します。
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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);
    }

    // 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;
    }
}

入力:ローカル音声ファイルの絶対パス

DashScope SDK を使用してローカルの画像ファイルを処理する場合は、ファイルパスを指定する必要があります。次の表を参照し、ユースケースとオペレーティングシステムに基づいてファイルパスを構築してください。

システム

SDK

指定するファイルパス

Linux または macOS

Python SDK

file://{ファイルの絶対パス}

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

Java SDK

Windows

Python SDK

file://{ファイルの絶対パス}

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

Java SDK

file:///{ファイルの絶対パス}

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

重要

ローカルファイルを使用する場合、API 呼び出し制限は 100 QPS です。ローカルファイルにはスケーリングがサポートされていません。本番環境、高同時実行性、負荷テストなどのシナリオでは、ローカルファイルの使用を避けてください。より高い同時実行性を必要とする場合は、ファイルを OSS にアップロードし、音声ファイルの URL を使用してください。

Python SDK

例で使用されている音声ファイルは:welcome.mp3 です。

import os
import dashscope

# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください。
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# ABSOLUTE_PATH/welcome.mp3 をご自身のローカル音声ファイルの絶対パスに置き換えてください
audio_file_path = "file://ABSOLUTE_PATH/welcome.mp3"

messages = [
    {"role": "user", "content": [{"audio": audio_file_path}]}
]
response = dashscope.MultiModalConversation.call(
    # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、qwen3-asr-flash-us を使用します。
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # オプション。音声の言語を指定すると、認識精度が向上します。
        "enable_itn":False
    }
)
print(response)

Java SDK

例で使用されている音声ファイルは: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 {
        // ABSOLUTE_PATH/welcome.mp3 をご自身のローカルファイルの絶対パスに置き換えてください
        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"); // オプション。音声の言語を指定すると、認識精度が向上します。
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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);
    }
}

ストリーミング出力

このモデルは最終結果を一度に生成しません。代わりに、中間結果を段階的に生成します。非ストリーミング出力では、モデルの処理が完了するまで待ってから最終結果を受け取る必要があります。一方、ストリーミング出力では、中間結果をリアルタイムで受信でき、結果が表示されるたびに読み取ることができ、待ち時間を短縮できます。呼び出し方法に応じて、異なるパラメーターを設定できます。

  • DashScope Python SDK を使用する場合、stream パラメーターを true に設定できます。

  • DashScope Java SDK を使用する場合、streamCall メソッドを呼び出せます。

  • DashScope HTTP API を使用する場合、X-DashScope-SSE ヘッダーを enable に設定できます。

Python SDK

import os
import dashscope

# 以下の URL はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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(
    # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、qwen3-asr-flash-us を使用します。
    model="qwen3-asr-flash",
    messages=messages,
    result_format="message",
    asr_options={
        # "language": "zh", # オプション。音声の言語を指定すると、認識精度が向上します。
        "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"); // オプション。音声の言語を指定すると、認識精度が向上します。
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // 米国リージョンのモデルを使用する場合は、モデル名に "-us" サフィックスを追加します。たとえば、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 はシンガポールリージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1 に置き換えてください。米国リージョンのモデルを使用する場合は、URL を 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

# ======= 重要なお知らせ =======
# 以下の URL はシンガポールリージョン向けです。米国リージョンのモデルを使用する場合は、URL を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください。
# 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 米国リージョンのモデルを使用する場合は、"-us" サフィックスを追加してください。
# === 実行前にこのコメントを削除してください ===

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

OpenAI 互換モード

重要

OpenAI 互換モードは、米国リージョンでは利用できません。

Qwen3-ASR-Flash シリーズのモデルのみが OpenAI 互換呼び出しをサポートしています。このモードでは、パブリックネットワークからアクセス可能な音声ファイル URL のみが受け付けられ、ローカル音声ファイルの絶対パスは受け付けられません。

OpenAI Python SDK のバージョン 1.52.0 以降、および Node.js SDK のバージョン 4.68.0 以降を使用する必要があります。

asr_options パラメーターは OpenAI 標準には含まれません。OpenAI SDK を使用する場合、このパラメーターは extra_body パラメーターを介して渡す必要があります。

入力:音声ファイル URL

Python SDK

from openai import OpenAI
import os

try:
    client = OpenAI(
        # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下の URL はシンガポール/米国リージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    

    stream_enabled = False  # ストリーミング出力を有効にする
    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,
        # stream が False の場合、stream_options を設定しないでください
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("ストリーミング出力:")
        for chunk in completion:
            # stream_options.include_usage が True の場合、最後のチャンクには空の choices リストが含まれます。これをスキップしてください(chunk.usage からトークン使用量を取得できます)。
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"全文: {full_content}")
    else:
        print(f"非ストリーミング出力: {completion.choices[0].message.content}")
except Exception as e:
    print(f"エラー: {e}")

Node.js SDK

// 実行前の設定:
// Windows、macOS、Linux で動作します:
// 1. Node.js がインストールされていることを確認してください(推奨バージョン >= 14)
// 2. 依存関係をインストールするには、このコマンドを実行してください: npm install openai

import OpenAI from "openai";

const client = new OpenAI({
  // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下の URL はシンガポール/米国リージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください。
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1", 
});

async function main() {
  try {
    const streamEnabled = false; // ストリーミング出力を有効にする
    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,
      // stream が False の場合、stream_options を設定しないでください
      // stream_options: {
      //   "include_usage": true
      // },
      extra_body: {
        asr_options: {
          // language: "zh",
          enable_itn: false
        }
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("ストリーミング出力:");
      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(`全文: ${fullContent}`);
    } else {
      console.log(`非ストリーミング出力: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`エラー: ${err}`);
  }
}

main();

cURL

# ======= 重要なお知らせ =======
# 以下の URL はシンガポール/米国リージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください。
# 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === 実行前にこのコメントを削除してください ===

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

入力:Base64 エンコード済み音声ファイル

この形式で Base64 エンコード済みデータ(Data URL)を入力できます:data:<mediatype>;base64,<data>

  • <mediatype>:MIME タイプ

    音声フォーマットによって異なります。たとえば、以下を使用できます:

    • WAV:audio/wav

    • MP3:audio/mpeg

  • <data>:音声の Base64 エンコード済み文字列

    Base64 エンコーディングによりファイルサイズが増加します。元のファイルが十分に小さいことを確認し、Base64 エンコード後のファイルサイズが 10 MB の音声サイズ制限内に収まるようにしてください。

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

    サンプルコードを表示

    import base64, pathlib
    
    # input.mp3 はボイスクローン用のローカル音声ファイルです。ご自身のファイルパスに置き換え、音声要件を満たしていることを確認してください。
    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 はボイスクローン用のローカル音声ファイルです。ご自身のファイルパスに置き換え、音声要件を満たしていることを確認してください。
         */
        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;
        }
    
        // 例としての使用方法
        public static void main(String[] args) throws Exception {
            System.out.println(toDataUrl("input.mp3"));
        }
    }

Python SDK

例で使用されている音声ファイルは:welcome.mp3 です。

import base64
from openai import OpenAI
import os
import pathlib

try:
    # 実際の音声ファイルのパスに置き換えてください
    file_path = "welcome.mp3"
    # 実際の音声ファイルの MIME タイプに置き換えてください
    audio_mime_type = "audio/mpeg"

    file_path_obj = pathlib.Path(file_path)
    if not file_path_obj.exists():
        raise FileNotFoundError(f"音声ファイルが見つかりません: {file_path}")

    base64_str = base64.b64encode(file_path_obj.read_bytes()).decode()
    data_uri = f"data:{audio_mime_type};base64,{base64_str}"

    client = OpenAI(
        # 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:api_key = "sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下の URL はシンガポール/米国リージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください。
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    

    stream_enabled = False  # ストリーミング出力を有効にする
    completion = client.chat.completions.create(
        model="qwen3-asr-flash",
        messages=[
            {
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": data_uri
                        }
                    }
                ],
                "role": "user"
            }
        ],
        stream=stream_enabled,
        # stream が False の場合、stream_options を設定しないでください
        # stream_options={"include_usage": True},
        extra_body={
            "asr_options": {
                # "language": "zh",
                "enable_itn": False
            }
        }
    )
    if stream_enabled:
        full_content = ""
        print("ストリーミング出力:")
        for chunk in completion:
            # stream_options.include_usage が True の場合、最後のチャンクには空の choices リストが含まれます。これをスキップしてください(chunk.usage からトークン使用量を取得できます)。
            print(chunk)
            if chunk.choices and chunk.choices[0].delta.content:
                full_content += chunk.choices[0].delta.content
        print(f"全文: {full_content}")
    else:
        print(f"非ストリーミング出力: {completion.choices[0].message.content}")
except Exception as e:
    print(f"エラー: {e}")

Node.js SDK

例で使用されている音声ファイルは:welcome.mp3 です。

// 実行前の設定:
// Windows、macOS、Linux で動作します:
// 1. Node.js がインストールされていることを確認してください(推奨バージョン >= 14)
// 2. 依存関係をインストールするには、このコマンドを実行してください: npm install openai

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

const client = new OpenAI({
  // 中国 (北京)、シンガポール、米国の各リージョンの API キーは異なります。API キーの取得方法:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下の URL はシンガポール/米国リージョン向けです。中国 (北京) リージョンのモデルを使用する場合は、URL を 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');
};

// 実際の音声ファイルのパスに置き換えてください
const dataUri = `data:audio/mpeg;base64,${encodeAudioFile("welcome.mp3")}`;

async function main() {
  try {
    const streamEnabled = false; // ストリーミング出力を有効にする
    const completion = await client.chat.completions.create({
      model: "qwen3-asr-flash",
      messages: [
        {
          role: "user",
          content: [
            {
              type: "input_audio",
              input_audio: {
                data: dataUri
              }
            }
          ]
        }
      ],
      stream: streamEnabled,
      // stream が False の場合、stream_options を設定しないでください
      // stream_options: {
      //   "include_usage": true
      // },
      extra_body: {
        asr_options: {
          // language: "zh",
          enable_itn: false
        }
      }
    });

    if (streamEnabled) {
      let fullContent = "";
      console.log("ストリーミング出力:");
      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(`全文: ${fullContent}`);
    } else {
      console.log(`非ストリーミング出力: ${completion.choices[0].message.content}`);
    }
  } catch (err) {
    console.error(`エラー: ${err}`);
  }
}

main();

API リファレンス

Qwen API リファレンス:音声ファイル認識

モデルの特徴比較

以下の表に示す qwen3-asr-flash および qwen3-asr-flash-2025-09-08 モデルの特徴は、米国 (バージニア) リージョンの対応する qwen3-asr-flash-us および qwen3-asr-flash-2025-09-08-us モデルにも適用されます。

特徴

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

サポート言語

中国語(標準語、四川語、閩南語、呉語、広東語)、英語、日本語、ドイツ語、韓国語、ロシア語、フランス語、ポルトガル語、アラビア語、イタリア語、スペイン語、ヒンディー語、インドネシア語、タイ語、トルコ語、ウクライナ語、ベトナム語、チェコ語、デンマーク語、フィリピン語、フィンランド語、アイスランド語、マレー語、ノルウェー語、ポーランド語、スウェーデン語

サポート音声フォーマット

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

サンプリングレート

音声フォーマットによって異なります:

  • PCM 音声:16 kHz

  • その他の音声フォーマット:任意(サーバーが検出前に音声を 16 kHz に再サンプリングします。)

音声チャンネル

任意

マルチチャンネル音声の処理方法はモデルによって異なります:

  • Qwen3-ASR-Flash-Filetrans: channel_id パラメーターで音声トラックのインデックスを指定します。

  • Qwen3-ASR-Flash:追加の処理は不要です。モデルは処理前にマルチチャンネル音声を平均値でマージします。

入力フォーマット

検出用の公開アクセス可能なファイルの URL

Base64 エンコードされたファイル、ローカルファイルの絶対パス、または検出用の公開アクセス可能なファイルの URL

音声サイズ/長さ

音声ファイルサイズ最大 2 GB、長さ最大 12 時間

音声ファイルサイズ最大 10 MB、長さ最大 5 分

感情検出

サポート 常に有効です。 結果は emotion レスポンスパラメーターで確認できます。

タイムスタンプ

サポート 常に有効です。 enable_words リクエストパラメーターでタイムスタンプのレベルを制御できます。

単語レベルのタイムスタンプは、中国語、英語、日本語、韓国語、ドイツ語、フランス語、スペイン語、イタリア語、ポルトガル語、ロシア語でのみサポートされます。その他の言語では精度が保証されません。

未サポート

句読点予測

サポート 常に有効です。

ITN

サポート デフォルトでは無効ですが、有効化できます。中国語と英語にのみ適用されます。

歌唱検出

サポート 常に有効です。

ノイズ除去

サポート 常に有効です。

不適切な単語フィルター

未サポート

話者分離

未サポート

フィラー語フィルタリング

未サポート

VAD

サポート 常に有効です。

未サポート

レート制限 (RPM)

100

接続タイプ

DashScope:Java/Python SDK、RESTful API

DashScope:Java/Python SDK、RESTful API

OpenAI:Python/Node.js SDK、RESTful API

料金

海外:$0.000035/秒

米国:$0.000032/秒

中国本土:$0.000032/秒

よくある質問

Q: API で公開アクセス可能な音声 URL を提供するにはどうすればよいですか?

Object Storage Service (OSS) を使用します。OSS は高可用性(HA)および高信頼性を提供し、パブリックネットワーク経由のアクセス用 URL を簡単に生成できます。

パブリックネットワークで URL が正常に機能することを確認するには: ブラウザで該当 URL を開くか、`curl` コマンドを実行します。音声ファイルが正常にダウンロードまたは再生されることを確認してください。HTTP ステータスコードは 200 である必要があります。

Q: 音声ファイルがフォーマット要件を満たしているかを確認するにはどうすればよいですか?

オープンソースツール ffprobe を使用して、音声に関する詳細情報を素早く取得できます:

# コンテナフォーマット (format_name)、コーデック (codec_name)、サンプルレート (sample_rate)、サウンドチャンネル数 (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

Q: モデルの要件を満たすように音声を処理するにはどうすればよいですか?

オープンソースツール FFmpeg を使用して、音声フォーマットをクリップまたは変換します:

  • 音声のクリッピング:長時間音声ファイルからセグメントを抽出

    # -i: 入力ファイル
    # -ss 00:01:30: 開始時刻(1 分 30 秒から開始)
    # -t 00:02:00: 持続時間(2 分間クリップ)
    # -c copy: エンコーディングを再処理せずに音声ストリームをコピー(高速)
    # output_clip.wav: 出力ファイル
    ffmpeg -i long_audio.wav -ss 00:01:30 -t 00:02:00 -c copy output_clip.wav
  • フォーマットの変換

    たとえば、任意の音声ファイルを 16 kHz、16 ビット、モノラルの WAV ファイルに変換できます。

    # -i: 入力ファイル
    # -ac 1: サウンドチャンネル数を 1(モノラル)に設定
    # -ar 16000: サンプルレートを 16000 Hz(16 kHz)に設定
    # -sample_fmt s16: サンプルフォーマットを 16 ビット符号付き整数 PCM に設定
    # output.wav: 出力ファイル
    ffmpeg -i input.mp3 -ac 1 -ar 16000 -sample_fmt s16 output.wav