Todos os produtos
Search
Central de documentação

Alibaba Cloud Model Studio:Qwen-Audio-3.0-ASR-Flash-Streaming/Fun-ASR-Realtime Python SDK

Última atualização: Sep 02, 2026

Este tópico descreve os parâmetros e as interfaces do Python SDK para o modelo de reconhecimento de fala em tempo real Qwen-Audio-3.0-ASR-Flash-Streaming/Fun-ASR-Realtime.

ImportanteO Alibaba Cloud Model Studio lançou domínios específicos por workspace para as regiões China (Beijing) e Singapore. Os novos domínios dedicados oferecem desempenho superior e maior estabilidade para solicitações de inferência. Recomendamos migrar para os novos domínios:

  • China (Beijing): de dashscope.aliyuncs.com para {WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapore: de dashscope-intl.aliyuncs.com para {WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

Substitua {WorkspaceId} pelo seu Workspace ID real. Os domínios existentes permanecem totalmente funcionais.

Guia do usuário: Para descrições dos modelos e orientações de seleção, consulte Speech-to-text.

Pré-requisitos

Ative o service e Obtain an API key. Para evitar riscos de segurança causados por vazamento de código, Configure API key as an environment variable em vez de codificá-la diretamente no código.

Início rápido

A Recognition class fornece interfaces para chamadas sem streaming e com streaming bidirecional. Escolha o método de chamada adequado às suas necessidades:

  • Chamada sem streaming: reconhece um arquivo local e retorna o resultado completo em uma única resposta. Ideal para processar áudio pré-gravado.
  • Chamada com streaming bidirecional: reconhece um fluxo de áudio diretamente e gera resultados em tempo real. O fluxo pode vir de um dispositivo externo, como microfone, ou ser lido de um arquivo local. Recomendado para cenários que exigem feedback imediato.

Chamada sem streaming

Envie uma única tarefa de reconhecimento de fala em tempo real e obtenha o resultado sincronamente ao passar um arquivo local.

Instancie a Recognition class, vincule os Request parameters e chame call para executar o reconhecimento ou tradução e obter o Recognition result (RecognitionResult) final.

Visualize o exemplo completo

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

# The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

recognition = Recognition(model='qwen-audio-3.0-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 com streaming bidirecional

Envie uma única tarefa de reconhecimento de fala em tempo real e transmita os resultados continuamente implementando a interface de callback.

  1. Inicie o reconhecimento de fala em streaming.

    Instancie a Recognition class, vincule os Request parameters e a Callback interface (RecognitionCallback) e chame o método start para iniciar o reconhecimento de fala em streaming.

  2. Transmita o áudio.

    Chame o método send_audio_frame da Recognition class em 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 microfone.

    Durante o envio do áudio, o servidor retorna resultados de reconhecimento ao cliente em tempo real por meio do método on_event da Callback interface (RecognitionCallback).

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

  3. Encerre a tarefa.

    Chame o método stop da Recognition class para encerrar o reconhecimento de fala.

    Esse método bloqueia a thread atual até que o callback on_complete ou on_error da Callback interface (RecognitionCallback) seja acionado.

Visualize o exemplo completo

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__':
    # The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

    # The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
    dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

    # 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()
import os
import time
import dashscope
from dashscope.audio.asr import *

# The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

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, result: RecognitionResult) -> None:
        print('Recognition task_id: ', result.request_id)
        print('Recognition error: ', result.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.0-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 da solicitação

Defina os parâmetros da solicitação por meio do construtor (init) da Recognition class.

ParâmetroTipoObrigatórioDescrição

model

str

Sim

Nome do modelo. Há suporte para as séries Qwen-Audio-3.0-ASR-Flash-Streaming e Fun-ASR-Realtime. Para mais detalhes, consulte Supported models and regions.

sample_rate

int

Sim

Taxa de amostragem, em Hz.

Valores válidos: modelos de 8 kHz aceitam apenas 8000 Hz; outros modelos aceitam qualquer taxa de amostragem.

format

str

Sim

Formato do áudio.

Valores válidos:

  • pcm
  • wav
  • mp3
  • opus
  • speex
  • aac
  • amr

Importanteopus/speex: devem usar encapsulamento Ogg.

wav: deve usar codificação PCM.

amr: apenas o tipo AMR-NB é aceito.

vocabulary_id

str

Não

ID de uma lista de palavras-chave pré-compilada.

Gere esse ID antecipadamente chamando a API de criação de lista de palavras-chave. Passe o ID durante o reconhecimento para usar as palavras-chave da lista.

Indicado para cenários em que o vocabulário é conhecido e relativamente estável e quando você precisa reutilizar a mesma lista de palavras entre solicitações.

Para detalhes de uso, consulte Precompiled hotwords.

vocabulary

dict

Não

Palavras-chave instantâneas.

Passadas como pares chave-valor, em que a chave é o texto da palavra-chave (string) e o valor é o peso da palavra-chave (integer). Não é necessário criar uma lista de palavras-chave antecipadamente. O peso varia de [1, 5] ou é definido como 50: um valor em [1, 5] aumenta a probabilidade de o modelo gerar a palavra conforme o valor cresce; um valor de 50 designa uma super palavra-chave, que melhora significativamente o recall, mas o número de super palavras-chave não pode exceder 50.

Adequado para otimização temporária de palavras-chave no nível da sessão.

Quando configurado junto com palavras-chave pré-compiladas, apenas as palavras-chave instantâneas têm efeito. Para detalhes de uso, consulte Instant hotwords.

ImportanteApenas qwen-audio-3.0-asr-flash-streaming aceita palavras-chave instantâneas.

Exemplo:

from dashscope.audio.asr import Recognition

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)

semantic_punctuation_enabled

bool

Não

Define se a segmentação semântica deve ser ativada.

Padrão: False.

  • True: ativa a segmentação semântica e desativa a segmentação VAD.
  • False (padrão): ativa a segmentação VAD e desativa a segmentação semântica.

A segmentação semântica é mais precisa e adequada para transcrição de reuniões. A segmentação VAD (Detecção de Atividade de Voz) tem menor latência e é ideal para cenários interativos.

max_sentence_silence

int

Não

Limiar de silêncio VAD para segmentação, em ms. Quando o silêncio após um segmento de fala excede esse limiar, o sistema determina que a frase terminou. Quando semantic_punctuation_enabled é definido como true, este parâmetro não é 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_threshold_mode_enabled

bool

Não

ImportanteTem efeito apenas quando semantic_punctuation_enabled é false.

Define se o modo de múltiplos limiares deve ser ativado. Quando ativado, impede que a segmentação VAD produza segmentos excessivamente longos.

Padrão: False.

punctuation_prediction_enabled

bool

Não

Define se a pontuação deve ser adicionada automaticamente aos resultados de reconhecimento:

  • True (padrão): sim. Este valor não pode ser alterado.

heartbeat

bool

Não

Define se os pacotes de heartbeat devem ser ativados.

Padrão: False.

  • True: mantém a conexão com o servidor ativa enquanto áudio silencioso é enviado continuamente.
  • False (padrão): mesmo quando áudio silencioso é enviado continuamente, a conexão expira e fecha após um período de tempo.

Áudio silencioso refere-se a conteúdo em um arquivo de áudio ou fluxo de dados que não contém sinal sonoro. Você pode gerar áudio silencioso de várias formas, como usando software de edição de áudio como Audacity ou Adobe Audition, ou ferramentas de linha de comando como FFmpeg.

Este campo requer a versão 1.23.1 ou posterior do SDK.

language_hints

list[str]

Não

Idioma do áudio a ser reconhecido. Não há valor padrão; se não definido, o modelo detecta o idioma automaticamente.

Para a série de modelos Qwen-Audio-3.0-ASR-Flash-Streaming, você pode definir até 4 valores; se definir mais de 4, apenas os primeiros 4 terão efeito. Para a série de modelos Fun-ASR-Realtime, você pode definir apenas 1 valor; se definir vários, apenas o primeiro terá efeito.

Clique em para visualizar os códigos de idioma aceitos

  • qwen-audio-3.0-asr-flash-streaming, fun-asr-realtime, fun-asr-realtime-2025-11-07:

    • 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
  • fun-asr-realtime-2026-02-28:

    • zh: Chinês
    • en: Inglês
    • ja: Japonês
  • fun-asr-realtime-2025-09-15:

    • zh: Chinês
    • en: Inglês
  • fun-asr-flash-8k-realtime, fun-asr-flash-8k-realtime-2026-01-28:

    • zh: Chinês

speech_noise_threshold

float

Não

Limiar 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].

Descrições dos valores:

  • Quanto mais próximo de -1: o limiar de ruído diminui, tornando mais provável que ruído seja reconhecido como fala, o que pode causar a transcrição de mais ruído.
  • Quanto mais próximo de +1: o limiar de ruído aumenta, tornando mais provável que fala seja erroneamente julgada como ruído, o que pode filtrar parte da fala.

Este é um parâmetro de configuração avançada. Ajustá-lo pode afetar significativamente os resultados de 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).

