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

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

最終更新日:Oct 15, 2025

このトピックでは、Paraformer リアルタイム音声認識 Python SDK のパラメーターとインターフェイスについて説明します。

重要

このドキュメントは、中国 (北京) リージョンにのみ適用されます。モデルを使用するには、中国 (北京) リージョンの API キーを使用する必要があります。

ユーザーガイド: モデルの説明とモデル選択のガイダンスについては、「リアルタイム音声認識」をご参照ください。

前提条件

  • サービスを有効化し、API キーを取得していること。セキュリティリスクを防ぐため、コードにハードコーディングするのではなく、API キーを環境変数として設定してください。

    説明

    サードパーティのアプリケーションやユーザーに一時的なアクセス権限を付与したり、機密データへのアクセスや削除などのリスクの高い操作を厳密に制御したい場合は、一時的な認証トークンを使用することをお勧めします。

    長期的な API キーと比較して、一時的な認証トークンは有効期間が短い (60 秒) ため、より安全です。一時的な呼び出しシナリオに適しており、API キー漏洩のリスクを効果的に低減できます。

    一時的なトークンを使用するには、コード内の認証に使用する API キーを、取得した一時的な認証トークンに置き換えます。

  • 最新バージョンの DashScope SDK をインストールしていること。

モデルリスト

paraformer-realtime-v2

paraformer-realtime-8k-v2

シナリオ

ライブストリーミングや会議などのシナリオ

電話のカスタマーサービスやボイスメールなど、8 kHz の音声認識シナリオ

サンプルレート

任意

8 kHz

言語

中国語 (北京語および各種方言を含む)、英語、日本語、韓国語、ドイツ語、フランス語、ロシア語

サポートされている中国語の方言: 上海語、呉語、閩南語、東北語、甘粛語、貴州語、河南語、湖北語、湖南語、江西語、寧夏語、山西語、陝西語、山東語、四川語、天津語、雲南語、広東語

中国語

句読点予測

✅ デフォルトでサポートされています。設定は不要です。

✅ デフォルトでサポートされています。設定は不要です。

テキスト逆正規化 (ITN)

✅ デフォルトでサポートされています。設定は不要です。

✅ デフォルトでサポートされています。設定は不要です。

カスタム語彙

✅ 詳細については、「カスタムホットワード」をご参照ください

✅ 詳細については、「カスタムホットワード」をご参照ください

認識言語の指定

language_hints パラメーターを使用して言語を指定します。

感情認識

✅ (クリックして使用方法を表示)

感情認識には以下の制約があります:

  • paraformer-realtime-8k-v2 モデルでのみ利用可能です。

  • セマンティック句読点を無効にする必要があります (リクエストパラメーター semantic_punctuation_enabled で制御)。デフォルトでは、セマンティック句読点は無効になっています。

  • 感情認識の結果は、RecognitionResult オブジェクトの is_sentence_end メソッドが True を返す場合にのみ表示されます。

感情検出結果を取得するには、単一文情報 (Sentence)emo_tag および emo_confidence フィールドから、それぞれ現在の文の感情と感情の信頼度を取得します。

はじめに

Recognition クラスは、同期呼び出しとストリーミング呼び出しのメソッドを提供します。要件に応じて適切なメソッドを選択できます:

  • 同期呼び出し: ローカルファイルを認識し、完全な結果を一度に返します。これは、事前に録音された音声を処理するのに適しています。

  • ストリーミング呼び出し: オーディオストリームを認識し、結果をリアルタイムで出力します。オーディオストリームは、マイクなどの外部デバイスから取得したり、ローカルファイルから読み取ったりすることができます。これは、即時のフィードバックが必要なシナリオに適しています。

同期呼び出し

このメソッドは、ローカルファイルのリアルタイム音声テキスト変換タスクを送信します。プロセスは、完全な文字起こし結果が返されるまでブロックされます。

Recognition クラスをインスタンス化し、リクエストパラメーターを設定し、call メソッドを呼び出して認識を実行し、RecognitionResult を取得します。

クリックして完全な例を表示

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

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

# 環境変数に API キーを設定していない場合は、次の行のコメントを解除し、apiKey をご使用の API キーに置き換えてください。
# import dashscope
# dashscope.api_key = "apiKey"

recognition = Recognition(model='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # 「language_hints」パラメーターは 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)
    
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(),
    ))

ストリーミング呼び出し

このメソッドは、リアルタイム音声テキスト変換タスクを送信し、コールバックインターフェイスを介してリアルタイムの認識結果を返します。

  1. ストリーミング音声認識を開始

    Recognition クラスをインスタンス化し、リクエストパラメーターコールバックインターフェイス (RecognitionCallback) を設定し、start メソッドを呼び出します。

  2. オーディオをストリーミング

    `Recognition` クラスsend_audio_frame メソッドを繰り返し呼び出して、ローカルファイルまたはデバイス (マイクなど) からのバイナリオーディオストリームをセグメントに分けてサーバーに送信します。

    音声データが送信されると、サーバーは RecognitionCallback コールバックインターフェイスon_event メソッドを使用して、認識結果をリアルタイムでクライアントに返します。

    送信する各音声セグメントの持続時間は約 100 ミリ秒で、データサイズは 1 KB から 16 KB の間にすることをお勧めします。

  3. 処理を終了

    Recognition クラスstop メソッドを呼び出して、音声認識を停止します。

    このメソッドは、コールバックインターフェイス (RecognitionCallback)on_complete または on_error コールバックがトリガーされるまで、現在のスレッドをブロックします。

クリックして完全な例を表示

マイクからの音声を認識する

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  # バッファーごとのフレーム数


def init_dashscope_api_key():
    """
        DashScope API キーを設定します。詳細については、以下をご参照ください。
        https://github.com/aliyun/alibabacloud-bailian-speech-demo/blob/master/PREREQUISITES.md
    """

    if 'DASHSCOPE_API_KEY' in os.environ:
        dashscope.api_key = os.environ[
            'DASHSCOPE_API_KEY']  # 環境変数 DASHSCOPE_API_KEY から API キーを読み込みます
    else:
        dashscope.api_key = '<your-dashscope-api-key>'  # API キーを手動で設定します


# リアルタイム音声認識コールバック
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__':
    init_dashscope_api_key()
    print('Initializing ...')

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

    # 非同期モードで認識サービスを呼び出します。モデル、フォーマット、
    # sample_rate などの認識パラメーターをカスタマイズできます
    recognition = Recognition(
        model='paraformer-realtime-v2',
        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()

ローカル音声ファイルを認識する

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

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

# 環境変数に API キーを設定していない場合は、次の行のコメントを解除し、apiKey をご使用の API キーに置き換えてください。
# import dashscope
# dashscope.api_key = "apiKey"

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='paraformer-realtime-v2',
                          format='wav',
                          sample_rate=16000,
                          # 「language_hints」パラメーターは paraformer-realtime-v2 モデルでのみサポートされています。
                          language_hints=['zh', 'en'],
                          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(),
    ))

同時呼び出し

Python では、グローバルインタープリターロックのため、一度に 1 つのスレッドしか Python コードを実行できません (ただし、一部のパフォーマンス指向のライブラリではこの制限が解除される場合があります)。マルチコアコンピューターの計算資源をより有効に活用するために、multiprocessing または concurrent.futures.ProcessPoolExecutor を使用することをお勧めします。マルチスレッドは、高い同時実行性下で SDK の呼び出し待機時間を大幅に増加させる可能性があります。

リクエストパラメーター

リクエストパラメーターは、Recognition クラスのコンストラクター (__init__) で設定されます。

パラメーター

タイプ

デフォルト

必須

説明

model

str

-

はい

リアルタイム音声認識に使用されるモデル。詳細については、「モデルリスト」をご参照ください。

sample_rate

int

-

はい

認識用の音声サンプリングレート (Hz) を設定します。

モデルによって異なります:

  • paraformer-realtime-v2 は任意のサンプルレートをサポートします。

  • paraformer-realtime-8k-v2 は 8000 Hz のサンプルレートのみをサポートします。

format

str

-

はい

認識する音声のフォーマット。

サポートされている音声フォーマット: pcm、wav、mp3、opus、speex、aac、amr。

重要

opus/speex: Ogg にカプセル化する必要があります。

wav: PCM エンコードされている必要があります。

amr: AMR-NB のみがサポートされています。

vocabulary_id

str

-

いいえ

ホットワード語彙の ID。このパラメーターは設定された場合にのみ有効になります。このフィールドを使用して、v2 以降のモデルのホットワード ID を設定します。

このホットワード ID のホットワード情報は、音声認識リクエストに適用されます。詳細については、「ホットワードのカスタマイズ」をご参照ください。

disfluency_removal_enabled

bool

False

いいえ

非流暢な単語をフィルターで除外するかどうかを指定します:

  • true: 非流暢な単語をフィルターで除外します。

  • false (デフォルト): 非流暢な単語をフィルターで除外しません。

language_hints

list[str]

["zh", "en"]

いいえ

認識する言語の言語コード。事前に言語を特定できない場合は、このパラメーターを未設定のままにすることができます。モデルは自動的に言語を検出します。

現在サポートされている言語コード:

  • zh: 中国語

  • en: 英語

  • ja: 日本語

  • yue: 広東語

  • ko: 韓国語

  • de: ドイツ語

  • fr: フランス語

  • ru: ロシア語

このパラメーターは多言語モデルにのみ適用されます。詳細については、「モデルリスト」をご参照ください。

semantic_punctuation_enabled

bool

False

いいえ

セマンティック文分割を有効にするかどうかを指定します。この機能はデフォルトで無効になっています。

  • true: セマンティック文分割を有効にし、音声アクティビティ検出 (VAD) 文分割を無効にします。

  • false (デフォルト): VAD 文分割を有効にし、セマンティック文分割を無効にします。

セマンティック文分割はより高い精度を提供し、会議の文字起こしシナリオに適しています。VAD 文分割は待機時間が短く、対話型シナリオに適しています。

semantic_punctuation_enabled パラメーターを調整することで、さまざまなシナリオに合わせて文分割方法を柔軟に切り替えることができます。

このパラメーターは、v2 以降のモデルでのみ有効です。

max_sentence_silence

int

800

いいえ

VAD 文分割の無音期間のしきい値 (ミリ秒)。

音声セグメントの後の無音期間がこのしきい値を超えると、システムは文が終了したと判断します。

パラメーターの範囲は 200 ms から 6000 ms です。デフォルト値は 800 ms です。

このパラメーターは、semantic_punctuation_enabled パラメーターが `false` (VAD 分割) で、モデルが v2 以降の場合にのみ有効です。

multi_threshold_mode_enabled

bool

False

いいえ

このスイッチがオン (`true`) の場合、VAD が長すぎる文を分割するのを防ぎます。この機能はデフォルトで無効になっています。

このパラメーターは、semantic_punctuation_enabled パラメーターが `false` (VAD 分割) で、モデルが v2 以降の場合にのみ有効です。

punctuation_prediction_enabled

bool

True

いいえ

認識結果に句読点を自動的に追加するかどうかを指定します:

  • true (デフォルト)

  • false

このパラメーターは、v2 以降のモデルでのみ有効です。

heartbeat

bool

False

いいえ

サーバーとの持続的接続を維持する必要がある場合は、このスイッチを使用できます:

  • true: 無音の音声が継続的に送信されても、サーバーとの接続を中断せずに維持します。

  • false (デフォルト): 無音の音声が継続的に送信されても、60 秒後にタイムアウトにより接続が切断されます。

    無音音声とは、音声ファイルまたはデータストリーム内の音信号がないコンテンツを指します。Audacity や Adobe Audition などの音声編集ソフトウェア、または FFmpeg などのコマンドラインツールを使用して、さまざまな方法で無音音声を生成できます。

このパラメーターは、v2 以降のモデルでのみ有効です。

このフィールドを使用する場合、SDK のバージョンは 1.23.1 以降である必要があります。

inverse_text_normalization_enabled

bool

True

いいえ

テキスト逆正規化 (ITN) を有効にするかどうかを指定します。

この機能はデフォルトで有効 (`true`) です。有効にすると、漢数字がアラビア数字に変換されます。

このパラメーターは、v2 以降のモデルでのみ有効です。

callback

RecognitionCallback

-

いいえ

RecognitionCallback インターフェイス

主要なインターフェイス

Recognition クラス

Recognition クラスは `from dashscope.audio.asr import *` を使用してインポートされます。

メンバーメソッド

メソッドシグネチャ

説明

call

def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult

ローカルファイルを使用する同期呼び出し。このメソッドは、音声ファイル全体が読み取られるまで現在のスレッドをブロックします。ファイルには読み取り権限が必要です。

認識結果は RecognitionResult 型として返されます。

start

def start(self, phrase_id: str = None, **kwargs)

音声認識を開始します。

これはコールバックベースのストリーミングリアルタイム認識メソッドで、現在のスレッドをブロックしません。send_audio_frame および stop と一緒に使用する必要があります。

send_audio_frame

def send_audio_frame(self, buffer: bytes)

オーディオストリームをプッシュします。毎回プッシュされるオーディオストリームは、大きすぎたり小さすぎたりしないようにしてください。各音声パケットの持続時間は約 100 ms で、サイズは 1 KB から 16 KB の間にすることをお勧めします。

認識結果は、コールバックインターフェイス (RecognitionCallback) の on_event メソッドを介して取得できます。

