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

Alibaba Cloud Model Studio:リアルタイム音声認識

最終更新日:Feb 13, 2026

リアルタイム音声認識サービスは、音声ストリームをリアルタイムで句読点付きのテキストに変換し、「話しながら入力」するような体験を提供します。マイク入力、会議の録音、またはローカル音声ファイルを簡単に文字起こしできます。このサービスは、リアルタイムの議事録、ライブ字幕、音声チャット、インテリジェントカスタマーサービスなどのシナリオで広く使用されています。

主な機能

  • 中国語、英語、およびさまざま方言を含む多言語のリアルタイム音声認識をサポートします。

  • 特定の語彙の認識精度を向上させるためのカスタムホットワードをサポートします。

  • 構造化された認識結果を生成するためのタイムスタンプ出力をサポートします。

  • さまざまな録音環境に適応するために、柔軟なサンプルレートと多様な音声フォーマットを提供します。

  • オプションの音声アクティビティ検出 (VAD) を提供し、無音セグメントを自動的にフィルタリングし、長時間の音声の処理効率を向上させます。

  • SDK と WebSocket 接続を通じて、低遅延で安定したサービスを提供します。

適用範囲

サポートモデル:

国際

国際デプロイメントモードでは、アクセスポイントとデータストレージはシンガポールリージョンに配置され、モデル推論の計算リソースはグローバルに (中国本土を除く) 動的にスケジュールされます。

以下のモデルを呼び出す際は、シンガポールリージョンの API キーを選択してください:

Fun-ASR: fun-asr-realtime (安定バージョン、現在は fun-asr-realtime-2025-11-07 と同等)、fun-asr-realtime-2025-11-07 (スナップショットバージョン)

中国本土

中国本土デプロイメントモードでは、アクセスポイントとデータストレージは北京リージョンに配置され、モデル推論の計算リソースは中国本土に限定されます。

以下のモデルを呼び出す際は、北京リージョンの API キーを選択してください:

  • Fun-ASR: fun-asr-realtime (安定バージョン、現在は fun-asr-realtime-2025-11-07 と同等)、fun-asr-realtime-2025-11-07 (スナップショットバージョン)、fun-asr-realtime-2025-09-15 (スナップショットバージョン)、fun-asr-flash-8k-realtime (安定バージョン、現在は fun-asr-flash-8k-realtime-2026-01-28 と同等)、fun-asr-flash-8k-realtime-2026-01-28

  • Paraformer: paraformer-realtime-v2、paraformer-realtime-v1、paraformer-realtime-8k-v2、paraformer-realtime-8k-v1

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

モデルの選択

シナリオ

推奨モデル

理由

中国語普通話認識 (会議/ライブストリーミング)

fun-asr-realtime、fun-asr-realtime-2025-11-07、paraformer-realtime-v2

複数フォーマット互換、高サンプルレート対応、安定した遅延。

多言語認識 (国際会議)

paraformer-realtime-v2

多言語をカバー。

中国語方言認識 (カスタマーサービス/行政サービス)

fun-asr-realtime-2025-11-07、paraformer-realtime-v2

複数の地方方言をカバー。

中国語、英語、日本語の混合認識 (授業/スピーチ)

fun-asr-realtime、fun-asr-realtime-2025-11-07

中国語、英語、日本語の認識に最適化。

低帯域幅の電話通話文字起こし

fun-asr-flash-8k-realtime

中国語の電話カスタマーサービスシナリオ向けに設計。

ホットワードのカスタマイズシナリオ (ブランド名/専門用語)

Paraformer、Fun-ASR 最新バージョンモデル

ホットワードの有効化/無効化が可能で、イテレーションと設定が容易。

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

クイックスタート

以下のサンプルコードは、API の呼び出し方法を示しています。一般的なシナリオのその他のコード例については、GitHub をご参照ください。

API キーを取得し、API キーを環境変数として設定する必要があります。SDK を使用して呼び出しを行う場合は、DashScope SDK をインストールする必要もあります。

Fun-ASR

マイク入力からの音声認識

リアルタイム音声認識は、マイクからの音声を認識して結果を出力し、「話しながら入力」するような体験を提供します。

Java

import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionResult;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.utils.Constants;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.TargetDataLine;

import java.nio.ByteBuffer;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        // 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください。
        Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(new RealtimeRecognitionTask());
        executorService.shutdown();
        executorService.awaitTermination(1, TimeUnit.MINUTES);
        System.exit(0);
    }
}

