之前用mutagen修改TAG,总是无法播放,后来经过调试发现没有任何错误,正常播放中,但是没有声音,所以下载了个LAVFilters-0.68.1-x64.zip(Windows下解码器,解压后运行install_splitter.bat),就完美解决了。
本次添加的功能:显示爬取到的TOP100歌曲,双击该歌曲播放并添加到播放列表中(我的歌单)

from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog, QMessageBox, QDialog,QAbstractItemView,QWidget
from PyQt5.QtCore import QUrl, Qt
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from Ui_playerUi4 import Ui_MainWindow
from Mp3Info import GetMp3Info,SetMp3Info
from PyQt5.QtMultimedia import QMediaPlayer, QMediaPlaylist, QMediaContent
from getKuwoInfo import getKuwoInfo,getsongInfo  #这个是爬取信息,自己去写^ ^
import sys,json,osclass My(QMainWindow, Ui_MainWindow):def __init__(self):super().__init__()win = self.setupUi(self)self.player = QMediaPlayer()  # 创建播放器self.playList = QMediaPlaylist()  # 创建播放列表self.playList.setPlaybackMode(QMediaPlaylist.Loop)  # 设置循环播放self.determineExistPlayDir()self.singalAndSlot()self.setWindowFlags(Qt.WindowCloseButtonHint)  # 取消窗口最大化和最小化self.songListSet()def kuwoList(self):self.kuwodata=getKuwoInfo()self.model = QStandardItemModel(0, 4)  # 创造数据模型,0行,4列self.model.setHorizontalHeaderLabels(['歌曲', '歌手', '专辑', '时长'])  # 设置标题if self.kuwodata:  # 添加数据for onedata in self.kuwodata:self.model.appendRow([  # 添加一行数据QStandardItem(onedata['name']),QStandardItem(onedata['artist']),QStandardItem(onedata['album']),QStandardItem(onedata['songTimeMinutes'])])self.songList.setModel(self.model)  # 把数据添加至QtableView中self.table=2def songListSet(self):'''在界面显示歌曲列表'''self.model = QStandardItemModel(0, 4)  # 创造数据模型,0行,4列self.model.setHorizontalHeaderLabels(['歌曲', '歌手', '专辑', '时长'])  # 设置标题if not self.playList.isEmpty():  # 添加数据for index in range(self.playList.mediaCount()):if self.playList.media(index).canonicalUrl().path()[0]==r'/':path = self.playList.media(index).canonicalUrl().path()[1:]else:path = self.playList.media(index).canonicalUrl().path()info = GetMp3Info(path)print(path)self.model.appendRow([  # 添加一行数据QStandardItem(info.title),QStandardItem(info.artist),QStandardItem(info.album),QStandardItem(info.length)])print(info.title)self.songList.setModel(self.model)  # 把数据添加至QtableView中self.songList.setColumnWidth(0, 350)  # 设置第1列列宽self.songList.setColumnWidth(1, 200)  # 设置第2列列宽self.songList.setColumnWidth(2, 250)  # 设置第3列列宽self.songList.setColumnWidth(3, 158)  # 设置第4列列宽self.songList.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 设置不可编辑单元格self.songList.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)   #取消水平滚动条self.table=1 #1:表示当前界面是播放列表,2:表示当前界面不是播放列表def singalAndSlot(self):'''这里汇聚了所有的信号和槽'''self.nextSong.clicked.connect(self.nextS)self.preSong.clicked.connect(self.preS)self.startStop.clicked.connect(self.startOrStop)self.songDir.clicked.connect(self.writeDir)self.songList.doubleClicked.connect(self.doubleClickedToPlaySong)self.hotSongs.clicked.connect(self.kuwoList)self.mysong.clicked.connect(self.songListSet)self.player.currentMediaChanged.connect(self.staShow)def doubleClickedToPlaySong(self):'''双击后播放'''index = self.songList.currentIndex().row()  # 获取双击所在行if self.table==1:self.playList.setCurrentIndex(index)self.staShow()else:path=self.kuwodata[index]['name']+'.mp3'if os.path.exists(path):print(path)self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(path)))print(self.playList.mediaCount())else:getsongInfo(self.kuwodata[index])self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(path)))print(self.playList.save(QUrl('playlist.m3u')))self.allSong.append(self.kuwodata[index]['name'])self.playList.setCurrentIndex(self.playList.mediaCount()-1)self.staShow()def noSongsMessage(self):mess = QMessageBox.warning(self,"温馨提示",'列表中没有歌曲,请点击歌曲目录添加歌曲!',QMessageBox.Yes)def determineExistPlayDir(self):'''判断是否存在配置文件,配置文件中是否存有播放目录'''try:with open('play.ini', 'r') as f:self.url = f.read()except:self.url = ''self.addSongsToPlaylist()def writeDir(self):'''选取要播放的歌曲目录'''self.url = QFileDialog.getExistingDirectory(self,"选取文件夹","./")with open('play.ini', 'w') as f:f.write(self.url)self.addSongsToPlaylist()self.songListSet()def addSongsToPlaylist(self):self.getSongs()self.playList.clear()if self.allSong:for i in self.allSong:self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(i)))  # 把所有歌曲添加到列表中self.player.setPlaylist(self.playList)self.player.play()  # 开始播放songInfo = self.getSongInfo()self.statusbar.showMessage(songInfo.title)def startOrStop(self):'''播放按键控制'''if not self.allSong:self.noSongsMessage()else:if self.player.state() == 1:self.player.pause()self.statusbar.showMessage('暂停')self.startStop.setText('播放')elif self.player.state() == 2:self.player.play()self.staShow()self.startStop.setText('暂停')def staShow(self):'''显示歌曲名'''if self.allSong:songInfo = self.getSongInfo()self.statusbar.showMessage(songInfo.title)def nextS(self):'''下一首'''if not self.allSong:self.noSongsMessage()else:self.playList.next()def preS(self):'''上一首'''if not self.allSong:self.noSongsMessage()else:self.playList.previous()def getSongInfo(self):'''获取歌曲信息info:歌曲信息对象'''if self.player.currentMedia().canonicalUrl().path()[0]==r'/':path = self.player.currentMedia().canonicalUrl().path()[1:]  # 获取当前播放曲目路径else:path = self.player.currentMedia().canonicalUrl().path()info = GetMp3Info(path)return infodef getSongs(self):'''获取文件夹内所有的歌曲'''self.allSong = []for root, dirs, files in os.walk(self.url):for file in files:if file[-3:] == 'mp3':self.allSong.append(os.path.join(root, file))if __name__ == "__main__":app = QApplication(sys.argv)w = My()w.show()sys.exit(app.exec())
from mutagen.mp3 import MP3
from mutagen.id3 import ID3, APIC, TIT2, TPE1, TALB
from mutagen.apev2 import APEv2
import osclass GetMp3Info():'''获取歌曲信息'''def __init__(self, path):try:songFile = ID3(path)except:self.title = os.path.basename(path).split('.')[0]self.picData=''self.artist=''self.album=''self.length=''else:self.getTitle(songFile, path)self.getArtist(songFile)self.getAlbum(songFile)self.getPicData(songFile)songFile=MP3(path)self.getLength(songFile)def getTitle(self, songFile, path):'''获取歌曲名songFile:文件对象path:文件地址'''try:self.title = str(songFile['TIT2'])except:filename = os.path.basename(path)  # 从地址中获取文件名self.title = filename.split('.')[0]  # 去掉文件名后缀def getArtist(self,songFile):'''获取歌手名songFile:文件对象'''try:self.artist=str(songFile['TPE1'])except:self.artist=''def getAlbum(self,songFile):'''获取专辑名songFile:文件对象'''try:self.album=str(songFile['TALB'])except:self.album=''def getLength(self,songFile):'''获取文件播放时时长'''timeLength = int(songFile.info.length)mintime = timeLength//60  #转换为分钟sectime = timeLength % 60 #剩余的转换为秒if sectime < 10:sectime='0'+ str(sectime)else:sectime=str(sectime)self.length=str(mintime)+":"+sectimedef getPicData(self,songFile):try:self.picData=songFile['APIC:Cover']except:self.picData=''def SetMp3Info(path,info):songFile = ID3(path)songFile['APIC'] = APIC(  # 插入封面encoding=3,mime='image/jpeg',type=3,desc=u'Cover',data=info['picData'])songFile['TIT2'] = TIT2(  # 插入歌名encoding=3,text=info['title'])songFile['TPE1'] = TPE1(  # 插入第一演奏家、歌手、等encoding=3,text=info['artist'])songFile['TALB'] = TALB(  # 插入专辑名encoding=3,text=info['album'])songFile.update_to_v23()songFile.save()if __name__=='__main__':path='想死却又不敢.mp3'# song=GetMp3Info(path)# print(song.title,song.album,song.artist,song.length,song.picData)# print(song.title)# song=SetMp3Info2(path)
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'g:\Mp3player\playerUi4.ui'
#
# Created by: PyQt5 UI code generator 5.12.2
#
# WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.setEnabled(True)MainWindow.resize(1139, 509)MainWindow.setMinimumSize(QtCore.QSize(0, 0))MainWindow.setMaximumSize(QtCore.QSize(10000, 10000))self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.layoutWidget = QtWidgets.QWidget(self.centralwidget)self.layoutWidget.setGeometry(QtCore.QRect(370, 450, 280, 32))self.layoutWidget.setObjectName("layoutWidget")self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.preSong = QtWidgets.QPushButton(self.layoutWidget)self.preSong.setMinimumSize(QtCore.QSize(60, 30))self.preSong.setMaximumSize(QtCore.QSize(60, 30))self.preSong.setToolTipDuration(0)self.preSong.setStyleSheet("background:white; border:0px;border-radius:10px")self.preSong.setObjectName("preSong")self.horizontalLayout.addWidget(self.preSong)self.startStop = QtWidgets.QPushButton(self.layoutWidget)self.startStop.setMinimumSize(QtCore.QSize(60, 30))self.startStop.setMaximumSize(QtCore.QSize(60, 30))self.startStop.setToolTipDuration(0)self.startStop.setStyleSheet("background:white; border:0px;border-radius:10px")self.startStop.setObjectName("startStop")self.horizontalLayout.addWidget(self.startStop)self.nextSong = QtWidgets.QPushButton(self.layoutWidget)self.nextSong.setMinimumSize(QtCore.QSize(60, 30))self.nextSong.setMaximumSize(QtCore.QSize(60, 30))self.nextSong.setToolTipDuration(0)self.nextSong.setStyleSheet("background:white; border:0px;border-radius:10px")self.nextSong.setObjectName("nextSong")self.horizontalLayout.addWidget(self.nextSong)self.songDir = QtWidgets.QPushButton(self.layoutWidget)self.songDir.setMinimumSize(QtCore.QSize(60, 30))self.songDir.setMaximumSize(QtCore.QSize(60, 30))self.songDir.setToolTipDuration(0)self.songDir.setStyleSheet("background:white; border:0px;border-radius:10px")self.songDir.setObjectName("songDir")self.horizontalLayout.addWidget(self.songDir)self.songList = QtWidgets.QTableView(self.centralwidget)self.songList.setGeometry(QtCore.QRect(120, 0, 1011, 441))self.songList.setStyleSheet("border:0px")self.songList.setLineWidth(1)self.songList.setMidLineWidth(0)self.songList.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)self.songList.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)self.songList.setTextElideMode(QtCore.Qt.ElideLeft)self.songList.setShowGrid(False)self.songList.setObjectName("songList")self.hotSongs = QtWidgets.QPushButton(self.centralwidget)self.hotSongs.setGeometry(QtCore.QRect(0, 50, 121, 41))self.hotSongs.setMinimumSize(QtCore.QSize(0, 0))self.hotSongs.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.hotSongs.setFont(font)self.hotSongs.setToolTipDuration(0)self.hotSongs.setStyleSheet("background:white; border:0px;")self.hotSongs.setObjectName("hotSongs")self.newSong = QtWidgets.QPushButton(self.centralwidget)self.newSong.setGeometry(QtCore.QRect(0, 210, 121, 41))self.newSong.setMinimumSize(QtCore.QSize(0, 0))self.newSong.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.newSong.setFont(font)self.newSong.setToolTipDuration(0)self.newSong.setStyleSheet("background:white; border:0px;")self.newSong.setObjectName("newSong")self.janSong = QtWidgets.QPushButton(self.centralwidget)self.janSong.setGeometry(QtCore.QRect(0, 170, 121, 41))self.janSong.setMinimumSize(QtCore.QSize(0, 0))self.janSong.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.janSong.setFont(font)self.janSong.setToolTipDuration(0)self.janSong.setStyleSheet("background:white; border:0px;")self.janSong.setObjectName("janSong")self.usaSong = QtWidgets.QPushButton(self.centralwidget)self.usaSong.setGeometry(QtCore.QRect(0, 130, 121, 41))self.usaSong.setMinimumSize(QtCore.QSize(0, 0))self.usaSong.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.usaSong.setFont(font)self.usaSong.setToolTipDuration(0)self.usaSong.setStyleSheet("background:white; border:0px;")self.usaSong.setObjectName("usaSong")self.hotList = QtWidgets.QPushButton(self.centralwidget)self.hotList.setGeometry(QtCore.QRect(0, 90, 121, 41))self.hotList.setMinimumSize(QtCore.QSize(0, 0))self.hotList.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.hotList.setFont(font)self.hotList.setToolTipDuration(0)self.hotList.setStyleSheet("background:white; border:0px;")self.hotList.setObjectName("hotList")self.tableView = QtWidgets.QTableView(self.centralwidget)self.tableView.setGeometry(QtCore.QRect(0, 250, 121, 192))self.tableView.setStyleSheet("border:0px")self.tableView.setObjectName("tableView")self.mysong = QtWidgets.QPushButton(self.centralwidget)self.mysong.setGeometry(QtCore.QRect(0, 300, 121, 41))self.mysong.setMinimumSize(QtCore.QSize(0, 0))self.mysong.setMaximumSize(QtCore.QSize(1111, 1111))font = QtGui.QFont()font.setFamily("微软雅黑 Light")font.setPointSize(12)self.mysong.setFont(font)self.mysong.setToolTipDuration(0)self.mysong.setStyleSheet("background:white; border:0px;")self.mysong.setObjectName("mysong")MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "Mp3Player"))self.preSong.setText(_translate("MainWindow", "上一首"))self.startStop.setText(_translate("MainWindow", "暂停"))self.nextSong.setText(_translate("MainWindow", "下一首"))self.songDir.setText(_translate("MainWindow", "目录"))self.hotSongs.setText(_translate("MainWindow", "热门歌曲"))self.newSong.setText(_translate("MainWindow", "新      歌"))self.janSong.setText(_translate("MainWindow", "日韩歌曲"))self.usaSong.setText(_translate("MainWindow", "英文歌曲"))self.hotList.setText(_translate("MainWindow", "热门歌单"))self.mysong.setText(_translate("MainWindow", "我的歌单"))

