QwenCloudBRASIL
Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗

Qwen-Audio-3.0-ASR-Flash-Streaming/Fun-ASR-Realtime SDK HarmonyOS

Aprenda sobre a integração do HarmonyOS SDK, parâmetros de solicitação, APIs, retornos de chamada e código de amostra para reconhecimento de fala em tempo real.

Guia do usuário: Para descrições de modelos e orientações de seleção, consulte Fala para texto.

Início rápido

  1. Obtenha uma chave API. Não codifique uma chave de API de longa duração em um aplicativo cliente. Recomendamos que seu servidor de aplicativos obtenha uma chave de API temporária e envie para o cliente.
  2. Baixe o pacote SDK mais recente. Extraia o pacote, copie entry/libs/neonui.har para o entry/libs diretório do seu aplicativo e adicione a dependência ao entry/oh-package.json5:
{
  "dependencies": {
    "neonui": "file:libs/neonui.har"
  }
}

Para uma integração HarmonyOS C++, use as bibliotecas compartilhadas em native/libs e os arquivos de cabeçalho em native/include.

  1. Declare permissões de rede e microfone no aplicativo module.json5 arquivo e solicite permissão de microfone em tempo de execução. reason_internet e reason_microphone são exemplos de nomes de recursos. Defina as descrições correspondentes nos recursos do seu aplicativo.
"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" }
  }
]
  1. Abra o projeto de amostra do pacote SDK no DevEco Studio. A página de exemplo é entry/src/main/ets/pages/dashscope/DashFunAsrSpeechTranscriberPage.ets. Configure uma chave de API e execute o projeto.

Sequência de chamada

  1. Crie um NativeNui(Constants.ModeType.MODE_DIALOG) instância.
  2. Chame inicializar para inicializar o SDK e configurar parâmetros de conexão e controle.
  3. Chame setParams para configurar o modelo e os parâmetros de reconhecimento.
  4. Chame startDialog para iniciar o reconhecimento.
  5. Em onNuiAudioStateChanged, inicie, pause ou feche o dispositivo de gravação com base no estado do áudio.
  6. Forneça continuamente dados de gravação em onNuiNeedAudioData. Se o envio de áudio ativo estiver ativado, chame updateAudio em vez disso.
  7. Recupere resultados de reconhecimento e estados de tarefas em onNuiEventCallback.
  8. Chame stopDialog e espere EVENT_TRANSCRIBER_COMPLETE.
  9. Quando o reconhecimento não for mais necessário, ligue para release para liberar recursos.

Parâmetros de solicitação

Parâmetros de conexão e controle

Passe uma string JSON no parameters argumento de inicializar.

