python音乐播放器

简介: python音乐播放器
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:livingbody
@file:music_play.py
@time:2022/04/19
"""


一、环境设置


第一步引入必须的各类包

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

特别是pygame需要手动安装

pip install pygame


二、播放功能



首先选择音乐目录,然后创建播放现成,播放音乐。

# 播放按钮
def buttonPlayClick():
    # 选择要播放的音乐文件夹
    global folder
    if not folder:
        folder = tkinter.filedialog.askdirectory()
    if not folder:
        return
    global playing
    playing = True
    # 创建一个线程来播放音乐,当前主线程用来接收用户操作
    t = threading.Thread(target=play)
    t.start()
    # 根据情况禁用和启用相应的按钮
    buttonPlay['state'] = 'disabled'
    buttonStop['state'] = 'normal'
    buttonPause['state'] = 'normal'
    buttonNext['state'] = 'normal'
    pause_resume.set('Pause')
buttonPlay = tkinter.Button(root,
                            text='Play',
                            command=buttonPlayClick)
buttonPlay.place(x=20, y=10, width=50, height=20)


三、停止功能


很直接,直接停止播放,当然更改按钮状态也属常规操作。

def buttonStopClick():
    global playing
    playing = False
    pygame.mixer.music.stop()
    musicName.set('暂时没有播放音乐')
    buttonPlay['state'] = 'normal'
    buttonStop['state'] = 'disabled'
    buttonPause['state'] = 'disabled'
    buttonNext['state'] = 'disabled'
    global folder
    folder = ''
buttonStop = tkinter.Button(root,
                            text='Stop',
                            command=buttonStopClick)
buttonStop.place(x=80, y=10, width=50, height=20)
buttonStop['state'] = 'disabled'


三、暂停与恢复


这个好理解,也是直接现成操作,加个判断,状态更改。

# 暂停与恢复,两个功能共用一个按钮
def buttonPauseClick():
    # global playing
    if pause_resume.get() == 'Pause':
        pygame.mixer.music.pause()
        pause_resume.set('Resume')
    elif pause_resume.get() == 'Resume':
        pygame.mixer.music.unpause()
        pause_resume.set('Pause')


四、关闭


先结束现成,然后关闭窗体。

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


五、成品代码。


#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:livingbody
@file:music_play.py
@time:2022/04/19
"""
import os
import tkinter
import tkinter.filedialog
import random
import time
import threading
import pygame
folder = ''
def play():
    # folder用来表示存放MP3音乐文件的文件夹
    global folder
    musics = [folder + '\' + music
              for music in os.listdir(folder) \
              if music.endswith(('.mp3', '.wav', '.ogg'))]
    # 初始化混音器设备
    pygame.mixer.init()
    while playing:
        if not pygame.mixer.music.get_busy():
            # 随机播放一首歌曲
            nextMusic = random.choice(musics)
            musicName.set('playing....' + nextMusic)
            pygame.mixer.music.load(nextMusic.encode())
            # 播放一次
            pygame.mixer.music.play(1)
        else:
            time.sleep(0.3)
root = tkinter.Tk()
root.title('音乐播放器v1.0')
root.geometry('280x70+400+300')
root.resizable(False, False)
# 关闭程序时执行的代码
def closeWindow():
    # 修改变量,结束线程中的循环
    global playing
    playing = False
    time.sleep(0.3)
    try:
        # 停止播放,如果已停止,
        # 再次停止时会抛出异常,所以放在异常处理结构中
        pygame.mixer.music.stop()
        pygame.mixer.quit()
    except:
        pass
    root.destroy()
root.protocol('WM_DELETE_WINDOW', closeWindow)
pause_resume = tkinter.StringVar(root, value='NotSet')
playing = False
# 播放按钮
def buttonPlayClick():
    # 选择要播放的音乐文件夹
    global folder
    if not folder:
        folder = tkinter.filedialog.askdirectory()
    if not folder:
        return
    global playing
    playing = True
    # 创建一个线程来播放音乐,当前主线程用来接收用户操作
    t = threading.Thread(target=play)
    t.start()
    # 根据情况禁用和启用相应的按钮
    buttonPlay['state'] = 'disabled'
    buttonStop['state'] = 'normal'
    buttonPause['state'] = 'normal'
    buttonNext['state'] = 'normal'
    pause_resume.set('Pause')
buttonPlay = tkinter.Button(root,
                            text='Play',
                            command=buttonPlayClick)
