jamie@87: %module xtract jamie@133: %include typemaps.i jamie@144: #ifndef SWIGJAVA jamie@144: %include carrays.i jamie@144: #endif jamie@87: jamie@87: %{ jamie@87: #include "xtract/xtract_scalar.h" jamie@103: #include "xtract/xtract_vector.h" jamie@107: #include "xtract/xtract_helper.h" jamie@110: #include "xtract/xtract_macros.h" jamie@110: #include "xtract/xtract_delta.h" jamie@103: #include "xtract/libxtract.h" jamie@87: %} jamie@87: jamie@134: /* jamie@133: %typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], jamie@133: SWIGTYPE (CLASS::*) "SWIG" jamie@133: jamie@133: %typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [], jamie@133: SWIGTYPE (CLASS::*) %{ jamie@133: protected long getPointer() { jamie@133: return swigCPtr; jamie@133: } jamie@133: %} jamie@134: */ jamie@110: /* Helper functions */ jamie@110: %inline %{ jamie@110: jamie@133: void *floata_to_voidp(float f[]) jamie@133: { jamie@133: return (void *)f; jamie@133: } jamie@133: jamie@110: xtract_function_descriptor_t jamie@110: *get_descriptor(xtract_function_descriptor_t *fd, int i){ jamie@110: jamie@110: return &fd[i]; jamie@110: } jamie@110: jamie@110: /* Return a pointer to memory allocated for a mel filterbank */ jamie@110: xtract_mel_filter *create_filterbank(int n_filters, int blocksize){ jamie@110: jamie@110: float **filters; jamie@110: xtract_mel_filter *mf; jamie@110: int n, N; jamie@110: jamie@110: N = blocksize; jamie@110: jamie@110: mf = malloc(sizeof(xtract_mel_filter)); jamie@110: mf->n_filters = n_filters; jamie@110: jamie@110: filters = (float **)malloc(n_filters * sizeof(float *)); jamie@110: jamie@110: for(n = 0; n < n_filters; n++) jamie@110: filters[n] = (float *)malloc(N * sizeof(float)); jamie@110: jamie@110: mf->filters = filters; jamie@110: jamie@110: return mf; jamie@110: jamie@110: } jamie@110: jamie@110: /* Free a mel filterbank */ jamie@110: void destroy_filterbank(xtract_mel_filter *filterbank){ jamie@110: jamie@110: int i = filterbank->n_filters; jamie@110: float **filters; jamie@110: jamie@110: filters = filterbank->filters; jamie@110: jamie@110: while(i--) jamie@110: free(filters[i]); jamie@110: jamie@110: free(filters); jamie@110: jamie@110: free(filterbank); jamie@110: jamie@110: } jamie@110: jamie@110: /* Eventually this should be deprecated */ jamie@110: /* void destroy_filterbank_explicit(float **filterbank, int n_filters){ jamie@110: jamie@110: int i = n_filters; jamie@110: jamie@110: while(i--) jamie@110: free(filterbank[i]); jamie@110: jamie@110: free(filterbank); jamie@110: } jamie@110: */ jamie@110: jamie@110: jamie@110: jamie@110: %} jamie@110: jamie@144: #ifndef SWIGJAVA jamie@88: %array_class(float, floatArray); jamie@110: %array_class(int, intArray); jamie@144: #endif jamie@87: %apply float *OUTPUT { float *result }; jamie@134: jamie@134: /* %apply float[] {const float *data}; */ jamie@133: jamie@87: jamie@103: %ignore xtract; jamie@103: jamie@87: %include "xtract/xtract_scalar.h" jamie@103: jamie@110: /* We have to put xtract_delta declarations inline because it contains a mixture of vector and scalar functions */ jamie@110: %inline %{ jamie@110: jamie@110: int xtract_flux(const float *data, const int N, const void *argv , float *result); jamie@110: int xtract_lnorm(const float *data, const int N, const void *argv , float *result); jamie@110: jamie@110: %} jamie@110: jamie@103: %clear float *result; jamie@103: jamie@110: %inline %{ jamie@110: jamie@110: int xtract_difference_vector(const float *data, const int N, const void *argv, float *result); jamie@110: jamie@110: %} jamie@110: jamie@103: %include "xtract/xtract_vector.h" jamie@107: %include "xtract/xtract_helper.h" jamie@110: %include "xtract/xtract_macros.h" jamie@103: %include "xtract/libxtract.h" jamie@110: jamie@110: