import tkinter as tk
from tkinter import filedialog
from pygame import mixer
mixer.init()
firsttime = False
song2switch = True
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=250)
canvas.pack()
def loadsong1():
global song1
song1 = tk.filedialog.askopenfile(parent=root, initialdir="C:/",title="choose first song",filetypes=[("mp3 files", ".mp3")])
def loadsong2():
global song2
song2 = tk.filedialog.askopenfile(parent=root, initialdir="C:/",title="choose second song",filetypes=[("mp3 files", ".mp3")])
def play():
mixer.music.load(song1)
mixer.music.play()
def switch():
global firsttime
global song2switch
global time_of_song
if firsttime == False:
time_of_song = mixer.music.get_pos()
time_of_song /= 1000
mixer.music.stop()
mixer.music.load(song2)
mixer.music.play(start = time_of_song)
firsttime = True
song2switch = False
else:
if song2switch == False:
time_of_song = mixer.music.get_pos()
time_of_song /= 1000
mixer.music.stop()
mixer.music.load(song1)
mixer.music.play(start = time_of_song)
song2switch = True
playbutton = tk.Button(canvas,text="PLAY",command=play)
canvas.create_window(200,240,window=playbutton)
load1button = tk.Button(canvas, text="Load Song One",command=loadsong1)
canvas.create_window(100,240,window=load1button)
load2button = tk.Button(canvas, text="Load Song Two", command=loadsong2)
canvas.create_window(300,240,window=load2button)
switchbutton = tk.Button(canvas, text="SWITCH", command=switch)
canvas.create_window(200,200, window=switchbutton)
root.mainloop()
我正在尝试使这种音乐播放器可以在两首歌曲之间切换,同时保持彼此相同的时间(例如,当我切换已经播放一分钟的歌曲时,另一首将开始播放一分钟),但是当我尝试将其切换到第一首歌曲时,会出现此错误:
pygame.error:无法读取音频数据的前12个字节
我该如何解决?
这是因为您已使用askopenfile(...)
它将以读取模式打开所选文件并返回文件句柄。
当您切换到时song2
,song1
将关闭。当您想song1
再次切换回时,mixer.music.load(song1)
由于文件已关闭,将失败,并出现异常。
使用askopenfilename()
代替askopenfile()
。
注意1:mixer.music.get_pos()
返回elapsed
相对于的时间start
,而不是开始时间。
注意2:两次切换后,您的切换逻辑将无法正常工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句