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

199
Vistas
¿Cómo transmitir audio desde una transmisión de audio creada manualmente? (lado del cliente)

Todo se está haciendo en la parte delantera.

Mi objetivo es poder crear una pista de audio, en tiempo real, y reproducirla instantáneamente para un usuario. El archivo sería de aproximadamente 10 minutos. Sin embargo, los archivos son muy simples, en su mayoría silenciosos, con algunos clips de sonido (el clip de sonido es de 2kb) salpicados. Entonces, el proceso para generar los datos (los bytes sin procesar) es muy simple, es escribir el clip de sonido de 2kb o colocar una cantidad de 00 para el silencio. Es solo eso por 10 minutos. Pero en lugar de generar el archivo completo y luego reproducirlo, me gustaría transmitir el audio; idealmente, generaría más y más archivos mientras se reproduce el audio. Evitaría cualquier retraso notable entre el momento en que el usuario hace clic en reproducir y el momento en que comienza a reproducirse el audio. El proceso de creación del archivo puede demorar entre 20 milisegundos y 500 milisegundos, se crean diferentes archivos en función de la entrada del usuario.

El único problema es: no tengo idea de cómo hacer esto. He leído ideas sobre el uso de sockets web, pero parece que los datos provendrían del servidor, no veo ninguna razón para molestar a un servidor con esto cuando JavaScript puede generar fácilmente los datos de audio por sí solo.

He estado investigando y experimentando con Web Audio API y Media Streams API durante las últimas horas, sigo dando vueltas y estoy totalmente confundido. Estoy empezando a pensar que estas API están destinadas a recopilar datos del micrófono o la cámara web de un usuario, y no para alimentar datos directamente desde una transmisión legible.

¿Es posible lo que quiero hacer? ¿Se puede lograr usando algo como MediaStreamAudioSourceNode o hay otra forma más simple que no he notado?

Cualquier ayuda sobre este tema sería muy apreciada. Los ejemplos de una versión de trabajo simple serían aún más apreciados. ¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Voy a seguir esta pregunta, porque sería muy bueno conocer una verdadera solución de transmisión. Mi experiencia se limita a usar la API de WebAudio para reproducir dos sonidos con una pausa dada entre ellos. Los datos se generan en el servidor y se descargan mediante Thymeleaf, en dos variables de JavaScript que contienen los datos PCM que se reproducirán. Pero estos datos podrían haberse generado fácilmente en el propio cliente a través de Javascript.

Lo siguiente no es muy bueno, pero casi podría funcionar, dado que hay muchos silencios. Estoy pensando, administre una cola FIFO ordenada con el nombre de la variable y algún tipo de valor de tiempo para cuando desee que se reproduzca el audio asociado, y tenga una función que sondee periódicamente la cola y cargue comandos en métodos javascript setTimeout con la cantidad de retraso calculada basado en los valores de temporización dados en la cola.

Para la única aplicación limitada que tengo, el botón llama a lo siguiente (donde escribí un método que reproduce el sonido contenido en la variable javascript)

 playTone(pcmData1); setTimeout(() => playTone(pcmData2), 3500);

Tengo el lujo de saber que pcmData1 tiene una duración de 2 segundos y un intervalo de pausa fijo entre los dos sonidos. Tampoco cuento con una precisión de tiempo significativa. Para su herramienta de reproducción continua, solo tendría la parte setTimeout con valores para la variable pcmData y el tiempo obtenido de la cola FIFO de programación.

Si esto es útil y desencadena una idea útil, IDK. Con suerte, alguien con más experiencia nos mostrará cómo transmitir datos sobre la marcha. Ciertamente, esto es algo que se puede hacer fácilmente con Java, usando su clase SourceDataLine que tiene aspectos útiles de cola de bloqueo, pero aún no he encontrado un equivalente de Javascript.

about 4 years ago · Juan Pablo Isaza Denunciar
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