Как я могу выбрать песню из списка, используя pygame.mixer - PullRequest
2 голосов
/ 30 сентября 2019

Как я могу выбрать определенную песню для воспроизведения с помощью Pygame? Я положил их в список, но следующие коды не работают. Когда я запускаю приложение, оно выводит «none», а когда я раскомментирую pygame.mixer.music.play, приложение выдает эту ошибку: «требуется целое число. Также, когда я изменяю коды как;

    selected_song = random.randint(0,len(songs))
    pygame.mixer.music.load(songs[selected_song])

Это выдает эту ошибку: Не удалось прочитать из RWops. Поэтому я не могу понять это.

from tkinter import *
import pygame, os, random
pygame.mixer.init()
songs = (pygame.mixer.music.load("A.mp3"),
     pygame.mixer.music.load("B.mp3"),
     pygame.mixer.music.load("C.mp3"),
     pygame.mixer.music.load("D.mp3"))
window=Tk()
window.geometry("175x150")
class Player:
    def __init__(self):
        pass
    def play(init):
    selected_song = random.choice(songs)
    #pygame.mixer.music.play(selected_song) #uncomment this
    print(selected_song) #comment this
    return selected_song

a = Player()
l1=Label(window,text="Music Player",font="times 20")
l1.grid(row=1,column=1)

b1=Button(window,text="Play",width=20,command=a.play)
b1.grid(row=4,column=1)
#b2=Button(window,text="Pause",width=20,command=stop)

    #song_list=os.listdir()
    #song_listbox=StringVar(window)
    #song_listbox.set("select songs")
    #menu=OptionMenu(window,song_listbox,*song_list)
    #menu.grid(row=4,column=4)
    window.mainloop()

1 Ответ

2 голосов
/ 30 сентября 2019

pygame.mixer.music.load() всегда будет возвращать None, следовательно, ваш songs кортеж всегда будет (None, None, None, None):

pygame.mixer.music.load()

Загрузка музыкального файла для воспроизведения

load(filename) -> None
load(object) -> None>

Это загрузит музыкальное имя файла / объект файла и подготовит его к воспроизведению. Если музыкальный поток уже воспроизводится, он будет остановлен. Это не запускает воспроизведение музыки.

Всегда полезно, если нет необходимости читать документацию библиотек, которые вы используете.


Вы должны хранить только имена файлов в songs:

songs = ("A.mp3", "B.mp3", "C.mp3", "D.mp3")

и для воспроизведения случайного музыкального файла выполните

...
selected_song = random.choice(songs)   # select music file
pygame.mixer.music.load(selected_song) # load music file
pygame.mixer.music.play()              # play it
...

Обратите внимание, что это будет работать, только если музыкальные файлы находятся в том же каталоге, где вы запускаете программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...