{
  "url": "wss://maas.qwencloudapi.com/api-ws/v1/inference",
  "device_id": "my_device_id",
  "service_mode": "1",
  "audio_update_manually": "false"
}
Parâmetro Tipo Obrigatório Descrição
url string Sim Ponto final do serviço: wss://maas.qwencloudapi.com/api-ws/v1/inference.
service_mode string Sim Modo de execução. Defina isso como "1", que é Constants.ModeFullCloud, para reconhecimento de fala em tempo real.
device_id string Sim Um identificador exclusivo do usuário final, como um ID de usuário no aplicativo ou um ID de dispositivo gerado pelo cliente. Ele é usado principalmente para rastreamento de log e solução de problemas.
apikey string Não Chave de API. Você pode passá-lo durante a inicialização. Recomendamos que você passe uma chave de API temporária no dialog_params argumento de startDialog.
audio_update_manually string Não Se deve ativar o modo push de áudio ativo. Padrão: "false". Se definido para "true", chame updateAudio. Se definido para "false", o SDK extrai áudio por meio de onNuiNeedAudioData. Quando este campo é "true" e o SDK oferece suporte ao processamento de áudio no dispositivo, como AEC ou VAD, os recursos suportados são habilitados por padrão.
workspace string Não Diretório que armazena arquivos de recursos no dispositivo. Este parâmetro é necessário quando audio_update_manually é "true" e o processamento de áudio no dispositivo, como AEC ou VAD, está ativado.
debug_path string Não Diretório de log. Este parâmetro é necessário quando save_log é true. O SDK mantém no máximo dois arquivos de log.
save_wav string Não Se deseja salvar o áudio de depuração. Padrão: "false". Os arquivos de áudio são salvos em debug_path. Se definido para "true", também definido debug_path e passar true para save_log para initialize.
save_wav_by_id string Não Se deve nomear os arquivos de áudio salvos por task_id para facilitar a recuperação quando save_wav está habilitado. Padrão: "false".
max_log_file_size number Não Tamanho máximo de um único arquivo de log em bytes. Padrão: 104857600 (100 MiB). Este parâmetro entra em vigor somente quando save_log é true.
log_track_level number Não Nível de filtro para logs retornados por meio onNuiLogTrackCallback. Padrão: 2. Valores válidos: 0 (VERBOSE), 1 (DEBUG), 2 (INFO), 3 (WARNING), 4 (ERROR) e 5 (NONE). Um log é retornado somente se seu nível for maior ou igual a ambos log_track_level e o level argumento de initialize. Por exemplo, se os valores forem 2 e 3, apenas WARNING e logs de nível superior serão retornados.
enable_reconnection string Não Se deve ser habilitada a reconexão e a retomada da transmissão após uma interrupção da rede. Padrão: "false".
aec_params object Não Configurações AEC no dispositivo. Usado somente quando audio_update_manually é "true".
aec_params.enable_aec boolean Não Se deve ativar o AEC no dispositivo. Ele é habilitado por padrão quando a compilação do SDK oferece suporte.
aec_params.save_audio boolean Não Se deseja salvar o áudio processado pelo AEC. Ele é ativado por padrão quando save_wav está habilitado e debug_path está definido.
aec_params.enable_aec_data_callback boolean Não Se os dados processados pelo AEC devem ser retornados por meio do EVENT_AEC_DATA evento de onNuiAssistEventCallback. Padrão: false.
vad_params object Não Configurações de VAD no dispositivo. Usado somente quando audio_update_manually é "true".
vad_params.enable_vad boolean Não Se deve ativar o VAD no dispositivo. Ele é habilitado por padrão quando a compilação do SDK oferece suporte.
vad_params.save_audio boolean Não Se deseja salvar o áudio processado pelo VAD. Ele é ativado por padrão quando save_wav está habilitado e debug_path está definido.
audio_config object Não Configurações de captura de áudio para o modo pull do SDK. Usado somente quando audio_update_manually é "false".
audio_config.mic.enable_volume_calculation boolean Não Seja para calcular e relatar o volume. Padrão: true. Desative esta opção se os retornos de chamada de volume não forem necessários.
audio_config.mic.volume_mode string Não Modo de cálculo de volume. Defina isso como "dbfs" para calcular dBFS padrão como 20*log10(rms/32768), onde o fundo da escala é 0 dB.

Parâmetros de reconhecimento

Passe uma string JSON no params argumento de setParams.

