使用我现在拥有的代码,我可以成功地从文件中播放.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)抛出一个不同的ERROR并擦掉我的Gui屏幕;-)
ASSERT: "d->connected" in file /builddir/build/BUILD/phonon-4.5.1/phonon/streaminterface.cpp, line xxxx
注意:
当我将其写入文件并将其用作mediaObject.setCurrentSource(Phonon.MediaSource())的资源时,TrackData包含mp3数据和IS PLAYING OK还尝试使用QByteArray,但会导致相同的“意外QBuffer”错误。更准确地说,我不接受任何我提供的setCurrentSource。尝试了一个字符串(错误意外类型的String),尝试了一个QBuffer(错误意外类型的QBuffer),尝试了一个QByteArray(错误意外类型的QByteArray)。
BTW:我在Linux上运行Qt,PyQt。
有任何想法吗??
答案 0 :(得分:0)
在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
并调用setCurrentSource
就可以了。