Я весь день пытался разобраться с библиотекой Qt Phonon с помощью Python.
Моя долгосрочная цель - посмотреть, смогу ли я заставить его воспроизводить поток 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()