|
楼主 |
发表于 2024-5-28 15:27:07
|
显示全部楼层
这里我们肯定需要一个将"#wait"的指令,转换成function() Metronome:wait(xxx) end的函数,我这里管他叫解码器(decoder)。
除了#wait,用这个方法很明显我们还能加入#t+ #t- 开关触发组的功能,#pause #resume 的暂停/继续控制,甚至#print的打印方法。
这是我的默认解码器
- M._commands = {}
- M.register = function(command, handler)
- M._commands[command] = handler
- end
- M.decoder = function(metronome, data)
- runtime.HC.eventBus:raiseEvent('core.metronome.sent',metronome)
- if (#data > 0 and string.sub(data, 1, 1) == '#') then
- local cmd, sep, param = string.match(data, "^#([^ ]+)(%s*)(.-)$")
- if cmd ~= nil then
- if M._commands[cmd] ~= nil then
- return M._commands[cmd](metronome, param)
- end
- end
- end
- return data
- end
- M.register('wait', function(metronome, param)
- return function(metronome)
- metronome:wait(param / 1000)
- end
- end)
- M.register('pause', function(metronome, param)
- return function(metronome)
- metronome:pause()
- end
- end)
- M.register('resume', function(metronome, param)
- return function(metronome)
- metronome:resume()
- end
- end)
- M.register('print', function(metronome, param)
- return function(metronome)
- print(param)
- end
- end)
- M.register('t+', function(metronome, param)
- return function(metronome)
- runtime.world:enableTriggers(param)
- end
- end)
- M.register('t-', function(metronome, param)
- return function(metronome)
- runtime.world:disableTriggers(param)
- end
- end)
复制代码 很简单易懂
还提供了一个register方法,能很方便的添加自己的新指令。
使用了这个,我们就能直接发送"n;w;w;#wait 3000;n;e;"的指令了。
|
|