开发者

Python实现多功能音乐播放器详解

开发者 https://www.devze.com 2022-12-11 10:03 出处:网络 作者: 松鼠爱吃饼干
目录前言准备工作知www.cppcns.com识点和所需模块环境完整代码效果展示导入模块界面按钮功能创建一个文件目录音乐读取功能显示已加载的音乐播放音乐停止播放下一首上一首音量控制关闭窗口前言
目录
  • 前言
  • 准备工作
    • www.cppcns.com识点和所需模块
    • 环境
  • 完整代码
    • 效果展示
      • 导入模块
        • 界面
          • 按钮
        • 功能
          • 创建一个文件目录
          • 音乐读取功能
          • 显示已加载的音乐
          • 播放音乐
          • 停止播放
          • 下一首
          • 上一首
          • 音量控制
          • 关闭窗口

        前言

        就是用python做一个简易的音乐播放器,废话不多说,咱们直接开干

        当然,今天做这个肯定不是最简单的,最简单的音乐播放器,9行代码足以

        import time
        import pygame
        
        file = r'歌曲路径'
        pygame.mixer.init()
        print('正在播放',file)
        track = pygame.mixer.music.load(file)
        pygame.mixer.music.play()
        time.sleep(130)
        pygame.mixer.music.stop()

        Python实现多功能音乐播放器详解

        准备工作

        知识点和所需模块

        1.python基础知识

        2.requests库

        3.time

        4.pygame

        5.tkinter

        6.线程

        环境

        windows

        pycharm 2021.2

        python 3.8

        完整代码

        # 导入
        import os
        import time
        import tkinter
        import tkinter.filedialog
        import threading
        import pygame   # pip
        
        
        
        root = tkinter.Tk()
        root.title('音乐播放器')
        root.geometry('460x600+500+100')
        root.resizable(False,False)  # 不能拉伸
        
        folder =''
        res = []
        num = 0
        now_music = ''
        
        
        
        def buttonChooseClick():
            """
            添加文件夹
            :return:
            """
            global folder
            global res
            if not folder:
                folder = tkinter.filedialog.askdirectory()
                musics = [folder + '\\' + music
                          for music in os.listdir(folder) \
        \
                          if music.endswith(('.mp3','.wav','.ogg'))]
                ret = []
                for i in musics:
        www.cppcns.com            ret.append(i.split('\\')[1:])
                    res.append(i.replace('\\','/'))
        
                var2 = tkinter.StringVar()
                var2.set(ret)
                lb = tkinter.Listbox(root,listvariable=var2)
                lb.place(x=50,y=100,width=260,height=300)
        
            if not folder:
                return
        
            global playing
            playing = True
            # 根据情况禁用和启用相应的按钮
            buttonPlay['state'] = 'normal'
            buttonStop['state'] = 'normal'
            # buttohttp://www.cppcns.comnPause['state'] = 'normal'
            pause_resume.set('播放')
        
        def play():
            """
            播放音乐
            :return:
            """
            if len(res):
                pygame.mixer.init()
                global num
                while playing:
                    if not pygame.mixer.music.get_busy():
                        netxMusic = res[num]
                        print(netxMusic)
                        print(num)
                        pygame.mixer.music.load(netxMusic.encode())
                        # 播放
                        pygame.mixer.music.play(1)
                        if len(res) -1 == num:
                            num = 0
                        else:
                            num = num + 1
                        netxMusic = netxMusic.split('\\')[1:]
                        musicName.set('playing......' + ''.join(netxMusic))
                    else:
                        time.sleep(0.1)
        
        
        def buttonPlayClick():
            """
            点击播放
            :return:
            """
            buttonNext['state'] = 'normal'
        
            buttonPrev['state'] = 'normal'
            # 选择要播放的音乐文件夹
            if pause_resume.get() == '播放':
                pause_resume.set('暂停')
                global folder
        
                if not folder:
                    folder = tkinter.filedialog.askdirectory()
        
                if not folder:
                    return
        
                global playing
        
                playing = True
        
                # 创建一个线程来播放音乐,当前主线程用来接收用户操作
                t = threading.Thread(target=play)
                t.start()
        
            elif pause_resume.get() == '暂停':
                # pygame.mixer.init()
                pygame.mixer.music.pause()
        
                pause_resume.set('继续')
        
            elif pause_resume.get() == '继续':
                # pygame.mixer.init()
                pygame.mixer.music.unpause()
        
                pause_resume.set('暂停')
        
        
        
        def buttonStopClick():
            """
            停止播放
            :return:
            """
            global playing
            playing = False
            pygame.mixer.music.stop()
        
        
        def buttonNextClick():
            """
            下一首
            :return:
            """
            global playing
            playing = False
            pygame.mixer.music.stop()
            global num
            if len(res) == num:
                num = 0
        
            playing = True
            # 创建线程播放音乐,主线程用来接收用户操作
            t = threading.Thread(target=play)
            t.start()
        
        
        def closeWindow():
            """
            关闭窗口
            :return:
            """
            # 修改变量,结束线程中的循环
        
            global playing
        
            playing = False
        
            time.sleep(0.3)
        
            try:
        
                # 停止播放,如果已停止,
        
                # 再次停止时会抛出异常,所以放在异常处理结构中
        
                pygame.mixer.music.stop()
        
                pygame.mixer.quit()
        
            except:
        
                pass
        
            root.destroy()
        
        
        def control_voice(value=0.5):
            """
            声音控制
            :param value: 0.0-1.0
            :return:
            """
            pygame.mixer.music.set_volume(float(value))
        
        
        def buttonPrevClick():
            """
            上一首
            :return:
            """
            global playing
        
            playing = False
        
            pygame.mixer.musicbJYfouYiwN.stop()
            #
            # pygame.mixer.quit()
            global num
            # num += 1
            # num -= 1
            if num == 0:
                num = len(res) - 2
                # num -= 1
            elif num == len(res) - 1:
                num -= 2
            else:
                num -= 2
                # num -= 1
            print(num)
        
            playing = True
        
            # 创建一个线程来播放音乐,当前主线程用来接收用户操作
        
            t = threading.Thread(target=play)
        
            t.start()
        
        
        # 窗口关闭
        root.protocol('WM_DELETE_WINDOW', closeWindow)
        
        # 添加按钮
        buttonChoose = tkinter.Button(root,text='添加',command=buttonChooseClick)
        # 布局
        buttonChoose.place(x=50,y=10,width=50,height=20)
        
        # 播放按钮
        pause_resume = tkinter.StringVar(root,value='播放')
        buttonPlay = tkinter.Button(root,textvariable=pause_resume,command=buttonPlayClick)
        buttonPlay.place(x=190,y=10,width=50,height=20)
        buttonPlay['state'] = 'disabled'
        
        
        # 停止按钮
        buttonStop = tkinter.Button(root, text='停止',command=buttonStopClick)
        buttonStop.place(x=120, y=10, width=50, height=20)
        buttonStop['state'] = 'disabled'
        
        # 下一首
        buttonNext = tkinter.Button(root, text='下一首',command=buttonNextClick)
        buttonNext.place(x=260, y=10, width=50, height=20)
        buttonNext['state'] = 'disabled'
        # 上一首
        buttonPrev = tkinter.Button(root, text='上一首',command=buttonPrevClick)
        buttonPrev.place(x=330, y=10, width=50, height=20)
        buttonPrev['state'] = 'disabled'
        
        
        # 标签
        musicName = tkinter.StringVar(root, value='暂时没有播放音乐...')
        labelName = tkinter.Label(root, textvariable=musicName)
        labelName.place(x=10, y=30, width=260, height=20)
        
        # 音量控制
        # HORIZONTAL表示为水平放置,默认为竖直,竖直为vertical
        s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,
                          length=240, showvalue=0, tickinterval=2, resolution=0.1,command=control_voice)
        s.place(x=50, y=50, width=200)
        
        
        # 显示
        root.mainloop()

        效果展示

        简易版的

        Python实现多功能音乐播放器详解

        还有个半成品的,目前代码没写完

        Python实现多功能音乐播放器详解

        导入模块

        import os
        import time
        import tkinter
        import tkinter.filedialog
        import threading
        import pygame 
        

        界面

        root = tkinter.Tk()
        root.title('音乐播放器')
        root.geometry('460x600+500+100')
        root.resizable(False,False) # 不能拉伸
        
        # 显示
        root.mainloop()

        Python实现多功能音乐播放器详解

        按钮

        # 添加按钮
        buttonChoose = tkinter.Button(root,text='添加')
        # 布局
        buttonChoose.place(x=50,y=10,width=50,height=20)
        
        # 播放按钮
        pause_resume = tkinter.StringVar(root,value='播放')
        buttonPlay = tkinter.Button(root,textvariable=pause_resume)
        buttonPlay.place(x=190,y=10,width=50,height=20)
        buttonPlay['state'] = 'disabled'
        
        
        # 停止按钮
        buttonStop = tkinter.Button(root, text='停止')
        buttonStop.place(x=120, y=10, width=50, height=20)
        buttonStop['state'] = 'disabled'
        
        # 下一首
        buttonNext = tkinter.Button(root, text='下一首')
        buttonNext.place(x=260, y=10, width=50, height=20)
        buttonNext['state'] = 'disabled'
        # 上一首
        buttonPrev = tkinter.Button(root, text='上一首')
        buttonPrev.place(x=330, y=10, width=50, height=20)
        buttonPrev['state'] = 'disabled'
        
        
        # 标签
        musicName = tkinter.StringVar(root, value='暂时没有播放音乐...')
        labelName = tkinter.Label(root, textvariable=musicName)
        labelName.place(x=10, y=30, width=260, height=20)
        
        # 音量控制
        # HORIZONTAL表示为水平放置,默认为竖直,竖直为vertical
        s = tkinter.Scale(root, label='音量', from_=0, to=1, orient=tkinter.HORIZONTAL,
                          length=240, showvalue=0, tickinterval=2, resolution=0.1)
        s.place(x=50, y=50, width=200)

        Python实现多功能音乐播放器详解

        功能

        创建一个文件目录

        folder =''
        res = []
        num = 0
        now_music = ''
        

        音乐读取功能

        def buttonChooseClick():
            global folder
            global res
            if not folder:
                folder = tkinter.filedialog.askdirectory()
                musics = [folder + '\\' + music
                          for music in os.listdir(folder) \
        \
                          if music.endswith(('.mp3','.wav','.ogg'))]
                ret = []
                for i in musics:
                    ret.append(i.split('\\')[1:])
                    res.append(i.replace('\\','/'))
        
            if not folder:
                return
        
            global playing
            playing = True
            # 根据情况禁用和启用相应的按钮
            buttonPlay['state'] = 'normal'
            buttonStop['state'] = 'normal'
            # buttonPause['state'] = 'normal'
            pause_resume.set('播放')

        显示已加载的音乐

        var2 = tkinter.StringVar()
        var2.set(ret)
        lb = tkinter.Listbox(root,listvariable=var2)
        lb.place(x=50,y=100,width=260,height=300)
        

        Python实现多功能音乐播放器详解

        播放音乐

        def play():
            if len(res):
                pygame.mixer.init()
                global num
                while playing:
                    if not pygame.mixer.music.get_busy():
                        netxMusic = res[num]
                        print(netxMusic)
                        print(num)
                        pygame.mixer.music.load(netxMusic.encode())
                        # 播放
                        pygame.mixer.music.play(1)
                        if len(res) -1 == num:
                            num = 0
                        else:
                            num = num + 1
                        netxMusic = netxMusic.split('\\')[1:]
                        musicName.set('playing......' + ''.join(netxMusic))
                    else:
                        time.sleep(0.1)
        
        # 点击播放
        def buttonPlayClick():
            buttonNext['state'] = 'normal'
        
            buttonPrev['state'] = 'normal'
            # 选择要播放的音乐文件夹
            if pause_resume.get() == '播放':
                pause_resume.set('暂停')
                g编程客栈lobal folder
        
                if not folder:
                    folder = tkinter.filedialog.askdirectory()
        
                if not folder:
                    return
        
                global playing
        
                playing = True
        
                # 创建一个线程来播放音乐,当前主线程用来接收用户操作
                t = threading.Thread(target=play)
                t.start()
        
            elif pause_resume.get() == '暂停':
                # pygame.mixer.init()
                pygame.mixer.music.pause()
        
                pause_resume.set('继续')
        
            elif pause_resume.get() == '继续':
                # pygame.mixer.init()
                pygame.mixer.music.unpause()
        
                pause_resume.set('暂停')
        

        停止播放

        def buttonStopClick():
            global playing
            playing = False
            pygame.mixer.music.stop()
        

        下一首

        def buttonNextClick():
            global playing
            playing = False
            pygame.mixer.music.stop()
            global num
            if len(res) == num:
                num = 0
        
            playing = True
            # 创建线程播放音乐,主线程用来接收用户操作
            t = threading.Thread(target=play)
            t.start()
        

        上一首

        def buttonPrevClick():
            global playing
            playing = False
            pygame.mixer.music.stop()
            #
            # pygame.mixer.quit()
            global num
            # num += 1
            # num -= 1
            if num == 0:
                num = len(res) - 2
                # num -= 1
            elif num == len(res) - 1:
                num -= 2
            else:
                num -= 2
                # num -= 1
            print(num)
            playing = True
            # 创建一个线程来播放音乐,当前主线程用来接收用户操作
            t = threading.Thread(target=play)
            t.start()
        

        音量控制

        def control_voice(value=0.5):
            pygame.mixer.music.set_volume(float(value))
        

        关闭窗口

        def closeWindow():
            # 修改变量,结束线程中的循环
            global playing
            playing = False
            time.sleep(0.3)
        
            try:
                # 停止播放,如果已停止,
                # 再次停止时会抛出异常,所以放在异常处理结构中
                pygame.mixer.music.stop()
                pygame.mixer.quit()
        
            except:
                pass
            root.destroy()
        

        到此这篇关于Python实现多功能音乐播放器详解的文章就介绍到这了,更多相关Python音乐播放器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号