diff --git a/src/cue.js b/src/cue.js index df1a630..de2772a 100644 --- a/src/cue.js +++ b/src/cue.js @@ -11,14 +11,15 @@ export function generate(data, outputFile) { fs.appendFileSync(outputFile, `FILE "${data.audioFile}" M4A\n`); for (var i in data.tracks) { let song = data.tracks[i]; - let minutes = song.start.hh * 60 + song.start.mm; + let minutes = String(song.start.hh * 60 + song.start.mm).padStart(2, '0'); + let seconds = String(song.start.ss).padStart(2, '0'); fs.appendFileSync(outputFile, ` TRACK ${song.track} AUDIO\n`); fs.appendFileSync(outputFile, ` TITLE "${song.title}"\n`); fs.appendFileSync(outputFile, ` PERFORMER "${song.artist}"\n`); // Cue File is always MINUTES:SECONDS:FRAME, where FRAME is 00 fs.appendFileSync( outputFile, - ` INDEX 01 ${minutes}:${song.start.ss}:00\n` + ` INDEX 01 ${minutes}:${seconds}:00\n` ); } } diff --git a/test/cue_test.js b/test/cue_test.js new file mode 100644 index 0000000..9525d24 --- /dev/null +++ b/test/cue_test.js @@ -0,0 +1,46 @@ +/*jshint esversion: 6 */ +import { strict as assert } from "assert"; +import { generate } from "../src/cue.js"; +import fs from "fs"; + +const DATA = { + artist: "Dumbledore", + album: "Curse of the Elder Wand", + audioFile: 'audio.m4a', + tracks: [{ + artist: "Unknown", + title: "the 1", + track: 1, + start: { ts: "00:00:00", hh: 0, mm: 0, ss: 0, calc: 0 }, + end: { ts: "00:3:9", hh: 0, mm: 3, ss: 9, calc: 189 }, + _: { left_text: "", right_text: "the 1" }, + }, + { + artist: "Unknown", + title: "cardigan", + track: 2, + start: { ts: "00:3:09", hh: 0, mm: 3, ss: 9, calc: 189 }, + end: { ts: "00:9:30", hh: 0, mm: 9, ss: 30, calc: 570 }, + _: { left_text: "", right_text: "cardigan" }, + }] +}; + +describe("CUE", function () { + it("should generate with leading zeroes", function () { + generate(DATA, "/tmp/test.cue"); + const CUE_EXPECTED = `REM Generated using youtube-cue +PERFORMER "Dumbledore" +TITLE "Curse of the Elder Wand" +FILE "audio.m4a" M4A + TRACK 1 AUDIO + TITLE "the 1" + PERFORMER "Unknown" + INDEX 01 00:00:00 + TRACK 2 AUDIO + TITLE "cardigan" + PERFORMER "Unknown" + INDEX 01 03:09:00 +`; + assert.equal(CUE_EXPECTED, fs.readFileSync('/tmp/test.cue', 'utf-8')); + }); +});