Skip to main content
Tradução de áudio e vídeo em tempo real - Qwen-Livetranslate-Realtime

Qwen-LiveTranslate Python SDK - API reference

Utilize o DashScope SDK for Python para chamar o Qwen-LiveTranslate e realizar tradução de fala em tempo real.

Pré-requisitos

  1. Instale o SDK. Verifique se a versão do seu DashScope SDK é 1.25.6 ou superior.
  2. Obtenha uma chave de API.
O 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 a migração para os novos domínios:
  • China (Beijing): de wss://dashscope.aliyuncs.com para wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapore: de wss://dashscope-intl.aliyuncs.com para wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
{WorkspaceId} é o ID do seu workspace, que pode ser encontrado na página Workspace Details no console do Alibaba Cloud Model Studio. O domínio existente permanece totalmente funcional.

Parâmetros da solicitação

  • Defina os seguintes parâmetros no construtor da classe OmniRealtimeConversation.
    from dashscope.audio.qwen_omni import (
        OmniRealtimeConversation,
        OmniRealtimeCallback,
        MultiModality,
    )
    from dashscope.audio.qwen_omni.omni_realtime import TranslationParams
    
    class MyCallback(OmniRealtimeCallback):
        """Callback handler for real-time translation"""
        def __init__(self, conversation=None):
            self.conversation = conversation
            self.handlers = {
                'session.created': self._handle_session_created,
                'response.audio_transcript.done': self._handle_translation_done,
                'response.audio.delta': self._handle_audio_delta,
                'response.done': lambda r: print('======Response Done======'),
                'input_audio_buffer.speech_started': lambda r: print('======Speech Start======'),
                'input_audio_buffer.speech_stopped': lambda r: print('======Speech Stop======'),
            }
    
        def on_open(self):
            print('Connection opened')
    
        def on_close(self, code, msg):
            print(f'Connection closed, code: {code}, msg: {msg}')
    
        def on_event(self, response):
            try:
                handler = self.handlers.get(response['type'])
                if handler:
                    handler(response)
            except Exception as e:
                print(f'[Error] {e}')
    
        def _handle_session_created(self, response):
            print(f"Session created: {response['session']['id']}")
    
        def _handle_translation_done(self, response):
            print(f"Translation result: {response['transcript']}")
    
        def _handle_audio_delta(self, response):
            # Process incremental audio data.
            audio_b64 = response.get('delta', '')
            # Decode the audio data for playback or to save it.
    
    conversation = OmniRealtimeConversation(
        model='qwen3.5-livetranslate-flash-realtime',
        # China (Beijing) region. Replace {WorkspaceId} with your Bailian workspace ID. URLs vary by region.
        url='wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime',
        callback=MyCallback(conversation=None)  # Temporarily pass None. It will be injected later.
    )
    # Inject self into the callback.
    conversation.callback.conversation = conversation
    
    ParâmetroTipoObrigatórioDescrição
    modelstrSimNome do modelo a ser utilizado. Defina como qwen3.5-livetranslate-flash-realtime (recomendado).
    qwen3-livetranslate-flash-realtime é um modelo legado.
    callbackOmniRealtimeCallbackSimInstância de callback para tratar eventos do lado do servidor.
    urlstrSimEndpoint do service para tradução em tempo real:
    • China (Beijing): wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime
    • Singapore: wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime
    Substitua {WorkspaceId} pelo seu workspace ID real.
  • Configure os parâmetros abaixo por meio do método update_session da classe OmniRealtimeConversation.
    # Set translation parameters
    translation_params = TranslationParams(
        language='en',  # Target language
        corpus=TranslationParams.Corpus(
            phrases={
                'Inteligencia Artificial': 'Artificial Intelligence',
                'Aprendizaje Automático': 'Machine Learning'
            }
        )
    )
    
    # Update session configuration
    conversation.update_session(
        output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
        voice='Tina',
        translation_params=translation_params,
    )
    

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    output_modalities

    List[MultiModality]

    Não

    Formato de saída dos resultados da tradução.

    Padrão: [MultiModality.TEXT, MultiModality.AUDIO].

    Valores válidos:

    • [MultiModality.TEXT]: Gera apenas texto

    • [MultiModality.TEXT, MultiModality.AUDIO]: Gera texto e áudio

    voice

    str

    Não

    Voz utilizada na saída de áudio.

    Padrão:

    • Qwen3.5-LiveTranslate-Flash-Realtime: Tina

    • Qwen3-LiveTranslate-Flash-Realtime: Cherry

    Valores válidos: Supported voices.

    input_audio_transcription_model

    str

    Não

    Defina este parâmetro como qwen3-asr-flash-realtime para receber resultados de reconhecimento de fala no idioma de origem.

    translation_params

    TranslationParams

    Não

    Configurações de tradução (idioma alvo e palavras-chave).

    enable_turn_detection

    bool

    Não

    Indica se o VAD (Detecção de Atividade de Voz) deve ser ativado.

    Valor padrão: True, que habilita o modo VAD, onde o servidor detecta automaticamente o início e o fim da fala e aciona a tradução.

    Defina como False para alternar para o modo Manual, no qual o cliente envia o áudio manualmente através do método commit. Para descrições detalhadas dos parâmetros, consulte a descrição de turn_detection no documento Client events.

  • Especifique os seguintes parâmetros no construtor da classe TranslationParams.
    translation_params = TranslationParams(
        language='en',  # Target language code
        corpus=TranslationParams.Corpus(
            phrases={
                'Inteligencia Artificial': 'Artificial Intelligence',  # Source phrase: Target translation
                'Aprendizaje Automático': 'Machine Learning'
            }
        )
    )
    

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    language

    str

    Não

    Idioma alvo da tradução.

    Padrão: en.

    Valores válidos: Supported languages.

    corpus

    TranslationParams.Corpus

    Não

    Mapeamento de palavras-chave para melhorar a precisão da tradução de termos específicos.

    corpus.phrases

    dict

    Não

    Tabela de mapeamento de palavras-chave, onde as chaves são os termos de origem e os valores são as traduções alvo.

    Exemplo: {'Inteligencia Artificial': 'Artificial Intelligence'}

