Streaming no servidor

Este guia mostra como transcrever áudio em tempo real no servidor usando a ElevenLabs.

Guia prático · Pressupõe que você concluiu o guia de início rápido de Speech to Text .

Visão geral

A API de Speech to Text em Tempo Real da ElevenLabs permite transcrever streams de áudio em tempo real com latência ultrabaixa usando o modelo Scribe Realtime v2. Seja para criar assistentes de voz, serviços de transcrição ou qualquer aplicação que exija reconhecimento de fala ao vivo, esta API baseada em WebSocket fornece transcrições parciais enquanto você fala e transcrições confirmadas quando os segmentos de fala são concluídos.

O Scribe v2 Realtime pode ser implementado no servidor para transcrever áudio em tempo real, seja por uma URL, arquivo ou seu próprio stream de áudio.

A implementação no servidor difere da implementação no cliente em alguns pontos:

  • Usa uma chave de API da ElevenLabs em vez de um token de uso único.
  • Compatível com streaming diretamente de uma URL, sem a necessidade de dividir manualmente o áudio em partes.

Para fazer streaming de áudio diretamente do microfone, consulte o guia de streaming no cliente.

Início rápido

Este guia pressupõe que você configurou sua chave de API e o SDK. Conclua primeiro o início rápido, caso ainda não tenha feito isso.

1

Configure o SDK

O SDK oferece duas formas de transcrever áudio em tempo real: streaming a partir de uma URL ou dividindo manualmente o áudio de um arquivo ou do seu próprio stream de áudio.

Para ver a lista completa de parâmetros e opções compatíveis com a API, consulte a referência da API.

Este exemplo mostra como fazer streaming de um arquivo de áudio a partir de uma URL usando o SDK oficial.

A ferramenta ffmpeg é necessária para fazer streaming a partir de uma URL. Acesse o site dela para ver instruções de instalação.

Crie um novo arquivo chamado example.py ou example.mts, dependendo da linguagem escolhida, e adicione o código a seguir:

from dotenv import load_dotenv
import os
import asyncio
from elevenlabs import ElevenLabs, RealtimeEvents, RealtimeUrlOptions
load_dotenv()
async def main():
elevenlabs = ElevenLabs(api_key=os.getenv("ELEVENLABS_API_KEY"))
# Create an event to signal when to stop
stop_event = asyncio.Event()
# Connect to a streaming audio URL
connection = await elevenlabs.speech_to_text.realtime.connect(RealtimeUrlOptions(
model_id="scribe_v2_realtime",
url="https://npr-ice.streamguys1.com/live.mp3",
include_timestamps=True,
))
# Set up event handlers
def on_session_started(data):
print(f"Session started: {data}")
def on_partial_transcript(data):
print(f"Partial: {data.get('text', '')}")
def on_committed_transcript(data):
print(f"Committed: {data.get('text', '')}")
# Committed transcripts with word-level timestamps. Only received when include_timestamps is set to True.
def on_committed_transcript_with_timestamps(data):
print(f"Committed with timestamps: {data.get('words', '')}")
# Errors - will catch all errors, both server and websocket specific errors
def on_error(error):
print(f"Error: {error}")
# Signal to stop on error
stop_event.set()
def on_close():
print("Connection closed")
# Register event handlers
connection.on(RealtimeEvents.SESSION_STARTED, on_session_started)
connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, on_partial_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, on_committed_transcript)
connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS, on_committed_transcript_with_timestamps)
connection.on(RealtimeEvents.ERROR, on_error)
connection.on(RealtimeEvents.CLOSE, on_close)
print("Transcribing audio stream... (Press Ctrl+C to stop)")
try:
# Wait until error occurs or connection closes
await stop_event.wait()
except KeyboardInterrupt:
print("\nStopping transcription...")
finally:
await connection.close()
if __name__ == "__main__":
asyncio.run(main())
2

Execute o código

python example.py

Você verá a transcrição do arquivo de áudio impressa no console em transcrições parciais e confirmadas.

Próximas etapas