mirror of
https://github.com/dwhinham/mt32-pi.git
synced 2026-07-09 02:07:45 +00:00
138 lines
2.7 KiB
Lua
138 lines
2.7 KiB
Lua
TLCDLogType = {
|
|
Startup = 0,
|
|
Error = 1,
|
|
Warning = 2,
|
|
Notice = 3,
|
|
Spinner = 4,
|
|
}
|
|
|
|
FirstCall = true
|
|
MessageShown = false
|
|
LastUpdate = 0
|
|
TotalTime = 0
|
|
|
|
BD = 0x24
|
|
SD = 0x26
|
|
CHH = 0x2A
|
|
OHH = 0x2E
|
|
CB = 0x38
|
|
|
|
NOTE_ON = 0x90
|
|
VELOCITY = 0x40
|
|
|
|
BPM = 90
|
|
NOTES = {
|
|
{ CHH, CB, BD },
|
|
{ CHH },
|
|
{ CHH, SD },
|
|
{ CHH, BD },
|
|
{ CHH, CB, BD },
|
|
{ CHH },
|
|
{ CHH, SD },
|
|
{ OHH }
|
|
}
|
|
|
|
NoteIndex = 1
|
|
|
|
function OnUpdate(millis)
|
|
if FirstCall then
|
|
LastUpdate = millis
|
|
FirstCall = false
|
|
end
|
|
|
|
local deltaTime = millis - LastUpdate
|
|
TotalTime = TotalTime + deltaTime
|
|
|
|
-- if TotalTime >= 60 * 1000 / BPM / 2 then
|
|
-- for i = 1, #NOTES[NoteIndex] do
|
|
-- mt32pi.SendMIDIShortMessage(NOTE_ON | 0x09, NOTES[NoteIndex][i], VELOCITY);
|
|
-- end
|
|
|
|
-- NoteIndex = NoteIndex + 1
|
|
-- if NoteIndex > #NOTES then
|
|
-- NoteIndex = 1
|
|
-- end
|
|
-- TotalTime = 0
|
|
-- end
|
|
|
|
-- if not MessageShown and TotalTime >= 5000 then
|
|
-- mt32pi.LCDLog(TLCDLogType.Notice, "Hello from Lua!")
|
|
-- MessageShown = true
|
|
-- end
|
|
|
|
LastUpdate = millis
|
|
end
|
|
|
|
function OnMIDIShortMessage(status, data1, data2)
|
|
local statusNybble = status & 0xF0
|
|
|
|
-- Re-map portamento time MSB to LSB for compatiblity with SC-55
|
|
if statusNybble == 0xB0 then
|
|
-- CC #5 - Portamento Time MSB
|
|
if data1 == 0x05 then
|
|
-- Convert to LSB message
|
|
data1 = 0x25
|
|
|
|
-- CC #37 - Portamento Time LSB
|
|
elseif data1 == 0x25 then
|
|
-- Drop the message
|
|
return
|
|
end
|
|
end
|
|
|
|
return status, data1, data2
|
|
end
|
|
|
|
-- function OnMIDIShortMessage(status, data1, data2)
|
|
-- local statusNybble = status & 0xF0
|
|
-- local channelNybble = status & 0x0F
|
|
|
|
-- -- Note On
|
|
-- if statusNybble == 0x90 then
|
|
-- -- -- Max velocity
|
|
-- -- if (data2 > 0) then
|
|
-- -- data2 = 0x7F;
|
|
-- -- end
|
|
|
|
-- -- Not percussison channel
|
|
-- -- if channelNybble ~= 9 then
|
|
-- -- -- Transpose +1
|
|
-- -- data1 = data1 + 1;
|
|
-- -- end
|
|
|
|
-- -- Note Off
|
|
-- elseif statusNybble == 0x80 then
|
|
-- -- Not percussion channel
|
|
-- -- if channelNybble ~= 9 then
|
|
-- -- -- Transpose +1
|
|
-- -- data1 = data1 + 1;
|
|
-- -- end
|
|
|
|
-- -- Control Change
|
|
-- elseif statusNybble == 0xB0 then
|
|
-- -- CC# 3 - Unused
|
|
-- if data1 == 0x03 then
|
|
-- -- Switch to SoundFont
|
|
-- --mt32pi.SendMIDISysExMessage("\xF0\x7D\x03\x01\xF7");
|
|
-- BPM = data2
|
|
-- return;
|
|
-- elseif data1 == 0x1F then
|
|
-- -- Map to master volume control
|
|
-- mt32pi.SetMasterVolume(data2 / 127 * 100);
|
|
|
|
-- mt32pi.SendMIDIShortMessage(0x90, data2, 0x3F);
|
|
-- return;
|
|
-- end
|
|
-- end
|
|
|
|
-- -- Print MIDI message on LCD
|
|
-- -- mt32pi.LCDLog(TLCDLogType.Notice, string.format("0x%02X%02X%02X", status, data1, data2))
|
|
|
|
-- return status, data1, data2
|
|
-- end
|
|
|
|
function OnMIDISysExMessage(data)
|
|
-- Pass through
|
|
return data
|
|
end
|