Phonon metaData: Es werden keine Meta-Daten bereit gestellt

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
redeagle
User
Beiträge: 10
Registriert: Freitag 2. November 2012, 12:25
Wohnort: Erde
Kontaktdaten:

Hi.
Ich versuche schon den halben Tag verzweifelt die Meta-Daten einer gerade spielenden/gestarteten mp3-Datei von Phonon zu bekommen, leider bekomme ich aber nur leere Strings.
Ich habe mich beim holen der Meta-Daten (vor allem das verarbeiten der QStringList) an diesem Beispiel orientiert: http://mcs.une.edu.au/doc/PyQt4-devel-4 ... cplayer.py

Hat jemand eine Idee warum ich nur leere Strings bekomme? Die slotMetaDataChanged-Methode wird aufgerufen, und die mp3-Datei enthält natürlich die abgefragten Meta-Daten :)

Code: Alles auswählen

import os
import sys
from PyQt4.phonon import Phonon
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class Player(object):
  def __init__(self):
    self.MediaObject = Phonon.MediaObject()
    self.AudioOutput = Phonon.AudioOutput(Phonon.MusicCategory)
    Phonon.createPath(self.MediaObject, self.AudioOutput)

    QObject.connect(self.MediaObject, SIGNAL("finished()"), self.slotFinished)
    QObject.connect(self.MediaObject, SIGNAL("metaDataChanged()"), self.slotMetaDataChanged)


  def Play(self, source):
    if not source : return

    MediaSource = Phonon.MediaSource(source)
    self.MediaObject.setCurrentSource(MediaSource)
    self.MediaObject.play()


  def slotMetaDataChanged(self):
    metaData = self.MediaObject.metaData()
    title = metaData.get('TITLE', [''])[0]
    artist = metaData.get('ARTIST', [''])[0]
    album = metaData.get('ALBUM', [''])[0]
    desc = metaData.get('DESCRIPTION', [''])[0]
    print title
    print artist
    print album
    print desc


  def slotFinished(self):
    sys.exit()


if __name__ == '__main__':
  app = QApplication([])
  app.setApplicationName('player-test')

  p1 = Player()
  p1.Play(os.path.join(os.path.dirname(__file__), 'test_short.mp3'))

  app.exec_()
mfg.: redeagle
Benutzeravatar
redeagle
User
Beiträge: 10
Registriert: Freitag 2. November 2012, 12:25
Wohnort: Erde
Kontaktdaten:

Problem gelöst :!:
Diese .get()-geschichte scheint bei mir nicht zu funktionieren. :K Python 2.7.3, PyQt 4.9.1

Code: Alles auswählen

    title  = str(metaData[QString(u'TITLE')][0].toUtf8())
    artist = str(metaData[QString(u'ARTIST')][0].toUtf8())
    album  = str(metaData[QString(u'ALBUM')][0].toUtf8())
    desc   = str(metaData[QString(u'DESCRIPTION')][0].toUtf8())
Die str() und .toUtf8()-parts sind optional, aber ratsam um einen klaren Output zu bekommen.
mfg.: redeagle
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Dass diese .get()-Geschichte bei dir nicht zu funktionieren scheint liegt womöglich daran, dass du im ursprünglichen Code normale Strings verwendet hast, und im neuen Code QStrings. Versuch mal, ob es damit geht:

Code: Alles auswählen

    title = metaData.get(QString(u'TITLE'), [''])[0]
    artist = metaData.get(QString(u'ARTIST'), [''])[0]
    album = metaData.get(QString(u'ALBUM'), [''])[0]
    desc = metaData.get(QString(u'DESCRIPTION'), [''])[0]
Und immer dran denken: Select isn't broken.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
redeagle
User
Beiträge: 10
Registriert: Freitag 2. November 2012, 12:25
Wohnort: Erde
Kontaktdaten:

Es lag tatsächlich am QString… Hatte den verdacht auch, dachte aber ich hätte es getestet. Vielleicht habe ich dann zeitgleich etwas anderes kaputt gemacht :D

Aber warum funktioniert das bei mir nur, wenn ich explizit den String nach QString caste? Ich fand heute noch weitere Beispiel-codes bei denen es ohne geht.
Naja, aber wenigstens funktioniert es jetzt, und sauberer ist es auch :)
mfg.: redeagle
Antworten