Donc, j'essaye de jouer de la musique sur pygame et jusqu'à présent je peux charger et lire avec succès la musique sur le programme, mais je peux le faire sans variables et je ne sais pas comment le faire avec les variables impliquées.
p> J'ai déjà essayé de les stocker dans une variable et de les lire à partir de la variable.
Menumusic.play(-1, 0.0) AttributeError: 'NoneType' object has no attribute 'play'
Je m'attends à ce que la musique joue mais à la place je reçois ceci en sortie:
Menumusic = pygame.mixer.music.load("MainMenu.mp3") Menumusic.play(-1, 0.0)
3 Réponses :
Selon la documentation, vous devez appeler pygame.mixer.music.play () pour démarrer la lecture du flux de musique chargé.
Ce que vous entendez par jouer à partir d'une variable n'est pas très clair, mais il me semble que vous voulez changer la musique qui est jouée. Vous ne pouvez pas vous passer de votre variable Menumusic
car elle contient toutes les fonctionnalités nécessaires à la lecture de la musique.
myvariablemp3 = "MainMenu.mp3" # Change this to some way of varying the filename Menumusic = pygame.mixer.music.load(myvariablemp3) Menumusic.play(-1, 0.0)
Toutes mes excuses pour l'imprécision, mais oui, c'était la structure que j'ai également essayé d'utiliser, mais elle a simplement renvoyé "nonetype n'a pas de jeu d'attribut"
Je fais cela pour que plus tard dans le code, quand j'ai besoin de la musique pour arrêter de jouer, je pourrais simplement dire "Menumusic.stop ()" au lieu d'écrire "pygame.mixer.music ...."
Si vous avez AttributeError: l'objet 'NoneType' n'a pas d'attribut 'play'
c'est parce que votre appel à pygame.mixer.music.load
a échoué (problème avec le nom de fichier ou le chemin, peut-être?) et pas parce que ce que votre code faisait était faux. Si vous le faites correctement, il n'y a aucune différence entre appeler load
avec une chaîne littérale et appeler load
avec une variable qui contient une chaîne.
Mais il n'y a rien de mal avec le chemin ou le nom du fichier et je ne sais pas pourquoi cela se produit même
Je dis toujours que votre appel à pygame.mixer.music.load
échoue, et donc quelque chose à propos de cet appel est erroné. Veuillez modifier votre question pour nous montrer (1) le code qui attribue le nom de fichier à une variable (2) l'appel que votre code fait à pygame.mixer.music.load
avec cette variable et (3) le message d'erreur complet, y compris le traçage que vous obtenez lorsque votre code effectue l'appel. Pour le moment, votre question ne montre qu'une version expurgée du problème décrivant ce que vous pensez être faux, mais ne nous montrant pas exactement quoi, où et comment cela va mal.
Généralement, pour contenir un son dans une variable, le code doit utiliser pygame.mixer.Sound ()
pour charger le fichier.
Par exemple:
drum_beat = pygame.mixer.Sound("bass_drum.wav") ... pygame.mixer.Sound.play( drum_beat )
Plus tard dans le code, le son préchargé peut être joué en passant le résultat de cet appel .Sound (...)
(dans ce cas drum_beat
) à pygame.mixer.Sound.play()
.
drum_beat = pygame.mixer.Sound("bass_drum.wav")