Note 2D placement scaffold. Not very good.

This commit is contained in:
uwuw 2024-08-15 18:36:39 +02:00
parent 4ac58100fb
commit 568a467a27
1 changed files with 36 additions and 11 deletions

View File

@ -12,7 +12,8 @@ def beatify(bpm:float, offset:int, time:timedelta) -> float:
def debeatify(bpm:float, offset:int, beat:int) -> timedelta:
return timedelta(milliseconds=(beat*60000/bpm) + offset)
def f(intensity): return np.pi/2 - np.arctan(2*intensity - 5)
#def f(intensity): return np.pi/2 - np.arctan(2*intensity) + np.pi/5
def f(intensity): return np.pi/2
def greedy(bpm:int, offset:int, timings:list, amplitudes:list):
"""
@ -20,15 +21,20 @@ def greedy(bpm:int, offset:int, timings:list, amplitudes:list):
output: list of object type / position
"""
flow = 1
notes = [sl.HitObject(0, timedelta(milliseconds=0), 0)] * len(timings)
notes = [sl.HitObject(sl.Position(260, 188), timedelta(milliseconds=0), 0)] * len(timings)
beats = [beatify(bpm, offset, timing) for timing in timings]
last_position = (260, 188)
max_x, max_y, min_x, min_y = -np.inf, -np.inf, np.inf, np.inf
for (delta, note_beat, intensity, i) in zip(timings, beats, amplitudes, range(len(timings))):
try:
print(notes[i-1].position.x)
duration = note_beat - beats[i + 1]
"""
if duration in (QUARTER, HALF):
notes[i] = sl.Circle(sl.Position(0, 0), delta, 0)
notes[i] = sl.Circle(sl.Position(0, 0), delta, 0)
"""
"""
elif duration % 2 == 0:
rhythms.insert(0, f"slider {duration}")
else:
@ -37,17 +43,36 @@ def greedy(bpm:int, offset:int, timings:list, amplitudes:list):
except IndexError:
notes[i] = sl.Circle(sl.Position(0, 0), delta, 0)
# TODO mettre à jour flow
"""
if len(notes) > 2:
angle = flow * f(rhythm.intensite)
x1, y1 = notes[i-2].position
x2, y2 = notes[i-1].position
old_angle = np.arctan2((y1, y2), (x1, x2))
x3 = x2 + (intensity * np.cos(angle + old_angle))
y3 = y2 + (intensity * np.sin(angle + old_angle))
if duration == QUARTER:
x2, y2 = int(notes[i-1].position.x), int(notes[i-1].position.y)
notes[i] = sl.Circle(sl.Position(x2, y2), delta, 0)
else:
angle = flow * f(intensity/100)
x1, y1 = int(notes[i-2].position.x), int(notes[i-2].position.y)
x2, y2 = int(notes[i-1].position.x), int(notes[i-1].position.y)
old_angle = np.arctan2([y2-y1], [x2-x1])
x3 = x2 + (duration*intensity * np.cos(angle + old_angle))
y3 = y2 + (duration*intensity * np.sin(angle + old_angle))
notes[i] = sl.Circle(sl.Position(int(x3[0]), int(y3[0])), delta, 0)
else:
pass
"""
notes[i] = sl.Circle(sl.Position(260, 188), delta, 0)
if notes[i].position.x > max_x:
max_x = notes[i].position.x
elif notes[i].position.x < min_x:
min_x = notes[i].position.x
if notes[i].position.y > max_y:
max_y = notes[i].position.y
elif notes[i].position.y < min_y:
min_y = notes[i].position.y
factor_x = 1/(max_x - min_x)
factor_y = 1/(max_y - min_y)
for note in notes:
note.position = sl.Position((note.position.x-min_x)*factor_x*512, (note.position.y-min_y)*factor_y*384)
print(note.position.x, note.position.y)
return notes