class RealtimeRecognitionTask implements Runnable {
    @Override
    public void run() {
        RecognitionParam param = RecognitionParam.builder()
                .model("fun-asr-realtime")
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .format("wav")
                .sampleRate(16000)
                .build();
        Recognition recognizer = new Recognition();

        ResultCallback<RecognitionResult> callback = new ResultCallback<RecognitionResult>() {
            @Override
            public void onEvent(RecognitionResult result) {
                if (result.isSentenceEnd()) {
                    System.out.println("Final Result: " + result.getSentence().getText());
                } else {
                    System.out.println("Intermediate Result: " + result.getSentence().getText());
                }
            }

            @Override
            public void onComplete() {
                System.out.println("Recognition complete");
            }

            @Override
            public void onError(Exception e) {
                System.out.println("RecognitionCallback error: " + e.getMessage());
            }
        };
        try {
            recognizer.call(param, callback);
            // 音声フォーマットを作成します。
            AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
            // フォーマットに基づいてデフォルトの録音デバイスを照合します。
            TargetDataLine targetDataLine =
                    AudioSystem.getTargetDataLine(audioFormat);
            targetDataLine.open(audioFormat);
            // 録音を開始します。
            targetDataLine.start();
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            long start = System.currentTimeMillis();
            // 50 秒間録音し、リアルタイムで文字起こしを行います。
            while (System.currentTimeMillis() - start < 50000) {
                int read = targetDataLine.read(buffer.array(), 0, buffer.capacity());
                if (read > 0) {
                    buffer.limit(read);
                    // 録音された音声データをストリーミング認識サービスに送信します。
                    recognizer.sendAudioFrame(buffer);
                    buffer = ByteBuffer.allocate(1024);
                    // 録音レートは制限されています。高い CPU 使用率を防ぐために短時間スリープします。
                    Thread.sleep(20);
                }
            }
            recognizer.stop();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // タスク完了後、WebSocket 接続を閉じます。
            recognizer.getDuplexApi().close(1000, "bye");
        }

        System.out.println(
                "[Metric] requestId: "
                        + recognizer.getLastRequestId()
                        + ", first package delay ms: "
                        + recognizer.getFirstPackageDelay()
                        + ", last package delay ms: "
                        + recognizer.getLastPackageDelay());
    }
}

Python

Python の例を実行する前に、pip install pyaudio コマンドを実行して、サードパーティの音声再生およびキャプチャスイートをインストールしてください。

import os
import signal  # キーボードイベント処理用 (「Ctrl+C」を押して録音を終了)
import sys

import dashscope
import pyaudio
from dashscope.audio.asr import *

mic = None
stream = None

# 録音パラメーターを設定
sample_rate = 16000  # サンプリングレート (Hz)
channels = 1  # モノラルチャンネル
dtype = 'int16'  # データの型
format_pcm = 'pcm'  # 音声データのフォーマット
block_size = 3200  # バッファーごとのフレーム数