stop

def stop(self)

音声認識を停止します。このメソッドは、サービスが受信したすべての音声を認識し、タスクが完了するまでブロックします。

get_last_request_id

def get_last_request_id(self)

request_id を取得します。これは、コンストラクターが呼び出された後 (オブジェクトが作成された後) に使用できます。

get_first_package_delay

def get_first_package_delay(self)

最初のパケットの遅延を取得します。これは、最初の音声パケットを送信してから最初の認識結果パケットを受信するまでの待機時間です。タスク完了後に使用します。

get_last_package_delay

def get_last_package_delay(self)

最後のパケットの遅延を取得します。これは、stop 命令を送信してから最後の認識結果パケットを受信するまでの時間です。タスク完了後に使用します。

get_response

def get_response(self)

最後のメッセージを取得します。これは、タスク失敗のエラーを取得するために使用できます。

コールバックインターフェイス (RecognitionCallback)

ストリーミング呼び出し中、サーバーはコールバックを使用して主要なプロセス情報とデータをクライアントに返します。返された情報とデータを処理するために、コールバックメソッドを実装する必要があります。

クリックして例を表示

class Callback(RecognitionCallback):
    def on_open(self) -> None:
        print('Connection successful')

    def on_event(self, result: RecognitionResult) -> None:
        # 認識結果を受信するためのロジックを実装します

    def on_complete(self) -> None:
        print('Task completed')

    def on_error(self, result: RecognitionResult) -> None:
        print('An exception occurred: ', result)

    def on_close(self) -> None:
        print('Connection closed')


callback = Callback()

メソッド

パラメーター

戻り値

説明

def on_open(self) -> None

None

None

このメソッドは、サーバーとの接続が確立された直後に呼び出されます。

def on_event(self, result: RecognitionResult) -> None

result: RecognitionResult

None

このメソッドは、サービスが応答を送信したときに呼び出されます。

def on_complete(self) -> None

None

None

このメソッドは、すべての認識結果が返された後に呼び出されます。

def on_error(self, result: RecognitionResult) -> None

result: 認識結果

None

このメソッドは、例外が発生したときに呼び出されます。

def on_close(self) -> None

None

None

このメソッドは、サービスが接続を閉じた後に呼び出されます。

応答結果

認識結果 (RecognitionResult)

RecognitionResult は、ストリーミング呼び出しまたは同期呼び出しにおける単一のリアルタイム認識の認識結果を表します。

メンバーメソッド

メソッドシグネチャ

説明

get_sentence

def get_sentence(self) -> Union[Dict[str, Any], List[Any]]

現在認識されている文とタイムスタンプ情報を取得します。コールバックでは、単一の文が返されるため、このメソッドは Dict[str, Any] 型を返します。

詳細については、「Sentence」をご参照ください。

get_request_id

def get_request_id(self) -> str

リクエストの request_id を取得します。

is_sentence_end

@staticmethod
def is_sentence_end(sentence: Dict[str, Any]) -> bool

指定された文が終了したかどうかを判断します。

Sentence (Sentence)

Sentence クラスのメンバーは次のとおりです:

パラメーター

タイプ

説明

begin_time

int

文の開始時刻 (ミリ秒)。

end_time

int

文の終了時刻 (ミリ秒)。

text

str

認識されたテキスト。

words

単語のタイムスタンプ情報 (Word) のリスト

単語のタイムスタンプ情報。

emo_tag

str

現在の文の感情:

  • positive: 肯定的感情 (嬉しい、満足など)

  • negative: 否定的感情 (怒り、悲しみなど)

  • neutral: 明確な感情なし

感情認識には以下の制約があります:

  • paraformer-realtime-8k-v2 モデルでのみ利用可能です。

  • セマンティック句読点を無効にする必要があります (リクエストパラメーター semantic_punctuation_enabled で制御)。デフォルトでは、セマンティック句読点は無効になっています。

  • 感情認識の結果は、RecognitionResult オブジェクトの is_sentence_end メソッドが True を返す場合にのみ表示されます。

emo_confidence

float

現在の文で認識された感情の信頼度。値の範囲は 0.0 から 1.0 です。値が大きいほど信頼度が高いことを示します。

感情認識には以下の制約があります:

  • paraformer-realtime-8k-v2 モデルでのみ利用可能です。

  • セマンティック句読点を無効にする必要があります (リクエストパラメーター semantic_punctuation_enabled で制御)。デフォルトでは、セマンティック句読点は無効になっています。

  • 感情認識の結果は、RecognitionResult オブジェクトの is_sentence_end メソッドが True を返す場合にのみ表示されます。

