Ejemplo n.º 1
0
    def __init__(self, header_data, xheader_data):
        """Interprets byte data as a tag header to build object

        Args:
            header_data: character array of bytes representing the tag header.
                Must contain an ID3v1 tag
            xheader_data: character array of bytes representing the extended tag
                header. This does not have to contain an extended header (in
                which case it will be ignored).
        """
        # Check we're actually looking at an ID3v1 tag
        if header_data[:3] != "TAG":
            raise Exception("Given data does not contain an ID3v1 tag header")
        # Extract data
        self.data = TrackData.TrackData()
        self.data.title = _strip_null_bytes(header_data[3:33])
        self.data.artist = _strip_null_bytes(header_data[33:63])
        self.data.album = _strip_null_bytes(header_data[63:93])
        self.data.year = TrackData.mint(_strip_null_bytes(header_data[93:97]))
        if ord(header_data[125]) == 0 and ord(header_data[126]) != 0:
            self.version = 1    # id3 v1.1
            self.comment = _strip_null_bytes(header_data[97:125])
            self.data.track = ord(header_data[126])
        else:
            self.version = 0    # id3 v1.0
            self.comment = _strip_null_bytes(header_data[97:127])
            self.data.track = None
        self.genre = ord(header_data[127])
        # Check if we have an extended tag and extract it
        self.is_extended = xheader_data[:4] == "TAG+"
        if self.is_extended:
            self.data.title += _strip_null_bytes(xheader_data[4:64])
            self.data.artist += _strip_null_bytes(xheader_data[64:124])
            self.data.album += _strip_null_bytes(xheader_data[124:184])
Ejemplo n.º 2
0
    def get_year(self, file_handle):
        """Retrieves the track year from this tag

        Args:
            file_handle: open file handle to read the frame body from

        Returns:
            int track year or None if this tag doesn't contain it
        """
        version = self.header.version
        if version == 2:
            frame_id = "TYE"
        elif version == 3 or version == 4:
            frame_id = "TYER"
        else:
            return None
        frame = self.__get_frame(frame_id)
        if frame:
            body_data = _read_frame_text(frame.read_body(file_handle))
            return TrackData.mint(body_data[0:4])
        return None