我希望遍歷一系列歌曲,例如Songs = ["Song1.mp3", "Song2.mp3", "Song3.mp3"],我想一個接一個地播放每首歌曲。
我嘗試了各種方法,最推薦的似乎是使用 pygame,但是,我無法除錯使用它帶來的大量錯誤。我的主要源代碼和嘗試如下所示:
from tkinter import *
import pygame
from random import choice
import os
pygame.mixer.init()
Songs = os.listdir("Music\\")
def Play():
Song = choice(Songs)
pygame.mixer.music.load("Music\\" Song)
pygame.mixer.music.play()
while True:
play()
運行后,我收到錯誤pygame.error: ModPlug_Load failed。
我在我擁有的幻燈片程式中同時運行它,我希望這段代碼作為背景音樂運行,我計劃在我已經設定的函式中檢查歌曲的結尾。
uj5u.com熱心網友回復:
您可以注冊一個自定義事件,該事件將在使用pygame.mixer.music.set_endevent().
如果您想與主應用程式同時運行,您還需要在子執行緒中運行 while 回圈。
下面是一個例子:
import os
import random
import threading
import tkinter as tk
import pygame
pygame.init()
# create a custom event
MUSIC_DONE = pygame.event.custom_type()
# register the event
pygame.mixer.music.set_endevent(MUSIC_DONE)
folder = "Music\\"
Songs = os.listdir(folder)
def next_song():
try:
song = random.choice(Songs)
pygame.mixer.music.load(os.path.join(folder, song))
pygame.mixer.music.play()
# update song name
song_var.set(song)
except Exception as e:
print(e)
def pygame_loop():
next_song()
while pygame.get_init():
for event in pygame.event.get():
if event.type == MUSIC_DONE:
# current song done playing, play next song
next_song()
root = tk.Tk()
# label to show the current song being played
song_var = tk.StringVar()
tk.Label(root, textvariable=song_var).pack()
# start the pygame loop in a child thread
threading.Thread(target=pygame_loop).start()
root.mainloop()
# quit pygame
pygame.quit()
uj5u.com熱心網友回復:
使用
同樣為了避免 Tkinter 卡住,您需要使用執行緒或多行程。我推薦你聲音檔案播放器,你會在這里找到例子https://realpython.com/playing-and-recording-sound-python/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393603.html
