有了代码,我现在可以成功播放文件中的.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对象; QBufferQIODevice的子类。也许您需要将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/

10-12 00:36