Seite 1 von 1

Phonon metaData: Es werden keine Meta-Daten bereit gestellt

Verfasst: Samstag 19. Januar 2013, 17:55
von redeagle
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_()

Re: Phonon metaData: Es werden keine Meta-Daten bereit geste

Verfasst: Sonntag 20. Januar 2013, 16:46
von redeagle
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.

Re: Phonon metaData: Es werden keine Meta-Daten bereit geste

Verfasst: Sonntag 20. Januar 2013, 17:47
von pillmuncher
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.

Re: Phonon metaData: Es werden keine Meta-Daten bereit geste

Verfasst: Sonntag 20. Januar 2013, 18:08
von redeagle
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 :)