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

标签 pyqt mp3 buffer phonon

使用我现在拥有的代码,我可以成功地播放文件中的 .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 对象初始化; QBufferQIODevice 的子类。也许您需要将 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/

相关文章:

python - vscode 智能感知与 PyQt4 配合使用太慢

python - PyQt4 使用小部件移动 QTableWidget 行

c# - 我可以在 C# 中使用 Console.Beep 播放 mp3 文件吗?

ios - 在 iOS 中使用 LAME 从 PCM 编码为 MP3 时点击

python - QTableView 中的虚拟列?

python - PyQt - PySide 自定义小部件不会显示

c - 在 C 中播放 mp3 文件

c - 如何读取大文件(最多 2 000 000 000 个字符)并存储它们

Ruby 将打开文件但不写入文件?

c - memcpy 将较小的数组连接成较大的数组