使用Python、PyQt和Phonon播放mp3
我今天一直在尝试用Python搞懂Qt的Phonon库。
我的长期目标是看看能否让它播放一个mms://的流媒体,但因为网上找不到相关的实现,我决定自己来解决这个问题。(我想如果有人对这个具体问题了解更多,那就太好了,如果没有也没关系。)
总之,我打算从网上找到的一个可以运行的例子开始倒推。这个例子会打开一个文件浏览器,并播放指定的mp3文件。我想把文件浏览器的部分去掉,简化到只执行脚本并播放一个路径写死的Mp3文件。
我觉得我的问题可能是对setCurrentSource()的理解有误,还有就是数据类型的指定。(参考:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/phonon-mediasource.html#fileName)
我把问题提得比较宽泛,因为任何关于Phonon的理解帮助都会非常感激。
import sys
from PyQt4.QtGui import QApplication, QMainWindow, QDirModel, QColumnView
from PyQt4.QtGui import QFrame
from PyQt4.QtCore import SIGNAL
from PyQt4.phonon import Phonon
class MainWindow(QMainWindow):
m_model = QDirModel()
def __init__(self):
QMainWindow.__init__(self)
self.m_fileView = QColumnView(self)
self.m_media = None
self.setCentralWidget(self.m_fileView)
self.m_fileView.setModel(self.m_model)
self.m_fileView.setFrameStyle(QFrame.NoFrame)
self.connect(self.m_fileView,
SIGNAL("updatePreviewWidget(const QModelIndex &)"), self.play)
def play(self, index):
self.delayedInit()
self.m_media.setCurrentSource(
Phonon.MediaSource(self.m_model.filePath(index)))
self.m_media.play()
def delayedInit(self):
if not self.m_media:
self.m_media = Phonon.MediaObject(self)
audioOutput = Phonon.AudioOutput(Phonon.MusicCategory, self)
Phonon.createPath(self.m_media, audioOutput)
def main():
app = QApplication(sys.argv)
QApplication.setApplicationName("Phonon Tutorial 2 (Python)")
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
3 个回答
如果Phonon没有输出音频或视频,但也没有报错,你可能只需要运行一下 sudo apt-get install phonon-backend-gstreamer
,还有可能需要再运行 sudo apt-get install libphonon-dev
。
Phonon在后台使用gstreamer或vlc,但这个过程是悄悄进行的,所以如果没有这些支持,就不会报错,但也无法正常工作。运行完这些命令后,我在我的树莓派上就能听到Phonon的声音了。
希望这能在将来帮助到某些人。
在delayedInit
方法中,像下面这样创建一个MediaObject
:
def delayedInit(self):
if not self.m_media:
self.m_media = Phonon.createPlayer(Phonon.MusicCategory)
Phonon这个工具在不同的平台上支持不同的音频文件格式,它会使用系统本身对媒体格式的支持。所以,有可能你的系统没有提供播放MP3文件的库。确实,有些Linux系统默认是不支持MP3格式的。如果你在使用Linux,可以看看下面这个页面,了解如何启用MP3支持:
http://doc.qt.io/qt-4.8/phonon-overview.html#linux
另外,检查Phonon支持哪些媒体格式的一个方法是运行Qt提供的Capabilities示例:
http://doc.qt.io/qt-4.8///qt-phonon-capabilities-example.html
这个示例可以告诉你你的系统支持哪些媒体格式。