Example #1
0
        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())
Example #3
0
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())
Example #4
0
        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())