Как воспроизвести .mp3 с помощью QBuffer с Phonon в среде PyQt Qt

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

The last example (3) throws an different ERROR and wipes my Gui off screen ;-)

 
    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, не принимается. Пробовал строку (ошибки неожиданного типа String), пробовал QBuffer (ошибки неожиданный тип QBuffer), пробовал QByteArray (ошибки неожиданный тип QByteArray).

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

Любые идеи??


person thedax    schedule 01.03.2012    source источник


Ответы (1)


Из документов 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, это сработало нормально.

person Whatang    schedule 08.04.2012
comment
Я попробовал ваш пример кода и даже другие методы, но он все еще не работает. Вы действительно проверяли это с данными .mp3? Звук воспроизводился? - person thedax; 14.02.2013
comment
Я сделал, и я только что проверил это снова. Играет нормально. - person Whatang; 18.02.2013