Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

493
Vistas
Cómo decodificar datos de audio con Web Audio API desde blob enviado desde el servidor websocket de python

Estoy tratando de enviar datos de audio desde un archivo en el sistema del servidor a un cliente web. El servidor ejecuta Flask y tiene Flask-Sock instalado

sin embargo, en el lado del cliente, aparece un error al intentar decodificar los datos entrantes...

 Uncaught (in promise) DOMException: Failed to execute 'decodeAudioData' on 'BaseAudioContext': Unable to decode audio data

Servidor

 import json import time import wave from app import socket from simple_websocket.ws \ import Base as Websocket CHUNK_SIZE = 10 * 1024 @socket.route("/stream") def audio_stream(ws: Websocket): while ws.connected: raw = ws.receive() message = json.loads(raw) wav = wave.open(message["filename"], "rb") sample_rate = wav.getframerate() data = None complete = False while not complete: if wav.tell() >= wav.getnframes(): complete = True print("frame: " + str(wav.tell())) data = wav.readframes(CHUNK_SIZE) ws.send(data) time.sleep(0.8 * CHUNK_SIZE / sample_rate) wav.close() print("finished streaming!")

Cliente

 let context; try{ window.AudioContext = window.AudioContext || window.webkitAudioContext context = new AudioContext() }catch(e) { alert('Web Audio API is not supported in this browser') } function get_stream() { const ws = new WebSocket("ws://localhost:5000/stream") ws.onopen = () => { // initially send information to the server to fetch the audio stream ws.send(JSON.stringify({ filename: "example.wav" })) } ws.onmessage = message => { let blob = message.data let reader = new FileReader() reader.readAsArrayBuffer(blob) reader.onload = async () => { let arrayBuffer = reader.result let audioBuffer = await context.decodeAudioData(arrayBuffer) console.log(audioBuffer) // ??? } } } get_stream()

¿Tengo que codificarlo de alguna manera antes de enviarlo al navegador? ¿Es algo que estoy haciendo mal en el servidor o no estoy decodificando correctamente?

EDITAR 1:

Parece que puedo decodificar los datos y reproducirlos si envío el archivo completo... que no es realmente lo que quiero, ¿hay alguna forma de decodificar datos parciales y agregarlos a un búfer?

about 4 years ago · Santiago Gelvez
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda