コード例 #1
0
ファイル: fingerprinter.py プロジェクト: kiike/python-groove
    def encode(cls, fp):
        """Compress and base64-encode a raw fingerprint"""
        # TODO: error handling
        efp_obj_ptr = ffi.new('char **')
        fp_obj = ffi.new('int32_t[]', fp)
        assert lib.groove_fingerprinter_encode(fp_obj, len(fp), efp_obj_ptr) == 0

        # copy the result to python and free the c obj
        result = ffi.string(efp_obj_ptr[0])
        lib.groove_fingerprinter_dealloc(efp_obj_ptr[0])

        return result
コード例 #2
0
ファイル: fingerprinter.py プロジェクト: kiike/python-groove
    def __iter__(self):
        info_obj = ffi.new('struct GrooveFingerprinterInfo *');
        while True:
            status = lib.groove_fingerprinter_info_get(self._obj, info_obj, True)
            assert status >= 0
            if status != 1 or info_obj.item == ffi.NULL:
                break

            fp_obj = info_obj.fingerprint
            fp_size_obj = info_obj.fingerprint_size

            if self.base64_encode:
                efp_obj_ptr = ffi.new('char **')
                assert lib.groove_fingerprinter_encode(fp_obj, fp_size_obj, efp_obj_ptr) == 0
                fp = ffi.string(efp_obj_ptr[0])
                lib.groove_fingerprinter_dealloc(efp_obj_ptr[0])
            else:
                fp = [int(fp_obj[n]) for n in range(fp_size_obj)]

            duration = float(info_obj.duration)
            pitem = self.playlist._pitem(info_obj.item)
            lib.groove_fingerprinter_free_info(info_obj)
            yield FingerprinterInfo(fp, duration, pitem)