diff options
-rw-r--r-- | example/example.lua | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/example/example.lua b/example/example.lua index 73841c6..45056c3 100644 --- a/example/example.lua +++ b/example/example.lua @@ -3,26 +3,44 @@ local MusicUtil = require "musicutil" engine.name = "PolyPerc" +scale = nil + function redraw() screen.clear() screen.move(64, 32) - screen.text_center("norns example #" .. math.floor(math.random() * 1000)) + screen.text_center(scale.name) screen.update() end function init() + -- random scale output, just to emphasize the point + local base = 60 + scale = MusicUtil.SCALES[math.random(1, #MusicUtil.SCALES)] redraw() - -- random note output, just to emphasize the point - local note = math.random(60, 90) - engine.hz(MusicUtil.note_num_to_freq(note)) + + local notes = {} + for _, interval in pairs(scale.intervals) do + table.insert(notes, base + interval) + end + local m = midi.connect(2) local c = metro.init() - c.time = 0.5 + c.time = 0.2 + local on = false c.event = function () - c:stop() - metro.free(c.id) - m:note_off(note, 10) + if #notes == 0 then + c:stop() + elseif not on then + on = true + local here = notes[1] + engine.hz(MusicUtil.note_num_to_freq(here)) + m:note_on(here, 20) + else + on = false + local here = table.remove(notes, 1) + m:note_off(here, 20) + end end m:note_on(note, 20) c:start() |