Python PYQT5 MP3播放器(三) 这次解决了修改TAG后,部分歌曲没有声音的BUG,显示爬取到的歌曲列表相关推荐

  1. 我的Android进阶之旅------Android MediaPlayer播放网络音频的实例--网络mp3播放器

    上一篇写了个简单的MP3播放器 ,这次写一个可以播放网络音频资源的播放器 本实例可以实现音乐播放器除了来电的时候会暂停播放,通话结束后恢复播放外,打开其他的Activity都可以继续播放音乐,享受一边 ...

  2. MP3播放器如果你在移动

    MP3播放器如果你在移动 MP3播放器也被称为数字音频播放器,它已成为一个普通灯具在我们的日常生活中.大家似乎有一个这些天.遛狗,在健身房,商务旅行,您可以携带您的整个音乐库与您随时随地的想法是非常有 ...

  3. php 音频顺序播放,MP3播放器音频文件不按顺序播放的解决方法,简单实用

    MP3播放器对于现在的我们来说很多已经是过去了,但是我们总会有用到它的时候:当你听一些录音课程或者评书故事,亦或者使用迷你音响播放歌曲时常会发现拷贝进MP3播放器中的音频文件根本不按照你自己的想象进行 ...

  4. python写音乐播放器_AJ Kipper:用Python写一个简易的MP3播放器

    用Python写一个简易的MP3播放器 前言 最近在学习Web.py框架的时候,了解了基本的Python连接数据库(MySQL)的方法.学完后,总想用它来干点啥,于是,就想能不能写一个MP3播放器.一 ...

  5. python可视化音乐播放器(pyqt5+多平台下载)

    1.主要功能 实现一个python可视化音乐播放器,用的是pyqt5,主要是三个平台获取,一个是网易云音乐,一个是酷我音乐,一个是酷狗音乐者三个平台获取音乐,能够进行下载,然后进行播放,具备网页获取的 ...

  6. Python Mp3播放器实现

    Python Mp3播放器实现 在Python中,我们可以通过调用pyglet库来实现MP3音频的播放.本文将为大家演示如何使用Python编写一个简单的MP3播放器. 首先,我们需要导入pyglet ...

  7. Android练习项目 Mp3播放器实现 歌词解析(三)

    这是系列博客的第三篇,这一篇主要讲讲如何实现lrc歌词的解析,这个对于很多mp3的播放的同时看到歌词,十分重要.这也是其中比较重要的功能. 那就需要首先看下lrc文件的基本构造,这样才能够按照固定的规 ...

  8. jQuery三款简约MP3播放器插件

    下载地址 非常简约的mp3播放器插件,必须将singlemp3player.swf放在jMP3的同目录下. dd:

  9. python+openCV+pyqt5实现播放器

    给之前python+openCV实现播放器增加一个页面实现,我选择了pyqt来做一个简单的页面. 先看下UI界面,pyqt的环境配置可以参考: 播放器的基本功能: 选择视频文件 播放控制:(除了视频播 ...

最新文章

  1. 菜鸟学iPhone开发-计算器实例(实现篇)
  2. wpf checkbox选中触发事件_Cypress 可操作事件
  3. opengl入门资料
  4. java017.Set集合
  5. 使用sealos安装K8S集群时,需确保节点的swap是关闭的
  6. wp自定义帖子没标签_拼多多搜索智能推广和自定义推广区别在哪里?
  7. 关于包装java_[java初探09]__关于java的包装类
  8. 5 SD配置-企业结构-定义-定义销售组
  9. CCF202012-2 期末预测之最优阈值
  10. Python 错误记录(新手)
  11. 【扫描线】【POJ-1177】Picture【周长并】
  12. spart快速大数据分析学习提纲(一)
  13. 利用spring AOP 实现 sql注入检测
  14. 一筐鸡蛋 1个1个拿……弱智题
  15. 免费无损高品质音乐下载器V3.5
  16. Delphi7学习记录-demo实例
  17. Python 文件处理
  18. 深扒程序员外包,为啥我不建议你去外包公司?
  19. 计算机显示器模糊,电脑显示器模糊是什么原因
  20. r 语言c函数,R语言常用函数详解

热门文章

  1. [译] 冲冠一怒为代码:论程序员与负能量
  2. 系统资源查看与进程管理
  3. matlab的train函数用法,SVMtrain函数用法
  4. 解剖Twitter:Twitter系统结构分析
  5. MathType7应用中文版特色功能介绍
  6. 运载火箭弹道飞行程序matlab,运载火箭弹道与控制理论基础
  7. Spring的基础用法
  8. android 贴身检测,安卓5.0贴身检测怎么设置_安卓贴身检测智能解锁设置方法_飞翔教程...
  9. 《黑客与画家》——读书笔记
  10. PHP跨境电商商城系统源码支持多语言功能