Как я могу установить таймер для управления вызовом функции внутри цикла?
У меня есть это function
, который играет Spotify
:
#a function to play Spotify
def play(id_):
print 'playing', id_
os.system("osascript -e 'tell application \"Spotify\" to play track \"%s\"'" % (id_,))
и следующее loop
, который перебирает все playlist
песни, получает все воспроизводимые id
s (foreign_id
), передавая их play(id_)
,
и проходит каждую песню duration
в time.sleep()
чтобы остановить цикл до конца каждой песни, повторяя цикл снова и снова:
for i, song in enumerate(song_playlist):
#we need to track each song id
song_id = song_playlist[i]['id']
#in order to get song 'duration', access 'song/profile response' and pass the id as an argument
response_profile = en.get('song/profile', id=song_id, bucket="audio_summary")
song_profile = response_profile['songs']
dur = song_profile[0]['audio_summary']['duration']
#convert to miliseconds
dur *= 1000
print int(round(dur))
#now we access each song 'foreign_id'
for track in song:
track = song['tracks'][i]
track_id = track['foreign_id'].replace('-WW', '')
print '{0} {2} {1}'.format(i, song['artist_name'], song['title'])
#call the function for each track
play(track_id) #CALL FUNCTION HERE
time.sleep(int(round(dur))) # SET INTERVAL CALL TO EACH SONG DURATION
однако, только одна песня играет, и рекурсия умирает.
как я могу исправить код, чтобы у меня была функция, воспроизводящая все дорожки в последовательности, выполняющей код только один раз?
1 ответ
Это выглядит как play(track_id)
должен быть внутри for track in song
петля. Вам нужно сделать отступ на 1 уровень.
for i, song in enumerate(song_playlist):
# Code as before ...
for track in song:
track = song['tracks'][i]
track_id = track['foreign_id'].replace('-WW', '')
print '{0} {2} {1}'.format(i, song['artist_name'], song['title'])
play(track_id) #CALL FUNCTION HERE
time.sleep(int(round(dur))) # SET INTERVAL CALL TO EACH SONG DURATION