CoolFace
Apppublic

SE-09/HapticsProject

sourceHugging Faceunknownupdated 2y agoView on Hugging Face
2likes
main.js86 linesDownload Raw Back to masteringModule
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