Skip to content

Instantly share code, notes, and snippets.

@taoky
Last active November 9, 2024 18:30
Show Gist options
  • Save taoky/ac473035a6f1bd130f558b2d3ef0b51d to your computer and use it in GitHub Desktop.
Save taoky/ac473035a6f1bd130f558b2d3ef0b51d to your computer and use it in GitHub Desktop.
BeepPlay 2 DECPS
#!/usr/bin/python3
# Convert from BeepPlay format to DECPS seqs
# Note that it's not a perfect conversion.
# Ref: https://qiita.com/good_kobe/items/a11366d27fc6b62774ff
bpm, off = None, None
volume = 3
length_base = 8
windows = True
if windows:
esc = "`e"
else:
esc = "\\e"
print("echo \"", end="")
with open("./Haruhikage.txt") as f:
for l in f:
l = l.strip()
if l.startswith("#") or len(l) == 0:
continue
if bpm is None:
bpm, off = map(int, l.split())
else:
pitch, octave, duration = map(int, l.strip().split(" "))
duration = int(duration * (bpm / 30))
# print(pitch, octave, duration)
# `e[volume;length;pitch,~
if pitch == 0 and octave == 0:
print(f"{esc}[0;{duration};0,~", end="")
elif octave not in (5, 6, 7):
pass
# print("Unsupported key:", pitch, octave)
else:
pitch = 12 * (octave - 5) + pitch
print(f"{esc}[3;{duration};{pitch},~", end="")
print("\"")
# Converted from https://musescore.com/user/76963843/scores/19868371
60 0
8 4 2
6 4 2
3 5 4
3 5 4
1 5 4
4 5 4
3 5 4
1 5 4
1 5 4
1 5 4
11 4 2
11 4 2
4 5 4
3 5 4
1 5 4
1 5 8
11 4 2
1 5 2
3 5 24
3 5 4
6 5 4
11 5 4
10 5 8
11 5 4
10 5 8
11 5 4
10 5 4
6 5 8
6 5 4
1 5 4
4 5 4
4 5 8
3 5 4
3 5 8
6 4 4
4 5 4
3 5 4
1 5 4
3 5 8
6 5 4
11 4 16
0 0 4
11 4 4
1 5 4
11 4 8
11 4 4
6 5 4
11 4 4
4 5 8
3 5 4
1 5 8
11 4 4
11 4 16
0 0 4
11 4 2
1 5 2
3 5 4
3 5 4
1 5 4
4 5 4
3 5 4
1 5 4
1 5 4
1 5 4
11 4 4
4 5 4
3 5 4
1 5 4
1 5 8
11 4 2
1 5 2
3 5 24
3 5 4
6 5 4
11 5 4
10 5 8
11 5 4
10 5 8
11 5 4
10 5 2
8 5 2
6 5 8
6 5 4
1 5 4
4 5 4
4 5 4
3 5 4
3 5 4
3 5 8
6 4 4
4 5 4
3 5 4
1 5 4
3 5 8
6 5 4
11 4 16
0 0 4
11 4 4
1 5 4
11 4 8
11 4 4
6 5 4
11 4 4
4 5 4
4 5 2
4 5 2
3 5 2
1 5 2
1 5 8
11 4 4
11 4 24
8 5 4
6 5 4
6 5 4
6 5 4
4 5 4
4 5 4
3 5 8
1 5 12
6 5 4
6 5 4
4 5 2
4 5 2
4 5 4
3 5 4
1 5 4
1 5 4
1 5 8
11 4 2
10 4 2
11 4 12
8 5 4
6 5 4
6 5 4
6 5 4
4 5 4
4 5 4
3 5 8
1 5 12
1 5 4
3 5 4
3 5 2
3 5 2
3 5 2
3 5 2
3 5 4
1 5 4
3 5 2
0 6 2
1 6 8
11 5 4
11 5 8
11 5 4
10 5 8
8 5 4
8 5 20
8 5 4
8 5 4
6 5 4
1 5 2
3 5 2
4 5 12
3 5 2
4 5 2
6 5 32
3 5 2
1 5 2
3 5 2
1 5 2
3 5 2
4 5 2
6 5 8
4 5 2
6 5 2
8 5 8
8 5 2
10 5 2
11 5 8
1 6 2
11 5 2
6 5 8
0 0 2
11 4 2
6 5 4
4 5 4
4 5 4
3 5 8
4 5 2
3 5 2
6 5 12
3 5 2
1 5 2
3 5 2
1 5 2
3 5 2
4 5 2
6 5 8
4 5 2
6 5 2
8 5 8
7 5 2
8 5 2
10 5 8
0 0 2
6 5 2
3 6 4
3 6 6
8 5 2
4 6 4
3 6 4
1 6 4
1 6 8
11 5 2
10 5 2
11 5 8
6 5 2
11 5 2
1 6 8
11 5 4
11 5 8
6 5 4
1 6 8
11 5 4
11 5 8
6 5 4
1 6 8
11 5 4
11 5 8
6 5 2
11 5 2
1 6 6
3 6 2
1 6 4
11 5 8
11 5 4
10 5 8
8 5 4
8 5 8
6 5 4
6 5 8
4 5 4
4 5 4
3 5 4
1 5 4
3 5 24
3 5 4
4 5 4
3 5 4
4 5 4
3 5 4
1 5 4
11 4 24
0 0 20
11 4 2
1 5 2
3 5 4
3 5 4
1 5 4
4 5 4
3 5 4
1 5 4
1 5 4
1 5 4
11 4 2
11 4 2
4 5 4
3 5 4
1 5 4
1 5 8
11 4 2
1 5 2
3 5 24
3 5 4
6 5 4
11 5 4
10 5 8
11 5 4
10 5 8
11 5 4
10 5 2
8 5 2
6 5 8
6 5 4
1 5 4
4 5 4
4 5 4
3 5 4
3 5 4
3 5 12
4 5 4
3 5 4
1 5 4
3 5 8
6 5 4
11 4 16
0 0 4
11 4 2
11 4 2
1 5 4
11 4 8
11 4 4
6 5 4
11 4 4
4 5 8
3 5 4
1 5 8
11 4 4
11 4 24
8 5 4
6 5 4
6 5 4
6 5 4
4 5 4
4 5 4
3 5 4
1 5 4
1 5 4
1 5 8
6 5 4
6 5 4
4 5 2
3 5 2
4 5 4
3 5 4
1 5 4
1 5 4
1 5 8
11 4 2
10 4 2
11 4 12
8 5 4
6 5 4
6 5 4
6 5 4
4 5 4
4 5 4
3 5 4
1 5 4
1 5 4
1 5 8
4 5 4
4 5 4
3 5 2
3 5 2
3 5 2
3 5 2
3 5 4
1 5 4
3 5 2
0 6 2
1 6 8
11 5 4
11 5 8
11 5 4
10 5 8
8 5 4
8 5 20
8 5 4
8 5 4
6 5 4
4 5 2
4 5 8
4 5 12
3 5 2
4 5 2
6 5 32
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
1 6 2
11 5 2
11 5 2
11 5 2
11 5 2
11 5 2
3 6 4
11 5 8
1 6 2
11 5 2
11 5 2
11 5 2
11 5 2
11 5 2
1 6 4
11 5 4
10 5 2
8 5 2
6 5 4
3 6 44
1 6 2
11 5 2
11 5 2
11 5 2
11 5 2
11 5 2
3 6 4
11 5 8
1 6 2
11 5 2
11 5 2
11 5 2
11 5 2
11 5 2
1 6 4
11 5 4
11 5 2
8 5 2
6 5 4
3 6 4
1 6 2
0 6 2
1 6 12
1 6 2
1 6 2
1 6 4
6 5 2
6 5 2
1 6 8
11 5 4
11 5 8
0 0 4
11 5 2
11 5 2
10 5 4
11 5 4
11 5 2
11 5 2
1 6 4
11 5 4
1 6 2
1 6 4
11 5 18
1 6 4
1 6 2
11 5 2
1 6 4
1 6 4
3 6 4
1 6 4
3 6 8
4 6 4
3 6 48
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
0 0 24
3 5 2
1 5 2
3 5 2
1 5 2
3 5 2
4 5 2
6 5 8
4 5 2
6 5 2
8 5 8
8 5 2
10 5 2
11 5 8
1 6 2
11 5 2
6 5 8
0 0 2
11 4 2
6 5 4
4 5 4
4 5 4
3 5 8
4 5 2
3 5 2
6 5 12
3 5 2
1 5 2
3 5 2
1 5 2
3 5 2
4 5 2
6 5 8
4 5 2
6 5 2
8 5 8
8 5 2
9 5 2
11 5 8
0 0 2
6 5 2
3 6 4
3 6 6
8 5 2
4 6 4
3 6 4
1 6 4
1 6 8
11 5 2
10 5 2
11 5 8
6 5 2
11 5 2
1 6 8
11 5 4
11 5 8
6 5 4
1 6 8
11 5 4
11 5 8
6 5 4
1 6 8
11 5 4
11 5 8
6 5 2
11 5 2
1 6 6
3 6 2
1 6 4
11 5 8
11 5 4
10 5 8
8 5 4
8 5 8
6 5 4
6 5 8
4 5 4
4 5 4
3 5 4
1 5 4
3 5 24
3 5 4
4 5 4
3 5 4
4 5 4
3 5 4
1 5 4
11 4 24
3 5 4
3 5 2
0 0 6
6 5 8
11 5 2
9 5 2
11 5 24
11 5 4
1 6 4
11 5 4
1 6 4
11 5 4
1 6 2
10 5 2
11 5 24
# https://github.com/taoky/gadgets/blob/master/BeepPlayConverter/music.py
import music21 as m
import sys
import argparse
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
parser = argparse.ArgumentParser()
parser.add_argument('--file', default='music.xml')
args = parser.parse_args()
song = m.converter.parse(args.file)
# process the ties
song = song.stripTies()
def getMusicProperties(x):
s = ''
if (x.isRest):
s = "0 0 "
else:
s = str(x.pitch.pitchClass) + " " + str(x.octave) + " "
s += str(int(x.duration.quarterLength * 8))
return s
i = 0
for a in song:
if a.isStream:
try:
e = m.repeat.Expander(a)
s2 = e.process()
# timing = s2.secondsMap
song[i] = s2
except m.repeat.ExpanderException: # there's no repeat in the stream
eprint("No repeat in the stream.")
for b in song[i].recurse().notesAndRests:
if (b.isNote):
x = b
s = getMusicProperties(x)
print(s)
if (b.isChord):
ok = False
for x in b._notes:
if x.pitch == b.root():
ok = True
s = getMusicProperties(x)
print(s)
break
if ok == False:
eprint("Warning: Chord")
if (b.isRest):
x = b
s = getMusicProperties(x)
print(s)
break
i += 1
eprint("Finished successfully.")
echo "`e[3;8;3,~`e[3;8;3,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;1,~`e[3;4;1,~`e[3;48;3,~`e[3;8;3,~`e[3;8;6,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;8;10,~`e[3;16;6,~`e[3;8;6,~`e[3;8;1,~`e[3;8;4,~`e[3;16;4,~`e[3;8;3,~`e[3;16;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;3,~`e[3;8;6,~`e[0;8;0,~`e[3;8;1,~`e[3;8;6,~`e[3;16;4,~`e[3;8;3,~`e[3;16;1,~`e[0;8;0,~`e[3;4;1,~`e[3;8;3,~`e[3;8;3,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;1,~`e[3;4;1,~`e[3;48;3,~`e[3;8;3,~`e[3;8;6,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;4;10,~`e[3;4;8,~`e[3;16;6,~`e[3;8;6,~`e[3;8;1,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;3,~`e[3;16;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;3,~`e[3;8;6,~`e[0;8;0,~`e[3;8;1,~`e[3;8;6,~`e[3;8;4,~`e[3;4;4,~`e[3;4;4,~`e[3;4;3,~`e[3;4;1,~`e[3;16;1,~`e[3;8;8,~`e[3;8;6,~`e[3;8;6,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;16;3,~`e[3;24;1,~`e[3;8;6,~`e[3;8;6,~`e[3;4;4,~`e[3;4;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;16;1,~`e[3;8;8,~`e[3;8;6,~`e[3;8;6,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;16;3,~`e[3;24;1,~`e[3;8;1,~`e[3;8;3,~`e[3;4;3,~`e[3;4;3,~`e[3;4;3,~`e[3;4;3,~`e[3;8;3,~`e[3;8;1,~`e[3;4;3,~`e[3;4;12,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;11,~`e[3;16;10,~`e[3;8;8,~`e[3;40;8,~`e[3;8;8,~`e[3;8;8,~`e[3;8;6,~`e[3;4;1,~`e[3;4;3,~`e[3;24;4,~`e[3;4;3,~`e[3;4;4,~`e[3;64;6,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;4,~`e[3;16;6,~`e[3;4;4,~`e[3;4;6,~`e[3;16;8,~`e[3;4;8,~`e[3;4;10,~`e[3;16;11,~`e[3;4;13,~`e[3;4;11,~`e[3;16;6,~`e[0;4;0,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;16;3,~`e[3;4;4,~`e[3;4;3,~`e[3;24;6,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;4,~`e[3;16;6,~`e[3;4;4,~`e[3;4;6,~`e[3;16;8,~`e[3;4;7,~`e[3;4;8,~`e[3;16;10,~`e[0;4;0,~`e[3;4;6,~`e[3;8;15,~`e[3;12;15,~`e[3;4;8,~`e[3;8;16,~`e[3;8;15,~`e[3;8;13,~`e[3;16;13,~`e[3;4;11,~`e[3;4;10,~`e[3;16;11,~`e[3;4;6,~`e[3;4;11,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;6,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;6,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;4;6,~`e[3;4;11,~`e[3;12;13,~`e[3;4;15,~`e[3;8;13,~`e[3;16;11,~`e[3;8;11,~`e[3;16;10,~`e[3;8;8,~`e[3;16;8,~`e[3;8;6,~`e[3;16;6,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;48;3,~`e[3;8;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[0;40;0,~`e[3;4;1,~`e[3;8;3,~`e[3;8;3,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;8;1,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;1,~`e[3;4;1,~`e[3;48;3,~`e[3;8;3,~`e[3;8;6,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;16;10,~`e[3;8;11,~`e[3;4;10,~`e[3;4;8,~`e[3;16;6,~`e[3;8;6,~`e[3;8;1,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;3,~`e[3;24;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;16;3,~`e[3;8;6,~`e[0;8;0,~`e[3;8;1,~`e[3;8;6,~`e[3;16;4,~`e[3;8;3,~`e[3;16;1,~`e[3;8;8,~`e[3;8;6,~`e[3;8;6,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;16;1,~`e[3;8;6,~`e[3;8;6,~`e[3;4;4,~`e[3;4;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;16;1,~`e[3;8;8,~`e[3;8;6,~`e[3;8;6,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;1,~`e[3;16;1,~`e[3;8;4,~`e[3;8;4,~`e[3;4;3,~`e[3;4;3,~`e[3;4;3,~`e[3;4;3,~`e[3;8;3,~`e[3;8;1,~`e[3;4;3,~`e[3;4;12,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;11,~`e[3;16;10,~`e[3;8;8,~`e[3;40;8,~`e[3;8;8,~`e[3;8;8,~`e[3;8;6,~`e[3;4;4,~`e[3;16;4,~`e[3;24;4,~`e[3;4;3,~`e[3;4;4,~`e[3;64;6,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[3;4;13,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;8;15,~`e[3;16;11,~`e[3;4;13,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;8;13,~`e[3;8;11,~`e[3;4;10,~`e[3;4;8,~`e[3;8;6,~`e[3;88;15,~`e[3;4;13,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;8;15,~`e[3;16;11,~`e[3;4;13,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;4;11,~`e[3;8;13,~`e[3;8;11,~`e[3;4;11,~`e[3;4;8,~`e[3;8;6,~`e[3;8;15,~`e[3;4;13,~`e[3;4;12,~`e[3;24;13,~`e[3;4;13,~`e[3;4;13,~`e[3;8;13,~`e[3;4;6,~`e[3;4;6,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[0;8;0,~`e[3;4;11,~`e[3;4;11,~`e[3;8;10,~`e[3;8;11,~`e[3;4;11,~`e[3;4;11,~`e[3;8;13,~`e[3;8;11,~`e[3;4;13,~`e[3;8;13,~`e[3;36;11,~`e[3;8;13,~`e[3;4;13,~`e[3;4;11,~`e[3;8;13,~`e[3;8;13,~`e[3;8;15,~`e[3;8;13,~`e[3;16;15,~`e[3;8;16,~`e[3;96;15,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[0;48;0,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;4,~`e[3;16;6,~`e[3;4;4,~`e[3;4;6,~`e[3;16;8,~`e[3;4;8,~`e[3;4;10,~`e[3;16;11,~`e[3;4;13,~`e[3;4;11,~`e[3;16;6,~`e[0;4;0,~`e[3;8;6,~`e[3;8;4,~`e[3;8;4,~`e[3;16;3,~`e[3;4;4,~`e[3;4;3,~`e[3;24;6,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;1,~`e[3;4;3,~`e[3;4;4,~`e[3;16;6,~`e[3;4;4,~`e[3;4;6,~`e[3;16;8,~`e[3;4;8,~`e[3;4;9,~`e[3;16;11,~`e[0;4;0,~`e[3;4;6,~`e[3;8;15,~`e[3;12;15,~`e[3;4;8,~`e[3;8;16,~`e[3;8;15,~`e[3;8;13,~`e[3;16;13,~`e[3;4;11,~`e[3;4;10,~`e[3;16;11,~`e[3;4;6,~`e[3;4;11,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;6,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;8;6,~`e[3;16;13,~`e[3;8;11,~`e[3;16;11,~`e[3;4;6,~`e[3;4;11,~`e[3;12;13,~`e[3;4;15,~`e[3;8;13,~`e[3;16;11,~`e[3;8;11,~`e[3;16;10,~`e[3;8;8,~`e[3;16;8,~`e[3;8;6,~`e[3;16;6,~`e[3;8;4,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;48;3,~`e[3;8;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;4,~`e[3;8;3,~`e[3;8;1,~`e[3;8;3,~`e[3;4;3,~`e[0;12;0,~`e[3;16;6,~`e[3;4;11,~`e[3;4;9,~`e[3;48;11,~`e[3;8;11,~`e[3;8;13,~`e[3;8;11,~`e[3;8;13,~`e[3;8;11,~`e[3;4;13,~`e[3;4;10,~`e[3;48;11,~"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment