2021-07-29 05:51:39 +00:00
|
|
|
import fs from "fs";
|
2021-05-30 15:31:27 +00:00
|
|
|
|
|
|
|
// https://en.wikipedia.org/wiki/Cue_sheet_(computing)
|
|
|
|
export function generate(data, outputFile) {
|
|
|
|
try {
|
2021-07-29 05:51:39 +00:00
|
|
|
fs.truncateSync(outputFile);
|
2021-05-30 15:31:27 +00:00
|
|
|
} catch {}
|
|
|
|
fs.appendFileSync(outputFile, `REM Generated using youtube-cue\n`);
|
|
|
|
fs.appendFileSync(outputFile, `PERFORMER "${data.artist}"\n`);
|
|
|
|
fs.appendFileSync(outputFile, `TITLE "${data.album}"\n`);
|
|
|
|
fs.appendFileSync(outputFile, `FILE "${data.audioFile}" M4A\n`);
|
2021-07-29 05:51:39 +00:00
|
|
|
for (var i in data.tracks) {
|
2021-05-30 15:31:27 +00:00
|
|
|
let song = data.tracks[i];
|
2022-08-26 12:21:19 +00:00
|
|
|
let minutes = String(song.start.hh * 60 + song.start.mm).padStart(2, '0');
|
|
|
|
let seconds = String(song.start.ss).padStart(2, '0');
|
2021-05-30 15:31:27 +00:00
|
|
|
fs.appendFileSync(outputFile, ` TRACK ${song.track} AUDIO\n`);
|
|
|
|
fs.appendFileSync(outputFile, ` TITLE "${song.title}"\n`);
|
|
|
|
fs.appendFileSync(outputFile, ` PERFORMER "${song.artist}"\n`);
|
2021-06-09 18:19:03 +00:00
|
|
|
// Cue File is always MINUTES:SECONDS:FRAME, where FRAME is 00
|
2021-07-29 05:51:39 +00:00
|
|
|
fs.appendFileSync(
|
|
|
|
outputFile,
|
2022-08-26 12:21:19 +00:00
|
|
|
` INDEX 01 ${minutes}:${seconds}:00\n`
|
2021-07-29 05:51:39 +00:00
|
|
|
);
|
2021-05-30 15:31:27 +00:00
|
|
|
}
|
|
|
|
}
|