有了代码,我现在可以成功播放文件中的.mp3数据。
但是我需要使用QtCore.QBuffer播放相同的数据(不是来自文件)。
当我使用文档示例时,它出错了QBuffer的意外类型!
但是……根据文档,这就是应该看到的。
但是......它抛出:
TypeError:Phonon.MediaObject.setCurrentSource(Phonon.MediaSource):参数1具有意外的类型'QBuffer'
我使用的代码是(1):
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
mediaObject.setCurrentSource(someBuffer)
我也尝试过(2):
someBuffer = QtCore.QBuffer()
mediaObject.setCurrentSource(someBuffer)
someBuffer.writeData(TrackData)
和(3):
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
mediaObject.setCurrentSource(Phonon.MediaSource(someBuffer))
最后一个示例(3)引发了另一个错误,并在屏幕外擦除了Gui ;-)
ASSERT:文件/builddir/build/BUILD/phonon-4.5.1/phonon/streaminterface.cpp中的“d-> connected”,xxxx行
注意:TrackData包含mp3数据,当我将其写入文件并将其用作mediaObject.setCurrentSource(Phonon.MediaSource())的资源时,它也播放正常。我还尝试了QByteArray,但导致了相同的“意外QBuffer ”错误。更准确地说,我提供的setCurrentSource均不接受。尝试了一个字符串(错误的String意外类型),尝试了QBuffer(错误的QBuffer意外类型),尝试了QByteArray(错误的QByteArray意外类型)。
顺便说一句:我在Linux上运行Qt,PyQt。
有任何想法吗??
最佳答案
从PyQt文档中,看来setCurrentSource
需要一个MediaSource
对象。可以使用MediaSource
对象初始化QIODevice
对象; QBuffer
是QIODevice
的子类。也许您需要将QBuffer
包装在MediaSource
中:
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
sourceWrapper = Phonon.MediaSource(someBuffer)
mediaObject.setCurrentSource(sourceWrapper)
该文档似乎建议您不需要这样做,应该隐式构造
MediaSource
对象。我认为他们可能是错的。我只是做了一个快速测试:在setCurrentSource
上调用QBuffer
会引发一个错误,就像您得到的一样。但是,将其包装在MediaSource
中,然后对其进行调用就可以了。关于pyqt - 如何在PyQt Qt环境中将QBuffer与Phonon一起播放.mp3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9515345/