我正在尝试使用PyQt4和Phonon制作音乐播放器。该播放器可以很好地播放我的大多数音乐,但是某些MP3文件无法正常工作。
我尝试了很多MP3,大约十分之1似乎有问题。声子不会发送任何错误,只是不会播放歌曲。可以肯定的是,我比较了两首歌曲,其中一首正常播放,另一首无效,它们使用相同的编解码器(MPEG-1 Layer 3),两者的频率均为44100Hz和320 kb / s,标签的频率为ID3v2.3,两者均未使用标签或文件路径中的任何特殊字符,当我在WMP中播放它们时,两者都能正常工作。
我用以下命令初始化播放器:
self.player = Phonon.createPlayer(Phonon.MusicCategory)
然后发布一首歌曲,我使用:
self.player.setCurrentSource(Phonon.MediaSource(path_to_file))
self.player.play()
很明显,文件之间必须有一些区别,也许是在编码方式上(全部无效歌曲的专辑也无法使用),但是我不知道为什么某些文件可以正常运行而其他文件无法识别不是...您有什么可能会导致问题的想法吗?
我在Windows 10上运行PyQt 4.11.4和Python 2.7.15。虽然不确定声子的版本...:-/
我想我虽然找到了一些东西...但由于错误的MP3,我设法得到一个错误:
“无法连接联系人,因为它们不支持相同的传输。(0x80040266)。”
根据this post,这是由文件元数据引起的,当我进行一些测试时,它似乎来自专辑封面的文件大小。当大小大于〜108 KB时,MP3无法正常工作,但是如果我调整图像大小以使其低于此限制,则MP3可以工作...
这是一个简化的代码,可以使用problematic mp3进行测试:
import sys
from functools import partial
from PyQt4.QtGui import *
from PyQt4.phonon import *
class MusicPlayer(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.player = Phonon.createPlayer(Phonon.MusicCategory)
BTN_play = QPushButton("Play")
BTN_play.pressed.connect(self.play)
self.setCentralWidget(BTN_play)
self.show()
def play(self):
path = "path/to/file.mp3"
self.player.setCurrentSource(Phonon.MediaSource(path))
self.player.play()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MusicPlayer()
sys.exit(app.exec_())
不过,我还是不想编辑每个文件元数据来更正它。有没有办法让Phonon在解析文件时忽略封面图像,从而不会出错?