jamie@87
|
1 %module xtract
|
jamie@133
|
2 %include typemaps.i
|
jamie@87
|
3 %include carrays.i
|
jamie@87
|
4
|
jamie@87
|
5 %{
|
jamie@87
|
6 #include "xtract/xtract_scalar.h"
|
jamie@103
|
7 #include "xtract/xtract_vector.h"
|
jamie@107
|
8 #include "xtract/xtract_helper.h"
|
jamie@110
|
9 #include "xtract/xtract_macros.h"
|
jamie@110
|
10 #include "xtract/xtract_delta.h"
|
jamie@103
|
11 #include "xtract/libxtract.h"
|
jamie@87
|
12 %}
|
jamie@87
|
13
|
jamie@110
|
14 /* Ensure filterbank gets freed */
|
jamie@110
|
15 /** FIX: This doesn't work, or I'm not using properly. For now just add an explicit call to destroy_filterbank() in the target code */
|
jamie@110
|
16 %newobject create_filterbank;
|
jamie@110
|
17 %delobject destroy_filterbank;
|
jamie@110
|
18
|
jamie@110
|
19
|
jamie@133
|
20 %typemap(javabase) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
|
jamie@133
|
21 SWIGTYPE (CLASS::*) "SWIG"
|
jamie@133
|
22
|
jamie@133
|
23 %typemap(javacode) SWIGTYPE, SWIGTYPE *, SWIGTYPE &, SWIGTYPE [],
|
jamie@133
|
24 SWIGTYPE (CLASS::*) %{
|
jamie@133
|
25 protected long getPointer() {
|
jamie@133
|
26 return swigCPtr;
|
jamie@133
|
27 }
|
jamie@133
|
28 %}
|
jamie@133
|
29
|
jamie@110
|
30 /* Helper functions */
|
jamie@110
|
31 %inline %{
|
jamie@110
|
32
|
jamie@133
|
33 void *floata_to_voidp(float f[])
|
jamie@133
|
34 {
|
jamie@133
|
35 return (void *)f;
|
jamie@133
|
36 }
|
jamie@133
|
37
|
jamie@110
|
38 xtract_function_descriptor_t
|
jamie@110
|
39 *get_descriptor(xtract_function_descriptor_t *fd, int i){
|
jamie@110
|
40
|
jamie@110
|
41 return &fd[i];
|
jamie@110
|
42 }
|
jamie@110
|
43
|
jamie@110
|
44 /* Return a pointer to memory allocated for a mel filterbank */
|
jamie@110
|
45 xtract_mel_filter *create_filterbank(int n_filters, int blocksize){
|
jamie@110
|
46
|
jamie@110
|
47 float **filters;
|
jamie@110
|
48 xtract_mel_filter *mf;
|
jamie@110
|
49 int n, N;
|
jamie@110
|
50
|
jamie@110
|
51 N = blocksize;
|
jamie@110
|
52
|
jamie@110
|
53 mf = malloc(sizeof(xtract_mel_filter));
|
jamie@110
|
54 mf->n_filters = n_filters;
|
jamie@110
|
55
|
jamie@110
|
56 filters = (float **)malloc(n_filters * sizeof(float *));
|
jamie@110
|
57
|
jamie@110
|
58 for(n = 0; n < n_filters; n++)
|
jamie@110
|
59 filters[n] = (float *)malloc(N * sizeof(float));
|
jamie@110
|
60
|
jamie@110
|
61 mf->filters = filters;
|
jamie@110
|
62
|
jamie@110
|
63 return mf;
|
jamie@110
|
64
|
jamie@110
|
65 }
|
jamie@110
|
66
|
jamie@110
|
67 /* Free a mel filterbank */
|
jamie@110
|
68 void destroy_filterbank(xtract_mel_filter *filterbank){
|
jamie@110
|
69
|
jamie@110
|
70 int i = filterbank->n_filters;
|
jamie@110
|
71 float **filters;
|
jamie@110
|
72
|
jamie@110
|
73 filters = filterbank->filters;
|
jamie@110
|
74
|
jamie@110
|
75 while(i--)
|
jamie@110
|
76 free(filters[i]);
|
jamie@110
|
77
|
jamie@110
|
78 free(filters);
|
jamie@110
|
79
|
jamie@110
|
80 free(filterbank);
|
jamie@110
|
81
|
jamie@110
|
82 }
|
jamie@110
|
83
|
jamie@110
|
84 /* Eventually this should be deprecated */
|
jamie@110
|
85 /* void destroy_filterbank_explicit(float **filterbank, int n_filters){
|
jamie@110
|
86
|
jamie@110
|
87 int i = n_filters;
|
jamie@110
|
88
|
jamie@110
|
89 while(i--)
|
jamie@110
|
90 free(filterbank[i]);
|
jamie@110
|
91
|
jamie@110
|
92 free(filterbank);
|
jamie@110
|
93 }
|
jamie@110
|
94 */
|
jamie@110
|
95
|
jamie@110
|
96
|
jamie@110
|
97
|
jamie@110
|
98 %}
|
jamie@110
|
99
|
jamie@110
|
100
|
jamie@88
|
101 %array_class(float, floatArray);
|
jamie@110
|
102 %array_class(int, intArray);
|
jamie@87
|
103 %apply float *OUTPUT { float *result };
|
jamie@133
|
104 %apply float[] {const float *data};
|
jamie@133
|
105
|
jamie@87
|
106
|
jamie@103
|
107 %ignore xtract;
|
jamie@103
|
108
|
jamie@87
|
109 %include "xtract/xtract_scalar.h"
|
jamie@103
|
110
|
jamie@110
|
111 /* We have to put xtract_delta declarations inline because it contains a mixture of vector and scalar functions */
|
jamie@110
|
112 %inline %{
|
jamie@110
|
113
|
jamie@110
|
114 int xtract_flux(const float *data, const int N, const void *argv , float *result);
|
jamie@110
|
115 int xtract_lnorm(const float *data, const int N, const void *argv , float *result);
|
jamie@110
|
116
|
jamie@110
|
117 %}
|
jamie@110
|
118
|
jamie@103
|
119 %clear float *result;
|
jamie@103
|
120
|
jamie@110
|
121 %inline %{
|
jamie@110
|
122
|
jamie@110
|
123 int xtract_difference_vector(const float *data, const int N, const void *argv, float *result);
|
jamie@110
|
124
|
jamie@110
|
125 %}
|
jamie@110
|
126
|
jamie@103
|
127 %include "xtract/xtract_vector.h"
|
jamie@107
|
128 %include "xtract/xtract_helper.h"
|
jamie@110
|
129 %include "xtract/xtract_macros.h"
|
jamie@103
|
130 %include "xtract/libxtract.h"
|
jamie@110
|
131
|
jamie@110
|
132
|