Files
impostor/tools/musicator/sequence_to_strudel.py
2026-03-20 20:18:10 +01:00

43 lines
889 B
Python

import sys
import re
ROWS_PER_BEAT = 4 # keep consistent with your MIDI extraction
SOUND = "piano"
def parse_sequence(text):
return re.findall(r'"([^"]+)"', text)
def to_strudel_notes(seq):
out = []
for n in seq:
if n == "..." or n == "---":
out.append("~")
else:
# C-5 → c5, C#5 → c#5
note = n.replace("-", "")
out.append(note.lower())
return out
def chunk(seq, size):
for i in range(0, len(seq), size):
yield seq[i:i+size]
# read from stdin
text = sys.stdin.read()
sequence = parse_sequence(text)
notes = to_strudel_notes(sequence)
# group into musical lines (4 beats)
lines = []
for group in chunk(notes, ROWS_PER_BEAT * 4):
lines.append(" ".join(group))
pattern = "\n".join(lines)
print("note(`")
print(pattern)
print(f"`).sound(\"{SOUND}\")")
# npm install -g strudel-cli