jamie@87: %module xtract jamie@133: %include typemaps.i jamie@144: #ifndef SWIGJAVA jamie@144: %include carrays.i jamie@144: #endif jamie@217: %include stdint.i 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@217: #include "xtract/xtract_stateful.h" jamie@103: #include "xtract/libxtract.h" jamie@87: %} jamie@87: jamie@217: jamie@110: /* Helper functions */ jamie@110: %inline %{ jamie@110: jamie@154: void *doublea_to_voidp(double 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@154: double **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@154: filters = (double **)malloc(n_filters * sizeof(double *)); jamie@110: jamie@110: for(n = 0; n < n_filters; n++) jamie@154: filters[n] = (double *)malloc(N * sizeof(double)); 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@154: double **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: %} jamie@110: jamie@144: #ifndef SWIGJAVA jamie@154: %array_class(double, doubleArray); jamie@110: %array_class(int, intArray); jamie@144: #endif jamie@154: %apply double *OUTPUT { double *result }; jamie@133: jamie@87: jamie@103: %ignore xtract; jamie@103: jamie@217: /* For now ignore stateful functions */ jamie@217: %ignore xtract_last_n; jamie@217: %ignore xtract_last_n_state_new; jamie@217: %ignore xtract_last_n_state_delete; jamie@217: jamie@217: 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@154: int xtract_flux(const double *data, const int N, const void *argv , double *result); jamie@154: int xtract_lnorm(const double *data, const int N, const void *argv , double *result); jamie@110: jamie@110: %} jamie@110: jamie@154: %clear double *result; jamie@103: jamie@110: %inline %{ jamie@110: jamie@154: int xtract_difference_vector(const double *data, const int N, const void *argv, double *result); jamie@110: jamie@110: %} jamie@110: jamie@217: jamie@103: %include "xtract/xtract_vector.h" jamie@217: %include "xtract/xtract_stateful.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: