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

Alibaba Cloud Model Studio:Qwen-Audio-ASR-Message HarmonyOS SDK

最終更新日:Sep 29, 2026

Qwen-Audio-ASR-Message の HarmonyOS SDK のパラメーター、インターフェイス、コールバックと使用方法を説明します。

クイックスタート

  1. API キーを取得します。長期有効な API キーをクライアントにハードコーディングしないでください。アプリケーションサーバーが一時 API キーを取得し、クライアントへ渡すことを推奨します。

  2. 最新 SDK をダウンロードして展開します。entry/libs/neonui.har をアプリの entry/libs にコピーし、entry/oh-package.json5 に依存関係を追加します。

    {
      "dependencies": {
        "neonui": "file:libs/neonui.har"
      }
    }
    

    HarmonyOS C++ での統合には、native/libs 内の共有ライブラリと native/include 内のヘッダーファイルを使用します。

  3. アプリの module.json5 でネットワークとマイクの権限を宣言し、実行時にマイク権限を要求します。reason_internet と reason_microphone はリソース名の例です。対応する説明をアプリのリソースで定義してください。

    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "$string:reason_internet",
        "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
      },
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:reason_microphone",
        "usedScene": { "abilities": ["EntryAbility"], "when": "always" }
      }
    ]
    
  4. SDK パッケージのサンプルプロジェクトを DevEco Studio で開きます。サンプルページは entry/src/main/ets/pages/dashscope/DashFunAsrSpeechTranscriberPage.ets です。API キーを設定して実行します。

呼び出し手順

  1. NativeNui(Constants.ModeType.MODE_DIALOG) インスタンスを作成します。
  2. initialize で SDK を初期化し、接続・制御パラメーターを設定します。
  3. setParams でモデルと認識パラメーターを設定します。
  4. startDialog を呼び出して認識を開始します。
  5. onNuiAudioStateChanged で音声の状態に応じて録音デバイスを開始、一時停止、または閉じます。
  6. onNuiNeedAudioData で録音データを継続的に供給します。能動送信が有効なら、代わりに updateAudio を呼び出します。
  7. onNuiEventCallback で認識結果とタスク状態を取得します。
  8. stopDialog を呼び出し、EVENT_TRANSCRIBER_COMPLETE を待ちます。
  9. 認識が不要になったら release でリソースを解放します。

リクエストパラメーター

接続・制御パラメーター

initialize の parameters 引数に JSON 文字列を渡します。

{
  "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
  "device_id": "my_device_id",
  "service_mode": "1",
  "audio_update_manually": "false"
}
パラメーター型必須説明
urlstringはいサービスエンドポイント:
  • パブリックエンドポイント:wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • 北京のワークスペース専用エンドポイント:wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference
  • シンガポールのワークスペース専用エンドポイント:wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference
{WorkspaceId} を実際の ワークスペース ID に置き換えます。
service_modestringはい動作モード。リアルタイム音声認識では "1"(Constants.ModeFullCloud)に設定します。
device_idstringはいアプリ内ユーザーIDやクライアント生成のデバイスIDなど、一意のエンドユーザー識別子です。主にログのトレースとトラブルシューティングに使用されます。
apikeystringいいえAPI キー。初期化時に渡せます。startDialog の dialog_params で一時 API キーを渡すことを推奨します。

audio_update_manually

stringいいえ音声の能動送信を有効にするかどうか。デフォルトは "false"。"true" なら updateAudio を呼び、"false" なら SDK が onNuiNeedAudioData から取得します。"true" で SDK がデバイス側 AEC や VAD をサポートする場合、その機能はデフォルトで有効になります。

workspace