buttonPlay.place(x=20, y=10, width=50, height=20)
# 停止按钮
def buttonStopClick():
    global playing
    playing = False
    pygame.mixer.music.stop()
    musicName.set('暂时没有播放音乐')
    buttonPlay['state'] = 'normal'
    buttonStop['state'] = 'disabled'
    buttonPause['state'] = 'disabled'
    buttonNext['state'] = 'disabled'
    global folder
    folder = ''
buttonStop = tkinter.Button(root,
                            text='Stop',
                            command=buttonStopClick)
buttonStop.place(x=80, y=10, width=50, height=20)
buttonStop['state'] = 'disabled'
# 暂停与恢复,两个功能共用一个按钮
def buttonPauseClick():
    # global playing
    if pause_resume.get() == 'Pause':
        pygame.mixer.music.pause()
        pause_resume.set('Resume')
    elif pause_resume.get() == 'Resume':
        pygame.mixer.music.unpause()
        pause_resume.set('Pause')
buttonPause = tkinter.Button(root,
                             textvariable=pause_resume,
                             command=buttonPauseClick)
buttonPause.place(x=140, y=10, width=50, height=20)
buttonPause['state'] = 'disabled'
# 下一首音乐
def buttonNextClick():
    global playing
    playing = False
    pygame.mixer.music.stop()
    pygame.mixer.quit()
    buttonPlayClick()
buttonNext = tkinter.Button(root,
                            text='Next',
                            command=buttonNextClick)
buttonNext.place(x=200, y=10, width=50, height=20)
buttonNext['state'] = 'disabled'
musicName = tkinter.StringVar(root,
                              value='暂时没有播放音乐...')
labelName = tkinter.Label(root,
                          textvariable=musicName)
labelName.place(x=0, y=40, width=270, height=20)
if __name__ == '__main__':
    # 启动消息循环
    root.mainloop()


六、改进


下一步,可加入播放列表,点选播放音乐,也可以拖动进度播放。


目录
相关文章
|
4月前
|
Python
Python 采集某网站音乐
Python 采集某网站音乐
32 0
|
10月前
|
搜索推荐 算法 前端开发
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
104 1
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
|
5天前
|
机器学习/深度学习 数据采集 人工智能
使用Python实现深度学习模型:智能音乐创作与生成
使用Python实现深度学习模型:智能音乐创作与生成
21 3
|
1月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的音乐推荐管理系统
该项目是基于Python+Vue开发的音乐推荐管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的音乐推荐管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 1
|
2月前
|
数据采集 数据可视化 数据挖掘
数据分析入门:用Python和Numpy探索音乐流行趋势
数据分析入门:用Python和Numpy探索音乐流行趋势
|
4月前
|
前端开发 Python
python制作七夕音乐贺卡
本篇博文是一个关于制作音乐贺卡的教程。自己在去年的在七夕节期间创作了一个代码项目,允许用户自定义背景、音乐和祝福语,生成一个包含音乐的HTML贺卡。教程分为三个部分:前言、制作流程和具体代码。前言提到,由于找不到现成的音乐贺卡模板,我决定自己动手,制作的贺卡适用于各种节日。制作流程包括两个步骤,一是通过提供的Python代码工具选择背景图片、音乐文件和输入祝福语,生成HTML贺卡;二是提供了一个预打包的exe文件,用户可以直接运行并按照提示操作。最后,文章分享了生成贺卡的具体Python代码,并以一句鼓励的话语结尾,强调了努力和选择的重要性。
|
4月前
|
人工智能 Python
beets,一个有趣的 Python 音乐信息管理工具!
beets,一个有趣的 Python 音乐信息管理工具!
98 4
|
4月前
|
算法 数据可视化 搜索推荐
Python使用矩阵分解法找到类似的音乐
Python使用矩阵分解法找到类似的音乐
|
4月前
|
JavaScript 搜索推荐 前端开发
音乐发现平台:借助Python和Vue构建个性化音乐推荐系统
【4月更文挑战第11天】本文介绍了如何使用Python和Vue.js构建个性化音乐推荐系统。首先确保安装Python、Node.js、数据库系统和Git。后端可选择Flask或Django搭建RESTful API,处理歌曲数据。前端利用Vue.js创建用户界面,结合Vue CLI、Vuex和Vue Router实现功能丰富的SPA。通过Vuex管理状态,Axios与后端通信。这种前后端分离的架构利于协作和系统扩展,助力打造定制化音乐体验。
112 0
|
4月前
|
数据采集 XML 存储
【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】
【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】