jamie@87
|
1 %module xtract
|
jamie@133
|
2 %include typemaps.i
|
jamie@144
|
3 #ifndef SWIGJAVA
|
jamie@144
|
4 %include carrays.i
|
jamie@144
|
5 #endif
|
jamie@87
|
6
|
jamie@87
|
7 %{
|
jamie@87
|
8 #include "xtract/xtract_scalar.h"
|
jamie@103
|
9 #include "xtract/xtract_vector.h"
|
jamie@107
|
10 #include "xtract/xtract_helper.h"
|
jamie@110
|
11 #include "xtract/xtract_macros.h"
|
jamie@110
|
12 #include "xtract/xtract_delta.h"
|
jamie@103
|
13 #include "xtract/libxtract.h"
|
jamie@87
|
14 %}
|
jamie@87
|
15
|
jamie@110
|
16 /* Helper functions */
|
jamie@110
|
17 %inline %{
|
jamie@110
|
18
|
jamie@154
|
19 void *doublea_to_voidp(double f[])
|
jamie@133
|
20 {
|
jamie@133
|
21 return (void *)f;
|
jamie@133
|
22 }
|
jamie@133
|
23
|
jamie@110
|
24 xtract_function_descriptor_t
|
jamie@110
|
25 *get_descriptor(xtract_function_descriptor_t *fd, int i){
|
jamie@110
|
26
|
jamie@110
|
27 return &fd[i];
|
jamie@110
|
28 }
|
jamie@110
|
29
|
jamie@110
|
30 /* Return a pointer to memory allocated for a mel filterbank */
|
jamie@110
|
31 xtract_mel_filter *create_filterbank(int n_filters, int blocksize){
|
jamie@110
|
32
|
jamie@154
|
33 double **filters;
|
jamie@110
|
34 xtract_mel_filter *mf;
|
jamie@110
|
35 int n, N;
|
jamie@110
|
36
|
jamie@110
|
37 N = blocksize;
|
jamie@110
|
38
|
jamie@110
|
39 mf = malloc(sizeof(xtract_mel_filter));
|
jamie@110
|
40 mf->n_filters = n_filters;
|
jamie@110
|
41
|
jamie@154
|
42 filters = (double **)malloc(n_filters * sizeof(double *));
|
jamie@110
|
43
|
jamie@110
|
44 for(n = 0; n < n_filters; n++)
|
jamie@154
|
45 filters[n] = (double *)malloc(N * sizeof(double));
|
jamie@110
|
46
|
jamie@110
|
47 mf->filters = filters;
|
jamie@110
|
48
|
jamie@110
|
49 return mf;
|
jamie@110
|
50
|
jamie@110
|
51 }
|
jamie@110
|
52
|
jamie@110
|
53 /* Free a mel filterbank */
|
jamie@110
|
54 void destroy_filterbank(xtract_mel_filter *filterbank){
|
jamie@110
|
55
|
jamie@110
|
56 int i = filterbank->n_filters;
|
jamie@154
|
57 double **filters;
|
jamie@110
|
58
|
jamie@110
|
59 filters = filterbank->filters;
|
jamie@110
|
60
|
jamie@110
|
61 while(i--)
|
jamie@110
|
62 free(filters[i]);
|
jamie@110
|
63
|
jamie@110
|
64 free(filters);
|
jamie@110
|
65
|
jamie@110
|
66 free(filterbank);
|
jamie@110
|
67
|
jamie@110
|
68 }
|
jamie@110
|
69
|
jamie@110
|
70 %}
|
jamie@110
|
71
|
jamie@144
|
72 #ifndef SWIGJAVA
|
jamie@154
|
73 %array_class(double, doubleArray);
|
jamie@110
|
74 %array_class(int, intArray);
|
jamie@144
|
75 #endif
|
jamie@154
|
76 %apply double *OUTPUT { double *result };
|
jamie@133
|
77
|
jamie@87
|
78
|
jamie@103
|
79 %ignore xtract;
|
jamie@103
|
80
|
jamie@87
|
81 %include "xtract/xtract_scalar.h"
|
jamie@103
|
82
|
jamie@110
|
83 /* We have to put xtract_delta declarations inline because it contains a mixture of vector and scalar functions */
|
jamie@110
|
84 %inline %{
|
jamie@110
|
85
|
jamie@154
|
86 int xtract_flux(const double *data, const int N, const void *argv , double *result);
|
jamie@154
|
87 int xtract_lnorm(const double *data, const int N, const void *argv , double *result);
|
jamie@110
|
88
|
jamie@110
|
89 %}
|
jamie@110
|
90
|
jamie@154
|
91 %clear double *result;
|
jamie@103
|
92
|
jamie@110
|
93 %inline %{
|
jamie@110
|
94
|
jamie@154
|
95 int xtract_difference_vector(const double *data, const int N, const void *argv, double *result);
|
jamie@110
|
96
|
jamie@110
|
97 %}
|
jamie@110
|
98
|
jamie@103
|
99 %include "xtract/xtract_vector.h"
|
jamie@107
|
100 %include "xtract/xtract_helper.h"
|
jamie@110
|
101 %include "xtract/xtract_macros.h"
|
jamie@103
|
102 %include "xtract/libxtract.h"
|
jamie@110
|
103
|
jamie@110
|
104
|