# リアルタイム音声認識コールバック
class Callback(RecognitionCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print('RecognitionCallback open.')
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)

    def on_close(self) -> None:
        global mic
        global stream
        print('RecognitionCallback close.')
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_complete(self) -> None:
        print('RecognitionCallback completed.')  # 認識完了

    def on_error(self, message) -> None:
        print('RecognitionCallback task_id: ', message.request_id)
        print('RecognitionCallback error: ', message.message)
        # 音声ストリームが実行中の場合は停止して閉じる
        if 'stream' in globals() and stream.active:
            stream.stop()
            stream.close()
        # プログラムを強制終了
        sys.exit(1)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print('RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))


def signal_handler(sig, frame):
    print('Ctrl+C pressed, stop recognition ...')
    # 認識を停止
    recognition.stop()
    print('Recognition stopped.')
    print(
        '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
        .format(
            recognition.get_last_request_id(),
            recognition.get_first_package_delay(),
            recognition.get_last_package_delay(),
        ))
    # プログラムを強制終了
    sys.exit(0)


# main 関数
if __name__ == '__main__':
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

    # 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください
    dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'

    # 認識コールバックを作成
    callback = Callback()

    # 非同期モードで認識サービスを呼び出します。モデル、フォーマット、サンプルレートなどの認識パラメーターをカスタマイズできます
    # sample_rate
    recognition = Recognition(
        model='fun-asr-realtime',
        format=format_pcm,
        # 'pcm'、'wav'、'opus'、'speex'、'aac'、'amr'。サポートされているフォーマットはドキュメントで確認できます。
        sample_rate=sample_rate,
        # 8000、16000 をサポートします。
        semantic_punctuation_enabled=False,
        callback=callback)

    # 認識を開始
    recognition.start()

    signal.signal(signal.SIGINT, signal_handler)
    print("Press 'Ctrl+C' to stop recording and recognition...")
    # 「Ctrl+C」が押されるまでキーボードリスナーを作成

    while True:
        if stream:
            data = stream.read(3200, exception_on_overflow=False)
            recognition.send_audio_frame(data)
        else:
            break

    recognition.stop()

ローカル音声ファイルの認識

リアルタイム音声認識は、ローカル音声ファイルを認識し、結果を返します。この API は、チャットの会話、音声コマンド、音声入力メソッド、音声検索など、短時間でほぼリアルタイムの音声認識シナリオに適しています。

Java

この例で使用されている音声ファイルは asr_example.wav です。

import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionResult;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.utils.Constants;

import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

class TimeUtils {
    private static final DateTimeFormatter formatter =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

    public static String getTimestamp() {
        return LocalDateTime.now().format(formatter);
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        // 以下の URL はシンガポールリージョン用です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください。
        Constants.baseWebsocketApiUrl = "wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference";
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(new RealtimeRecognitionTask(Paths.get(System.getProperty("user.dir"), "asr_example.wav")));
        executorService.shutdown();

        // すべてのタスクが完了するのを待つ
        executorService.awaitTermination(1, TimeUnit.MINUTES);
        System.exit(0);
    }
}

class RealtimeRecognitionTask implements Runnable {
    private Path filepath;

    public RealtimeRecognitionTask(Path filepath) {
        this.filepath = filepath;
    }

    @Override
    public void run() {
        RecognitionParam param = RecognitionParam.builder()
                .model("fun-asr-realtime")
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .format("wav")
                .sampleRate(16000)
                .build();
        Recognition recognizer = new Recognition();

        String threadName = Thread.currentThread().getName();

        ResultCallback<RecognitionResult> callback = new ResultCallback<RecognitionResult>() {
            @Override
            public void onEvent(RecognitionResult message) {
                if (message.isSentenceEnd()) {

                    System.out.println(TimeUtils.getTimestamp()+" "+
                            "[process " + threadName + "] Final Result:" + message.getSentence().getText());
                } else {
                    System.out.println(TimeUtils.getTimestamp()+" "+
                            "[process " + threadName + "] Intermediate Result: " + message.getSentence().getText());
                }
            }

            @Override
            public void onComplete() {
                System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] Recognition complete");
            }

            @Override
            public void onError(Exception e) {
                System.out.println(TimeUtils.getTimestamp()+" "+
                        "[" + threadName + "] RecognitionCallback error: " + e.getMessage());
            }
        };

        try {
            recognizer.call(param, callback);
            // パスを音声ファイルのパスに置き換えてください
            System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] Input file_path is: " + this.filepath);
            // ファイルを読み込み、チャンクで音声を送信
            FileInputStream fis = new FileInputStream(this.filepath.toFile());
            // チャンクサイズを 16 kHz サンプルレートで 1 秒に設定
            byte[] buffer = new byte[3200];
            int bytesRead;
            // ファイルのチャンクを読み込むループ
            while ((bytesRead = fis.read(buffer)) != -1) {
                ByteBuffer byteBuffer;
                // バッファーサイズより小さい可能性のある最後のチャンクを処理
                System.out.println(TimeUtils.getTimestamp()+" "+"[" + threadName + "] bytesRead: " + bytesRead);
                if (bytesRead < buffer.length) {
                    byteBuffer = ByteBuffer.wrap(buffer, 0, bytesRead);
                } else {
                    byteBuffer = ByteBuffer.wrap(buffer);
                }

                recognizer.sendAudioFrame(byteBuffer);
                buffer = new byte[3200];
                Thread.sleep(100);
            }
            System.out.println(TimeUtils.getTimestamp()+" "+LocalDateTime.now());
            recognizer.stop();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // タスク完了後、WebSocket 接続を閉じます。
            recognizer.getDuplexApi().close(1000, "bye");
        }

        System.out.println(
                "["
                        + threadName
                        + "][Metric] requestId: "
                        + recognizer.getLastRequestId()
                        + ", first package delay ms: "
                        + recognizer.getFirstPackageDelay()
                        + ", last package delay ms: "
                        + recognizer.getLastPackageDelay());
    }
}

Python

この例で使用されている音声ファイルは asr_example.wav です。

import os
import time
import dashscope
from dashscope.audio.asr import *

# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# 以下はシンガポールリージョンの URL です。北京リージョンのモデルを使用する場合は、URL を wss://dashscope.aliyuncs.com/api-ws/v1/inference に置き換えてください
dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference'

from datetime import datetime

def get_timestamp():
    now = datetime.now()
    formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
    return formatted_timestamp

class Callback(RecognitionCallback):
    def on_complete(self) -> None:
        print(get_timestamp() + ' Recognition completed')  # 認識完了

    def on_error(self, result: RecognitionResult) -> None:
        print('Recognition task_id: ', result.request_id)
        print('Recognition error: ', result.message)
        exit(0)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print(get_timestamp() + ' RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(get_timestamp() + 
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))


callback = Callback()

recognition = Recognition(model='fun-asr-realtime',
                          format='wav',
                          sample_rate=16000,
                          callback=callback)

recognition.start()

try:
    audio_data: bytes = None
    f = open("asr_example.wav", 'rb')
    if os.path.getsize("asr_example.wav"):
        while True:
            audio_data = f.read(3200)
            if not audio_data:
                break
            else:
                recognition.send_audio_frame(audio_data)
            time.sleep(0.1)
    else:
        raise Exception(
            'The supplied file was empty (zero bytes long)')
    f.close()
except Exception as e:
    raise e

recognition.stop()

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Paraformer

マイクからの音声認識

リアルタイム音声認識は、マイクからの入力音声を検出し、文字起こし結果を出力します。これにより、話すと同時にテキストが表示されるようになります。

Java

import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;

import java.nio.ByteBuffer;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.TargetDataLine;

public class Main {

    public static void main(String[] args) throws NoApiKeyException {
        // Flowable<ByteBuffer> を作成
        Flowable<ByteBuffer> audioSource = Flowable.create(emitter -> {
            new Thread(() -> {
                try {
                    // 音声フォーマットを作成
                    AudioFormat audioFormat = new AudioFormat(16000, 16, 1, true, false);
                    // フォーマットに基づいてデフォルトの録音デバイスを照合
                    TargetDataLine targetDataLine =
                            AudioSystem.getTargetDataLine(audioFormat);
                    targetDataLine.open(audioFormat);
                    // 録音を開始
                    targetDataLine.start();
                    ByteBuffer buffer = ByteBuffer.allocate(1024);
                    long start = System.currentTimeMillis();
                    // 300 秒間録音し、リアルタイムで文字起こしを実行
                    while (System.currentTimeMillis() - start < 300000) {
                        int read = targetDataLine.read(buffer.array(), 0, buffer.capacity());
                        if (read > 0) {
                            buffer.limit(read);
                            // 録音された音声データをストリーミング認識サービスに送信
                            emitter.onNext(buffer);
                            buffer = ByteBuffer.allocate(1024);
                            // 録音速度が制限されているため、CPU 使用率を制限するために短時間スリープ
                            Thread.sleep(20);
                        }
                    }
                    // 文字起こしの終了を通知
                    emitter.onComplete();
                } catch (Exception e) {
                    emitter.onError(e);
                }
            }).start();
        },
        BackpressureStrategy.BUFFER);

        // 認識器を作成
        Recognition recognizer = new Recognition();
        // RecognitionParam を作成し、上記で作成した Flowable<ByteBuffer> を audioFrames に渡す
        RecognitionParam param = RecognitionParam.builder()
            .model("paraformer-realtime-v2")
            .format("pcm")
            .sampleRate(16000)
            // API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apikey」を実際の API キーに置き換えてください
            // .apiKey("apikey")
            .build();

        // ストリーミング API を呼び出す
        recognizer.streamCall(param, audioSource)
            // Flowable の subscribe メソッドを使用して結果をサブスクライブする
            .blockingForEach(
                result -> {
                    // 最終結果を出力
                    if (result.isSentenceEnd()) {
                        System.out.println("Fix:" + result.getSentence().getText());
                    } else {
                        System.out.println("Result:" + result.getSentence().getText());
                    }
                });
        System.exit(0);
    }
}

Python

Python の例を実行する前に、pip install pyaudio コマンドを実行して、サードパーティの音声再生およびキャプチャスイートをインストールしてください。

import pyaudio
from dashscope.audio.asr import (Recognition, RecognitionCallback,
                                 RecognitionResult)

# API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apiKey」を実際の API キーに置き換えてください
# import dashscope
# dashscope.api_key = "apiKey"

mic = None
stream = None


