如何在PyQt Qt环境中使用QBuffer和Phonon播放.mp3

时间:2012-03-01 11:28:15

标签: pyqt mp3 buffer phonon

使用我现在拥有的代码,我可以成功地从文件中播放.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。

有任何想法吗??

1 个答案:

答案 0 :(得分:0)

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并调用setCurrentSource就可以了。