stringいいえデバイス側リソースの保存ディレクトリ。audio_update_manually が "true" で、AEC や VAD などのデバイス側処理が有効な場合は必須です。
debug_pathstringいいえログディレクトリ。save_log が true の場合は必須です。SDK は最大 2 個のログファイルを保持します。
save_wavstringいいえデバッグ用音声を保存するかどうか。デフォルトは "false"。音声は debug_path に保存します。"true" の場合は debug_path も設定し、initialize の save_log に true を渡します。
save_wav_by_idstringいいえsave_wav が有効な場合、検索しやすいよう保存音声のファイル名に task_id を使うかどうか。デフォルトは "false"。
max_log_file_sizenumberいいえログファイル 1 個の最大サイズ(バイト)。デフォルトは 104857600(100 MiB)。save_log が true の場合のみ有効です。
log_track_levelnumberいいえonNuiLogTrackCallback のログフィルターレベル。デフォルトは 2。値は 0(VERBOSE)、1(DEBUG)、2(INFO)、3(WARNING)、4(ERROR)、5(NONE)。ログのレベルが log_track_level と initialize の level の両方以上の場合のみ返します。例えば 2 と 3 なら、WARNING 以上のみ返します。
enable_reconnectionstringいいえネットワーク切断後の再接続と送信再開を有効にするかどうか。デフォルトは "false"。

aec_params

objectいいえデバイス側 AEC の設定。audio_update_manually が "true" の場合のみ使用します。

aec_params.enable_aec

booleanいいえデバイス側 AEC を有効にするかどうか。SDK ビルドがサポートする場合はデフォルトで有効です。

aec_params.save_audio

booleanいいえAEC 処理後の音声を保存するかどうか。save_wav が有効で debug_path が設定済みならデフォルトで有効です。

aec_params.enable_aec_data_callback

booleanいいえAEC 処理後のデータを onNuiAssistEventCallback の EVENT_AEC_DATA イベントで返すかどうか。デフォルトは false。

vad_params

objectいいえデバイス側 VAD の設定。audio_update_manually が "true" の場合のみ使用します。

vad_params.enable_vad

booleanいいえデバイス側 VAD を有効にするかどうか。SDK ビルドがサポートする場合はデフォルトで有効です。

vad_params.save_audio

booleanいいえVAD 処理後の音声を保存するかどうか。save_wav が有効で debug_path が設定済みならデフォルトで有効です。
audio_configobjectいいえSDK が音声を取得するモードの録音設定。audio_update_manually が "false" の場合のみ使用します。
audio_config.mic.enable_volume_calculationbooleanいいえ音量を計算して報告するかどうか。デフォルトは true。音量コールバックが不要なら無効にします。
audio_config.mic.volume_modestringいいえ音量の計算モード。"dbfs" にすると 20*log10(rms/32768) で標準 dBFS を計算します。フルスケールは 0 dB です。

認識パラメーター

setParams の params 引数に JSON 文字列を渡します。

