es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo descargar un conjunto de archivos de audio en un solo archivo.

Estoy tratando de crear una aplicación web de tabla de sonidos en la que puedas agregar archivos de audio al sitio web y se almacenarán dentro de la base de datos indexada para luego ser recuperados y reproducidos.

Estaba pensando en agregar una función que te permita descargar el conjunto completo de archivos de audio como un solo archivo para que otras personas puedan importar tu conjunto.
Los datos se verían así:

const data = [
{
title: ‘audio1’,
description: ‘blabla’,
audio: AudioBuffer //o algún otro buffer
},{
title: ‘audio2’,
description: ‘blablabla’,
audio: AudioBuffer
}
]

La pregunta es, ¿cómo descargar esto como un solo archivo? Probablemente haya una forma con blobs, etc., pero no tengo idea de dónde buscar.
Obviamente, también tendría que decodificar esto para ser utilizado.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en javascript, blob, web-audio-api y arraybuffer, puedo sugerir los siguientes pasos para descargar el paquete de audio como un solo archivo:

    1. Crea un nuevo blob que contenga los datos binarios del paquete de audio utilizando el constructor Blob. El constructor Blob toma como argumentos un array de datos y un objeto de opciones. En este caso, el array de datos contendría los búferes de audio en el orden deseado y el objeto de opciones especificaría el tipo MIME del blob. Por ejemplo:
      const audioData = /* un array de objetos AudioBuffer */;
      const blob = new Blob(audioData, { type: 'application/octet-stream' });
      
    2. Crea un nuevo objeto URL que apunte al blob utilizando el método URL.createObjectURL(). Esta URL luego se puede utilizar para descargar el blob como un archivo. Por ejemplo:
      const url = URL.createObjectURL(blob);
      
    3. Crea un nuevo elemento de anclaje y establece su atributo href en la URL creada en el paso 2. Luego, simula un clic en este elemento para provocar la descarga del archivo. Por ejemplo:
      const downloadLink = document.createElement('a');
      downloadLink.href = url;
      downloadLink.download = 'audio_pack.bin';
      document.body.appendChild(downloadLink);
      downloadLink.click();
      document.body.removeChild(downloadLink);
      
    4. Finalmente, para decodificar los datos binarios descargados en búferes de audio individuales, puedes utilizar el método decodeAudioData() de la API de Web Audio. Este método toma como entrada un ArrayBuffer binario y devuelve un objeto AudioBuffer que se puede reproducir o manipular. Por ejemplo:
      const xhr = new XMLHttpRequest();
      xhr.open('GET', 'audio_pack.bin', true);
      xhr.responseType = 'arraybuffer';
      xhr.onload = function() {
       const audioData = xhr.response;
       audioContext.decodeAudioData(audioData, function(buffer) {
         // utiliza los objetos AudioBuffer decodificados según sea necesario
       });
      };
      xhr.send();
      

    Siguiendo estos pasos, deberías poder crear una aplicación web de una mesa de sonido que permita a los usuarios descargar y compartir paquetes de audio como archivos binarios individuales.

Comments are closed.