2016-05-02 2 views
1

У меня есть этот 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 «с (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 

Однако только одна песня играет, и рекурсия вымирает.

Как я могу исправить код, чтобы у меня была функция , воспроизводящая все дорожки в последовательности, запускающей код только один раз?

+0

не может 'song_id' просто быть получен с помощью' song_id = песня [ 'ид'] ' – Natecat

ответ

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 
+0

сделал, как вы сказали. все же, только одна песня играет ... –

Смежные вопросы