mscx2ly
Version:
Tool to render lilypond code from a MuseScore save file
85 lines (80 loc) • 3.88 kB
JavaScript
import { program } from 'commander';
import fs from 'fs';
import { mscx2ly } from '../index.js';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import path from 'path';
const __dirname = dirname(fileURLToPath(import.meta.url));
const { version } = JSON.parse(
fs.readFileSync(
path.join(__dirname, '..', 'package.json'),
'utf-8'
)
);
program
.version(version)
.option('-m, --separate-music', 'Save music definitions separately, requires output-file')
.option('-s, --separate-score', 'Save score definitions separately, requires output-file')
.option('-p, --separate-parts', 'Save score definitions separately, requires output-file')
.option('--music-file <file>', 'Save music definitions to a separate file')
.option('--score-file <file>', 'Save score definitions to a separate file')
.option('--parts-file <file>', 'Save parts definitions to a separate file')
.option('--omit-parts', 'Do not render parts')
.option('--omit-score', 'Do not render score')
.option('--omit-music', 'Do not render music')
.option('--score-papersize <size>', 'Set the paper size for the score')
.option('--parts-papersize <size>', 'Set the paper size for the parts')
.option('--score-staffsize <size>', 'Set the font size for the score')
.option('--parts-staffsize <size>', 'Set the font size for the parts')
// .option('--no-staccato', 'Do not render staccato articulations')
// .option('--no-accent', 'Do not render accent articulations')
// .option('--no-tenuto', 'Do not render tenuto articulations')
// .option('--no-marcato', 'Do not render marcato articulations')
.arguments('<source-file> [output-file]')
.action((sourceFile, outputFile, options) => {
if (!sourceFile) {
console.error('source-file is required');
program.help();
}
if (!fs.existsSync(sourceFile)) {
console.error(`source-file ${sourceFile} does not exist`);
program.help();
}
//
// rules:
// source-file is required
// output-file is only optional if all of the musicFile, scoreFile, and partsFile are specified
if (!outputFile && !(options.separateMusic && options.separateScore && options.separateParts)) {
console.error('output-file is required');
program.help();
}
// generate the filenames
let musicFile = options.musicFile? options.musicFile : `${outputFile}_music.ly`;
let scoreFile = options.scoreFile? options.scoreFile : `${outputFile}_score.ly`;
let partsFile = options.partsFile? options.partsFile : `${outputFile}_parts.ly`;
mscx2ly({
sourceFile,
outputFile,
musicFile,
scoreFile,
partsFile,
separateMusic: options.separateMusic,
separateScore: options.separateScore,
separateParts: options.separateParts,
omitMusic: options.omitMusic !== undefined? options.omitMusic : false,
omitScore: options.omitScore !== undefined? options.omitScore : false,
omitParts: options.omitParts !== undefined? options.omitParts : false,
renderingOptions: {
scorePaperSize: options.scorePapersize,
partsPaperSize: options.partsPapersize,
scoreStaffSize: options.scoreStaffsize,
partsStaffSize: options.partsStaffsize,
// omitStaccato: options.noStaccato,
// omitAccent: options.noAccent,
// omitTenuto: options.noTenuto,
// omitMarcato: options.noMarcato
}
});
});
program.parse(process.argv);