TIMBOVILL commited on
Commit
0442d80
·
verified ·
1 Parent(s): 2542bcb

Upload ultrastar_converter.py

Browse files
Files changed (1) hide show
  1. src/modules/ultrastar_converter.py +79 -0
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