Files
Chromacase/main.py
Clément Le Bihan 0254c26d20 rm tuple
2021-12-10 16:05:14 +01:00

101 lines
3.5 KiB
Python

from chroma_case.Partition import Partition
from chroma_case.Note import Note
import asyncio
import sys
import board, neopixel
pixels = neopixel.NeoPixel(board.D18, 20, brightness=0.1)
notePixels = { 'si': [0, 1],
'la#': [2, 3],
'la': [4, 5],
'sol#':[6],
'sol':[7, 8, 9],
'fa#':[10],
'fa':[11, 12, 13],
'mi':[14, 15, 16],
're#':[17],
're':[18, 19],
'do#':[],
'do':[]}
def hue_to_rgb(t1, t2, hue):
if hue < 0: hue += 6
if hue >= 6: hue -= 6
if hue < 1: return (t2 - t1) * hue + t1
if hue < 3: return t2
if hue < 4: return (t2 - t1) * (4 - hue) + t1
return t1
def hsl_to_rgb(hue, sat, light):
hue /= 60
if light <= 0.5:
t2 = light * (sat + 1)
else:
t2 = light + sat - (light * sat)
t1 = light * 2 - t2
r = hue_to_rgb(t1, t2, hue + 2) * 255
g = hue_to_rgb(t1, t2, hue) * 255
b = hue_to_rgb(t1, t2, hue - 2) * 255
return [round(r), round(g), round(b)]
async def to_chroma_case(data):
global pixels
hsl_starting_color = [55, 1, 0]
colored_pixels = notePixels[data["key"].lower()]
for i in range(11):
for pixelId in colored_pixels:
pixels[pixelId] = hsl_to_rgb(hsl_starting_color[0], hsl_starting_color[1], hsl_starting_color[2])
hsl_starting_color[2] += 0.001
await asyncio.sleep(0.001)
for pixelId in colored_pixels:
pixels[pixelId] = data["color"]
await asyncio.sleep(data['duration'] / 1000)
for pixelId in colored_pixels:
pixels[pixelId] = 0
async def printing(data):
print(f"key: {data['key']}, c:{data['color']} for {data['duration'] / 1000}s")
await asyncio.sleep(data['duration'] / 1000)
print(f"end of {data['key']}")
async def main():
default_duration = 900
default_color = (255, 0, 0)
p = Partition("test",
[
Note(000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(1000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(2000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(3000, {"duration": default_duration, "color": default_color, "key": "re#"}),
Note(4000, {"duration": default_duration, "color": default_color, "key": "la#"}),
Note(5000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(6000, {"duration": default_duration, "color": default_color, "key": "re#"}),
Note(7000, {"duration": default_duration, "color": default_color, "key": "la#"}),
Note(8000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(9000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(10000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(11000, {"duration": default_duration, "color": default_color, "key": "re#"}),
Note(12000, {"duration": default_duration, "color": default_color, "key": "la#"}),
Note(13000, {"duration": default_duration, "color": default_color, "key": "sol"}),
Note(14000, {"duration": default_duration, "color": default_color, "key": "re#"}),
Note(15000, {"duration": default_duration, "color": default_color, "key": "la#"}),
]
)
await p.play(to_chroma_case)
return 0
if __name__ == "__main__":
sys.exit(asyncio.run(main()))