Interfaces principais

Classe OmniRealtimeConversation

Importação: from dashscope.audio.qwen_omni import OmniRealtimeConversation
Assinatura do métodoEvento de resposta do servidor (enviado via callback)Descrição
def connect(self) -> None:
Server-side event
Sessão criada
Server-side event
Configuração da sessão atualizada
Conecta ao servidor.
def update_session(self,
    output_modalities: List[MultiModality],
    voice: str = None,
    translation_params: TranslationParams = None,
    **kwargs) -> None:
Sessão atualizada
Sessão atualizada
Atualiza a configuração da sessão. Chame imediatamente após a conexão. Caso este método não seja chamado, as configurações padrão serão aplicadas.
def end_session(self, timeout: int = 20) -> None:
session.finished
O servidor conclui a tradução de fala e encerra a sessão
Encerra a sessão. O servidor finaliza o processamento da última tradução.
def append_audio(self, audio_b64: str) -> None:
NenhumEnvia fragmentos de áudio codificados em Base64 para o servidor. A detecção de fala e a tradução ocorrem automaticamente.
def commit(self) -> None:
Server-side event
Buffer de áudio de entrada confirmado
No modo Manual, envia o áudio previamente adicionado ao buffer do servidor através do método append_audio. O servidor inicia automaticamente a geração das respostas de tradução após o recebimento. No modo VAD, não é necessário chamar este método, pois o servidor faz a confirmação automaticamente.
def clear_appended_audio(self) -> None:
Server-side event
Buffer de áudio de entrada limpo
Limpa os dados de áudio não confirmados no buffer atual do servidor.
def close(self) -> None:
NenhumInterrompe a tarefa e fecha a conexão.
def get_session_id(self) -> str:
NenhumObtém o ID da sessão.
def get_last_response_id(self) -> str:
NenhumObtém o ID da última resposta.

Interface de callback (OmniRealtimeCallback)

