view swig/xtract.i @ 149:0881cd514c9c

add option to explicitly specify Ooura library at configure time
author Jamie Bullock <jamie@jamiebullock.com>
date Wed, 09 Jan 2013 20:15:50 +0000
parents 7fbca00c2c05
children 826eb46b2f91
line wrap: on
line source
%module xtract
%include typemaps.i
#ifndef SWIGJAVA
%include carrays.i
#endif

%{
#include "xtract/xtract_scalar.h"
#include "xtract/xtract_vector.h"
#include "xtract/xtract_helper.h"
#include "xtract/xtract_macros.h"
#include "xtract/xtract_delta.h"
#include "xtract/libxtract.h"
%}

/*
%typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
    SWIGTYPE (CLASS::*) "SWIG"

%typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
    SWIGTYPE (CLASS::*) %{
        protected long getPointer() {
            return swigCPtr;
        }
%}
*/
/* Helper functions */
%inline %{

    void *floata_to_voidp(float f[])
    {
        return (void *)f;
    }

    xtract_function_descriptor_t 
            *get_descriptor(xtract_function_descriptor_t *fd, int i){

        return &fd[i];
    }

    /* Return a pointer to memory allocated for a mel filterbank */
    xtract_mel_filter *create_filterbank(int n_filters, int blocksize){
        
        float **filters;
        xtract_mel_filter *mf;
        int n, N;

        N = blocksize;

        mf = malloc(sizeof(xtract_mel_filter));
        mf->n_filters = n_filters;

        filters = (float **)malloc(n_filters * sizeof(float *));

        for(n = 0; n < n_filters; n++)
            filters[n] = (float *)malloc(N * sizeof(float));

        mf->filters = filters;
        
        return mf;

    }
    
    /* Free a mel filterbank */
    void destroy_filterbank(xtract_mel_filter *filterbank){
        
        int i = filterbank->n_filters;
        float **filters;

        filters = filterbank->filters;
            
        while(i--)
            free(filters[i]);

        free(filters);

        free(filterbank);

    }

    /* Eventually this should be deprecated */
/*    void destroy_filterbank_explicit(float **filterbank, int n_filters){

        int i = n_filters;

        while(i--)
            free(filterbank[i]);

        free(filterbank);
    }
*/



%}

#ifndef SWIGJAVA
%array_class(float, floatArray); 
%array_class(int, intArray); 
#endif
%apply float *OUTPUT { float *result };

/* %apply float[] {const float *data}; */


%ignore xtract;

%include "xtract/xtract_scalar.h"

/* We have to put xtract_delta declarations inline because it contains a mixture of vector and scalar functions */
%inline %{

    int xtract_flux(const float *data, const int N, const void *argv , float *result);
    int xtract_lnorm(const float *data, const int N, const void *argv , float *result);

%}

%clear float *result;

%inline %{

    int xtract_difference_vector(const float *data, const int N, const void *argv, float *result);

%}

%include "xtract/xtract_vector.h"
%include "xtract/xtract_helper.h"
%include "xtract/xtract_macros.h"
%include "xtract/libxtract.h"