changeset 154:826eb46b2f91

fixed Linux bugs
author Jamie Bullock <jamie@jamiebullock.com>
date Thu, 10 Jan 2013 22:41:03 +0000
parents f2e4ac22a437
children 21c5ad2a812e b25e9878c55a
files src/fft.h src/vector.c src/window.c swig/java/Makefile.am swig/java/jxtract.i swig/java/test.java swig/python/test.py swig/xtract.i
diffstat 8 files changed, 45 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- a/src/fft.h	Thu Jan 10 21:43:57 2013 +0000
+++ b/src/fft.h	Thu Jan 10 22:41:03 2013 +0000
@@ -28,6 +28,8 @@
 #include <config.h>
 #endif
 
+#include <stdbool.h>
+
 #ifdef USE_OOURA
 #include "ooura/fftsg.h"
 #else
--- a/src/vector.c	Thu Jan 10 21:43:57 2013 +0000
+++ b/src/vector.c	Thu Jan 10 22:41:03 2013 +0000
@@ -33,6 +33,10 @@
 #include "xtract_macros_private.h"
 #include "xtract_globals_private.h"
 
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338327
+#endif
+
 int xtract_spectrum(const double *data, const int N, const void *argv, double *result)
 {
 
@@ -249,9 +253,9 @@
     double *rfft = NULL;
     int n        = 0;
     int M        = 0;
-    double M_double = 0.0;
 #ifndef USE_OOURA
     DSPDoubleSplitComplex *fft = NULL;
+    double M_double = 0.0;
 #endif
 
     M = N << 1;
@@ -545,7 +549,7 @@
 int xtract_lpc(const double *data, const int N, const void *argv, double *result)
 {
 
-    int i, j, k, M, L;
+    int i, j, M, L;
     double r = 0.0,
           error = 0.0;
 
@@ -553,7 +557,6 @@
            *lpc = NULL ;
 
     error = data[0];
-    k = N; /* The length of *data */
     L = N - 1; /* The number of LPC coefficients */
     M = L * 2; /* The length of *result */
     ref = result;
--- a/src/window.c	Thu Jan 10 21:43:57 2013 +0000
+++ b/src/window.c	Thu Jan 10 22:41:03 2013 +0000
@@ -25,6 +25,10 @@
 
 #include <math.h>
 
+#ifndef M_PI
+#define M_PI 3.14159265358979323846264338327
+#endif
+
 #include "xtract_window_private.h"
 
 void gauss(double *window, const int N, const double sd)
--- a/swig/java/Makefile.am	Thu Jan 10 21:43:57 2013 +0000
+++ b/swig/java/Makefile.am	Thu Jan 10 22:41:03 2013 +0000
@@ -3,9 +3,9 @@
 JAVA = java
 
 javasources = \
-	SWIGTYPE_p_float.java \
+	SWIGTYPE_p_double.java \
 	SWIGTYPE_p_int.java \
-	SWIGTYPE_p_p_float.java \
+	SWIGTYPE_p_p_double.java \
 	SWIGTYPE_p_unit_.java \
 	SWIGTYPE_p_void.java \
 	xtract_bool_t.java \
@@ -35,9 +35,9 @@
 
 	
 javaclasses = \
-	SWIGTYPE_p_float.class \
+	SWIGTYPE_p_double.class \
 	SWIGTYPE_p_int.class \
-	SWIGTYPE_p_p_float.class \
+	SWIGTYPE_p_p_double.class \
 	SWIGTYPE_p_unit_.class \
 	SWIGTYPE_p_void.class \
 	xtract_bool_t.class \
--- a/swig/java/jxtract.i	Thu Jan 10 21:43:57 2013 +0000
+++ b/swig/java/jxtract.i	Thu Jan 10 22:41:03 2013 +0000
@@ -2,29 +2,22 @@
 %include "../xtract.i"
 %include "arrays_java.i"
 
-/*
-%{
-int mean(const float *data, const int N, void *in, float *result) {
-    return xtract_mean(data, N, in, result);
-}
-%}
-*/
-%apply float[] {const float *data};
-/*%apply void *in {const void *argv}; */
-%apply float *OUTPUT { float *result };
+%apply double[] {const double *data};
+%apply double *OUTPUT { double *result };
 %typemap(in,numinputs=0) JNIEnv *env "$1 = jenv;"
 
-%javamethodmodifiers arr2voidf "private";
+%javamethodmodifiers arr2voidd "private";
 %javamethodmodifiers arr2voidi "private";
-%javamethodmodifiers freearrf "private";
+%javamethodmodifiers freearrd "private";
 %javamethodmodifiers freearri "private";
+
 %inline %{
-jlong arr2voidf(JNIEnv *env, jfloatArray arr) {
+jlong arr2voidd(JNIEnv *env, jdoubleArray arr) {
   void *ptr = (*env)->GetFloatArrayElements(env, arr, NULL);
   return (intptr_t)ptr;
 }
 
-void freearrf(JNIEnv *env, jfloatArray arr, jlong map) {
+void freearrd(JNIEnv *env, jdoubleArray arr, jlong map) {
   void *ptr = 0;
   ptr = *(void **)&map;
   (*env)->ReleaseFloatArrayElements(env, arr, ptr, JNI_ABORT);
@@ -45,8 +38,8 @@
 
 %pragma(java) modulecode=%{
   private static long arrPtr(Object o) {
-    if (o instanceof float[]) {
-      return arr2voidf((float[])o);
+    if (o instanceof double[]) {
+      return arr2voidd((double[])o);
     }
     else if (o instanceof int[]) {
       return arr2voidi((int[])o);
@@ -58,8 +51,8 @@
   }
 
   private static void freeArrPtr(Object o, long addr) {
-    if (o instanceof float[]) {
-      freearrf((float[])o, addr);
+    if (o instanceof double[]) {
+      freearrd((double[])o, addr);
       return;
     }
     else if (o instanceof int[]) {
@@ -76,12 +69,5 @@
 %typemap(jstype) void *argv "Object"
 %typemap(javain,pre="    long tmp$javainput = arrPtr($javainput);",post="      freeArrPtr($javainput, tmp$javainput);") void *argv "tmp$javainput"
 
-/*
-int xtract_mean(const float *data, const int N, void *argv, float *result);
-int xtract_variance(const float *data, const int N, void *argv, float *result);
-*/
 %include xtract_redeclare.i
 
-/*%{
-#include "xtract/xtract_scalar.h"
-%}*/
--- a/swig/java/test.java	Thu Jan 10 21:43:57 2013 +0000
+++ b/swig/java/test.java	Thu Jan 10 22:41:03 2013 +0000
@@ -18,9 +18,9 @@
 
         int len          = 5;
         int retval       = 0;
-        float mean[]     = new float[1];
-        float variance[] = new float[1];
-        float data[]     = new float[len];
+        double mean[]     = new double[1];
+        double variance[] = new double[1];
+        double data[]     = new double[len];
 
         for (int i = 0; i < len; i++){
             System.out.print(i * 3 + ", ");
--- a/swig/python/test.py	Thu Jan 10 21:43:57 2013 +0000
+++ b/swig/python/test.py	Thu Jan 10 22:41:03 2013 +0000
@@ -9,7 +9,7 @@
 
 len = 8
 
-a = xtract.floatArray(len)
+a = xtract.doubleArray(len)
 temp = []
 
 for i in range(0, len):
@@ -20,7 +20,7 @@
 
 print 'The mean of ' + ', '.join(temp) + ' is: %.2f' % mean
 
-argv = xtract.floatArray(1)
+argv = xtract.doubleArray(1)
 argv[0] = mean
 
 variance = xtract.xtract_variance(a, len, argv)[1]
@@ -29,12 +29,12 @@
 
 print 'Computing spectrum...'
 
-argv = xtract.floatArray(1)
+argv = xtract.doubleArray(1)
 argv[0] = 44100.0 / len  # Fake sample rate
 
 xtract.xtract_init_fft(len, xtract.XTRACT_SPECTRUM);
 
-result = xtract.floatArray(len)
+result = xtract.doubleArray(len)
 
 xtract.xtract_spectrum(a,len,argv, result)
 
--- a/swig/xtract.i	Thu Jan 10 21:43:57 2013 +0000
+++ b/swig/xtract.i	Thu Jan 10 22:41:03 2013 +0000
@@ -13,21 +13,10 @@
 #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[])
+    void *doublea_to_voidp(double f[])
     {
         return (void *)f;
     }
@@ -41,7 +30,7 @@
     /* Return a pointer to memory allocated for a mel filterbank */
     xtract_mel_filter *create_filterbank(int n_filters, int blocksize){
         
-        float **filters;
+        double **filters;
         xtract_mel_filter *mf;
         int n, N;
 
@@ -50,10 +39,10 @@
         mf = malloc(sizeof(xtract_mel_filter));
         mf->n_filters = n_filters;
 
-        filters = (float **)malloc(n_filters * sizeof(float *));
+        filters = (double **)malloc(n_filters * sizeof(double *));
 
         for(n = 0; n < n_filters; n++)
-            filters[n] = (float *)malloc(N * sizeof(float));
+            filters[n] = (double *)malloc(N * sizeof(double));
 
         mf->filters = filters;
         
@@ -65,7 +54,7 @@
     void destroy_filterbank(xtract_mel_filter *filterbank){
         
         int i = filterbank->n_filters;
-        float **filters;
+        double **filters;
 
         filters = filterbank->filters;
             
@@ -78,29 +67,13 @@
 
     }
 
-    /* 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(double, doubleArray); 
 %array_class(int, intArray); 
 #endif
-%apply float *OUTPUT { float *result };
-
-/* %apply float[] {const float *data}; */
+%apply double *OUTPUT { double *result };
 
 
 %ignore xtract;
@@ -110,16 +83,16 @@
 /* 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);
+    int xtract_flux(const double *data, const int N, const void *argv , double *result);
+    int xtract_lnorm(const double *data, const int N, const void *argv , double *result);
 
 %}
 
-%clear float *result;
+%clear double *result;
 
 %inline %{
 
-    int xtract_difference_vector(const float *data, const int N, const void *argv, float *result);
+    int xtract_difference_vector(const double *data, const int N, const void *argv, double *result);
 
 %}