{
  "service_type": 4,
  "nls_config": {
    "model": "qwen-audio-3.0-asr-flash-streaming",
    "sr_format": "opus",
    "sample_rate": 16000
  }
}
Parâmetro Tipo Obrigatório Descrição
service_type number Sim Tipo de serviço de fala. Defina isso como 4, que é Constants.kServiceTypeSpeechTranscriber.
nls_config object Sim Objeto de configuração de reconhecimento.
nls_config.model string Sim Nome do modelo. Qwen-Audio-3.0-ASR-Flash-Streaming e Fun-ASR-Realtime famílias modelo são suportadas. Consulte Modelos suportados.
nls_config.sr_format string Sim Formato de áudio: pcm ou opus. Quando definido para opus, seu aplicativo ainda fornecerá dados PCM e o SDK os codificará como Opus.
nls_config.sample_rate number Sim Taxa de amostragem em Hz. Os modelos de 8 kHz exigem 8000; outros modelos aceitam qualquer taxa de amostragem. Uma taxa de amostragem de 8.000 Hz não é suportada quando o AEC ou VAD no dispositivo está ativado.
nls_config.semantic_punctuation_enabled boolean Não Se deve ativar a segmentação semântica de frases. Padrão: false. true habilita a segmentação semântica e desabilita a segmentação VAD, o que é adequado para atender cenários de transcrição que priorizam a precisão da segmentação. false habilita a segmentação VAD e desabilita a segmentação semântica, o que é adequado para cenários interativos que priorizam baixa latência.
nls_config.max_sentence_silence number Não Limite de silêncio do VAD em milissegundos. O sistema determina que uma expressão terminou quando o silêncio após a fala excede este limite. Padrão: 1300. Intervalo válido: [200, 6000]. Quando a segmentação semântica está habilitada, este parâmetro não é usado para determinar sentence_end, mas um valor excessivamente pequeno ainda pode afetar o reconhecimento.
nls_config.multi_threshold_mode_enabled boolean Não Se deve ativar o modo multi-limite. Padrão: false. Este modo ajuda a evitar segmentos VAD excessivamente longos. Só entra em vigor quando semantic_punctuation_enabled é false.
nls_config.heartbeat boolean Não Se deve ativar pacotes de pulsação. Padrão: false. Quando ativado, o envio contínuo de áudio silencioso pode manter a conexão ativa. Caso contrário, a conexão expirará após um período de tempo. O áudio silencioso não contém nenhum sinal audível no arquivo ou fluxo de áudio.
nls_config.vocabulary_id string Não ID de uma lista de hotwords pré-compilada. Crie a lista com antecedência. Use este campo quando o vocabulário for conhecido e relativamente estável e a mesma lista precisar ser reutilizada nas solicitações. Consulte Hotwords pré-compiladas.
nls_config.instant_vocabulary object Não Hotwords em nível de solicitação. As chaves são strings de hotword e os valores são pesos inteiros. Nenhuma lista deve ser criada antecipadamente, tornando este campo adequado para otimização temporária em nível de sessão. Os pesos válidos são [1, 5] ou 50. Para [1, 5], um valor maior aumenta a probabilidade de o modelo gerar a palavra. São permitidas no máximo 50 super hotwords com peso 50. Quando hotwords pré-compiladas e em nível de solicitação são configuradas, os conjuntos são mesclados. Se o conjunto mesclado exceder 2.000 entradas, 2.000 serão selecionadas aleatoriamente. Somente qwen-audio-3.0-asr-flash-streaming oferece suporte a hotwords em nível de solicitação. Consulte hotwords em nível de solicitação.
nls_config.language_hints string[] Não Idiomas no áudio. Sem padrão. Se este campo for omitido, o modelo detecta o idioma. Qwen-Audio-3.x-ASR-Flash-Streaming usa no máximo os quatro primeiros valores. Fun-ASR-Realtime usa apenas o primeiro valor. Para códigos de idioma suportados, consulte o guia de reconhecimento de fala em tempo real.
nls_config.speech_noise_threshold number Não Limiar de fala/ruído VAD. Intervalo válido: [-1.0, 1.0]. Valores mais próximos de -1 classificam mais ruído como fala e podem transcrever mais ruído. Valores mais próximos de 1 classificam mais fala como ruído e podem filtrar parte da fala. Esta configuração avançada pode afetar significativamente o reconhecimento. Teste-o completamente e ajuste-o em pequenos incrementos de 0,1.
nls_config.special_word_filter object Não Configurações de filtragem de palavras sensíveis. Consulte Filtragem de palavras sensíveis.
nls_config.enable_connection_fast_check boolean Não Seja para ativar a detecção rápida de interrupção da rede. Padrão: false.

APIs

NativoNui

Importe o SDK:

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

Crie uma instância

constructor(mode_type: Constants.ModeType, flag?: string)
Parâmetro Tipo Descrição
mode_type Constants.ModeType Modo SDK: MODE_DIALOG para diálogo ou reconhecimento, MODE_TTS para síntese de fala, ou MODE_STREAM_INPUT_TTS para conversão de texto em fala com entrada de streaming. Defina isso como MODE_DIALOG para reconhecimento de fala em tempo real.
flag string Identificador de instância opcional usado para distinguir logs.

inicializar

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

Inicializa o SDK. Este método pode bloquear. Não chame isso no thread da UI.

Parâmetro Tipo Descrição
callback INativeNuiCallback Retorno de chamada de eventos e dados.
parameters string String JSON de parâmetros de conexão e controle.
level number Nível de registro do SDK: LOG_LEVEL_VERBOSE (0), LOG_LEVEL_DEBUG (1), LOG_LEVEL_INFO (2), LOG_LEVEL_WARNING (3), LOG_LEVEL_ERROR (4), ou LOG_LEVEL_NONE (5).
save_log boolean Se deseja salvar logs locais. Padrão: false. Se definido para true, definir debug_path em parameters. Você também pode definir max_log_file_size.

O método retorna um código de erro.

####setParams

setParams(params: string): number

Define parâmetros de reconhecimento antes startDialog. params é uma string JSON que contém os parâmetros de reconhecimento. O método retorna um código de erro.

startDialog

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

Inicia o reconhecimento.

Parâmetro Tipo Descrição
vad_mode Constants.VadMode Modo VAD. Defina isso como Constants.VadMode.TYPE_P2T para reconhecimento de fala em tempo real.
dialog_params string Cadeia JSON. Use-o para atualizar uma chave de API temporária expirada ou passar o contexto de entrada em input_context.

Exemplo:

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

O método retorna um código de erro.

stopDialog

stopDialog(): number

Notifica o servidor para finalizar o reconhecimento e retornar o resultado final. A tarefa termina quando EVENT_TRANSCRIBER_COMPLETE é recebido. O método retorna um código de erro.

cancelarDialog

cancelDialog(): number

Encerra imediatamente o reconhecimento sem esperar pelo resultado final do servidor. O método retorna um código de erro.

diálogoAção

dialogAction(action_params: string): number

Envia uma ação de tempo de execução para atualizar o contexto de reconhecimento ou notificar o AEC sobre alterações no estado de reprodução.

Parâmetro Tipo Descrição
action_params string String JSON que contém a ação.
action_params.type string Defina isso como "action".
action_params.command string Comando de ação: "context" atualiza o contexto de entrada, "play_start" notifica o AEC de que a reprodução do áudio de referência foi iniciada e "play_over" notifica o AEC de que a reprodução terminou.
action_params.context object[] Contexto de entrada a ser usado quando command é "context".

Exemplo para atualização do contexto:

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

O método retorna um código de erro.

atualizaçãoÁudio

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

Quando audio_update_manually é "true", envia ativamente os dados de gravação por meio deste método em vez de preencher onNuiNeedAudioData.

Parâmetro Tipo Descrição
data ArrayBuffer Dados de áudio para reconhecer.
first_pack boolean Se este é o primeiro pacote de áudio. Defina isso como true para o primeiro pacote e false para pacotes subsequentes.

O método retorna um código de erro.

pushReferenceData

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

Quando audio_update_manually é "true" e o AEC no dispositivo está habilitado, envia o áudio reproduzido pelo player como o sinal de referência AEC.

Parâmetro Tipo Descrição
data ArrayBuffer Dados de áudio de referência.
first_pack boolean Se este é o primeiro pacote de áudio. Defina isso como true para o primeiro pacote e false para pacotes subsequentes.

O método retorna um código de erro.

lançamento

release(): number

Libera todos os recursos internos do SDK. A instância não pode ser usada após esta chamada. Para usá-lo novamente, ligue initialize primeiro. O método retorna um código de erro.

Obter versão

GetVersion(): string

Retorna a versão atual do SDK.

atualizarApikey

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

Atualiza uma chave de API e retorna um token de autenticação temporário. Este método executa uma chamada de rede síncrona. Não chame isso no thread da UI.

Parâmetro Tipo Descrição
apikey string Chave de API existente.
url string Ponto de extremidade de autenticação opcional. Padrão: uma string vazia, que usa o endpoint padrão.

INativeNuiCallback

onNuiEventCallback

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

Recebe eventos e resultados de reconhecimento.

Parâmetro Tipo Descrição
event Constants.NuiEvent Evento de retorno de chamada.
resultCode number Código de erro. Este campo é válido para EVENT_ASR_ERROR.
arg2 number Reservado.
kwsResult KwsResult Resultado da palavra de ativação. Ignore este campo para reconhecimento de fala em tempo real.
asrResult AsrResult Resultado de reconhecimento. allResponse contém a resposta JSON completa do servidor. Recuperar o ID da tarefa de header.task_id e texto de enunciado de payload.output.sentence.text.

Eventos:

Evento Descrição
EVENT_TRANSCRIBER_STARTED A tarefa foi iniciada. header.task_id em asrResult.allResponse contém o ID da tarefa. Registre esse ID para solução de problemas.
EVENT_VAD_START Acionado após o início da tarefa. Este evento não indica que o início da fala foi detectado.
EVENT_VAD_END O final da fala foi detectado.
EVENT_SENTENCE_START O início de uma expressão foi detectado.
EVENT_ASR_PARTIAL_RESULT Um resultado de reconhecimento intermediário está disponível.
EVENT_SENTENCE_END O final de uma expressão foi detectado e o resultado completo da expressão está disponível.
EVENT_ASR_WARN Ocorreu um aviso não fatal durante o reconhecimento, como uma interrupção de rede quando a reconexão está habilitada.
EVENT_ASR_ERROR Ocorreu um erro durante o reconhecimento. resultCode contém o código de erro.
EVENT_MIC_ERROR Nenhum dado de áudio foi recebido por dois segundos consecutivos. Verifique o código de gravação, as permissões ou se outro aplicativo está usando o gravador.
EVENT_TRANSCRIBER_COMPLETE O reconhecimento terminou.
EVENT_AEC_DATA Dados de áudio processados por AEC retornados através onNuiAssistEventCallback.

