#include #include #include #include "compute.h" typedef void (*cb_processdata_t)(int n, float *); //#if 1 //(UGLY_IEEE754_FLOAT32_HACK :-) /* static inline float todB_a(const float *x){ return (float)((*(int *)x)&0x7fffffff) * 7.17711438e-7f -764.6161886f; } */ static inline float todB_a(const float *x){ union { //int32_t i; int i; float f; } ix; ix.f = *x; ix.i = ix.i&0x7fffffff; return (float)(ix.i * 7.17711438e-7f -764.6161886f); } //#else static inline float todB_a2(const float *x){ return (*(x)==0?-400.f:logf(*(x)**(x))*4.34294480f); } //#endif void test_todb_a() { float f, dbav[32]={0.f}, dbaf[32]={0.f}; int i=0; for(f=1024000.f;f>1.f;f/=2.f) { dbaf[31-i]=f; dbav[31-i]=todB_a(&f); i++; } for (i=0;i<32;i++) printf("f==%f\tv==%f\n", dbaf[i], dbav[i]); } void dump_testfile() { int i,n; float f[256]; FILE *fh=fopen("./test.raw", "r"); if (fh==NULL) return; while ( (n=fread(f, sizeof(float), 256, fh)) > 0 ) { for(i=0;i 0 ) { cb(n,f); //n=128+256*(rand()%7); n=512; } fclose(fh); } void process_mean_max(int n, float *f) { int i; float t, mean=0, max=0; for(i=0;imax) max=t; } mean/=n; printf("%+.3f %+.3f %4i\n", mean, max, n); } void process_level(int n, float *f) { int rate=24000; float level; level=compute_level(f, n, rate); printf("%+.3f %4i\n", level, n); } int main() { //test_todb_a(); //dump_testfile(); //parse_testfile(process_mean_max); parse_testfile(process_level); return 0; }