diff --git a/main.py b/main.py index 30cf6b1..c1a33d3 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,4 @@ +from xmlrpc.client import TRANSPORT_ERROR from chroma_case.Partition import Partition from chroma_case.Note import Note import asyncio @@ -6,6 +7,12 @@ from mido import MidiFile import board, neopixel +# on octave is 12 +RATIO = float(sys.argv[2] if len(sys.argv) > 2 else 1) +OCTAVE = 5 +OCTAVE_AMOUNT_KEYS = 12 +TRANSPOSE_AMOUNT = OCTAVE_AMOUNT_KEYS * OCTAVE + pixels = neopixel.NeoPixel(board.D18, 20, brightness=0.01) notePixels = { 'si': [19], @@ -14,8 +21,8 @@ notePixels = { 'si': [19], 'sol#':[15], 'sol':[13], 'fa#':[10], - 'fa':[8], - 'mi':[7], + 'fa':[9], + 'mi':[6], 're#':[5], 're':[3], 'do#':[1], @@ -50,7 +57,6 @@ async def to_chroma_case(data): colored_pixels = notePixels[data["key"].lower()] #if "announce" in data: - tmp = 1.0 c = data["color"] """for i in range(5): for pixelId in colored_pixels: @@ -70,7 +76,7 @@ async def to_chroma_case(data): async def printing(data): - print(f"key: {data['key']}, c:{data['color']} for {data['duration'] / 1000}s") + print(f"key: {data['key']}, c:{data['color']} for {data['duration'] / 1000}s, time: {data['time']}") await asyncio.sleep(data['duration'] / 1000) print(f"end of {data['key']}") @@ -80,7 +86,12 @@ def midi_key_my_key(midi_key): keys.reverse() - return keys[midi_key - 60] + key_index = midi_key - TRANSPOSE_AMOUNT + if key_index >= len(keys): + print("key out of leb barre", key_index) + return "no_key" + + return keys[key_index] @@ -88,27 +99,34 @@ def midi_key_my_key(midi_key): async def main(): default_duration = 900 - default_color = (255, 255, 0) + default_color = (255, 0, 0) notes = [] + # notes will start to play at 3500 ms (colors at the start takes this amount of time) s = 3500 notes_on = {} prev_note_on = {} + note_color = {} for msg in MidiFile(sys.argv[1]): d = msg.dict() - print(msg, d) - s += d['time'] * 1000 + print(msg, s) + s += d['time'] * 1000 * RATIO + if d["type"] == "note_on": - print(s) prev_note_on[d["note"]] = 0 if d["note"] in notes_on: prev_note_on[d["note"]] = notes_on[d["note"]] # 500 notes_on[d["note"]] = s # 0 + if d["note"] not in note_color.keys(): + note_color[d["note"]] = 1 + note_color[d["note"]] = not note_color[d["note"]] + if d["type"] == "note_off": - duration = s - notes_on[d["note"]] - 100 - notes_on[d["note"]] = s # 500 + #duration = s - notes_on[d["note"]] + duration = s - notes_on[d["note"]] + """notes.append(Note( s - min(s - prev_note_on[d["note"]], 500), { @@ -118,17 +136,24 @@ async def main(): "announce": True } ))""" - notes.append(Note(s, {"duration": duration, "color": default_color, "key": midi_key_my_key(d["note"])})) + + note_start = notes_on[d["note"]] + # time value is only used during debug + notes.append(Note(note_start, {"time": note_start, "duration": duration - 10, "color": default_color if note_color[d["note"]] else (255, 100, 0), "key": midi_key_my_key(d["note"])})) + notes_on[d["note"]] = s # 500 + + starting = [] + for i in notePixels.keys(): starting += [ - Note(000, {"duration": default_duration, "color": default_color, "key": i}), - Note(1000, {"duration": default_duration, "color": (255, 255, 0), "key": i}), - Note(2000, {"duration": default_duration, "color": (0, 255, 0), "key": i}), + Note(000, {"duration": default_duration, "color": (255, 0, 0), "key": i, "time": 0}), + Note(1000, {"duration": default_duration, "color": (255, 255, 0), "key": i, "time": 0}), + Note(2000, {"duration": default_duration, "color": (0, 255, 0), "key": i, "time": 0}), ] - p = Partition("test", + p = Partition("my_partition", starting + notes ) diff --git a/partitions/20220128_095349.jpg b/partitions/20220128_095349.jpg new file mode 100644 index 0000000..12d22cd Binary files /dev/null and b/partitions/20220128_095349.jpg differ diff --git a/partitions/Believer.mid b/partitions/Believer.mid new file mode 100644 index 0000000..7832d7f Binary files /dev/null and b/partitions/Believer.mid differ diff --git a/partitions/Bella-Ciao.mid b/partitions/Bella-Ciao.mid new file mode 100644 index 0000000..c2a5236 Binary files /dev/null and b/partitions/Bella-Ciao.mid differ diff --git a/partitions/Game.mid b/partitions/Game.mid new file mode 100644 index 0000000..1d49a9f Binary files /dev/null and b/partitions/Game.mid differ diff --git a/partitions/Game2.mid b/partitions/Game2.mid new file mode 100644 index 0000000..a4c6049 Binary files /dev/null and b/partitions/Game2.mid differ diff --git a/partitions/Tetris.mid b/partitions/Tetris.mid new file mode 100644 index 0000000..2014fec Binary files /dev/null and b/partitions/Tetris.mid differ diff --git a/clair-de-lune.midi b/partitions/clair-de-lune.midi similarity index 100% rename from clair-de-lune.midi rename to partitions/clair-de-lune.midi diff --git a/new_song_1.mid b/partitions/new_song_1.mid similarity index 100% rename from new_song_1.mid rename to partitions/new_song_1.mid diff --git a/new_song_2.mid b/partitions/new_song_2.mid similarity index 100% rename from new_song_2.mid rename to partitions/new_song_2.mid