Spaces:
Sleeping
Sleeping
Upload ultrastar_converter.py
Browse files
src/modules/ultrastar_converter.py
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Ultrastar Converter"""
|
2 |
+
|
3 |
+
from modules.Ultrastar.ultrastar_txt import UltrastarTxtValue
|
4 |
+
|
5 |
+
def real_bpm_to_ultrastar_bpm(real_bpm: float) -> float:
|
6 |
+
"""Converts real BPM to UltraStar BPM"""
|
7 |
+
# The UltraStar BPM info is a fourth beat of the real BPM
|
8 |
+
ultrastar_bpm = real_bpm / 4
|
9 |
+
return ultrastar_bpm
|
10 |
+
|
11 |
+
|
12 |
+
def ultrastar_bpm_to_real_bpm(ultrastar_bpm: float) -> float:
|
13 |
+
"""Converts UltraStar BPM to real BPM"""
|
14 |
+
# The UltraStar BPM info is a fourth beat of the real BPM
|
15 |
+
bpm = ultrastar_bpm * 4
|
16 |
+
return bpm
|
17 |
+
|
18 |
+
|
19 |
+
def second_to_beat(seconds: float, real_bpm: float) -> float:
|
20 |
+
"""Converts seconds to beat"""
|
21 |
+
# BPM = 60 * beat / T
|
22 |
+
# T * BPM = 60 * beat
|
23 |
+
# beat = T * BPM / 60
|
24 |
+
beat = seconds * real_bpm / 60
|
25 |
+
return beat
|
26 |
+
|
27 |
+
|
28 |
+
def beat_to_second(beat: float, real_bpm: float) -> float:
|
29 |
+
"""Converts beat to seconds"""
|
30 |
+
|
31 |
+
seconds = beat * 60 / real_bpm
|
32 |
+
return seconds
|
33 |
+
|
34 |
+
|
35 |
+
def midi_note_to_ultrastar_note(midi_note: int) -> int:
|
36 |
+
"""Converts Midi note to UltraStar note"""
|
37 |
+
|
38 |
+
# C4 == 48 in Midi
|
39 |
+
ultrastar_note = midi_note - 48
|
40 |
+
return ultrastar_note
|
41 |
+
|
42 |
+
|
43 |
+
def ultrastar_note_to_midi_note(ultrastar_note: int) -> int:
|
44 |
+
"""Converts UltraStar note to Midi note"""
|
45 |
+
|
46 |
+
# C4 == 48 in Midi
|
47 |
+
midi_note = ultrastar_note + 48
|
48 |
+
return midi_note
|
49 |
+
|
50 |
+
|
51 |
+
def get_start_time_from_ultrastar(ultrastar_class: UltrastarTxtValue, pos: int) -> float:
|
52 |
+
"""Calculates the start time from the Ultrastar txt"""
|
53 |
+
|
54 |
+
gap = int(ultrastar_class.gap) / 1000
|
55 |
+
real_bpm = ultrastar_bpm_to_real_bpm(
|
56 |
+
float(ultrastar_class.bpm.replace(",", "."))
|
57 |
+
)
|
58 |
+
start_time = (
|
59 |
+
beat_to_second(int(ultrastar_class.startBeat[pos]), real_bpm) + gap
|
60 |
+
)
|
61 |
+
return start_time
|
62 |
+
|
63 |
+
|
64 |
+
def get_end_time_from_ultrastar(ultrastar_class: UltrastarTxtValue, pos: int) -> float:
|
65 |
+
"""Calculates the end time from the Ultrastar txt"""
|
66 |
+
|
67 |
+
gap = int(ultrastar_class.gap) / 1000
|
68 |
+
real_bpm = ultrastar_bpm_to_real_bpm(
|
69 |
+
float(ultrastar_class.bpm.replace(",", "."))
|
70 |
+
)
|
71 |
+
end_time = (
|
72 |
+
beat_to_second(
|
73 |
+
int(ultrastar_class.startBeat[pos])
|
74 |
+
+ int(ultrastar_class.durations[pos]),
|
75 |
+
real_bpm,
|
76 |
+
)
|
77 |
+
+ gap
|
78 |
+
)
|
79 |
+
return end_time
|