-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain-vars.js
48 lines (42 loc) · 1.27 KB
/
main-vars.js
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
45
46
47
48
'use strict'
define((require) => {
let metronome = require('metronome')
let {evalParamFrame} = require('player/eval-param')
let system = require('play/system')
let scale = require('music/scale')
let mainVars = {
bpm: { setter: (v) => metronome.bpm(v), default:110 },
scale: { setter: (v) => { if (typeof v === 'string') { scale.set(v.toLowerCase()) } }, default:'major' },
root: { setter: (v) => { scale.setRoot(v) }, default:0 },
'beat.readouts': { setter: (v) => metronome.setBeatReadouts(v), default:[16,32] },
}
let reset = () => {
for (let k in mainVars) {
mainVars[k].value = undefined
mainVars[k].setter(mainVars[k].default)
}
}
let exists = (name) => {
return mainVars[name] !== undefined
}
let set = (name, value) => {
let beat = metronome.beatTime(system.timeNow())
mainVars[name].value = value
mainVars[name].setter(evalParamFrame(mainVars[name].value, {idx:beat,count:beat}, beat))
}
let update = (step, beat) => {
for (let k in mainVars) {
let value = mainVars[k].value
if (value) {
let v = evalParamFrame(value, {idx:step,count:beat}, beat)
mainVars[k].setter(v)
}
}
}
return {
exists: exists,
set: set,
update: update,
reset: reset,
}
})