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

Qwen-Audio-3.x-ASR-Flash-Streaming/Fun-ASR-Realtime SDK Python

Este tópico descreve os parâmetros e interfaces do Python SDK para o Qwen-Audio-3.x-ASR-Flash-Streaming/Fun-ASR-Realtime modelo de 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.

Pré-requisitos

Início rápido

A classe de reconhecimento fornece interfaces para chamadas de streaming bidirecionais e sem streaming. Escolha o método de chamada que atenda às suas necessidades:

Chamada sem streaming

Envie uma única tarefa de reconhecimento de fala em tempo real e obtenha o resultado do reconhecimento de forma síncrona, passando um arquivo local.

Instancie uma classe de reconhecimento, vincular parâmetros de solicitação e ligue call para executar o reconhecimento ou tradução e obter o resultado do reconhecimento (RecognitionResult).

Veja o exemplo completo.

from http import HTTPStatus
import dashscope
from dashscope.audio.asr import Recognition
import os

# If you have not configured the environment variable, replace the following line with your API Key: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

recognition = Recognition(model='qwen-audio-3.1-asr-flash-streaming',
                          format='wav',
                          sample_rate=16000,
                          callback=None)
result = recognition.call('{YOUR_AUDIO_FILE}')
if result.status_code == HTTPStatus.OK:
  print('Recognition result:')
  print(result.get_sentence())
else:
  print('Error: ', result.message)

print(
  '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
  .format(
    recognition.get_last_request_id(),
    recognition.get_first_package_delay(),
    recognition.get_last_package_delay(),
  ))

Chamada de streaming bidirecional

Envie uma única tarefa de reconhecimento de fala em tempo real e transmita os resultados do reconhecimento em tempo real implementando a interface de retorno de chamada.

Comece a transmitir reconhecimento de fala.