Receba eventos e dados do servidor por meio de callbacks. Herde esta classe e implemente seus métodos para tratar os eventos provenientes do servidor. Importação: from dashscope.audio.qwen_omni import OmniRealtimeCallback
Assinatura do métodoParâmetrosDescrição
def on_open(self) -> None:
NenhumChamado quando a conexão WebSocket é aberta.
def on_event(self, message: dict) -> None:
message: Server-side eventChamado quando o servidor envia um evento.
def on_close(self, close_status_code, close_msg) -> None:
close_status_code: O código de status.close_msg: A mensagem de log quando a conexão WebSocket é fechada.Chamado quando a conexão WebSocket é fechada.

Exemplo completo

Este exemplo captura áudio do microfone e o traduz em tempo real.
import os
import sys
import base64
import signal
import pyaudio
from dashscope.audio.qwen_omni import (
    OmniRealtimeConversation,
    OmniRealtimeCallback,
    MultiModality,
)
from dashscope.audio.qwen_omni.omni_realtime import TranslationParams

class Callback(OmniRealtimeCallback):
    """Callback handler class for real-time translation"""

    def __init__(self, speaker):
        self.speaker = speaker

    def on_open(self):
        print("[Connection established]")

    def on_close(self, code, msg):
        print(f"[Connection closed] code: {code}, msg: {msg}")

    def on_event(self, response):
        event_type = response.get("type", "")
        if event_type == "input_audio_buffer.speech_started":
            print("====== Speech input detected ======")
        elif event_type == "input_audio_buffer.speech_stopped":
            print("====== Speech input ended ======")
        elif event_type == "conversation.item.input_audio_transcription.completed":
            print(f"[Original text] {response.get('transcript', '')}")
        elif event_type == "response.audio_transcript.done":
            print(f"[Translation result] {response.get('transcript', '')}")
        elif event_type == "response.audio.delta":
            audio_b64 = response.get("delta", "")
            if audio_b64:
                self.speaker.write(base64.b64decode(audio_b64))
        elif event_type == "error":
            print(f"[Error] {response.get('error', {}).get('message', '')}")

def main():
    # Check for the API key.
    if not os.environ.get("DASHSCOPE_API_KEY"):
        print("Set the DASHSCOPE_API_KEY environment variable.")
        sys.exit(1)

    # Initialize PyAudio.
    pya = pyaudio.PyAudio()

    # Initialize the speaker for playing back the translated audio.
    speaker = pya.open(
        format=pyaudio.paInt16,
        channels=1,
        rate=24000,
        output=True,
        frames_per_buffer=2400
    )

    # Initialize the microphone for capturing speech input.
    mic = pya.open(
        format=pyaudio.paInt16,
        channels=1,
        rate=16000,
        input=True,
        frames_per_buffer=1600
    )

    # Create a callback instance.
    callback = Callback(speaker=speaker)

    # Create a real-time session.
    conversation = OmniRealtimeConversation(
        model="qwen3.5-livetranslate-flash-realtime",
        # The following is the Singapore region URL. Replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
        url="wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime",
        callback=callback
    )

    # Connect to the server.
    conversation.connect()

    # Configure translation parameters.
    translation_params = TranslationParams(
        language="en",  # Target language for translation: English
        corpus=TranslationParams.Corpus(
            phrases={
                "Source Term 1": "Target Translation 1",
                "Source Term 2": "Target Translation 2"
            }
        )
    )

    # Update the session configuration.
    conversation.update_session(
        output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
        input_audio_transcription_model="qwen3-asr-flash-realtime",
        voice="Tina",
        translation_params=translation_params,
    )

    # Register the exit signal handler.
    def on_exit(sig, frame):
        print("\n[Exiting...]")
        mic.stop_stream()
        mic.close()
        speaker.stop_stream()
        speaker.close()
        pya.terminate()
        conversation.end_session()
        conversation.close()
        sys.exit(0)

    signal.signal(signal.SIGINT, on_exit)

    print("[Starting real-time translation] Speak into the microphone. Press Ctrl+C to exit.")

    # Continuously capture and send microphone audio.
    while True:
        audio_data = mic.read(1600, exception_on_overflow=False)
        conversation.append_audio(base64.b64encode(audio_data).decode("ascii"))

if __name__ == "__main__":
    main()
Referência da API de Geração de Texto
Geração de Imagens
  • FAQ
Geração de Vídeo
Áudio
API em tempo real
Incorporação de Texto
Produção de Modelos