使用我现在拥有的代码,我可以成功地播放文件中的.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:文件/builddir/build/build/phonen-4.5.1/phonon/streaminterface.cpp中的"d->connected",第xxxx行
注意:
TrackData包含mp3数据,当我将其写入文件并将其用作mediaObject.setCurrentSource(Phonon.MediaSource())的资源时,播放正常。我也尝试了QByteArray,但这导致了同样的"意外QBuffer"错误。更确切地说,我给setCurrentSource的所有内容都不被接受。尝试字符串(错误为意外类型的字符串),尝试QBuffer(错误为异常类型的QBuffer),尝试了QByteArray(错误为非预期类型的QByteArray)。
BTW:我在Linux上运行Qt,PyQt。
有什么想法吗??
从PyQt文档来看,setCurrentSource
需要一个MediaSource
对象。CCD_ 3对象可以用CCD_ 4对象进行初始化;CCD_ 5是CCD_ 6的一个子类。也许您需要将QBuffer
包装在MediaSource
:中
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
sourceWrapper = Phonon.MediaSource(someBuffer)
mediaObject.setCurrentSource(sourceWrapper)
文档似乎建议您不需要这样做,应该隐式构造MediaSource
对象。我认为他们可能错了。我刚刚做了一个快速测试:在QBuffer
上调用setCurrentSource
会引发一个错误,就像您得到的一样。但是,将其封装在MediaSource
中并在其上调用setCurrentSource
效果良好。