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
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
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, )
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
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)
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)