ainfo = tree.xpath("/bs1770gain/album/summary")[0] album_gain = float(ainfo.xpath("./integrated/@lu")[0]) album_peak = float(ainfo.xpath("./sample-peak/@factor")[0]) tracks = tree.xpath("/bs1770gain/album/track") rginfo = {} for tinfo in tracks: track_name = tinfo.xpath("./@file")[0] track_gain = float(tinfo.xpath("./integrated/@lu")[0]) track_peak = float(tinfo.xpath("./sample-peak/@factor")[0]) rginfo[basenames_to_fnames[track_name]] = { "replaygain_track_gain": track_gain, "replaygain_track_peak": track_peak, "replaygain_album_gain": album_gain, "replaygain_album_peak": album_peak, } return rginfo def supports_file(self, fname: str) -> bool: enc = sys.getdefaultencoding() p = Popen([bs1770gain_path, '-l', fname], stderr=PIPE, stdout=PIPE) stdout, stderr = [ s.decode(enc) for s in p.communicate() ] if p.returncode != 0: return False if 'Input #' in stderr: return True else: return False register_backend('bs1770gain', Bs1770gainGainComputer())
from audiotools import UnsupportedFile except ImportError as ex: raise BackendUnavailableException("Unable to use the audiotools backend: Could not load audiotools module. ") class AudiotoolsGainComputer(GainComputer): def compute_gain(self, fnames: Iterable[str], album: bool = True) -> Dict[str, Dict[str, float]]: fnames = list(fnames) audio_files = audiotools.open_files(fnames) if len(audio_files) != len(fnames): raise Exception("Could not load some files") rginfo = {} tag_order = ( "replaygain_track_gain", "replaygain_track_peak", "replaygain_album_gain", "replaygain_album_peak", ) for rg in audiotools.calculate_replay_gain(audio_files): rginfo[rg[0].filename] = dict(zip(tag_order, rg[1:])) return rginfo def supports_file(self, fname: str) -> bool: # Readable by audiotools? try: audiotools.open(fname) return True except UnsupportedFile: return False register_backend('audiotools', AudiotoolsGainComputer())
class AudiotoolsGainComputer(GainComputer): def compute_gain(self, fnames: Iterable[str], album: bool = True) -> Dict[str, Dict[str, float]]: fnames = list(fnames) audio_files = audiotools.open_files(fnames) if len(audio_files) != len(fnames): raise Exception("Could not load some files") rginfo = {} tag_order = ( "replaygain_track_gain", "replaygain_track_peak", "replaygain_album_gain", "replaygain_album_peak", ) for rg in audiotools.calculate_replay_gain(audio_files): rginfo[rg[0].filename] = dict(zip(tag_order, rg[1:])) return rginfo def supports_file(self, fname: str) -> bool: # Readable by audiotools? try: audiotools.open(fname) return True except UnsupportedFile: return False register_backend('audiotools', AudiotoolsGainComputer())
ainfo = tree.xpath("/bs1770gain/album/summary")[0] album_gain = float(ainfo.xpath("./integrated/@lu")[0]) album_peak = float(ainfo.xpath("./sample-peak/@factor")[0]) tracks = tree.xpath("/bs1770gain/album/track") rginfo = {} for tinfo in tracks: track_name = tinfo.xpath("./@file")[0] track_gain = float(tinfo.xpath("./integrated/@lu")[0]) track_peak = float(tinfo.xpath("./sample-peak/@factor")[0]) rginfo[basenames_to_fnames[track_name]] = { "replaygain_track_gain": track_gain, "replaygain_track_peak": track_peak, "replaygain_album_gain": album_gain, "replaygain_album_peak": album_peak, } return rginfo def supports_file(self, fname: str) -> bool: enc = sys.getdefaultencoding() p = Popen([bs1770gain_path, '-l', fname], stderr=PIPE, stdout=PIPE) stdout, stderr = [s.decode(enc) for s in p.communicate()] if p.returncode != 0: return False if 'Input #' in stderr: return True else: return False register_backend('bs1770gain', Bs1770gainGainComputer())