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

3
目前我有的代码可以成功地播放 .mp3 文件中的数据。然而,我需要使用 QtCore.QBuffer 来播放同样的数据(不从文件中读取)。当我使用文档中的示例时,它会出现意外类型的 QBuffer 错误!然而... 根据文档,这就是它应该看到的。
但是... 它会抛出以下错误:
TypeError: Phonon.MediaObject.setCurrentSource(Phonon.MediaSource): argument 1 has unexpected type '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:"d->connected" in file /builddir/build/BUILD/phonon-4.5.1/phonon/streaminterface.cpp, line xxxx
注:TrackData 包含 MP3 数据,并在我将其写入文件并将其作为资源提供给 mediaObject.setCurrentSource(Phonon.MediaSource()) 使用时播放正常。我还尝试过 QByteArray,但会导致相同的 "unexpected QBuffer" 错误。更精确地说,我提供给 setCurrentSource 的所有内容都不被接受。尝试了字符串(出现意外类型的 String 错误),尝试了 QBuffer(出现意外类型的 QBuffer 错误),尝试了 QByteArray(出现意外类型的 QByteArray 错误)。
顺便说一下,我在 Linux 上运行 Qt、PyQt。有什么想法吗?
1个回答

0
PyQt文档中看来,setCurrentSource似乎需要一个MediaSource对象。 MediaSource对象可以使用QIODevice对象进行初始化;QBufferQIODevice的子类。也许您需要将QBuffer包装在MediaSource中:
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
sourceWrapper = Phonon.MediaSource(someBuffer)
mediaObject.setCurrentSource(sourceWrapper)

文档似乎表明您不需要这样做,MediaSource对象应该是隐式构造的。但我认为他们可能是错的。我刚刚进行了一个快速测试:在QBuffer上调用setCurrentSource引发了一个错误,就像你得到的一样。然而,将其包装在MediaSource中并在其中调用setCurrentSource可以正常工作。

我尝试了你的示例代码和其他方法,但仍然无法工作。你真的测试过.mp3数据吗?它有声音吗? - thedax
我已经测试过了,它可以正常播放。 - Whatang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接