mirror of
https://github.com/LDDestroier/CC/
synced 2024-11-17 15:24:52 +00:00
Create piano.lua
This commit is contained in:
parent
806a410a8d
commit
d784471ef5
83
piano.lua
Normal file
83
piano.lua
Normal file
@ -0,0 +1,83 @@
|
||||
-- CC:Tweaked piano
|
||||
|
||||
local spamMode = true
|
||||
|
||||
local notes = {
|
||||
[0] = keys.a, -- F#2
|
||||
[1] = keys.z, -- G2
|
||||
[2] = keys.s, -- G#2
|
||||
[3] = keys.x, -- A2
|
||||
[4] = keys.d, -- A#2
|
||||
[5] = keys.c, -- B2
|
||||
[6] = keys.v, -- C3
|
||||
[7] = keys.g, -- C#3
|
||||
[8] = keys.b, -- D3
|
||||
[9] = keys.h, -- D#3
|
||||
[10] = keys.n, -- E3
|
||||
[11] = keys.m, -- F3
|
||||
[12] = keys.k, -- F#3
|
||||
[13] = keys.comma, -- G3
|
||||
[14] = keys.l, -- G#3
|
||||
[15] = keys.period, -- A3
|
||||
[16] = keys.semiColon, -- A#3
|
||||
[17] = keys.slash, -- B3
|
||||
[18] = keys.q, -- C4
|
||||
[19] = keys.two, -- C#4
|
||||
[20] = keys.w, -- D4
|
||||
[21] = keys.three, -- D#4
|
||||
[22] = keys.e, -- E4
|
||||
[23] = keys.r, -- F4
|
||||
[24] = keys.five, -- F#4
|
||||
}
|
||||
|
||||
local kNotes = {}
|
||||
local notesDown = {}
|
||||
for k,v in pairs(notes) do
|
||||
kNotes[v] = k
|
||||
notesDown[k] = false
|
||||
end
|
||||
|
||||
local speaker = peripheral.find("speaker")
|
||||
|
||||
local between = function(n, min, max)
|
||||
return math.min(math.max(n, min), max)
|
||||
end
|
||||
|
||||
local playNote = function(note, instrument, volume)
|
||||
speaker.playNote(instrument or "harp", volume or 1, between(note, 0, 24))
|
||||
end
|
||||
|
||||
local drawPiano = function()
|
||||
-- add render function later
|
||||
end
|
||||
|
||||
local evt
|
||||
local tID = os.startTimer(0)
|
||||
drawPiano()
|
||||
while true do
|
||||
evt = {os.pullEventRaw()}
|
||||
if evt[1] == "key" then
|
||||
if kNotes[evt[2]] and not evt[3] then
|
||||
playNote(kNotes[evt[2]])
|
||||
notesDown[kNotes[evt[2]]] = 1
|
||||
drawPiano()
|
||||
end
|
||||
elseif evt[1] == "key_up" then
|
||||
if kNotes[evt[2]] then
|
||||
notesDown[kNotes[evt[2]]] = false
|
||||
drawPiano()
|
||||
end
|
||||
elseif evt[1] == "timer" and evt[2] == tID then
|
||||
tID = os.startTimer(0)
|
||||
if spamMode then
|
||||
for k,v in pairs(notesDown) do
|
||||
if v then
|
||||
playNote(k, nil, v)
|
||||
notesDown[k] = math.max(0, v - 0.03)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif evt[1] == "terminate" then
|
||||
return
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user