special_word_filter

str

Não

Especifica as palavras sensíveis a serem processadas durante o reconhecimento de fala e permite definir diferentes métodos de processamento para cada uma. Para detalhes, consulte Sensitive word filtering.

callback

RecognitionCallback

Não

Callback interface (RecognitionCallback).

Passe os seguintes parâmetros como argumentos nomeados para o método call ou start da instância Recognition.

ParâmetroTipoObrigatórioDescrição

raw_input

dict

Não

Objeto de entrada usado para passar o contexto da conversa. O aprimoramento de contexto melhora a precisão do reconhecimento para termos específicos de domínio. Para uso, consulte Quick start.

ImportanteOs modelos qwen-audio-3.0-asr-flash-streaming, fun-asr-realtime e fun-asr-realtime-2025-11-07 aceitam o parâmetro de contexto.

O dict deve incluir uma chave context cujo valor é uma lista de mensagens (list[dict]). Cada mensagem contém os seguintes campos:

  • 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 de domínio. assistant representa as respostas do modelo de linguagem grande de turnos anteriores.
  • content (list[dict], obrigatório): a lista de conteúdo da mensagem. Cada elemento contém type (str; definido como input_text quando role é user, e text quando role é assistant) e text (str, o conteúdo de texto).

ImportanteLimites: mensagens de contexto dos tipos input_text e text são limitadas a 5 mensagens cada. 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 a partir do final.