Instancie uma [classe de reconhecimento](#recognition-class), vincular [parâmetros de solicitação](#request-parameters) e uma [interface de retorno de chamada (RecognitionCallback)](#callback-interface-recognitioncallback) e ligue para o `start` método para iniciar o streaming de reconhecimento de fala.

Stream the audio

Ligue para o `send_audio_frame` método da [classe de reconhecimento](#recognition-class) em um loop para enviar o fluxo de áudio binário ao servidor em segmentos. O fluxo é lido de um arquivo local ou de um dispositivo, como um microfone.

Enquanto o áudio está sendo enviado, o servidor retorna os resultados do reconhecimento ao cliente em tempo real através do `on_event` método da [interface de retorno de chamada (RecognitionCallback)](#callback-interface-recognitioncallback).

Envie cerca de 100 ms de áudio por quadro e mantenha cada quadro entre 1 KB e 16 KB.

End the task

Ligue para o `stop` método da [classe de reconhecimento](#recognition-class) para encerrar o reconhecimento de fala.

Este método bloqueia o thread atual até que o `on_complete` ou `on_error` retorno de chamada da [interface de retorno de chamada (RecognitionCallback)](#callback-interface-recognitioncallback) é acionado.

Veja o exemplo completo.

Recognize microphone speech

  ```python
  import os
  import signal  # for keyboard events handling (press "Ctrl+C" to terminate recording)
  import sys

  import dashscope
  import pyaudio
  from dashscope.audio.asr import *

  mic = None
  stream = None

  # Set recording parameters
  sample_rate = 16000  # sampling rate (Hz)
  channels = 1  # mono channel
  dtype = 'int16'  # data type
  format_pcm = 'pcm'  # the format of the audio data
  block_size = 3200  # number of frames per buffer

  # Real-time speech recognition callback
  class Callback(RecognitionCallback):
    def on_open(self) -> None:
      global mic
      global stream
      print('RecognitionCallback open.')
      mic = pyaudio.PyAudio()
      stream = mic.open(format=pyaudio.paInt16,
                            channels=1,
                            rate=16000,
                            input=True)

    def on_close(self) -> None:
      global mic
      global stream
      print('RecognitionCallback close.')
      stream.stop_stream()
      stream.close()
      mic.terminate()
      stream = None
      mic = None

    def on_complete(self) -> None:
      print('RecognitionCallback completed.')  # recognition completed

    def on_error(self, message) -> None:
      print('RecognitionCallback task_id: ', message.request_id)
      print('RecognitionCallback error: ', message.message)
      # Stop and close the audio stream if it is running
      if 'stream' in globals() and stream.active:
        stream.stop()
        stream.close()
      # Forcefully exit the program
      sys.exit(1)

    def on_event(self, result: RecognitionResult) -> None:
      sentence = result.get_sentence()
      if 'text' in sentence:
        print('RecognitionCallback text: ', sentence['text'])
        if RecognitionResult.is_sentence_end(sentence):
          print(
            'RecognitionCallback sentence end, request_id:%s, usage:%s'
            % (result.get_request_id(), result.get_usage(sentence)))

  def signal_handler(sig, frame):
    print('Ctrl+C pressed, stop recognition ...')
    # Stop recognition
    recognition.stop()
    print('Recognition stopped.')
    print(
      '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
      .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
      ))
    # Forcefully exit the program
    sys.exit(0)

  # main function
  if __name__ == '__main__':
    # If you have not configured the environment variable, replace the following line with your API Key: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

    # Create the recognition callback
    callback = Callback()

    # Call recognition service by async mode, you can customize the recognition parameters, like model, format,
    # sample_rate
    recognition = Recognition(
      model='qwen-audio-3.0-asr-flash-streaming',
      format=format_pcm,
      # 'pcm', 'wav', 'opus', 'speex', 'aac', 'amr', you can check the supported formats in the document
      sample_rate=sample_rate,
      # support 8000, 16000
      semantic_punctuation_enabled=False,
      callback=callback)

    # Start recognition
    recognition.start()

    signal.signal(signal.SIGINT, signal_handler)
    print("Press 'Ctrl+C' to stop recording and recognition...")
    # Create a keyboard listener until "Ctrl+C" is pressed

    while True:
      if stream:
        data = stream.read(3200, exception_on_overflow=False)
        recognition.send_audio_frame(data)
      else:
        break

    recognition.stop()
  ```

Recognize a local audio file

  ```python
  import os
  import time
  import dashscope
  from dashscope.audio.asr import *

  # If you have not configured the environment variable, replace the following line with your API Key: dashscope.api_key = "sk-xxx"
  dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

  from datetime import datetime

  def get_timestamp():
    now = datetime.now()
    formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
    return formatted_timestamp

  class Callback(RecognitionCallback):
    def on_complete(self) -> None:
      print(get_timestamp() + ' Recognition completed')  # recognition complete

    def on_error(self, message: str) -> None:
      print('Error occurred: ', message)
      print('Error details: ', message)
      exit(0)

    def on_event(self, result: RecognitionResult) -> None:
      sentence = result.get_sentence()
      if 'text' in sentence:
        print(get_timestamp() + ' RecognitionCallback text: ', sentence['text'])
      if RecognitionResult.is_sentence_end(sentence):
        print(get_timestamp() +
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))

  callback = Callback()

  recognition = Recognition(model='qwen-audio-3.1-asr-flash-streaming',
                            format='wav',
                            sample_rate=16000,
                            callback=callback)

  try:
    audio_data: bytes = None
    f = open("{YOUR_AUDIO_FILE}", 'rb')
    if os.path.getsize("{YOUR_AUDIO_FILE}"):
      # Read all the file data into the buffer at once
      file_buffer = f.read()
      f.close()
      print("Start Recognition")
      recognition.start()

      # Send 3200 bytes from the buffer at a time
      buffer_size = len(file_buffer)
      offset = 0
      chunk_size = 3200

      while offset < buffer_size:
        # Calculate the size of the data chunk to send this time
        remaining_bytes = buffer_size - offset
        current_chunk_size = min(chunk_size, remaining_bytes)

        # Extract the current data chunk from the buffer
        audio_data = file_buffer[offset:offset + current_chunk_size]

        # Send the audio data frame
        recognition.send_audio_frame(audio_data)
        # Update the offset
        offset += current_chunk_size

        # Add a delay to simulate real-time transmission
        time.sleep(0.1)

      recognition.stop()
    else:
      raise Exception(
        'The supplied file was empty (zero bytes long)')
  except Exception as e:
    raise e

  print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
      recognition.get_last_request_id(),
      recognition.get_first_package_delay(),
      recognition.get_last_package_delay(),
    ))
  ```

Parâmetros de solicitação

Defina parâmetros de solicitação por meio do construtor (__init__) da classe de reconhecimento.

Parâmetro Tipo Obrigatório Descrição
modelo Sim O nome do modelo. O Qwen-Audio-3.x-ASR-Flash-Streaming e Fun-ASR-Realtime séries de modelos são suportadas. Para obter detalhes, consulte Modelos e regiões compatíveis.
amostra_taxa interno Sim A taxa de amostragem, em Hz. Os modelos de 8 kHz suportam apenas 8.000 Hz; outros modelos suportam qualquer taxa de amostragem.
formato Sim O formato de áudio. Valores válidos: pcm, wav, mp3, opus, speex, aac, amr.

opus/speex: Deve usar encapsulamento Ogg. wav: Deve usar codificação PCM. amr: Somente o tipo AMR-NB é suportado. | | manter_dialeto | bool | Não | Apoiado por qwen-audio-3.1-asr-flash-streaming apenas. O padrão é false, que transcreve dialetos para o chinês padrão. Definir como true para preservar expressões dialetais. Passe como um argumento de palavra-chave com o mesmo nome. Consulte referência da API para obter detalhes. | | vad_modelo | | Não | Apoiado por qwen-audio-3.1-asr-flash-streaming apenas. Definir como near_meeting_16k (campo próximo) ou far_field_meeting_16k (campo distante, padrão). Passe como um argumento de palavra-chave com o mesmo nome. Consulte referência da API para obter detalhes. | | vocabulário_id | | 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. | | vocabulário | ditado | 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. Somente qwen-audio-3.1-asr-flash-streaming e qwen-audio-3.0-asr-flash-streaming suporta palavras quentes instantâneas. Exemplo:

vocab = {"John Smith": 5, "Jane Doe": 5} recognition = Recognition(model='qwen-audio-3.0-asr-flash-streaming', format='wav', sample_rate=16000, vocabulary=vocab, callback=None) | | semântica_pontuação_habilitada | bool | Não | Seja para ativar a segmentação semântica. Padrão: Falso. <ul><li>Verdadeiro: ativa a segmentação semântica e desativa a segmentação VAD.</li><li>Falso (padrão): habilita a segmentação VAD e desabilita a segmentação semântica.</li></ul> A segmentação semântica é mais precisa e adequada à transcrição de reuniões. A segmentação VAD (Voice Activity Detection) tem menor latência e se adapta a cenários interativos. | | max_frase_silêncio | interno | 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]. | | multi_limite_modo_enabled | bool | Não | Só entra em vigor quando semantic_punctuation_enabled é falso. Se deve ativar o modo multi-limite. Quando ativado, evita que a segmentação VAD produza segmentos muito longos. Padrão: Falso. | | pontuação_predição_habilitado | bool | Não | Se a pontuação será adicionada automaticamente aos resultados de reconhecimento: <ul><li>Verdadeiro (padrão): Sim. Este valor não pode ser alterado.</li></ul> | | batimento cardíaco | bool | Não | Se deve ativar pacotes de pulsação. Padrão: Falso. <ul><li>Verdadeiro: mantém a conexão com o servidor ativa enquanto o áudio silencioso é enviado continuamente.</li><li>Falso (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.</li></ul> Á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. Este campo requer o SDK versão 1.23.1 ou posterior. | | idioma_dicas | lista[str] | 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.x-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. Códigos suportados: <ul><li>qwen-audio-3.1-asr-flash-streaming, 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 (checo), hu (húngaro), ro (romeno), bg (búlgaro), hr (croata), sk (eslovaco)</li></ul> | | fala_ruído_limiar | flutuar | 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]. <ul><li>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.</li><li>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.</li></ul> Este é um parâmetro de configuração avançado. Ajustá-lo pode afetar significativamente os resultados do reconhecimento. Recomendações: testar e verificar minuciosamente os resultados antes de ajustar; ajuste em pequenos incrementos com base no ambiente de áudio real (recomenda-se um passo de 0,1). | | especial_palavra_filtro | | 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. | | retorno de chamada | ReconhecimentoCallback | Não | Interface de retorno de chamada (RecognitionCallback). |

Parâmetros do método

Passe os seguintes parâmetros como argumentos de palavra-chave para o call ou start método do Recognition instância.

Parâmetro Tipo Obrigatório Descrição
bruto_entrada ditado Não O objeto de entrada usado para passar no contexto da conversa. O aprimoramento do contexto melhora a precisão do reconhecimento de termos específicos de domínio. Para uso, consulte Início rápido.
O parâmetro de contexto é suportado apenas pelo qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming, fun-asr-realtime modelos.
O ditado deve incluir um context chave cujo valor é uma lista de mensagens (list[dict]). Cada mensagem contém os seguintes campos: <ul><li>role (str, obrigatório): A função da mensagem. user representa os resultados de reconhecimento de turnos anteriores do usuário ou uma lista de palavras específicas do domínio. assistant representa as grandes respostas do modelo de linguagem de turnos anteriores.</li><li>content (list[dict], obrigatório): A lista do conteúdo da mensagem. Cada elemento contém type (str; definido como input_text quando a função é usuário, e text quando a função é assistente) e text (str, o conteúdo do texto).</li></ul>
Limites: Mensagens de contexto do input_text e text cada tipo é limitado a 5 mensagens. Quando o limite é excedido, apenas as 5 mensagens mais recentes são retidas. O comprimento total do texto por turno de contexto não pode exceder 400 caracteres e qualquer excesso é truncado no final.

Quando você passa o contexto, as mensagens em context devem seguir uma ordem específica: as mensagens de contexto devem ser organizadas por turno de conversa e, dentro de cada turno, o user mensagem (input_text tipo) deve preceder seu correspondente assistant mensagem (text tipo).

Este campo requer a versão 1.25.23 ou posterior do SDK. Passe raw_input para o start ou call método do Recognition instância. |

Exemplo:

# Build the input to pass in
input_context = {
  "context": [
    {
      "role": "user",
      "content": [
        {
          "type": "input_text",
          "text": "Hello there"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "Hello, I am Qwen. How can I help you?"
        }
      ]
    }
  ]
}
# Pass it in through the raw_input parameter
recognition.start(raw_input=input_context)
# Or
recognition.call(raw_input=input_context)

Interfaces principais

Recognition aula

Importar Recognition com from dashscope.audio.asr import *.

Método de membro Assinatura do método Descrição
ligar def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult Uma chamada sem streaming baseada em um arquivo local. Este método bloqueia o thread atual até que todo o áudio seja lido e requer permissão de leitura no arquivo. O resultado do reconhecimento é retornado como um RecognitionResult objeto.
começar def start(self, phrase_id: str = None, **kwargs) Inicia o reconhecimento de fala. Um reconhecimento de streaming em tempo real baseado em retorno de chamada. Este método não bloqueia o thread atual. Use-o junto com send_audio_frame e stop.
enviar_áudio_frame def send_audio_frame(self, buffer: bytes) Empurra áudio. Mantenha cada quadro de áudio enviado nem muito grande nem muito pequeno: cerca de 100 ms por quadro, entre 1 KB e 16 KB. Os resultados do reconhecimento são obtidos através do método on_event da interface Callback (RecognitionCallback).
parar def stop(self) Interrompe o reconhecimento de fala. Bloqueia até que o servidor termine de reconhecer todo o áudio recebido e então finalize a tarefa.
atualização_context def update_context(self, payload_input: dict) Atualiza o contexto da conversa enquanto uma tarefa de reconhecimento está em execução, para auxiliar no reconhecimento do áudio subsequente. Quando ligar: depois start e antes stop. payload_input é um dicionário contendo o payload.input objeto de um continue-task evento, incluindo o context campo. Não adicione um extra payload ou input invólucro. Para modelos suportados e restrições de parâmetros, consulte continue-task.
Este método está disponível apenas no SDK versão 1.27.5 e posterior.
obter_última_solicitação_id def get_last_request_id(self) Obtém a solicitação_id. Disponível após a chamada do construtor (o objeto é criado).
get_first_package_delay def get_first_package_delay(self) Obtém o atraso do primeiro pacote: a latência desde o envio do primeiro pacote de áudio até o recebimento do primeiro resultado de reconhecimento. Use-o após a conclusão da tarefa.
get_último_pacote_atraso def get_last_package_delay(self) Obtém o atraso do último pacote: o tempo desde o envio do stop comando para receber o último resultado de reconhecimento. Use-o após a conclusão da tarefa.
obter_resposta def get_response(self) Recebe a última mensagem. Use-o para recuperar um erro de falha na tarefa.

Interface de retorno de chamada (RecognitionCallback)

Durante uma chamada de streaming bidirecional, o servidor retorna informações e dados importantes do processo ao cliente por meio de retornos de chamada. Implemente os métodos de retorno de chamada para lidar com as informações e dados retornados pelo servidor.

Veja o exemplo.

class Callback(RecognitionCallback):
  def on_open(self) -> None:
    print('Connection established')

  def on_event(self, result: RecognitionResult) -> None:
    sentence = result.get_sentence()
    if 'text' in sentence:
      print('RecognitionCallback text: ', sentence['text'])

  def on_complete(self) -> None:
    print('Task completed')

  def on_error(self, message: str) -> None:
    print('An error occurred:', message)

  def on_close(self) -> None:
    print('Connection closed')

callback = Callback()
Método Parâmetro Valor de retorno Descrição
def on_open(self) -> None Nenhum Nenhum Chamado imediatamente após a conexão com o servidor ser estabelecida.
def on_event(self, result: RecognitionResult) -> None result: Resultado de Reconhecimento Nenhum Chamado quando o servidor tem uma resposta.
def on_complete(self) -> None Nenhum Nenhum Chamado depois que todos os resultados de reconhecimento são retornados.
def on_error(self, message: str) -> None result: Resultado de Reconhecimento Nenhum Chamado quando ocorre um erro.
def on_close(self) -> None Nenhum Nenhum Chamado depois que o servidor fecha a conexão.

Resposta

Resultado do reconhecimento (RecognitionResult)

RecognitionResult representa o resultado de um único reconhecimento em tempo real em uma chamada de streaming bidirecional ou o resultado de uma chamada sem streaming.

Método de membro Assinatura do método Descrição
obter_sentença def get_sentence(self) -> Union[Dict[str, Any], List[Any]] Obtém a sentença reconhecida atual e suas informações de carimbo de data/hora. Um retorno de chamada retorna uma única frase, então este método retorna Dict[str, Any]. Para obter detalhes, consulte Frase (Frase).
obter_solicitação_id def get_request_id(self) -> str Obtém o request_id da solicitação.
é_sentença_fim @staticmethod def is_sentence_end(sentence: Dict[str, Any]) -> bool Determina se a frase dada terminou. Este método verifica se o end_time campo em sentence é None: um não-None end_time indica que a frase terminou. Chame-o como RecognitionResult.is_sentence_end(sentence), onde sentence é o ditado de frase única retornado por get_sentence(), não um campo booleano em um Sentence instância.

Informações da frase (Sentence)

Os membros da classe Sentença são os seguintes:

Parâmetro Tipo Descrição
início_hora interno Hora de início da frase, em ms.
fim_hora interno Hora de término da frase, em ms.
texto Texto reconhecido.
palavras Uma lista de informações de carimbo de data/hora em nível de palavra (Word) Informações de carimbo de data/hora em nível de palavra.

Informações de carimbo de data/hora em nível de palavra (Word)

Os membros da classe Word são os seguintes:

Parâmetro Tipo Descrição
início_hora interno Hora de início da palavra, em ms.
fim_hora interno Hora de término da palavra, em ms.
texto A palavra.
pontuação A pontuação.

Códigos de erro

Se você encontrar erros, consulte Códigos de erro para solução de problemas.

Se o problema persistir, junte-se à comunidade de desenvolvedores para relatar seu problema e fornecer o ID da solicitação para investigação adicional.

Perguntas frequentes

Recursos

P: Como mantenho a conexão ativa durante longos períodos de silêncio?

Defina o heartbeat request parâmetro como true e continue enviando áudio silencioso para o servidor.

Áudio silencioso é o conteúdo de um arquivo ou fluxo de áudio 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 ferramentas de linha de comando como FFmpeg.

P: Como faço para converter áudio para um formato compatível?

Utilize FFmpeg. Para mais uso, consulte o site oficial do FFmpeg.

# Basic conversion command (all-purpose template)
# -i, purpose: input file path, example value: audio.wav
# -c:a, purpose: audio codec, example values: aac, libmp3lame, pcm_s16le
# -b:a, purpose: bitrate (audio quality control), example values: 192k, 320k
# -ar, purpose: sample rate, example values: 44100 (CD), 48000, 16000
# -ac, purpose: number of channels, example values: 1 (mono), 2 (stereo)
# -y, purpose: overwrite an existing file (no value needed)
ffmpeg -i input_audio.ext -c:a codec_name -b:a bitrate -ar sample_rate -ac channels output.ext
# For example: WAV to MP3 (keep the original quality)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# For example: MP3 to WAV (16-bit PCM standard format)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# For example: M4A to AAC (extract or convert Apple audio)
ffmpeg -i input.m4a -c:a copy output.aac  # Extract directly without re-encoding
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # Re-encode to improve quality
# For example: FLAC lossless to Opus (high compression)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus

P: Como reconheço um arquivo local (gravação)?

Existem duas maneiras de reconhecer um arquivo local:

Solução de problemas

P: Por que a fala não pode ser reconhecida (sem resultado de reconhecimento)?

  1. Verifique se o formato de áudio (format) e taxa de amostragem (sampleRate/sample_rate) nos parâmetros da solicitação estão corretos e atendem às restrições de parâmetro. Erros comuns incluem:

    • O arquivo de áudio tem extensão .wav, mas na verdade está no formato MP3, enquanto o format parâmetro de solicitação está definido como mp3 (configuração de parâmetro incorreta).
    • A taxa de amostragem de áudio é de 3600 Hz, mas o sampleRate/sample_rate parâmetro de solicitação está definido como 48000 (configuração de parâmetro incorreta).

    Use o ffprobe ferramenta para obter o contêiner, codec, taxa de amostragem, canais e outras informações do áudio:

    ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx
    
  2. Se nenhuma das verificações acima revelar um problema, adicione hotwords personalizados para melhorar o reconhecimento de termos específicos.