-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaudio_features.py
106 lines (82 loc) · 2.32 KB
/
audio_features.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from dataclasses import dataclass
@dataclass
class Danceability:
value: int
def __str__(self) -> str:
mapping = ["very_low", "low", "mid", "high", "very_high"]
assert self.value < len(mapping)
s = "danceability="
return s + mapping[self.value]
@dataclass
class Energy:
value: int
def __str__(self) -> str:
mapping = ["very_low", "low", "mid", "high", "very_high"]
assert self.value < len(mapping)
s = "energy="
return s + mapping[self.value]
@dataclass
class Loudness:
value: int
def __str__(self) -> str:
mapping = ["low", "mid", "high"]
assert self.value < len(mapping)
s = "loudness="
return s + mapping[self.value]
@dataclass
class Speechiness:
value: int
def __str__(self) -> str:
mapping = ["low", "mid", "high"]
assert self.value < len(mapping)
s = "speechiness="
return s + mapping[self.value]
@dataclass
class Instrumentalness:
value: int
def __str__(self) -> str:
mapping = ["low", "high"]
assert self.value < len(mapping)
s = "instrumentalness="
return s + mapping[self.value]
@dataclass
class Valence:
value: int
def __str__(self) -> str:
mapping = ["very_low", "low", "mid", "high", "very_high"]
assert self.value < len(mapping)
s = "valence="
return s + mapping[self.value]
@dataclass
class Acousticness:
value: int
def __str__(self) -> str:
mapping = ["low", "mid", "high"]
assert self.value < len(mapping)
s = "acousticness="
return s + mapping[self.value]
@dataclass
class Tempo:
value: float
def __str__(self) -> str:
s = "tempo="
return s + self.musical_class()
def musical_class(self) -> str:
if self.value < 40:
return "Largissimo"
elif self.value <= 60:
return "Largo"
elif self.value <= 66:
return "Larghetto"
elif self.value <= 76:
return "Adagio"
elif self.value <= 108:
return "Andante"
elif self.value <= 120:
return "Moderato"
elif self.value <= 168:
return "Allegro"
elif self.value <= 200:
return "Presto"
else:
return "Prestissimo"