ImportanteAo passar 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, a mensagem user (tipo input_text) deve preceder sua mensagem assistant correspondente (tipo text).

ObservaçãoEste campo requer a versão 1.25.23 ou posterior do SDK.

Passe raw_input para o método start ou call da instância Recognition:

# 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

Classe Recognition

Importe Recognition com "from dashscope.audio.asr import *".

Método membroAssinatura do métodoDescrição

call

def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult

Chamada sem streaming baseada em arquivo local. Este método bloqueia a thread atual até que todo o áudio seja lido e requer permissão de leitura no arquivo.

O resultado do reconhecimento é retornado como um objeto RecognitionResult.

start

def start(self, phrase_id: str = None, **kwargs)

Inicia o reconhecimento de fala.

Reconhecimento em tempo real via streaming baseado em callback. Este método não bloqueia a thread atual. Use-o juntamente com send_audio_frame e stop.

send_audio_frame

def send_audio_frame(self, buffer: bytes)

Envia á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 de reconhecimento são obtidos através do método on_event da Callback interface (RecognitionCallback).

stop

def stop(self)

Interrompe o reconhecimento de fala. Bloqueia até que o servidor termine de reconhecer todo o áudio recebido e então encerra a tarefa.

get_last_request_id

def get_last_request_id(self)

Obtém o request_id. Disponível após a chamada do construtor (criação do objeto).

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 após a conclusão da tarefa.

get_last_package_delay

def get_last_package_delay(self)

Obtém o atraso do último pacote: o tempo desde o envio do comando stop até o recebimento do último resultado de reconhecimento. Use após a conclusão da tarefa.

get_response

def get_response(self)

Obtém a última mensagem. Use para recuperar um erro de falha na tarefa.

Interface de callback (RecognitionCallback)

Durante uma Bidirectional streaming call, o servidor retorna informações-chave de processo e dados ao cliente por meio de callbacks. Implemente os métodos de callback para lidar com as informações e dados retornados pelo servidor.