{
  "service_type": 4,
  "nls_config": {
    "model": "qwen-audio-3.1-asr-flash-message",
    "sr_format": "opus",
    "sample_rate": 16000
  }
}
パラメーター型必須説明
service_typenumberはい音声サービスの種類。4(Constants.kServiceTypeSpeechTranscriber)に設定します。
nls_configobjectはい認識設定オブジェクト。
nls_config.modelstringはいモデル名。qwen-audio-3.1-asr-flash-message に設定します。
nls_config.sr_formatstringはい音声形式:pcm または opus。opus の場合もアプリケーションは PCM データを送信し、SDK が Opus にエンコードします。
nls_config.sample_ratenumberはいサンプリングレート(Hz)。16000 Hz のみをサポートします。
nls_config.max_sentence_silencenumberいいえVAD の無音しきい値(ミリ秒)。発話後の無音時間がこの値を超えると、発話の終了と判断します。デフォルト:1300。有効範囲:[200, 6000]。意味による分割が有効な場合、sentence_end の判定には使用しませんが、値が小さすぎると認識に影響することがあります。
nls_config.heartbeatbooleanいいえハートビートを有効にするかどうか。デフォルト:false。有効な場合、無音音声を継続送信すると接続を維持できます。無効な場合は一定時間後にタイムアウトします。無音音声とは、音声ファイルやストリームに可聴信号が含まれないデータです。
nls_config.disfluency_removal_enabledbooleanいいえつなぎ言葉を除去し、出力を整えるかどうか。デフォルト値は false です。有効にするには true に設定します。
nls_config.intermediate_result_enabledbooleanいいえストリーミング認識の中間結果を返すかどうか。デフォルト値は false です。中間結果を返すには true に設定します。
nls_config.vocabulary_idstringいいえ事前作成したホットワードリストの ID。リストを事前に作成してください。語彙が既知で比較的安定しており、複数のリクエストで同じリストを再利用する場合に使用します。事前作成ホットワード を参照してください。
nls_config.instant_vocabularyobjectいいえリクエスト単位のホットワード。キーはホットワード文字列、値は整数の重みです。事前にリストを作成する必要がなく、セッション単位の一時的な最適化に適しています。重みは [1, 5] または 50。[1, 5] では値が大きいほど出力されやすくなります。重み 50 のスーパーホットワードは最大 50 個です。事前作成ホットワードと併用すると両方の集合を統合します。統合後に 2000 件を超える場合、2000 件をランダムに選択します。リクエスト単位のホットワード を参照してください。
nls_config.speech_noise_thresholdnumberいいえVAD の音声・ノイズ判定しきい値。有効範囲:[-1.0, 1.0]。-1 に近づけるとノイズが音声と判定されやすくなり、ノイズを文字起こしする可能性が高まります。1 に近づけると音声がノイズと判定されやすくなり、音声の一部が除去される可能性があります。この高度な設定は認識に大きく影響するため、十分にテストし、0.1 刻みで調整してください。
nls_config.enable_connection_fast_checkbooleanいいえネットワーク切断の高速検出を有効にするかどうか。デフォルト:false。

APIs

NativeNui

SDK をインポートします。

import { AsrResult, Constants, INativeNuiCallback, KwsResult, NativeNui } from 'neonui';

インスタンスの作成

constructor(mode_type: Constants.ModeType, flag?: string)
パラメーター型説明
mode_typeConstants.ModeTypeSDK モード:対話・認識は MODE_DIALOG、音声合成は MODE_TTS、ストリーミング入力音声合成は MODE_STREAM_INPUT_TTS。リアルタイム音声認識では MODE_DIALOG に設定します。
flagstringログを区別するための任意のインスタンス ID。

initialize

initialize(
  callback: INativeNuiCallback,
  parameters: string,
  level: number,
  save_log: boolean = false
): number

SDK を初期化します。このメソッドはブロックする場合があります。UI スレッドで呼び出さないでください。

パラメーター型説明
callbackINativeNuiCallbackイベントとデータのコールバック。
parametersstring接続・制御パラメーターを含む JSON 文字列。
levelnumberSDK のログレベル:LOG_LEVEL_VERBOSE(0)、LOG_LEVEL_DEBUG(1)、LOG_LEVEL_INFO(2)、LOG_LEVEL_WARNING(3)、LOG_LEVEL_ERROR(4)、LOG_LEVEL_NONE(5)。
save_logbooleanローカルログを保存するかどうか。デフォルト:false。true の場合は parameters 内に debug_path を指定してください。max_log_file_size も設定できます。

このメソッドはエラーコードを返します。

setParams

setParams(params: string): number

startDialog の前に認識パラメーターを設定します。params は認識パラメーターを含む JSON 文字列です。 このメソッドはエラーコードを返します。

startDialog

startDialog(vad_mode: Constants.VadMode, dialog_params: string): number

認識を開始します。

パラメーター型説明
vad_modeConstants.VadModeVAD モード。リアルタイム音声認識では Constants.VadMode.TYPE_P2T に設定します。
dialog_paramsstringJSON 文字列。期限切れの一時 API キーの更新、または input_context による入力コンテキストの指定に使用します。

Example:

{
  "apikey": "st-****",
  "input_context": [
    { "role": "user", "content": [{ "type": "input_text", "text": "Example context" }] }
  ]
}

このメソッドはエラーコードを返します。

stopDialog

stopDialog(): number

