Exemple #1
0
def getTags(fileName, verbose):

    expectedTags = ["artist", "album", "title", "track-number", "audio-codec"]

    if not os.path.exists(fileName):
        raise Exception('File does not exist: "', fileName, '"')

    player = Gst.parse_launch("filesrc name=src ! decodebin ! fakesink")
    bus = player.get_bus()

    src = player.get_by_name("src")
    src.set_property("location", fileName)

    tags = dict()
    player.set_state(Gst.State.PLAYING)

    while True:
        message = bus.pop()
        if not message:
            continue
        t = message.type
        if t == Gst.MessageType.TAG:
            taglist = message.parse_tag()
            for key in expectedTags:
                typeName = Gst.tag_get_type(key).name
                if typeName == "gchararray":
                    isValid, value = taglist.get_string(key)
                    if isValid:
                        value = value.decode("utf-8", errors="ignore")
                    elif typeName == "guint":
                        isValid, value = taglist.get_uint(key)
                if verbose:
                    print key, value
                if isValid:
                    tags[key] = unicode(value)
                # got all required tags
                if not verbose and len(tags) == len(expectedTags):
                    break
        elif t == Gst.MessageType.EOS:
            break
        elif t == Gst.MessageType.ERROR:
            err, debug = message.parse_error()
            tags.clear()
            tags["Error"] = err
            print "in MessageType Error: ", err
            break

    player.set_state(Gst.State.NULL)

    if len(tags) != len(expectedTags):
        raise Exception("Could not find all tags")

    return tags
Exemple #2
0
 def _append_tag(self, taglist, tag, tags):
     if tag in ACCEPTABLE_TAGS:
         name = Gst.tag_get_nick(tag)
         type = Gst.tag_get_type(tag)
         type_getters = {GObject.TYPE_STRING: 'get_string',
                         GObject.TYPE_DOUBLE: 'get_double',
                         GObject.TYPE_FLOAT: 'get_float',
                         GObject.TYPE_INT: 'get_int',
                         GObject.TYPE_UINT: 'get_uint'}
         if type in type_getters:
             res, value = getattr(taglist, type_getters[type])(tag)
             assert res
             if not type == GObject.TYPE_STRING:
                 value = str(value)
             tags[name] = value
 def _appendTag(self, taglist, tag, unused_udata):
     if tag in acceptable_tags:
         name = Gst.tag_get_nick(tag)
         type = Gst.tag_get_type(tag)
         type_getters = {GObject.TYPE_STRING: 'get_string',
                         GObject.TYPE_DOUBLE: 'get_double',
                         GObject.TYPE_FLOAT: 'get_float',
                         GObject.TYPE_INT: 'get_int',
                         GObject.TYPE_UINT: 'get_uint'}
         if type in type_getters:
             if type == GObject.TYPE_STRING:
                 value = getattr(taglist, type_getters[type])(tag)[1]
                 value = value.replace('<', ' ').replace('>', ' ')
             else:
                 value = str(getattr(taglist, type_getters[type])(tag)[1])
             self.tags[name] = value
Exemple #4
0
 def _appendTag(self, taglist, tag, unused_udata):
     if tag in acceptable_tags:
         name = Gst.tag_get_nick(tag)
         type = Gst.tag_get_type(tag)
         type_getters = {GObject.TYPE_STRING: 'get_string',
                         GObject.TYPE_DOUBLE: 'get_double',
                         GObject.TYPE_FLOAT: 'get_float',
                         GObject.TYPE_INT: 'get_int',
                         GObject.TYPE_UINT: 'get_uint'}
         if type in type_getters:
             if type == GObject.TYPE_STRING:
                 value = getattr(taglist, type_getters[type])(tag)[1]
                 value = value.replace('<', ' ').replace('>', ' ')
             else:
                 value = str(getattr(taglist, type_getters[type])(tag)[1])
             self.tags[name] = value
Exemple #5
0
 def _append_tag(self, taglist, tag, tags):
     if tag in ACCEPTABLE_TAGS:
         tag_name = Gst.tag_get_nick(tag)
         tag_type = Gst.tag_get_type(tag)
         type_getters = {
             GObject.TYPE_STRING: 'get_string',
             GObject.TYPE_DOUBLE: 'get_double',
             GObject.TYPE_FLOAT: 'get_float',
             GObject.TYPE_INT: 'get_int',
             GObject.TYPE_UINT: 'get_uint'
         }
         if tag_type in type_getters:
             res, value = getattr(taglist, type_getters[tag_type])(tag)
             assert res
             if not tag_type == GObject.TYPE_STRING:
                 value = str(value)
             tags[tag_name] = value