2012-03-01 56 views
3

使用我现在的代码,我可以成功地从文件播放.mp3数据。 但是我需要使用QtCore.QBuffer(不是来自文件)播放相同的数据。 当我使用文档的示例时,它会出现意外的QBuffer类型! 但是......这是它应该看到,根据文档。如何在PyQt Qt环境中使用带声子的QBuffer播放.mp3

但是...............它抛出:

类型错误:Phonon.MediaObject.setCurrentSource(Phonon.MediaSource):参数1具有意想不到类型 'Q缓冲器'

我使用的代码是(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: "d->connected" in file /builddir/build/BUILD/phonon-4.5.1/phonon/streaminterface.cpp, line xxxx

注:
TrackData包含mp3数据和正在播放好的,当我把它写入一个文件并将其用作mediaObject.setCurrentSource(Phonon.MediaSource())的资源时,我也尝试了一个QByteArray,但是这导致了相同的“意外的QBuffer”错误。为了更准确地给我提供setCurrentSource的一切都不被接受。尝试了一个字符串(错误是一个意外的字符串类型),尝试了一个QBuffer(错误是一个意外的QBuffer类型),尝试了一个QByteArray(错误是一个意外的QByteArray类型)。

BTW:我在Linux上运行Qt,PyQt。

任何想法??

回答

0

PyQt文档,它看起来像setCurrentSource期望一个MediaSource对象。 MediaSource对象可以用QIODevice对象初始化; QBufferQIODevice的一个子类。也许你需要用你的MediaSourceQBuffer

someBuffer = QtCore.QBuffer() 
someBuffer.writeData(TrackData) 
sourceWrapper = Phonon.MediaSource(someBuffer) 
mediaObject.setCurrentSource(sourceWrapper) 

的文件似乎表明,你不应该需要这样做,那MediaSource对象应该被隐式构造。我认为他们可能是错的。我只是做了一个快速测试:在QBuffer上调用setCurrentSource提出了一个像你一样的错误。然而,包装在MediaSource并呼吁setCurrentSource就行了。

+0

我试过你的示例代码,甚至其他方法,但它仍然无法正常工作。你真的用.mp3数据测试过吗?它播放声音? – thedax 2013-02-14 11:34:28

+0

我做了,我刚刚再次测试。它玩的很好。 – Whatang 2013-02-18 18:08:38