pygame仍无法识别MP3文件

时间:2020-05-15 02:31:52

标签: python pygame mp3 mutagen

我跟随30天的视频系列制作了自己的音乐播放器。我仍然不知道为什么我的无法识别MP3文件。每次尝试播放MP3文件时,都会在消息框中显示错误消息。我敢肯定我已经在Mac上正确安装了诱变剂,但是我会收到任何反馈或想法。任何帮助都很棒。谢谢! (也是,不是我的完整代码。我删去了代码的冗长部分,其中包括tk窗口,图片等的格式。)

    import os
    import threading
    import time
    import tkinter.messagebox
    from tkinter import *
    from tkinter import filedialog

    from mutagen.mp3 import MP3
    from pygame import mixer

    root = Tk()

    statusbar = Label(root, text="Welcome to Music Player", relief=SUNKEN, 
    anchor=W)
    statusbar.pack(side=BOTTOM, fill=X)

    # Create the menubar
    menubar = Menu(root)
    root.config(menu=menubar)

    # Create the submenu

    subMenu = Menu(menubar, tearoff=0)

    playlist = []


    # playlist - contains the full path + filename
    # playlistbox - contains just the filename
    # Fullpath + filename is required to play the music inside play_music 
    load function

    def browse_file():
        global filename_path
        filename_path = filedialog.askopenfilename()
        add_to_playlist(filename_path)


    def add_to_playlist(filename):
         filename = os.path.basename(filename)
         index = 0
         playlistbox.insert(index, filename)
         playlist.insert(index, filename_path)
         index += 1


    menubar.add_cascade(label="File", menu=subMenu)
    subMenu.add_command(label="Open", command=browse_file)
    subMenu.add_command(label="Exit", command=root.destroy)


    def about_us():
        tkinter.messagebox.showinfo('About Music Player', 'This is a music 
     player build using Python Tkinter by @attreyabhatt')


    subMenu = Menu(menubar, tearoff=0)
    menubar.add_cascade(label="Help", menu=subMenu)
    subMenu.add_command(label="About Us", command=about_us)

    mixer.init()  # initializing the mixer

    root.title("Music Player")
    # Root Window - StatusBar, LeftFrame, RightFrame
    # LeftFrame - The listbox (playlist)
    # RightFrame - TopFrame,MiddleFrame and the BottomFrame

    leftframe = Frame(root)
    leftframe.pack(side=LEFT, padx=30)

    playlistbox = Listbox(leftframe)
    playlistbox.pack()

    addBtn = Button(leftframe, text="+ Add", command=browse_file)
    addBtn.pack(side=LEFT)


    def del_song():
        selected_song = playlistbox.curselection()
        selcted_song = int(selected_song[0])
        playlistbox.delete(selected_song)
        playlist.pop(selected_song)


    delBtn = Button(leftframe, text="- Del", command=del_song)
    delBtn.pack(side=LEFT)

    rightframe = Frame(root)
    rightframe.pack()

    topframe = Frame(rightframe)
    topframe.pack()

    lengthlabel = Label(topframe, text='Total Length : --:--')
    lengthlabel.pack(pady=5)

    currenttimelabel = Label(topframe, text='Current Time : --:--', 
    relief=GROOVE)
    currenttimelabel.pack()


    def show_details(play_song):
         file_data = os.path.splitext(play_song)

        if file_data[1] == ('.mp3'): 
             audio = MP3(play_song)
             total_length = audio.info.length
        else:
             a = mixer.Sound(play_song)
             total_length = a.get_length()

        # div - total_length/60, mod - total_length % 60
        mins, secs = divmod(total_length, 60)
        mins = round(mins)
        secs = round(secs)
        timeformat = '{:02d}:{:02d}'.format(mins, secs)
        lengthlabel['text'] = "Total Length" + ' - ' + timeformat

        t1 = threading.Thread(target=start_count, args=(total_length,))
        t1.start()


    def start_count(t):
        global paused
        # mixer.music.get_busy(): - Returns FALSE when we press the stop 
          button (music stop playing)
        # Continue - Ignores all of the statements below it. We check if 
         music is paused or not.
        current_time = 0
        while current_time <= t and mixer.music.get_busy():
             if paused:
                 continue
             else:
                 mins, secs = divmod(current_time, 60)
                mins = round(mins)
                secs = round(secs)
                timeformat = '{:02d}:{:02d}'.format(mins, secs)
                currenttimelabel['text'] = "Current Time" + ' - ' + 
                timeformat
                time.sleep(1)
                current_time += 1


   def play_music():
    global paused

    if paused:
        mixer.music.unpause()
        statusbar['text'] = "Music Resumed"
        paused = FALSE
    else:
        try:
            stop_music()
            time.sleep(1)
            selected_song = playlistbox.curselection()
            selected_song = int(selected_song[0])
            play_it = playlist[selected_song]
            mixer.music.load(play_it)
            mixer.music.play()
            statusbar['text'] = "Playing music" + ' - ' + os.path.basename(play_it)
            show_details(play_it)
        except:
            tkinter.messagebox.showerror('File not found', 'Music Player could not find the file. Please check again.')


def stop_music():
    mixer.music.stop()
    statusbar['text'] = "Music Stopped"

0 个答案:

没有答案