Returns a list of frames in this tag.
        If KEY is None, returns all frames in the tag; otherwise returns all frames
        whose frameid matches KEY.
        
        If ORIG_ORDER is True, then the frames are returned in their original order.
        Otherwise the frames are sorted in canonical order according to the frame_order
        field of this tag.

def frames(self, key=None, orig_order=False):
        """Returns a list of frames in this tag.
        If KEY is None, returns all frames in the tag; otherwise returns all frames
        whose frameid matches KEY.
        
        If ORIG_ORDER is True, then the frames are returned in their original order.
        Otherwise the frames are sorted in canonical order according to the frame_order
        field of this tag.
        """
        if key is not None:
            # If there are multiple frames, then they are already in original order.
            key = self._normalize_key(key)
            if len(self._frames[key]) == 0:
                raise KeyError("Key not found: " + repr(key))
            return self._frames[key]
        
        frames = []
        for frameid in self._frames.keys():
            for frame in self._frames[frameid]:
                frames.append(frame)
        if orig_order:
            key = (lambda frame: 
                   (0, frame.frameno) 
                   if frame.frameno is not None 
                   else (1,))
        else:
            key = self.frame_order.key
        frames.sort(key=key)
        return frames