Estoy trabajando en un proyecto en JavaScript y necesito hacer una tarea bastante extraña. No estoy seguro de cómo lograrlo. He buscado en las bibliotecas de audio más populares, pero no parece ser una manera fácil de exportar un archivo creado rápidamente, sin grabarlo en tiempo real. Podría estar equivocado.
Voy a tener algunos datos como JSON o en formato CSV con números en cada fila. Ese número corresponde a los segundos transcurridos. Estos datos me indican cuándo es necesario reproducir un determinado archivo de audio. El archivo de audio es solo un clip de pitidos de 5 segundos de duración.
Necesito generar un archivo de audio largo que sea simplemente silencioso, pero donde el clip de audio se reproduce cuando los datos lo "instruyen". Entonces podría jugar a los 10 segundos, 45 segundos, 267 segundos, etc.
El archivo de audio terminado podría durar más de una hora. Tenía la esperanza de crear un sistema en el que pudiera seleccionar un archivo de audio y un archivo de datos de mi computadora, hacer clic en un botón, dejar que se procese y luego descargar el archivo terminado.
Espero que lo que quiero hacer no sea confuso. ¿Puedo usar Web Audio API para esto o necesito una biblioteca? Estoy atascado en la primera parte del proceso, es decir, qué usar y cómo "crear" un archivo de la nada.
Creo que podría probar MediaRecorder de MediaStream Recording API ; le permitirá crear una función de grabación (algo como esto):
const stream = navigator.mediaDevices.getUserMedia({ audio: true }); const mediaRecorder = new MediaRecorder(stream); // then you can get your number from JSON / CSV file and do next mediaRecorder.start(); await sleep(YOUR_NUMBER_FROM_FILE); mediaRecorder.stop(); El ejemplo anterior solo crea audio que durará segundos concretos. Puede cargar sus archivos de audio existentes e intentar reproducirlos en segundo plano. Supongo que MediaRecorder también los grabará.
Consulte los documentos web de MDN sobre MediaRecorder
Para resumir: Web Audio API y MediaStream Recording API serán suficientes para su caso.
Espero que esto te ayude de alguna manera.