SE-09/HapticsProject
2
1const fs = require("fs");2const _ = require("lodash");3const Aimastering = require('aimastering');4const program = require('commander');5const srs = require('secure-random-string');6 7// parse command line arguments8program9 .option('-i, --input <s>', 'Input audio file path')10 .option('-o, --output <s>', 'Output audio file path')11 .parse(process.argv);12if (program.input.length === 0) {13 program.help();14}15 16// Call API with promise interface17const callApiDeferred = async function (api, method) {18 const apiArgments = Array.prototype.slice.call(arguments, 2);19 20 return new Promise((resolve, reject) => {21 const callback = (error, data, response) => {22 if (error) {23 reject(error, response);24 } else {25 resolve(data, response);26 }27 };28 const args = _.flatten([29 apiArgments,30 callback31 ]);32 33 method.apply(api, args);34 });35};36 37const sleep = async function (ms) {38 return new Promise((resolve) => {39 setTimeout(resolve, ms);40 });41};42 43const main = async function () {44 // configure API client45 const client = Aimastering.ApiClient.instance;46 const bearer = client.authentications['bearer'];47 // bearer.apiKey = process.env.AIMASTERING_ACCESS_TOKEN;48 49 // API key must be 'guest_' + [arbitrary string]50 // Unless the API key is leaked, the data will not be visible to others.51 bearer.apiKey = 'guest_' + srs({length: 32})52 53 // create api54 const audioApi = new Aimastering.AudioApi(client);55 const masteringApi = new Aimastering.MasteringApi(client);56 57 // upload input audio58 const inputAudioData = fs.createReadStream(program.input);59 const inputAudio = await callApiDeferred(audioApi, audioApi.createAudio, {60 'file': inputAudioData,61 });62 console.error(inputAudio);63 64 // start mastering65 let mastering = await callApiDeferred(masteringApi, masteringApi.createMastering, inputAudio.id, {66 'mode': 'default',67 });68 console.error(mastering);69 70 // wait for the mastering completion71 while (mastering.status === 'waiting' || mastering.status === 'processing') {72 mastering = await callApiDeferred(masteringApi, masteringApi.getMastering, mastering.id);73 console.error('waiting for the mastering completion progression: '74 + (100 * mastering.progression).toFixed() + '%');75 await sleep(5000);76 }77 78 // download output audio79 const outputAudioData = await callApiDeferred(audioApi, audioApi.downloadAudio, mastering.output_audio_id);80 fs.writeFileSync(program.output, outputAudioData);81 82 console.error('the output file was written to ' + program.output);83};84 85main();86 