認識を終了して最終結果を返すようサーバーに通知します。EVENT_TRANSCRIBER_COMPLETE の受信でタスクが終了します。 このメソッドはエラーコードを返します。

cancelDialog

cancelDialog(): number

サーバーの最終結果を待たず、直ちに認識を終了します。 このメソッドはエラーコードを返します。

dialogAction

dialogAction(action_params: string): number

実行時アクションを送信し、認識コンテキストを更新するか、再生状態の変化を AEC に通知します。

パラメーター型説明
action_paramsstringアクションを含む JSON 文字列。
action_params.typestring"action" に設定します。
action_params.commandstringアクションコマンド:"context は入力コンテキストを更新し、play_start は参照音声の再生開始を AEC に通知し、play_over" は再生終了を AEC に通知します。
action_params.contextobject[]command が "context" の場合に使用する入力コンテキスト。

コンテキスト更新の例:

{
  "type": "action",
  "command": "context",
  "context": [
    {
      "role": "user",
      "content": [
        { "text": "Example context", "type": "input_text" }
      ]
    }
  ]
}

このメソッドはエラーコードを返します。

updateAudio

updateAudio(data: ArrayBuffer, first_pack: boolean): number

audio_update_manually が "true" の場合、onNuiNeedAudioData に格納せず、このメソッドで録音データを能動的に送信します。

パラメーター型説明
dataArrayBuffer認識対象の音声データ。
first_packboolean最初の音声パケットかどうか。最初は true、以降は false に設定します。

このメソッドはエラーコードを返します。

pushReferenceData

pushReferenceData(data: ArrayBuffer, first_pack: boolean): number

audio_update_manually が "true" でデバイス側 AEC が有効な場合、プレーヤーの再生音声を AEC 参照信号として送信します。

パラメーター型説明
dataArrayBuffer参照音声データ。
first_packboolean最初の音声パケットかどうか。最初は true、以降は false に設定します。

このメソッドはエラーコードを返します。

release

release(): number

SDK の内部リソースをすべて解放します。呼び出し後はインスタンスを使用できません。再使用するには initialize を先に呼び出します。 このメソッドはエラーコードを返します。

GetVersion

GetVersion(): string

現在の SDK バージョンを返します。

refreshApikey

refreshApikey(apikey: string, url: string = ''): string

API キーを更新し、一時認証トークンを返します。同期ネットワーク呼び出しを行うため、UI スレッドで呼び出さないでください。

パラメーター型説明
apikeystring既存の API キー。
urlstring任意の認証エンドポイント。デフォルトは空文字列で、既定のエンドポイントを使用します。

INativeNuiCallback

onNuiEventCallback

onNuiEventCallback: (
  event: Constants.NuiEvent,
  resultCode: number,
  arg2: number,
  kwsResult: KwsResult,
  asrResult: AsrResult
) => void;

認識イベントと結果を受信します。

パラメーター型説明
eventConstants.NuiEventコールバックイベント。
resultCodenumberエラーコード。EVENT_ASR_ERROR の場合に有効です。
arg2numberReserved.
kwsResultKwsResultウェイクワードの結果。リアルタイム音声認識では無視してください。
asrResultAsrResult認識結果。allResponse はサーバーの完全な JSON 応答です。タスク ID は header.task_id、発話テキストは payload.output.sentence.text から取得できます。

Events:

イベント説明
EVENT_TRANSCRIBER_STARTEDタスクが開始しました。asrResult.allResponse 内の header.task_id にタスク ID が含まれます。問題調査に備えて記録してください。
EVENT_VAD_STARTタスク開始後に発生します。発話開始の検出を示すイベントではありません。
EVENT_VAD_END発話の終了が検出されました。
EVENT_SENTENCE_START文の開始が検出されました。
EVENT_ASR_PARTIAL_RESULT中間認識結果が返されました。
EVENT_SENTENCE_END文の終了が検出され、文全体の認識結果が返されました。
EVENT_ASR_WARN認識中に致命的でない警告が発生しました。例:再接続が有効な場合のネットワーク切断。
EVENT_ASR_ERROR認識中にエラーが発生しました。resultCode にエラーコードが含まれます。
EVENT_MIC_ERROR2 秒間連続で音声データを受信していません。録音コード、権限、他のアプリによる録音デバイスの使用状況を確認してください。
EVENT_TRANSCRIBER_COMPLETE認識が終了しました。
EVENT_AEC_DATAonNuiAssistEventCallback を通じて返される AEC 処理済み音声データ。

onNuiAudioStateChanged

onNuiAudioStateChanged: (state: Constants.AudioState) => void;

SDK はこのコールバックでアプリに録音の開始・停止タイミングを通知します。

State説明
STATE_OPEN対話が開始しました。録音デバイスを開くことができます。
STATE_PAUSE対話が停止しました。録音を停止できます。
STATE_CLOSESDK インスタンスが解放されました。録音デバイスを完全に閉じることができます。

HarmonyOS の AudioCapturer は非同期で作成されます。初期化中に録音インスタンスを作成してください。STATE_CLOSE では録音を停止し、インスタンスは再利用のため保持します。統一された release 処理で解放してください。これにより、次の STATE_OPEN で直ちに start が呼ばれた際、再作成中のレコーダーがその呼び出しを受け付けない問題を避けられます。

onNuiNeedAudioData

onNuiNeedAudioData: (buffer: ArrayBuffer) => number;

SDK が音声を取得する間、継続的に呼ばれます。buffer.byteLength バイト(通常は 20 ms のモノラル 16 ビット PCM)を格納し、書き込んだバイト数を返します。0 以下はエラーまたはデータなしを示します。

onNuiAudioRMSChanged

onNuiAudioRMSChanged: (val: number) => number;

UI 更新用に現在の音量を報告します。audio_config.mic.volume_mode が "dbfs" の場合、val は -160~0 です。コールバック実装では 0 を返せます。

onNuiAssistEventCallback

onNuiAssistEventCallback?: (
  event: Constants.NuiEvent,
  info: string,
  infoLen: number,
  data: ArrayBuffer
) => void;

SDK の内部補助イベントとデータを受信する省略可能なコールバック。不要なら省略できます。

パラメーター型説明
eventConstants.NuiEvent補助イベント。
infostring追加情報。通常は JSON 文字列です。
infoLennumber追加情報の長さ。
dataArrayBufferAEC 処理済み音声などの補助データ。

onNuiLogTrackCallback

onNuiLogTrackCallback: (level: Constants.LogLevel, log: string) => void;

SDK の追跡ログを受信します。返されるレベルは log_track_level と initialize の level の両方で決まります。

結果オブジェクト

AsrResult

Property型説明
finishboolean現在の結果が最終結果かどうか。
resultCodenumber結果のステータスコード。
asrResultstring認識テキスト。EVENT_ASR_ERROR の場合はエラーメッセージが含まれます。
allResponsestringタスク ID と発話テキストを含む、JSON 文字列形式の完全なサーバー応答。

KwsResult

Property型説明
typeConstants.WuwTypeウェイクワードの種類。リアルタイム音声認識では無視してください。
kwsstringウェイクワード。リアルタイム音声認識では無視してください。

定数と列挙型

名前説明
Constants.ModeTypeSDK モード:MODE_DIALOG、MODE_TTS、MODE_STREAM_INPUT_TTS。
Constants.VadModeVAD モード。リアルタイム音声認識では TYPE_P2T を使用し、ユーザーが stopDialog を呼び出して認識を終了します。
Constants.AudioState音声状態:STATE_OPEN、STATE_PAUSE、STATE_CLOSE。
Constants.LogLevelログレベル:LOG_LEVEL_VERBOSE(0)から LOG_LEVEL_NONE(5)まで。
Constants.NuiResultCodeSDK エラーコード。例:SUCCESS(0)、ILLEGAL_PARAM(240002)、NECESSARY_PARAM_LACK(240004)、SDK_NOT_INIT(240011)。
Constants.kServiceTypeSpeechTranscriberリアルタイム音声認識の service_type 値。値は 4 です。
Constants.ModeFullCloudフルクラウドモード。service_mode の値は "1" です。

