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
- 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.
- Baixe o pacote SDK mais recente. Extraia o pacote, copie
entry/libs/neonui.harpara oentry/libsdiretório do seu aplicativo e adicione a dependência aoentry/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.
- Declare permissões de rede e microfone no aplicativo
module.json5arquivo e solicite permissão de microfone em tempo de execução.reason_internetereason_microphonesã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" }
}
]
- 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
- Crie um
NativeNui(Constants.ModeType.MODE_DIALOG)instância. - Chame inicializar para inicializar o SDK e configurar parâmetros de conexão e controle.
- Chame setParams para configurar o modelo e os parâmetros de reconhecimento.
- Chame startDialog para iniciar o reconhecimento.
- Em onNuiAudioStateChanged, inicie, pause ou feche o dispositivo de gravação com base no estado do áudio.
- Forneça continuamente dados de gravação em onNuiNeedAudioData. Se o envio de áudio ativo estiver ativado, chame updateAudio em vez disso.
- Recupere resultados de reconhecimento e estados de tarefas em onNuiEventCallback.
- Chame stopDialog e espere
EVENT_TRANSCRIBER_COMPLETE. - 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();