-
Notifications
You must be signed in to change notification settings - Fork 0
/
audio_analitycs.py
183 lines (145 loc) · 6.14 KB
/
audio_analitycs.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
import eel
import spotipy
import json
from spotipy.oauth2 import SpotifyClientCredentials
import numpy as np
try :
import win32gui, win32con;
frgrnd_wndw = win32gui.GetForegroundWindow();
wndw_title = win32gui.GetWindowText(frgrnd_wndw);
if wndw_title.endswith("py.exe"):
win32gui.ShowWindow(frgrnd_wndw, win32con.SW_HIDE);
#endif
except :
pass
once = 0
prev_track_uri = ""
current_track_uri = ""
eel.init('web')
@eel.expose
def get_oauth(raw_auth, access, refresh):
global raw_auth_token
global access_token
global refresh_token
raw_auth_token = raw_auth
access_token = access
refresh_token = refresh
print(raw_auth_token)
print(access_token)
print(refresh_token)
eel.blynk_tab()
@eel.expose
def confirmation():
global confirmation
confirmation = True
print(confirmation)
def spotify_auth():
while True:
print("I'm a thread")
global once
if (once == 0):
once = 10
eel.sleep(1)
eel.req_oauth()
eel.sleep(1)
break
eel.sleep(0.1)
# Use eel.sleep(), not time.sleep()
def spotify_main():
#print("spotify_main")
global current_track_uri
global current_track_progress
global prev_track_progress
global current_track_duration
global prev_track_uri
global raw_current_track_data
global raw_current_audio_features
global current_audio_features_segments
global current_audio_features_segments_array
global current_segment
global current_segment_time
global numb_segments
global min_loudness_segment
global min_loudness
global max_loudness
global current_loudness
global current_loudness_time
global min_loudness_positive
global max_loudness_positive
global current_loudness_positive
global bar_percentage
global sp
global once
#search = input('search?')
sp = spotipy.Spotify(auth=access_token)
raw_current_track_data = sp.current_playback()
if (raw_current_track_data is not None) and ((raw_current_track_data.get("item")) is not None):
#print(raw_current_track_data)
#print(type(raw_current_track_data.get("item")))
current_track_uri = (raw_current_track_data.get("item")).get("uri")
current_track_progress = (raw_current_track_data.get("progress_ms"))/1000
current_track_playing_status = raw_current_track_data.get("is_playing")
#print(current_track_progress)
#print(current_track_playing_status)
if (current_track_uri != prev_track_uri):
print("song switched! mehnat starts")
print(current_track_uri)
current_track_duration = (raw_current_track_data.get("item")).get("duration_ms")/100
raw_current_audio_features = sp.audio_analysis(current_track_uri)
current_audio_features_segments = raw_current_audio_features.get("segments")
current_audio_features_segments_array = np.array(current_audio_features_segments)
numb_segments = len(current_audio_features_segments_array)
current_segment = 0
current_segment_time = 0
prev_track_progress = 0
min_loudness_segment = 0
min_loudness = 0
max_loudness = 0
count = 0
while (count < numb_segments):
if((current_audio_features_segments_array[count]["loudness_max"]) < min_loudness):
min_loudness_segment = count
min_loudness = current_audio_features_segments_array[count]["loudness_max"]
count = count + 1
max_loudness_positive = max_loudness - min_loudness
min_loudness_positive = min_loudness - min_loudness
print(min_loudness_segment)
print(min_loudness)
print(current_track_duration)
if (prev_track_progress > current_track_progress):
current_segment = 0
current_segment_time = 0
while (current_segment_time < current_track_progress):
if (current_segment < numb_segments):
#print(current_segment_time)
current_loudness = current_audio_features_segments_array[current_segment]["loudness_max"]
current_loudness_time = current_audio_features_segments_array[current_segment]["loudness_max_time"]
current_confidence = current_audio_features_segments_array[current_segment]["confidence"]
current_loudness_positive = current_loudness - min_loudness
#print(current_loudness)
#print(current_loudness_positive)
#print(current_loudness_time)
bar_percentage = ((current_loudness_positive/max_loudness_positive) * 100)* current_confidence
eel.setdatafromspotifyalways(bar_percentage, current_track_playing_status, current_track_progress)
print (("#" * round(bar_percentage))) #main peak apmlitude data to use
#print(bar_percentage,"%")
current_segment = current_segment + 1
#print(current_segment)
if (current_segment < numb_segments):
current_segment_time = current_audio_features_segments_array[current_segment]["start"]
else:
print("song data end")
break
prev_track_uri = current_track_uri
prev_track_progress = current_track_progress
def blynk_main():
#print("blynk_main")
jjjj = 1
eel.spawn(spotify_auth)
eel.start('start.html', block=False)
while True:
#print("I'm a main loop")
if (confirmation == True):
eel.spawn(blynk_main)
eel.spawn(spotify_main)
eel.sleep(0.01)