3

使用我现在拥有的代码,我可以成功播放文件中的 .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) 抛出一个不同的错误并将我的 Gui 从屏幕上擦掉;-)

 
    断言:文件 /builddir/build/BUILD/phonon-4.5.1/phonon/streaminterface.cpp 中的“d->connected”,第 xxxx 行

注意:
TrackData 包含 mp3 数据,并且当我将其写入文件并将其用作 mediaObject.setCurrentSource(Phonon.MediaSource()) 的资源时播放正常“ 错误。更准确地说,我提供的所有内容 setCurrentSource 都不被接受。尝试了一个字符串(错误的意外类型的字符串),尝试了 QBuffer(错误的意外类型的 QBuffer),尝试了 QByteArray(错误的意外类型的 QByteArray)。

顺便说一句:我在 Linux 上运行 Qt、PyQt。

有任何想法吗??

4

1 回答 1

0

PyQt文档中,它看起来setCurrentSource需要一个MediaSource对象。MediaSource对象可以用QIODevice对象初始化;QBuffer是 的子类QIODevice。也许您需要将您的包装QBufferMediaSource

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

该文档似乎建议您不需要这样做,该MediaSource对象应该是隐式构造的。我认为他们可能是错的。我只是做了一个快速测试:调用引发setCurrentSourceQBuffer错误,就像你得到的那样。但是,将它包装在 a 中MediaSource并调用setCurrentSource它工作正常。

于 2012-04-08T17:25:53.693 回答