微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何再使用一次相同的mp3文件?

如何解决如何再使用一次相同的mp3文件?

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,title="choose second song",".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,window=load1button)
load2button = tk.Button(canvas,text="Load Song Two",command=loadsong2)
canvas.create_window(300,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的{​​{1}}时间,而不是开始时间。

注意2:两次切换后,您的切换逻辑将无法正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。