#ifndef PYFOOID_H #define PYFOOID_H #include #include #ifndef PyMODINIT_FUNC /* declarations for DLL import/export */ #define PyMODINIT_FUNC void #endif /* The following is from libfooid's common.h Copyright (C) 2006 Gian-Carlo Pascutto, Hogeschool Gent It is licenced under the GPLv2 or BSD licence. As it is available under the BSD licence, I will take advantage of that and declare it GPLv2. */ #define FRAME_LEN 8192 #define SPEC_LEN (FRAME_LEN / 2) #define MAX_BARK 17 typedef struct t_fingerprint t_fingerprint; /* fingerprint storage */ struct t_fingerprint { /* fingerprint version */ short version; /* length in centiseconds */ int length; /* average line fit, times 1000 */ short avg_fit; /* average dominant line, times 100 */ short avg_dom; /* spectral fits, 4 bits times 16 bands = 32 times 87 frames -> 348 bytes */ unsigned char r[348]; /* spectral doms, 6 bits times 87 frames = 65.25 */ unsigned char dom[66]; }; /* processing storage */ struct t_fooid { /* spectral stuff */ float window[SPEC_LEN]; int line_to_cb[SPEC_LEN]; int cb_start[MAX_BARK]; int cb_size[MAX_BARK]; int max_sfb; /* settings stuff */ int channels; int samplerate; /* buffer stuff */ float *samples; float *sbuffer; int soundfound; /* resampling stuff */ float resample_ratio; void *resample_h; int outpos; /* actual fingerprint */ struct t_fingerprint fp; }; /* End common.h section */ typedef struct { PyObject_HEAD struct t_fooid * fooid; } fooid_fooidObject; typedef struct { PyObject_HEAD unsigned char * buff; } fooid_buffObject; static PyTypeObject fooid_buffType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "fooid.buff", /*tp_name*/ sizeof(fooid_buffObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ 0, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ "fooid objects", /*tp_doc */ }; PyMODINIT_FUNC initfooid(void); static void fooid_dealloc(fooid_fooidObject * self); static PyObject * fooid_new(PyTypeObject * type, PyObject * args, PyObject * kwds); static PyObject * fooid_fp_init(PyObject * self, PyObject * args); static PyObject * fooid_fp_free(PyObject * self, PyObject * args); static PyObject * fooid_fp_feed_short(PyObject * self, PyObject * args); static PyObject * fooid_fp_feed_float(PyObject * self, PyObject * args); static PyObject * fooid_fp_getsize(PyObject * self, PyObject * args); static PyObject * fooid_fp_getversion(PyObject * self, PyObject * args); static PyObject * fooid_fp_calculate(PyObject * self, PyObject * args); static PyMethodDef fooidMethods[] = { {"fp_init", fooid_fp_init, METH_VARARGS, "Initialise libfooid."}, {"fp_free", fooid_fp_free, METH_VARARGS, "Free a fingerprinter handle."}, {"fp_feed_short", fooid_fp_feed_short, METH_VARARGS, "Feed a buffer of samples to the fingerprinting generator."}, {"fp_feed_float", fooid_fp_feed_float, METH_VARARGS, "As for fp_feed_short, but for 32-bit IEEE floats."}, {"fp_getsize", fooid_fp_getsize, METH_VARARGS, "Returns the size of the fingerprint that this library will generate."}, {"fp_getversion", fooid_fp_getversion, METH_VARARGS, "Returns the fingerprint version number that this library will generate."}, {"fp_calculate", fooid_fp_calculate, METH_VARARGS, "Calculate the fingerprint."}, {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyMemberDef fooidMembers[] = { {"fooid", T_OBJECT_EX, offsetof(fooid, fooid), 0, "fooid"}, {NULL} /* Sentinel */ }; static PyTypeObject fooid_fooidType = { PyObject_HEAD_INIT(NULL) 0, /*ob_size*/ "fooid.fooid", /*tp_name*/ sizeof(fooid_fooidObject), /*tp_basicsize*/ 0, /*tp_itemsize*/ (destructor)fooid_dealloc, /*tp_dealloc*/ 0, /*tp_print*/ 0, /*tp_getattr*/ 0, /*tp_setattr*/ 0, /*tp_compare*/ 0, /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, /*tp_as_mapping*/ 0, /*tp_hash */ 0, /*tp_call*/ 0, /*tp_str*/ 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ Py_TPFLAGS_DEFAULT, /*tp_flags*/ "fooid objects", /*tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ fooidMethods, /* tp_methods */ fooidMembers, /* tp_members (fooidMembers)*/ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)initfooid, /* tp_init */ 0, /* tp_alloc */ fooid_new, /* tp_new */ }; #endif