サンプルコード

以下は SDK の主要な処理の例です。完全な権限処理、録音キュー、応答解析については、SDK パッケージの DashFunAsrSpeechTranscriberPage.ets を参照してください。

import { AsrResult, Constants, INativeNuiCallback, KwsResult, NativeNui } from 'neonui';

const callback: INativeNuiCallback = {
  onNuiEventCallback: (event: Constants.NuiEvent, resultCode: number, arg2: number,
    kwsResult: KwsResult, asrResult: AsrResult): void => {
    if (event == Constants.NuiEvent.EVENT_ASR_PARTIAL_RESULT
      || event == Constants.NuiEvent.EVENT_SENTENCE_END) {
      // Parse payload.output.sentence.text from asrResult.allResponse.
    } else if (event == Constants.NuiEvent.EVENT_TRANSCRIBER_COMPLETE) {
      // Recognition is complete.
    } else if (event == Constants.NuiEvent.EVENT_ASR_ERROR) {
      // resultCode contains the error code.
    }
  },
  onNuiAudioStateChanged: (state: Constants.AudioState): void => {
    // Control AudioCapturer for STATE_OPEN, STATE_PAUSE, and STATE_CLOSE.
  },
  onNuiNeedAudioData: (buffer: ArrayBuffer): number => {
    // Copy recording data to buffer and return the number of bytes written.
    return 0;
  },
  onNuiAudioRMSChanged: (val: number): number => 0,
  onNuiLogTrackCallback: (level: Constants.LogLevel, log: string): void => {}
};

const nuiInstance = new NativeNui(Constants.ModeType.MODE_DIALOG);

const initParams: Record<string, Object> = {};
initParams['url'] = 'wss://dashscope.aliyuncs.com/api-ws/v1/inference';
initParams['device_id'] = 'my_device_id';
initParams['service_mode'] = Constants.ModeFullCloud;
initParams['audio_update_manually'] = 'false';

const initResult = nuiInstance.initialize(
  callback,
  JSON.stringify(initParams),
  Constants.LogLevel.LOG_LEVEL_DEBUG,
  false
);

if (initResult == Constants.NuiResultCode.SUCCESS) {
  const nlsConfig: Record<string, Object> = {
    'model': 'qwen-audio-3.1-asr-flash-message',
    'sr_format': 'opus',
    'sample_rate': 16000
  };
  const params: Record<string, Object> = {
    'service_type': Constants.kServiceTypeSpeechTranscriber,
    'nls_config': nlsConfig
  };
  nuiInstance.setParams(JSON.stringify(params));

  const dialogParams: Record<string, Object> = { 'apikey': 'st-****' };
  nuiInstance.startDialog(Constants.VadMode.TYPE_P2T, JSON.stringify(dialogParams));
}

// Stop recognition when the user finishes recording, and wait for EVENT_TRANSCRIBER_COMPLETE.
function stopRecognition(): void {
  nuiInstance.stopDialog();
}
// Call nuiInstance.release() from the EVENT_TRANSCRIBER_COMPLETE handler.

録音には @kit.AudioKit の AudioCapturer を使用します。音声はモノラル 16 ビット PCM で、選択モデルが対応するサンプリングレートにしてください。

import { audio } from '@kit.AudioKit';

const options: audio.AudioCapturerOptions = {
  streamInfo: {
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_16000,
    channels: audio.AudioChannel.CHANNEL_1,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
  },
  capturerInfo: {
    source: audio.SourceType.SOURCE_TYPE_MIC,
    capturerFlags: 0
  }
};

const capturer = await audio.createAudioCapturer(options);
capturer.on('readData', (buffer: ArrayBuffer): void => {
  // Pull mode: enqueue data for onNuiNeedAudioData.
  // Push mode: call nuiInstance.updateAudio(buffer, firstPack).
});
await capturer.start();