class Callback(RecognitionCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print('RecognitionCallback open.')
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)

    def on_close(self) -> None:
        global mic
        global stream
        print('RecognitionCallback close.')
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_event(self, result: RecognitionResult) -> None:
        print('RecognitionCallback sentence: ', result.get_sentence())


callback = Callback()
recognition = Recognition(model='paraformer-realtime-v2',
                          format='pcm',
                          sample_rate=16000,
                          callback=callback)
recognition.start()

while True:
    if stream:
        data = stream.read(3200, exception_on_overflow=False)
        recognition.send_audio_frame(data)
    else:
        break

recognition.stop()

ローカル音声ファイルの認識

リアルタイム音声認識は、ローカルファイルから音声を文字起こしできます。この方法は、チャットの会話、音声コマンド、音声入力メソッド、音声検索など、短い音声セグメントを含むほぼリアルタイムのシナリオに適しています。

Java

import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class Main {
    public static void main(String[] args) {
        // URL ダウンロードセクションをスキップして、直接ローカルファイルを使用して認識できます
        String exampleWavUrl =
                "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav";
        try {
            InputStream in = new URL(exampleWavUrl).openStream();
            Files.copy(in, Paths.get("asr_example.wav"), StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            System.out.println("error: " + e);
            System.exit(1);
        }

        // Recognition インスタンスを作成
        Recognition recognizer = new Recognition();
        // RecognitionParam を作成
        RecognitionParam param =
                RecognitionParam.builder()
                        // API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apikey」を実際の API キーに置き換えてください
                        // .apiKey("apikey")
                        .model("paraformer-realtime-v2")
                        .format("wav")
                        .sampleRate(16000)
                        // "language_hints" は paraformer-v2 および paraformer-realtime-v2 モデルでのみサポートされています
                        .parameter("language_hints", new String[]{"zh", "en"})
                        .build();

        try {
            System.out.println("Recognition result: " + recognizer.call(param, new File("asr_example.wav")));
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}

Python

import requests
from http import HTTPStatus
from dashscope.audio.asr import Recognition

# API キーを環境変数として設定していない場合は、以下の行のコメントを解除し、「apiKey」を実際の API キーに置き換えてください
# import dashscope
# dashscope.api_key = "apiKey"

# URL からファイルをダウンロードするのをスキップして、直接ローカルファイルを使用して認識できます
r = requests.get(
    'https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav'
)
with open('asr_example.wav', 'wb') as f:
    f.write(r.content)

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # "language_hints" は paraformer-v2 および paraformer-realtime-v2 モデルでのみサポートされています
                          language_hints=['zh', 'en'],
                          callback=None)
result = recognition.call('asr_example.wav')
if result.status_code == HTTPStatus.OK:
    print('Recognition result:')
    print(result.get_sentence())
else:
    print('Error: ', result.message)

公開

認識精度の向上

  • 正しいサンプルレートモデルの使用:8 kHz の電話音声には、8 kHz モデルを直接使用してください。認識前に 16 kHz にアップサンプリングしないでください。これにより、信号のエイリアシングを回避し、より良い結果が得られます。

  • ホットワード検出の使用:ドメイン固有の用語、名前、ブランド名にホットワードを設定することで、認識精度を大幅に向上させることができます。詳細については、「カスタムホットワード – Paraformer/Fun-ASR」をご参照ください。

  • 入力音声品質の最適化:高品質のマイクを使用し、S/N 比が高くエコーのない静かな環境で録音してください。アプリケーション層では、ノイズ除去 (例:RNNoise) やアコースティックエコーキャンセレーション (AEC) などの前処理アルゴリズムを統合して、よりクリーンな音声を生成できます。

  • 認識言語の明示的な指定:Paraformer-v2 などの多言語モデルでは、Language_hints パラメーターを使用して音声の言語を事前に指定します (例:['zh','en'] に設定)。これにより、モデルがより速く収束し、似たような発音の単語を持つ言語間の混同を避けることができます。また、精度も向上します。

  • フィラーワードのフィルタリング:Paraformer モデルでは、disfluency_removal_enabled パラメーターを設定することでフィラーワードのフィルタリングを有効にできます。これにより、よりフォーマルで読みやすいテキスト出力が生成されます。

フォールトトレランスポリシーの設定

  • クライアント側の再接続:ネットワークジッターに対処するために、クライアント側で自動再接続を実装します。例えば、Python SDK の場合は、以下の手順に従います:

    1. 例外のキャッチ:Callback クラスで、on_error メソッドを実装します。dashscope SDK は、ネットワークエラーやその他の問題が発生したときにこのメソッドを呼び出します。

    2. ステータス通知の送信:on_error がトリガーされたときに、再接続フラグを設定します。Python では、スレッドセーフなフラグである threading.Event を使用できます。

    3. 再接続ループの実行:メインロジックを for ループでラップします (例:最大 3 回のリトライ)。再接続フラグが検出されたら、現在の認識を停止し、リソースをクリーンアップし、数秒待ってからループを再開して新しい接続を作成します。

  • ハートビートを送信して切断を防止:サーバーとの持続的接続を維持するために、heartbeat パラメーターを true に設定します。これにより、音声ストリームに長い無音期間があっても接続が維持されます。

  • モデルのレート制限:API を呼び出す際は、モデルのレート制限ルールに従ってください。

API リファレンス

モデル機能の比較

機能

Fun-ASR

Paraformer

サポート言語

モデルにより異なる:

  • fun-asr-realtime および fun-asr-realtime-2025-11-07:中国語 (普通話、広東語、呉語、閩南語、客家語、贛語、湘語、晋語、さらに中原、西南、冀魯、江淮、蘭銀、膠遼、東北、北京、香港-台湾地域の普通話方言—河南、陝西、湖北、四川、重慶、雲南、貴州、広東、広西、河北、天津、山東、安徽、南京、江蘇、杭州、甘粛、寧夏を含む)、英語、日本語

  • fun-asr-realtime-2025-09-15:中国語 (普通話)、英語

  • fun-asr-flash-8k-realtime および fun-asr-flash-8k-realtime-2026-01-28:中国語

モデルにより異なる:

  • paraformer-realtime-v2:中国語 (普通話、広東語、呉語、閩南語、東北、甘粛、貴州、河南、湖北、湖南、寧夏、山西、陝西、山東、四川、天津、江西、雲南、上海)、英語、日本語、韓国語、ドイツ語、フランス語、ロシア語

  • paraformer-realtime-v1、paraformer-realtime-8k-v2、および paraformer-realtime-8k-v1:中国語 (普通話)

サポートされている音声フォーマット

pcm、wav、mp3、opus、speex、aac、amr

サンプルレート

モデルにより異なる:

  • fun-asr-realtime、fun-asr-realtime-2025-11-07、および fun-asr-realtime-2025-09-15:16 kHz

  • fun-asr-flash-8k-realtime および fun-asr-flash-8k-realtime-2026-01-28:8 kHz

モデルにより異なる:

  • paraformer-realtime-v2:任意のサンプルレート

  • paraformer-realtime-v1:16 kHz

  • paraformer-realtime-8k-v2 および paraformer-realtime-8k-v1:8 kHz

音声チャンネル

モノラル

入力フォーマット

バイナリ音声ストリーム

音声サイズまたは時間

無制限

無制限

感情検出

非対応

モデルにより異なる:

  • paraformer-realtime-v2、paraformer-realtime-v1、および paraformer-realtime-8k-v1:非対応

  • paraformer-realtime-8k-v2:サポート デフォルトで有効。無効化可能。

不適切表現フィルター

非対応

話者分離

非対応

フィラーワードフィルタリング

サポート デフォルトで無効。有効化可能。

サポート デフォルトで無効。有効化可能。

タイムスタンプ

サポート 常時有効。

句読点予測

サポート 常時有効。

モデルにより異なる:

  • paraformer-realtime-v2 および paraformer-realtime-8k-v2:サポート デフォルトで有効。無効化可能。

  • paraformer-realtime-v1 および paraformer-realtime-8k-v1:サポート 常時有効。

ホットワード

モデルにより異なる:

  • fun-asr-flash-8k-realtime および fun-asr-flash-8k-realtime-2026-01-28:非対応

  • その他すべてのモデル:サポート 設定可能。

ITN

サポート 常時有効

VAD

サポート 常時有効。

レート制限 (RPS)

20

20

接続タイプ

Java/Python/Android/iOS SDK、WebSocket API

料金

モデルにより異なる:

  • fun-asr-realtime および fun-asr-realtime-2025-11-07:

    • 国際:0.00009 USD/秒

    • 中国本土:0.000047 USD/秒

  • fun-asr-realtime-2025-09-15:

    • 中国本土:0.000047 USD/秒

  • fun-asr-flash-8k-realtime および fun-asr-flash-8k-realtime-2026-01-28:

    • 中国本土:0.000032 USD/秒

中国本土:0.000012 USD/秒