ÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÀ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî =À?ÿÿÿðÿðÿÿÿðÿÿÿÿÿÿðÿÿÿððÿÿÿÿððððÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÁÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÁÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÁÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÁÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÁÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÏÿÏÿÏ ÌÿÏÿÏ ÌÿÌ Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì ÷ -- title: Music theory test -- author: Sava -- desc: Key sign finder -- license: MIT License -- version: 0.1 -- script: lua w=240 h=136 startName="Des" startN = 0 signs = nil signF = false testKey = 48 t=0 major={0, 2, 4, 5, 7, 9, 11, 12} mapping = { 'C', 'C', 'D', 'D', 'E', 'F', 'F', 'G', 'G', 'A', 'A', 'B' } function BOOT() trace("start") if startName ~= "" then for i=1, #nNames do if startName:sub(1, 1) == nNames[i] then startN=startN+major[i] break end end if startName:sub(1, 1) == "B" then startN=startN+10 end startAdd = 0 if startName:sub(2, 3) == "es" or startName:sub(1, 2) == "As" or startName:sub(1, 2) == "Es" then startAdd=-1 end if startName:sub(2, 3) == "is" then startAdd=1 end startN=startN+startAdd else startN = nil end if signs == nil then signF = startName:sub(2, 3) == "es" signS = true else signS = false end end iterN = 0 function TIC() if (startName == "" or signs == nil) and t%30 == 0 then stopAll() if iterN > 0 then testKey = testKey + (signF and -7 or 7) end playNote(testKey) keyt = mapping[testKey%12+2]..(signF and not signS and "is" or "") if iterN == signs then startName = keyt end if startN ~= nil and keyt == startName:sub(0, 1) then signs = iterN end iterN = iterN + 1 end cls(0) for o=-1, 8 do local off = o*12 for i=1, 12 do local pl = false for i1=1, 4 do if pNotes[i1]==i+off then pl = true end end drawNote(i+off, pl) end for j=1, #black do local i = black[j] local pl = false for i1=1, 4 do if pNotes[i1]==i+off then pl = true end end drawNote(i+off, pl) end end print(startName) print(testKey, 0, 7) print(iterN, 0, 14) print(signs, 0, 28) print(keyt, 0, 36) t=t+1 end pNotes = {} cNote = 0 function playNote(note) sfx(0, note, -1, cNote, 10) pNotes[cNote+1]=note cNote=(cNote+1)%4 end function stopAll() sfx(0, 0, 0, 0) pNotes[1]=nil sfx(0, 0, 0, 1) pNotes[2]=nil sfx(0, 0, 0, 2) pNotes[3]=nil sfx(0, 0, 0, 3) pNotes[4]=nil end black={1, 3, 6, 8, 10} function drawNote(note, playing) blackN = false local posX = note*2+note//12*2*2 for i=1, #black do if note%12 == black[i] then blackN = true end end if note%12 >= 5 then posX=posX+2 end local col = playing and 2 or 12 local colB = playing and 1 or 15 if blackN then rect(posX, h-10, 3, 5, colB) else rect(posX, h-10, 3, 10, col) --rectb(posX, h-10, 4, 10, col+1) end end nNames = {"C", "D", "E", "F", "G", "A", "H"}