UNPKG

geostorm-ost

Version:

Play Geostorm OST from terminal.

61 lines (50 loc) 1.52 kB
const stream = require('youtube-audio-stream'); const Decoder = require('lame').Decoder; const Speaker = require('speaker'); const animation = require('chalk-animation'); const chalk = require('chalk'); const fs = require('fs'); function Tracker(str) { // 1. some data var i = 0, anm = null; var trk = null; function parse() { // a. format is "bla bla bla <min>:<sec>" const z = []; for(var ln of str.split(/\r?\n/g)) { if(!ln) continue; var tim = ln.match(/\d+:\d+/)[0].split(':'); var min = parseInt(tim[0], 10), sec = parseInt(tim[1], 10); z.push({'time': min*60+sec, 'text': ln}); } return z; }; function log() { // a. display a track if(anm) anm.stop(); anm = animation.rainbow(trk[i++].text); }; function stop() { // a. stop track display if(anm) anm.stop(); }; // 2. setup track display trk = parse(str); for(var t=0, T=trk.length; t<T; t++) setTimeout(log, trk[t].time*1000); return {parse, log, stop}; }; // I. setup const url = 'https://www.youtube.com/watch?v=NzaJUTUxzrk'; const head = fs.readFileSync(__dirname+'/head.txt', 'utf8'); const body = fs.readFileSync(__dirname+'/body.txt', 'utf8'); const foot = fs.readFileSync(__dirname+'/foot.txt', 'utf8'); const tracker = Tracker(body); const speaker = new Speaker(); console.log(chalk.cyan(head)); // II. start playing var ost = stream(url).pipe(Decoder()).pipe(speaker); ost.on('finish', () => { tracker.stop(); console.log(chalk.blue(foot)); });