2017-05-23 1 views
1

J'ai un problème avec mon lecteur audio Python. J'utilise cette fonction pour mettre en pause la musique qui joue:pygame.error: set_pos non supporté pour ce codec

def pause(event): 
    global time 
    pygame.mixer.music.pause() 
    time=pygame.mixer.music.get_pos() 

Et puis, je suis en train de jouer à nouveau de la position où il est arrête avec cette fonction:

def play(event): global time name=listbox.get(ACTIVE) file="music/"+str(name) mixer.music.load(file) pygame.mixer.music.play() if time >0: pygame.mixer.music.set_pos(time) mixer.music.play() else:
mixer.music.play()

Mais après que je reçois cette erreur: pygame.error: set_pos unsupported for this codec

J'ai aussi essayé la fonction pygame.mixer.music.unpause():

def play(event): 
global time 
name=listbox.get(ACTIVE) 
file="music/"+str(name) 
mixer.music.load(file) 
if time >0: 
    mixer.music.unpause() 
else:  
    mixer.music.play() 

Mais cela ne fonctionne tout simplement pas, pas d'erreur du tout dans ce cas. J'utilise python 3.6 et pygame 1.9.3 sur Windows 10 (64 bits).

Répondre

0

Pas assez de rep pour commenter.

Malheureusement, pygame.mixer.music.set_pos() n'est supporté qu'après v 1.9.2. Comme vous l'avez 1.9.3, il est supposé fonctionner dans votre code. Je ne trouve pas la raison mais je peux vous proposer une alternative:

play_time = pygame.mixer.music.get_pos() 

Cela vous donnera temps de jeu en millisecondes. Le type de 'play_time' est 'int'. Initialiser une variable 'start = 0'. Vous pouvez maintenant utiliser

start = start + play_time/1000.0 

chaque fois que vous faites une pause() ou d'arrêter() pour obtenir le temps en secondes. Pourquoi l'ajouter à la valeur précédente est parce que si vous n'ajoutez pas 'play_time/1000.0' à la valeur précédente de start, alors get_pos() ne calculera que le temps qui s'est écoulé depuis que vous avez commencé à jouer et qui ne vous donnera pas le courant position à laquelle la lecture est en pause ou arrêtée mais seule la durée écoulée depuis le début de la dernière lecture.

Maintenant, vous pouvez le faire avant ou après

pygame.mixer.music.pause() #or stop() 

Vous aurez maintenant l'heure à laquelle il fit une pause.

Au lieu d'utiliser set_pos(), allez

pygame.music.play(-1, start) 

Notez que jouer (boucle, start_pos) prendre start_pos en quelques secondes. donc nous en avions besoin en secondes. vous pouvez maintenant supprimer set_pos()

Alternative: simplement utiliser

pygame.mixer.music.pause() 
pygame.mixer.music.unpause() 

vous n'avez pas besoin de calculer le temps puis le régler à nouveau.