Skip to main content

Qwen-Audio-ASR-Streaming Node.js SDK

音声 Node.js SDK で Qwen-Audio-ASR-Streaming に音声をストリーミング送信し、認識結果、コンテキスト、使用量を処理します。

SDK のインストール

Node.js 18 以降が必要です。SDK 0.1.0 パッケージをダウンロードし、プロジェクトで次を実行します。
npm install ./dashscope-sdk-nodejs-0.1.0.tgz

クイックスタート

コンソールで API キーを取得し、環境変数 DASHSCOPE_API_KEY に設定します。 サンプル音声を input.mp3 として保存し、16 kHz、16-bit、モノラル PCM に変換します。
ffmpeg -i input.mp3 -f s16le -ac 1 -ar 16000 input.pcm
次のサンプルを example.mjs として保存し、node example.mjs を実行します。
import { readFile } from 'node:fs/promises'
import { setTimeout as sleep } from 'node:timers/promises'
import { RecognitionClient } from 'dashscope-sdk-nodejs/asr'

const pcm = await readFile('input.pcm')
const asr = new RecognitionClient({
  apiKey: process.env.DASHSCOPE_API_KEY,
  workspaceId: process.env.DASHSCOPE_WORKSPACE_ID,
  baseUrl: 'dashscope-intl.aliyuncs.com',
  model: 'qwen-audio-3.1-asr-flash-streaming',
  format: 'pcm',
  sampleRate: 16000,
})
asr.on('sentenceEnd', sentence => console.log('Final sentence:', sentence.text))
asr.on('error', err => console.error(err.code, err.message))

try {
  await asr.start()
  for (let offset = 0; offset < pcm.length; offset += 3200) {
    asr.sendAudio(pcm.subarray(offset, offset + 3200))
    await sleep(100)
  }
  await asr.finish()
} finally {
  asr.close()
}

API リファレンス

コンストラクターのオプション

RecognitionClient のコンストラクターオプション:
パラメーター型必須説明
apiKeystringいいえAPI キー。デフォルトは DASHSCOPE_API_KEY。
workspaceIdstringいいえワークスペース ID。デフォルトは DASHSCOPE_WORKSPACE_ID。
baseUrlstringいいえサービスホスト名を dashscope-intl.aliyuncs.com(シンガポール)に設定します。
modelstringいいえモデル ID。デフォルト:qwen-audio-3.1-asr-flash-streaming。
format'pcm' | 'wav' | 'mp3' | 'opus' | 'speex' | 'aac' | 'amr'いいえ音声形式。デフォルト:pcm。WAV は PCM、Opus/Speex は Ogg コンテナー、AMR は AMR-NB を使用します。
sampleRatenumberいいえ実際の音声サンプリングレート(Hz)。デフォルト:16000。
vocabularyIdstringいいえ事前コンパイル済み語彙リスト ID。
languageHintsstring[]いいえ認識言語のヒント。先頭の最大 4 値が有効です。省略時は自動認識します。
multiThresholdModeEnabledbooleanいいえVAD の区間が長くなりすぎるのを防ぐ複数しきい値モード。デフォルト:false。
maxSentenceSilencenumberいいえVAD の文終了無音しきい値(ms):[200,6000]、デフォルト:800。
heartbeatbooleanいいえ無音時の接続維持。デフォルト:false。有効時も無音音声を継続送信します。
contextAsrContextMessage[]いいえ認識コンテキスト。形式は { role, content: [{ type: "input_text", text }] }、role は user または assistant。各ロール最大 5 件、合計 400 文字未満で、対話のターン順に並べます。
parametersPartial<RecognitionParameters>いいえ追加の認識パラメーター(vad_model、keep_dialect、vocabulary など)。
connectTimeoutMsnumberいいえ接続タイムアウト(ms)。デフォルト:10000。
taskTimeoutMsnumberいいえ開始・終了確認のタイムアウト(ms)。デフォルト:60000。0 で無効化します。
parameters.vad_model'near_meeting_16k' | 'far_field_meeting_16k'いいえ近距離または遠距離の VAD。デフォルト:far_field_meeting_16k。
parameters.keep_dialectbooleanいいえ方言表現を保持します。デフォルト:false。
parameters.vocabularyRecord<string, number>いいえ即時語彙。キーは単語、値は重み [1,5] または 50。
parameters.speech_noise_thresholdnumberいいえVAD 感度しきい値:[-1,1]。

主なメソッド

メソッド戻り値説明
start()Promise<void>認識を開始します。完了後に音声を送信します。
sendAudio(audio: Buffer | Uint8Array)void設定した形式とサンプリングレートで音声フレームを送信します。
finish()Promise<void>音声入力を終了して完了を待ちます。テキストはコールバックで返します。
close(code?: number, reason?: string)void接続を閉じてタスクのリソースを解放します。

コールバックイベント

on(event, listener) でコールバックを登録します。全フィールドはサーバーイベントを参照してください。
イベントペイロード説明
started{ taskId: string }タスクが開始し、入力を受け付けます。
result{ text: string; sentence_end: boolean; sentence_begin?: boolean; words?: RecognitionWord[] }中間または最終の文。ハートビート結果は除外されます。
sentenceEnd{ text: string; sentence_end: boolean; sentence_begin?: boolean; words?: RecognitionWord[] }sentence_end === true の最終文。
finished{ taskId: string; duration?: number; usage?: RecognitionUsage }タスクが終了し、ローカルのタスク状態がクリアされました。
failed / errorDashScopeError呼び出しエラー。code、message、リクエスト識別子を含みます。
close{ code: number; reason: string }基になる接続の切断通知。
eventServerEvent元のサービス JSON メッセージ。