UNPKG

audio-source-composer

Version:

Audio Source Composer

101 lines (80 loc) 2.49 kB
var http = require("http"); var https = require("https"); // var url = require("url"); const fs = require('fs'); const WAVE_FILE_LIST = './.list.json'; const SAMPLE_FOLDER = '../s/'; (async () => { let waveURLs = null; if(await fileExists(WAVE_FILE_LIST)) { const fileData = await readFile(WAVE_FILE_LIST); waveURLs = JSON.parse(fileData); } let promises = []; for(let i=0; i<waveURLs.length; i++) { const waveURL = new URL(waveURLs[i]); let fileName = waveURL.pathname.split('/').pop(); promises.push(downloadFile(waveURL, fileName)); if(promises.length > 25) { for(let j=0; j<promises.length; j++) { await promises[j]; } promises = []; } } })(); async function downloadFile(url, fileName) { fileName = SAMPLE_FOLDER + fileName; if(await fileExists(fileName)) { console.log("Skipping ", url+''); return false; } console.log("Downloading ", url+''); const fileContent = await get(url); await writeToFile(fileName, fileContent); return true; } async function fileExists(path) { return new Promise((resolve, reject) => { fs.access(path, function(err) { resolve(!err); }); }); } async function readFile(path) { return new Promise((resolve, reject) => { fs.readFile(path, function(err, data) { if(err) reject(err); else resolve(data); }); }); } async function writeToFile(path, data) { return new Promise((resolve, reject) => { fs.writeFile(path, data, function(err) { if(err) reject(err); else resolve(); }); }); } function get(options) { const protocol = options.protocol || options; let client = http; if(protocol.toLowerCase().startsWith('https')) client = https; return new Promise((resolve, reject) => { client.get(options, function (res) { // initialize the container for our data var data = []; res.on("data", (chunk) => data.push(chunk)); res.on("end", () => { const buffer = Buffer.concat(data); // console.log(buffer.toString('base64')); resolve(buffer); }); res.on("error", (err) => reject(err)); }).on("error", (err) => { reject(err); }); }) }