Qwen-Audio-3.0-ASR-Flash-Streaming/Fun-ASR-Realtime iOS SDK
Este guia mostra como usar o Qwen-Audio-3.0-ASR-Flash-Streaming/Fun-ASR-Realtime SDK do iOS com reconhecimento de fala em tempo real para transcrever fala em texto.
Guia do usuário: Para descrições de modelos e orientações de seleção, consulte Fala para texto.
Início rápido
-
Obter uma chave de API: Obter uma chave de API
-
Baixe o SDK e execute o código de exemplo:
- Baixe o pacote SDK mais recente.
- Extraia o pacote ZIP e adicione o nuisdk.xcframework incluído ao seu projeto.
- Em Fases de construção → Vincular binário a bibliotecas, adicione nuisdk.xcframework.
- Em Geral → Estruturas, Bibliotecas e Conteúdo Incorporado, defina nuisdk.xcframework como Incorporar e Assinar.
- Abra o projeto de amostra no Xcode. O código de exemplo está em
DashFunAsrSpeechTranscriberViewController.m. Substitua a chave de API pela sua própria para experimentar o recurso.
Sequência de chamada
- Inicialize o SDK.
- Defina parâmetros para seu caso de uso: use o nui_initialize API para definir Parâmetros de conexão e controle e use o nui_set_params API para definir parâmetros de qualidade de reconhecimento.
- Chame nui_dialog_start para iniciar o processo de reconhecimento.
- No onNuiAudioStateChanged retorno de chamada, abra o dispositivo de gravação com base no estado do áudio.
- No onNuiNeedAudioData retorno de chamada, fornecimento contínuo de dados de gravação ou chamada nui_update_audio_data para enviar ativamente dados de gravação.
- No onNuiEventCallback retorno de chamada, ouvir eventos e recuperar resultados de reconhecimento de fala.
- Ligue para nui_dialog_cancel para interromper o reconhecimento e confirmar que o reconhecimento foi concluído ouvindo o evento EVENT_TRANSCRIBER_COMPLETE.
- Quando você não precisar mais do recurso de reconhecimento, ligue para nui_release para liberar os recursos do SDK.
Parâmetros de solicitação
Parâmetros de conexão e controle
Configure esses parâmetros passando uma string JSON no arquivo parameters argumento do nui_initialize API.
- Parâmetros de exemplo: A sequência JSON a seguir é um exemplo e não lista todos os parâmetros. Adicione os parâmetros necessários ao escrever seu código:
{
"url": "wss://maas.qwencloudapi.com/api-ws/v1/inference",
"apikey": "st-****",
"device_id": "my_device_id",
"service_mode": "1"
}
- Descrições dos parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
url |
String |
Sim | Endereço do serviço: wss://maas.qwencloudapi.com/api-ws/v1/inference. |
apikey |
String |
Sim | Chave de API. |
service_mode |
String |
Sim | Modo de execução. Corrigido para "1" para reconhecimento de fala em tempo real. |
device_id |
String |
Sim | Uma string exclusiva que identifica o usuário final. Você pode configurá-lo para um ID de usuário no aplicativo ou um identificador de dispositivo gerado no cliente. Esse ID é usado principalmente para rastreamento de log e solução de problemas. |
audio_update_manually |
String |
Não | Se deve ativar o envio ativo de dados de áudio. Padrão: "false". Se definido para "true" e a versão do SDK oferece suporte a recursos de processamento de áudio no dispositivo, como AEC ou VAD, esses recursos são habilitados por padrão. |
workspace |
String |
Não | O caminho onde os arquivos de recursos no dispositivo são armazenados. Este parâmetro é necessário quando audio_update_manually está definido para "true" e um recurso de processamento de áudio no dispositivo, como AEC ou VAD, está habilitado. |
debug_path |
String |
Não | Caminho de armazenamento para o arquivo de log. Este parâmetro entra em vigor somente quando save_log está definido para YES no nui_initialize API. Nesse caso, você deve definir o caminho do arquivo de log, caso contrário ocorrerá um erro. No máximo dois arquivos de log são mantidos localmente. |
save_wav |
String |
Não | Se deseja salvar um arquivo de áudio para depuração. O arquivo de áudio é salvo em debug_path. Padrão: "falso". Valores válidos: "true": salva o arquivo. "false": não salva o arquivo. Este parâmetro entra em vigor somente quando save_log é definido como verdadeiro no nui_initialize API. Além disso, debug_path também deve ser definido. |
max_log_file_size |
int |
Não | Tamanho máximo do arquivo de log, em bytes. Este parâmetro entra em vigor somente quando save_log está definido para YES no nui_initialize API. Padrão: 104857600 (100 * 1024 * 1024 bytes, ou seja, 100 MiB). |
log_track_level |
int |
Não | Nível de filtro para o conteúdo do log enviado por meio do retorno de chamada do log (onNuiLogTrackCallback). Padrão: 2. Valores válidos: 0: LOG_LEVEL_VERBOSE, 1: LOG_LEVEL_DEBUG, 2: LOG_LEVEL_INFO, 3: LOG_LEVEL_WARNING, 4: LOG_LEVEL_ERROR, 5: LOG_LEVEL_NONE (desabilita este recurso). Nota: log_track_level e level (definido através do nui_initialize API) juntos determinam quais logs serão enviados para o retorno de chamada. Um log é enviado para o retorno de chamada somente quando seu valor de nível é maior ou igual a ambos log_track_level e level. Por exemplo, se log_track_level está definido como 2 (INFO) e level estiver definido como 3 (WARNING), somente os logs no nível WARNING ou superior (valor >= 3) serão enviados para o retorno de chamada. |
Parâmetros de qualidade de reconhecimento
Configure esses parâmetros passando uma string JSON no arquivo params argumento do nui_set_params API.
- Parâmetros de exemplo: A sequência JSON a seguir é um exemplo e não lista todos os parâmetros. Adicione os parâmetros necessários ao escrever seu código:
{
"service_type": 4,
"nls_config": {
"model": "qwen-audio-3.0-asr-flash-streaming",
"sr_format": "pcm",
"sample_rate": "16000"
}
}
- Descrições dos parâmetros
| Parâmetro de nível superior | Tipo | Obrigatório | Descrição |
|---|---|---|---|
service_type |
int |
Sim | Tipo de serviço de fala. Corrigido para 4 para reconhecimento de fala em tempo real. |
nls_config |
object |
Sim | O objeto de configuração de reconhecimento principal. Ele contém parâmetros importantes, como seleção de modelo e controles de qualidade de reconhecimento. |
nls_config.model |
string |
Sim | O nome do modelo. O Qwen-Audio-3.0-ASR-Flash-Streaming e Fun-ASR-Realtime séries de modelos são suportadas. Para obter detalhes, consulte Modelos suportados. |
nls_config.sr_format |
string |
Sim | O formato de áudio. Valores válidos: pcm, opus. Nota: Se você fornecer dados de áudio PCM e definir este parâmetro como opus, o SDK codifica os dados no Opus internamente. |
nls_config.sample_rate |
int |
Sim | A taxa de amostragem, em Hz. Valores válidos: modelos de 8 kHz suportam apenas 8.000 Hz; outros modelos suportam qualquer taxa de amostragem. Observação: 8.000 Hz não são suportados quando os recursos de processamento de áudio no dispositivo, como AEC ou VAD, estão ativados. |
nls_config.semantic_punctuation_enabled |
boolean |
Não | Seja para ativar a segmentação semântica. Valor padrão: falso. true: ativa a segmentação semântica e desativa a segmentação VAD. false (padrão): habilita a segmentação VAD e desabilita a segmentação semântica. A segmentação semântica é mais precisa e mais adequada para atender cenários de transcrição. A segmentação VAD (Voice Activity Detection) tem menor latência e é mais adequada para cenários interativos. |
nls_config.max_sentence_silence |
int |
Não | O limite de silêncio do VAD para segmentação, em ms. Quando o silêncio após um segmento de fala ultrapassa esse limite, o sistema determina que a frase terminou. Quando semantic_punctuation_enabled estiver definido como verdadeiro, este parâmetro não será usado como critério para retornar sentence_end, mas defini-lo muito baixo pode afetar o desempenho do reconhecimento. Valor padrão: 1300. Valores válidos: [200, 6000]. |
nls_config.multi_threshold_mode_enabled |
boolean |
Não | Importante: entra em vigor somente quando semantic_punctuation_enabled é falso. Se deve ativar o modo multi-limite. Quando ativado, evita que os segmentos VAD se tornem muito longos. Valor padrão: falso. |
nls_config.heartbeat |
boolean |
Não | Se deve ativar pacotes de pulsação. Valor padrão: falso. true: mantém a conexão com o servidor ativa mesmo quando o áudio silencioso é enviado continuamente. false (padrão): Mesmo quando o áudio silencioso é enviado continuamente, a conexão atinge o tempo limite e fecha após um período de tempo. Áudio silencioso refere-se ao conteúdo de um arquivo de áudio ou fluxo de dados que não contém sinal sonoro. Você pode gerar áudio silencioso de várias maneiras, como usando software de edição de áudio como Audacity ou Adobe Audition, ou usando uma ferramenta de linha de comando como FFmpeg. |
nls_config.vocabulary_id |
string |
Não | O ID de uma lista de hot word pré-compilada. Gere esse ID antecipadamente chamando a API de criação de lista de palavras quentes. Passe o ID durante o reconhecimento para usar as palavras quentes da lista. Adequado para cenários onde o vocabulário é conhecido e relativamente estável, e onde é necessário reutilizar a mesma lista de palavras em solicitações. Para obter detalhes de uso, consulte Hotwords pré-compiladas. |
nls_config.instant_vocabulary |
object |
Não | Palavras quentes instantâneas. Passados como pares de valores-chave, onde a chave é o texto da palavra quente (string) e o valor é o peso da palavra quente (integer). Nenhuma lista de palavras quentes precisa ser criada com antecedência. O peso varia de [1, 5] ou é definido como 50: um valor em [1, 5] aumenta a probabilidade de o modelo gerar a palavra à medida que o valor aumenta; um valor de 50 designa uma palavra superquente, o que melhora muito a recuperação, mas o número de palavras superquentes não pode exceder 50. Adequado para otimização de palavra quente temporária em nível de sessão. Quando hotwords instantâneas e pré-compiladas são configuradas juntas, o sistema mescla os dois conjuntos. Se o conjunto mesclado contiver mais de 2.000 hotwords, o sistema selecionará aleatoriamente 2.000 para usar. Para obter detalhes de uso, consulte Hotwords instantâneas. Importante: apenas qwen-audio-3.0-asr-flash-streaming e qwen-audio-3.1-asr-flash-streaming suporta palavras quentes instantâneas. |
nls_config.language_hints |
array[string] |
Não | O idioma do áudio a ser reconhecido. Não há valor padrão; se não for definido, o modelo detectará o idioma automaticamente. Para o Qwen-Audio-3.0-ASR-Flash-Streaming série de modelos, você pode definir até 4 valores; se você definir mais de 4, apenas os 4 primeiros terão efeito. Para o Fun-ASR-Realtime série de modelos, você pode definir apenas 1 valor; se você definir vários valores, apenas o primeiro terá efeito. |
qwen-audio-3.0-asr-flash-streaming, fun-asr-realtime: zh (chinês), en (Inglês), ja (japonês), ko (coreano), vi (vietnamita), th (tailandês), id (indonésio), ms (malaio), tl (Filipino), hi (hindi), ar (Árabe), fr (francês), de (Alemão), es (Espanhol), pt (português), ru (Russo), it (italiano), nl (holandês), sv (sueco), da (dinamarquês), fi (finlandês), no (norueguês), el (Grego), pl (polonês), cs (Tcheco), hu (húngaro), ro (Romeno), bg (búlgaro), hr (croata), sk (Eslovaco) |
|||
nls_config.speech_noise_threshold |
float |
Não | O limite para distinguir fala de ruído, usado para ajustar a sensibilidade da Detecção de Atividade de Voz (VAD). Valores válidos: [-1,0, 1,0]. Quanto mais próximo o valor estiver de -1: o limite de ruído diminui, então é mais provável que o ruído seja reconhecido como fala, o que pode fazer com que mais ruído seja transcrito. Quanto mais próximo o valor estiver de +1: O limite de ruído aumenta, então é mais provável que a fala seja mal avaliada como ruído, o que pode fazer com que parte da fala seja filtrada. Este é um parâmetro de configuração avançado. Ajustá-lo pode afetar significativamente os resultados do reconhecimento. Recomendações: Teste e verifique minuciosamente os resultados antes de ajustar. Ajuste em pequenos incrementos com base no ambiente de áudio real (recomenda-se um passo de 0,1). |
nls_config.special_word_filter |
object |
Não | Especifica as palavras sensíveis a serem processadas durante o reconhecimento de fala e suporta a configuração de diferentes métodos de processamento para diferentes palavras sensíveis. Para obter detalhes, consulte Filtragem de palavras sensíveis. |
nls_config.enable_connection_fast_check |
BOOL |
Não | Seja para ativar verificações rápidas de rede para que as desconexões possam ser relatadas o mais rápido possível. Padrão: NO. |
Principais APIs
NeoNui
nui_initialize
Inicializa a instância do SDK de reconhecimento de fala. O SDK é um singleton. Não inicialize-o novamente antes de chamar nui_release.
- Assinatura do método
-(NuiResultCode) nui_initialize:(const char *)parameters
logLevel:(NuiSdkLogLevel)level
saveLog:(BOOL)save_log;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
parameters |
char* |
Uma string JSON que contém parâmetros de autenticação, conexão e depuração. Consulte Parâmetros de conexão e controle. |
level |
NuiSdkLogLevel |
Nível de impressão para os próprios logs do SDK. |
save_log |
BOOL | Se os logs devem ser salvos localmente. Se definido para YES, especifique um caminho com debug_path em Parâmetros de conexão e controle e, opcionalmente, defina o tamanho do arquivo com max_log_file_size. |
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
####nui_set_params
Define os Parâmetros de qualidade de reconhecimento no formato JSON. Chame este método antes de nui_dialog_start.
- Assinatura do método
-(NuiResultCode) nui_set_params:(const char *)params;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
params |
char* |
Parâmetros de qualidade de reconhecimento. |
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_dialog_start
Inicia o reconhecimento.
- Assinatura do método
-(NuiResultCode) nui_dialog_start:(NuiVadMode)vad_mode
dialogParam:(const char *)dialog_params;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
vad_mode |
NuiVadMode |
Modo VAD. Corrigido para MODE_P2T. |
dialog_params |
char* |
Se o apikey parâmetro em Parâmetros de conexão e controle é uma chave de API temporária, você pode atualizá-lo aqui quando ele expirar. Você também pode fornecer contexto aqui para melhorar a precisão do reconhecimento por meio do aprimoramento do contexto. O conteúdo está no formato JSON, conforme mostrado no exemplo a seguir. |
{
"apikey": "st-****",
"input_context": [
{
"role": "user",
"content": [
{
"text": "xxxxx",
"type": "input_text"
}
]
}
]
}
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_dialog_cancel
Termina o reconhecimento ou cancela a interação atual imediatamente.
- Assinatura do método
-(NuiResultCode) nui_dialog_cancel:(BOOL)force;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
force |
BOOL |
Seja para terminar à força e descartar o resultado final. YES: Encerre a tarefa imediatamente, sem esperar que o servidor retorne o resultado final do reconhecimento. NO: Finalize a tarefa, mas aguarde o retorno do resultado completo. |
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_dialog_action
Envia uma ação de diálogo durante uma interação para atualizar o contexto de reconhecimento ou outro comportamento de tempo de execução.
- Assinatura do método
-(NuiResultCode) nui_dialog_action:(const char *)action_params;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
action_params |
char* |
Uma string JSON usada para atualizar o contexto de reconhecimento ou outro comportamento de tempo de execução. |
action_params.type |
String |
Corrigido para "action". |
action_params.command |
String |
Comando de tempo de execução. Valores válidos: context: atualiza o aprimoramento de contexto imediatamente para melhorar a precisão do reconhecimento. play_start: Quando o AEC no dispositivo é usado, notifica o reprodutor AEC interno de que a reprodução de áudio foi iniciada. play_over: Quando o AEC no dispositivo é usado, notifica o reprodutor AEC interno de que a reprodução de áudio foi encerrada. |
action_params.context |
String |
Quando command é "context", fornece o aprimoramento de contexto para atualização imediata. O valor é uma string JSON, conforme mostrado no exemplo a seguir. |
{
"context": [
{
"role": "user",
"content": [
{
"text": "xxx",
"type": "input_text"
}
]
}
]
}
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_update_audio_data
Quando audio_update_manually está definido para "true", os dados de gravação não são mais fornecidos através onNuiNeedAudioData. Use este método para pressioná-lo ativamente.
- Assinatura do método
-(NuiResultCode) nui_update_audio_data:(const char *)data
Len:(int)length
FirstPack:(BOOL)first_pack;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
data |
const char * |
Os dados de áudio a serem enviados. |
length |
int |
O comprimento dos dados de áudio, em bytes. |
first_pack |
BOOL |
Você não precisa usar este parâmetro. |
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_push_referência_data
Quando audio_update_manually está definido para "true" e o cancelamento de eco acústico (AEC) no dispositivo estiver ativado, use este método para enviar o áudio reproduzido pelo player como sinal de referência.
- Assinatura do método
-(NuiResultCode) nui_push_reference_data:(const char *)data
Len:(int)length
FirstPack:(BOOL)first_pack;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
data |
const char * |
Os dados de áudio a serem enviados. |
length |
int |
O comprimento dos dados de áudio, em bytes. |
first_pack |
BOOL |
Você não precisa usar este parâmetro. |
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_lançamento
Libera todos os recursos internos do SDK e encerra à força todas as tarefas em execução. Depois de chamar esse método, a instância do SDK fica indisponível. Para usá-lo novamente, você deve chamar nui_initialize para inicializá-lo novamente.
- Assinatura do método
-(NuiResultCode) nui_release;
-
Valor de retorno
Retorna um código de erro. Consulte Referência do código de erro.
nui_get_version
Obtém a versão atual do SDK. Este método retorna um valor somente após nui_initialize é chamado.
- Assinatura do método
-(const char*) nui_get_version;
-
Valor de retorno
A versão atual do SDK.
nui_get_all_response
Obtém as informações completas do retorno de chamada do evento atual.
- Assinatura do método
-(const char*) nui_get_all_response;
-
Valor de retorno
As informações completas do evento como uma string JSON.
NeoNuiSdkDelegate: ouvintes de retorno de chamada
onNuiEventCallback
Escuta eventos e resultados de reconhecimento de fala.
- Assinatura do método
-(void) onNuiEventCallback:(NuiCallbackEvent)nuiEvent
dialog:(long)dialog
kwsResult:(const char *)wuw
asrResult:(const char *)asr_result
ifFinish:(BOOL)finish
retCode:(int)code;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
nuiEvent |
NuiCallbackEvent | Evento de retorno de chamada. |
dialog |
long |
ID da sessão. Você não precisa usar este parâmetro. |
wuw |
char* |
Ativação por voz. Você não precisa usar este parâmetro. |
asr_result |
char* |
Resultado do reconhecimento de fala. |
finish |
BOOL |
Se a atual rodada de reconhecimento terminou. |
code |
int |
Código de erro. Válido quando ocorre o evento EVENT_ASR_ERROR. Consulte Referência do código de erro. |
onNuiAudioStateChanged
Escuta o estado do áudio. O SDK usa esse retorno de chamada para notificá-lo quando iniciar ou interromper a gravação.
- Assinatura do método
-(void) onNuiAudioStateChanged:(NuiAudioState)state;
- Estados NuiAudioState
| Estado | Descrição |
|---|---|
STATE_OPEN |
A interação começou. Você pode abrir o dispositivo de gravação e começar a gravar. |
STATE_PAUSE |
A interação foi interrompida. Você pode parar de gravar. |
STATE_CLOSE |
A instância do SDK foi lançada. Você pode fechar o dispositivo de gravação completamente. |
onNuiNeedAudioData
Fornece dados de áudio para reconhecimento. Após o início do reconhecimento, esse retorno de chamada é acionado continuamente. Forneça os dados de áudio para serem reconhecidos nele.
- Assinatura do método
-(int) onNuiNeedAudioData:(char *)audioData length:(int)len;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
audioData |
char * |
Os dados de áudio a serem fornecidos. |
len |
int |
O tamanho dos dados de áudio fornecidos, em bytes. |
onNuiAssistEventCallback
Recebe dados e informações auxiliares. Recebe eventos auxiliares e dados relacionados do SDK.
- Assinatura do método
-(void) onNuiAssistEventCallback:(NuiCallbackEvent)nuiEvent
info:(char*)info
infoLen:(int)info_len
buffer:(char*)buffer
len:(int)len;
- Descrições dos parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
nuiEvent |
NuiCallbackEvent |
O evento de retorno de chamada. |
info |
char * |
Você não precisa usar este parâmetro. |
info_len |
int |
Você não precisa usar este parâmetro. |
buffer |
char * |
Dados auxiliares, como dados de áudio após processamento AEC. |
len |
int |
O comprimento dos dados auxiliares, em bytes. |
onNuiLogTrackCallback
Escuta registros de rastreamento. Esse retorno de chamada recebe logs internos detalhados do SDK para ajudar você a localizar e depurar problemas.
-(void) onNuiLogTrackCallback:(NuiSdkLogLevel)level
logMessage:(const char *)log;
NuiCallbackEvent: tipos de eventos
| Evento | Descrição |
|---|---|
| EVENTO_TRANSCRIBER_STARTED | A tarefa foi iniciada com sucesso. |
| EVENTO_VAD_START | Acionado logo após o início da tarefa. Isso não significa que o início da fala foi detectado. |
| EVENTO_VAD_END | O final da fala foi detectado. |
| EVENTO_ASR_PARTIAL_RESULT | Um resultado intermediário de reconhecimento de fala. |
| EVENTO_ASR_ERRO | Ocorreu um erro durante o reconhecimento de fala. |
| EVENTO_MIC_ERRO | Acionado porque nenhum dado de áudio foi recebido por 2 segundos consecutivos. |
| EVENTO_SENTÊNCIA_END | O final de uma frase foi detectado. Um resultado de reconhecimento completo para a sentença é retornado. |
| EVENTO_TRANSCRIBER_COMPLETE | Reconhecimento de fala concluído. |
| EVENTO_AEC_DADOS | Dados de áudio após processamento de cancelamento de eco acústico (AEC). |