単語のタイムスタンプ情報 (Word)

Word クラスのメンバーは次のとおりです:

パラメーター

タイプ

説明

begin_time

int

単語の開始時刻 (ミリ秒)。

end_time

int

単語の終了時刻 (ミリ秒)。

text

str

単語。

punctuation

str

句読点。

エラーコード

エラーが発生した場合は、トラブルシューティングについて「エラーメッセージ」をご参照ください。

問題が解決しない場合は、開発者グループに参加して問題を報告できます。問題の調査に役立つように、リクエスト ID を含めてください。

その他の例

その他の例については、「GitHub」をご参照ください。

よくある質問

機能

Q: 長い無音期間中にサーバーとの持続的接続を維持するにはどうすればよいですか?

A: heartbeat リクエストパラメーターを `true` に設定し、無音音声を継続的にサーバーに送信します。

無音音声とは、音声ファイルまたはデータストリーム内の音信号がないコンテンツを指します。Audacity や Adobe Audition などの音声編集ソフトウェア、または FFmpeg などのコマンドラインツールを使用して、さまざまな方法で無音音声を生成できます。

Q: 音声フォーマットを必要なフォーマットに変換するにはどうすればよいですか?

A: FFmpeg ツールを使用できます。詳細については、FFmpeg の公式ウェブサイトをご参照ください。

# 基本的な変換コマンド (汎用テンプレート)
# -i: 入力ファイルのパスを指定します。例: audio.wav
# -c:a: オーディオエンコーダーを指定します。例: aac, libmp3lame, pcm_s16le
# -b:a: ビットレートを指定します (音質を制御)。例: 192k, 320k
# -ar: サンプルレートを指定します。例: 44100 (CD), 48000, 16000
# -ac: サウンドチャンネルの数を指定します。例: 1 (モノラル), 2 (ステレオ)
# -y: 既存のファイルを上書きします (値は不要)。
ffmpeg -i input_audio.ext -c:a encoder_name -b:a bit_rate -ar sample_rate -ac num_channels output.ext

# 例: WAV から MP3 へ (元の品質を維持)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# 例: MP3 から WAV へ (16 ビット PCM 標準フォーマット)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# 例: M4A から AAC へ (Apple オーディオの抽出/変換)
ffmpeg -i input.m4a -c:a copy output.aac  # 再エンコードせずに直接抽出
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # 品質を向上させるために再エンコード
# 例: FLAC ロスレスから Opus へ (高圧縮)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus

Q: ローカルファイル (録音済み音声ファイル) を認識するにはどうすればよいですか?

A: ローカルファイルを認識するには、2 つの方法があります:

  • ローカルファイルのパスを直接渡す: この方法では、ファイルが完全に処理された後に完全な認識結果が返されます。即時のフィードバックが必要なシナリオには適していません。

    詳細については、「同期呼び出し」をご参照ください。Recognition クラスcall メソッドにファイルパスを渡して、音声ファイルを直接認識します。

  • ローカルファイルをバイナリストリームに変換して認識する: この方法では、ファイルの処理中に認識結果がストリームで返されます。即時のフィードバックが必要なシナリオに適しています。

    詳細については、「ストリーミング呼び出し」をご参照ください。Recognition クラスsend_audio_frame メソッドを使用して、バイナリストリームをサーバーに送信して認識させることができます。

トラブルシューティング

Q: なぜ音声が認識されないのですか (認識結果がない)?

  1. リクエストパラメーターの音声フォーマット (format) とサンプルレート (sampleRate/sample_rate) が正しく設定され、パラメーターの制約を満たしているか確認してください。以下は一般的なエラーの例です:

    • 音声ファイルの拡張子は .wav ですが、実際には MP3 フォーマットであり、format パラメーターが `mp3` に設定されている (不正なパラメーター設定)。

    • 音声のサンプルレートは 3600 Hz ですが、sampleRate/sample_rate パラメーターが 48000 に設定されている (不正なパラメーター設定)。

    ffprobe ツールを使用して、コンテナー、エンコーディング、サンプルレート、サウンドチャンネルなどの音声に関する情報を取得できます:

    ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx
  2. paraformer-realtime-v2 モデルを使用する場合、language_hints で設定された言語が音声の実際の言語と一致しているか確認してください。

    たとえば、音声は中国語ですが、language_hintsen (英語) に設定されています。

  3. 上記のすべてのチェックが通った場合は、カスタムホットワードを使用して特定の単語の認識を向上させることができます。