onNuiAudioStateChanged

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

O SDK usa esse retorno de chamada para notificar o aplicativo quando iniciar ou interromper a gravação.

Estado Descrição
STATE_OPEN A interação começou. O dispositivo de gravação pode ser aberto.
STATE_PAUSE A interação foi interrompida. A gravação pode ser interrompida.
STATE_CLOSE A instância do SDK foi lançada. O dispositivo de gravação pode ser fechado completamente.

No HarmonyOS, AudioCapturer é criado de forma assíncrona. Crie a instância do gravador durante a inicialização. Quando STATE_CLOSE for recebido, pare a gravação, mas guarde a instância para reutilização. Libere-o no unificado release fluxo. Isto evita que um gravador recriado ignore uma resposta imediata. start ligue quando for o próximo STATE_OPEN evento chega.

onNuiNeedAudioData

onNuiNeedAudioData: (buffer: ArrayBuffer) => number;

Chamado continuamente quando o SDK extrai áudio. Preencher buffer.byteLength bytes, normalmente 20 ms de PCM mono de 16 bits, e retorna o número de bytes gravados. Um valor menor ou igual a 0 indica um erro ou nenhum dado disponível.

onNuiAudioRMSChanged

onNuiAudioRMSChanged: (val: number) => number;

Informa o volume de áudio atual para atualizações da IU. Quando audio_config.mic.volume_mode é "dbfs", val varia de -160 para 0. A implementação de retorno de chamada pode retornar 0.

onNuiAssistEventCallback

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

Retorno de chamada opcional para eventos e dados auxiliares internos do SDK. Omita esse retorno de chamada se as informações não forem necessárias.

Parâmetro Tipo Descrição
event Constants.NuiEvent Evento auxiliar.
info string Informações adicionais, geralmente uma string JSON.
infoLen number Comprimento das informações adicionais.
data ArrayBuffer Dados auxiliares, como áudio processado por AEC.

onNuiLogTrackCallback

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

Recebe logs de rastreamento do SDK. Os níveis retornados são determinados por ambos log_track_level e o level argumento de initialize.

Objetos de resultado

####AsrResult

Imóvel Tipo Descrição
finish boolean Se o resultado atual é final.
resultCode number Código de status do resultado.
asrResult string Texto de reconhecimento. Para EVENT_ASR_ERROR, este campo contém a mensagem de erro.
allResponse string Resposta completa do servidor como uma string JSON, incluindo o ID da tarefa e o texto da expressão.

####KwsResult

Imóvel Tipo Descrição
type Constants.WuwType Tipo de palavra de ativação. Ignore este campo para reconhecimento de fala em tempo real.
kws string Palavra de despertar. Ignore este campo para reconhecimento de fala em tempo real.

Constantes e enumerações

Nome Descrição
Constants.ModeType Modos SDK: MODE_DIALOG, MODE_TTSe MODE_STREAM_INPUT_TTS.
Constants.VadMode Modo VAD. Usos de reconhecimento de fala em tempo real TYPE_P2T, onde o usuário chama stopDialog para acabar com o reconhecimento.
Constants.AudioState Estados de áudio: STATE_OPEN, STATE_PAUSEe STATE_CLOSE.
Constants.LogLevel Níveis de registro de LOG_LEVEL_VERBOSE (0) para LOG_LEVEL_NONE (5).
Constants.NuiResultCode Códigos de erro do SDK, como SUCCESS (0), ILLEGAL_PARAM (240002), NECESSARY_PARAM_LACK (240004) e SDK_NOT_INIT (240011).
Constants.kServiceTypeSpeechTranscriber service_type valor para reconhecimento de fala em tempo real. O valor é 4.
Constants.ModeFullCloud Modo de nuvem completa. O service_mode o valor é "1".

Código de exemplo

O código a seguir mostra o fluxo principal do SDK. Para tratamento completo de permissão, fila de gravação e análise de resposta, consulte DashFunAsrSpeechTranscriberPage.ets no pacote SDK.

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://maas.qwencloudapi.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.0-asr-flash-streaming',
    '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.

Usar AudioCapturer de @kit.AudioKit para gravação. O áudio deve ser PCM mono de 16 bits com uma taxa de amostragem suportada pelo modelo selecionado.

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();