-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathrender.js
More file actions
44 lines (37 loc) · 1.25 KB
/
render.js
File metadata and controls
44 lines (37 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
'use strict';
const program = require('commander');
require("./js/playback/rendering-tree-player.js");
require('./js/playback/playback-device.js');
require('./tests/base.js');
var math = require('mathjs');
program
.version('0.0.1')
.option('-t, --tempo <value>', 'sets the midi tempo', 120)
.option('-d, --duration <value>', 'duration', 4)
.option('-o, --output <value>', 'output file', "output.mid");
program.parse(process.argv);
const sequence = program.args[0];
if (!sequence)
{
throw("error: no sequence provided");
}
// Make a rendering tree from the input
var renderingTree = evaluator.evaluateRenderingTree(sequence);
var renderingPlayer = new RenderingTreePlayer();
renderingPlayer.reset();
renderingPlayer.setRenderingTree(renderingTree);
var midiRenderer = new MidiFileRenderer();
midiRenderer.setTempo(program.opts().tempo);
const cycleCount = math.fraction(program.opts().duration);
var currentCycleTime = math.fraction("0");
while (currentCycleTime < cycleCount)
{
var event = renderingPlayer.eventForTime(currentCycleTime);
if (event)
{
midiRenderer.tick(currentCycleTime, event);
}
currentCycleTime = renderingPlayer.advance(currentCycleTime);
}
midiRenderer.write(program.opts().output);
console.log(program.opts().output+" written");