Как играть в .mp3, используя QBuffer с Phonon в среде PyQt Qt - PullRequest
3 голосов
/ 01 марта 2012

С кодом, который у меня есть сейчас, я МОГУ успешно воспроизвести данные .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 с экрана ;-)

    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).

Кстати: я запускаю Qt, PyQt в Linux.

Есть идеи??

1 Ответ

0 голосов
/ 08 апреля 2012

Из документов PyQt это выглядит так, как будто setCurrentSource ожидает объект MediaSource. MediaSource объекты могут быть инициализированы с QIODevice объектами; QBuffer является подклассом QIODevice. Возможно, вам нужно обернуть QBuffer в MediaSource:

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

Документация предполагает, что вам не нужно этого делать, что объект MediaSource должен быть создан неявно. Я думаю, что они могут быть неправы, хотя. Я только что сделал быстрый тест: вызов setCurrentSource на QBuffer вызвал ошибку, как у вас. Однако, завернув его в MediaSource и вызвав setCurrentSource, он работал нормально.

...