使用我现在拥有的代码,我可以成功地播放文件中的 .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())I 的资源时,它可以正常播放还尝试了 QByteArray,但这会导致相同的“意外 QBuffer”错误。更准确地说,我提供给 setCurrentSource 的所有内容都不被接受。尝试了一个字符串(错误为意外类型的字符串),尝试了 QBuffer(错误为意外类型的 QBuffer),尝试了 QByteArray(错误为意外类型的 QByteArray)。
顺便说一句:我在 Linux 上运行 Qt、PyQt。
有任何想法吗??
最佳答案
来自PyQt文档,它看起来像 setCurrentSource
需要一个 MediaSource
对象。 MediaSource
对象可以用QIODevice
对象初始化; QBuffer
是QIODevice
的子类。也许您需要将 QBuffer
包装在 MediaSource
中:
someBuffer = QtCore.QBuffer()
someBuffer.writeData(TrackData)
sourceWrapper = Phonon.MediaSource(someBuffer)
mediaObject.setCurrentSource(sourceWrapper)
文档似乎建议您不需要这样做,应该隐式构造 MediaSource
对象。我认为他们可能是错的。我刚刚做了一个快速测试:在 QBuffer
上调用 setCurrentSource
引发了一个错误,就像你遇到的那样。但是,将其包装在 MediaSource
中并调用 setCurrentSource
效果很好。
关于pyqt - 如何在 PyQt Qt 环境中使用 QBuffer 和 Phonon 播放 .mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515345/