Visualize o exemplo

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

    def on_event(self, result: RecognitionResult) -> None:
        # Implement the logic to receive recognition results
        pass

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

    def on_error(self, result: RecognitionResult) -> None:
        print('An error occurred:', result)

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

callback = Callback()
MétodoParâmetroValor de retornoDescrição
def on_open(self) -> None

None

None

Chamado imediatamente após o estabelecimento da conexão com o servidor.

def on_event(self, result: RecognitionResult) -> None

result: Recognition result (RecognitionResult)

None

Chamado quando o servidor envia uma resposta.

def on_complete(self) -> None

None

None

Chamado após o retorno de todos os resultados de reconhecimento.

def on_error(self, result: RecognitionResult) -> None

result: Recognition result (RecognitionResult)

None

Chamado quando ocorre um erro.

def on_close(self) -> None

None

None

Chamado após o servidor fechar a conexão.

Resposta

Resultado de reconhecimento (RecognitionResult)

RecognitionResult representa o resultado de um único reconhecimento em tempo real em uma Bidirectional streaming call ou o resultado de uma Non-streaming call.

Método membroAssinatura do métodoDescrição

get_sentence

def get_sentence(self) -> Union[Dict[str, Any], List[Any]]

Obtém a frase reconhecida atual e suas informações de timestamp. Um callback retorna uma única frase, portanto este método retorna Dict[str, Any].

Para detalhes, consulte Sentence (Sentence).

get_request_id

def get_request_id(self) -> str

Obtém o request_id da solicitação.

is_sentence_end

@staticmethod
def is_sentence_end(sentence: Dict[str, Any]) -> bool

Determina se a frase fornecida terminou. Este método verifica se o campo end_time em sentence é None: um end_time diferente de None indica que a frase terminou. Chame-o como RecognitionResult.is_sentence_end(sentence), onde sentence é o dict de frase única retornado por get_sentence(), não um campo booleano em uma instância de Sentence.

Informações da frase (Sentence)

Os membros da classe Sentence são os seguintes:

Parâmetro

Tipo

Descrição

begin_time

int

Tempo de início da frase, em ms.

end_time

int

Tempo de término da frase, em ms.

text

str

Texto reconhecido.

words

Uma lista de Word-level timestamp information (Word)

Informações de timestamp no nível da palavra.

Informações de timestamp no nível da palavra (Word)

Os membros da classe Word são os seguintes:

Parâmetro

Tipo

Descrição

begin_time

int

Tempo de início da palavra, em ms.

end_time

int

Tempo de término da palavra, em ms.

text

str

A palavra.

punctuation

str

A pontuação.

Códigos de erro

Se encontrar erros, consulte Error codes para solução de problemas.

Se o problema persistir, junte-se à comunidade de desenvolvedores para relatar seu problema e forneça o Request ID para investigação adicional.

FAQ

Recursos

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

Defina o parâmetro de solicitação heartbeat como true e continue enviando áudio silencioso para o servidor.

Áudio silencioso é o conteúdo em um arquivo de áudio ou fluxo 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 converto áudio para um formato aceito?

Use o FFmpeg. Para mais usos, 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:

  • Passe o caminho do arquivo local diretamente: esta forma retorna o resultado completo somente após o término do reconhecimento, portanto não é adequada para cenários que precisam de feedback imediato.

    Consulte Non-streaming call e passe o caminho do arquivo para o método call da Recognition class para reconhecer a gravação diretamente.

  • Converta o arquivo local em um fluxo binário para reconhecimento: esta forma reconhece o arquivo enquanto transmite os resultados em fluxo, sendo adequada para cenários que precisam de feedback imediato.

    Consulte Bidirectional streaming call e envie o fluxo binário para o servidor para reconhecimento através do método send_audio_frame da Recognition class.

Solução de problemas

P: Por que a fala não é reconhecida (nenhum resultado de reconhecimento)?

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

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

    Use a ferramenta ffprobe para obter o container, 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
  1. Se nenhuma das verificações acima revelar um problema, adicione palavras-chave personalizadas para melhorar o reconhecimento de termos específicos.