Пример #1
0
 def read_gain_data(desc):
     tag = u"RVA2:%s" % desc
     if tag in tags:
         frame = tags[tag]
         gaindata = GainData(frame.gain, frame.peak)
         if u"TXXX:QuodLibet::replaygain_reference_loudness" in tags:
             ref_level = parse_db(tags[
                 u"TXXX:QuodLibet::replaygain_reference_loudness"
             ].text[0])
             if ref_level is not None:
                 gaindata.ref_level = ref_level
     else:
         gaindata = None
     return gaindata
Пример #2
0
 def _read_gain_data(self, tags, gain_tag, peak_tag):
     if gain_tag in tags:
         if isinstance(tags[gain_tag][0], bytes):
             gain = parse_db(tags[gain_tag][0].decode("utf-8"))
         else:
             gain = parse_db(tags[gain_tag][0])
         if gain is None:
             return None
         gaindata = GainData(gain)
         if peak_tag in tags:
             peak = parse_peak(tags[peak_tag][0])
             if peak is not None:
                 gaindata.peak = peak
     else:
         gaindata = None
     return gaindata
Пример #3
0
def clamp_gain_data(gain_data):
    if gain_data is None:
        return None
    else:
        return GainData(
            clamp_rva2_gain(gain_data.gain),
            clamp_rva2_peak(gain_data.peak),
            gain_data.ref_level,
        )
Пример #4
0
 def read_gain_data(desc):
     gain_tag = u"replaygain_%s_gain" % desc
     peak_tag = u"replaygain_%s_peak" % desc
     if gain_tag in tags:
         gain = parse_db(tags[gain_tag][0])
         if gain is None:
             return None
         gaindata = GainData(gain)
         if peak_tag in tags:
             peak = parse_peak(tags[peak_tag][0])
             if peak is not None:
                 gaindata.peak = peak
         if u"replaygain_reference_loudness" in tags:
             ref_level = parse_db(tags[u"replaygain_reference_loudness"][0])
             if ref_level is not None:
                 gaindata.ref_level = ref_level
     else:
         gaindata = None
     return gaindata
Пример #5
0
    def __init__(self, files, force=False, ref_lvl=89):
        # TODO: force is apparently unused now. Should remove it in a cleanup.
        GObject.GObject.__init__(self)
        self.files = files
        self.ref_lvl = ref_lvl

        self._setup_pipeline()
        self._setup_rg_elem()

        self._files_iter = iter(self.files)

        # this holds all track gain data
        self.track_data = {}
        self.album_data = GainData(0,
                                   ref_level=self.ref_lvl,
                                   gain_type=GainData.TP_ALBUM)
Пример #6
0
    def _process_tags(self, msg):
        """Process a tag message."""
        tags = msg.parse_tag()
        trackdata = self.track_data.setdefault(
            self._current_file,
            GainData(0, ref_level=self.ref_lvl, gain_type=GainData.TP_TRACK),
        )

        def handle_tag(taglist, tag, userdata):
            if tag == Gst.TAG_TRACK_GAIN:
                _, trackdata.gain = taglist.get_double(tag)
            elif tag == Gst.TAG_TRACK_PEAK:
                _, trackdata.peak = taglist.get_double(tag)
            elif tag == Gst.TAG_REFERENCE_LEVEL:
                _, trackdata.ref_level = taglist.get_double(tag)

            elif tag == Gst.TAG_ALBUM_GAIN:
                _, self.album_data.gain = taglist.get_double(tag)
            elif tag == Gst.TAG_ALBUM_PEAK:
                _, self.album_data.peak = taglist.get_double(tag)

        tags.foreach(handle_tag, None)