Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/speex.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-04-09 06:20:22 +0400
committerjmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800>2002-04-09 06:20:22 +0400
commit41eec2164e4e2edabfde0fe199fd03e2c1cb0b93 (patch)
tree8872623c8d185da69bb439fd6102b33595a09473 /libspeex
parent553b26da8eadbd2215d321dc4b4900885b59fcef (diff)
Test encoder for SB-CELP
git-svn-id: http://svn.xiph.org/trunk/speex@3228 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'libspeex')
-rw-r--r--libspeex/testenc_sb.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/libspeex/testenc_sb.c b/libspeex/testenc_sb.c
new file mode 100644
index 0000000..7b3437f
--- /dev/null
+++ b/libspeex/testenc_sb.c
@@ -0,0 +1,77 @@
+#include "sb_celp.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FRAME_SIZE 320
+#include <math.h>
+int main(int argc, char **argv)
+{
+ char *inFile, *outFile, *bitsFile;
+ FILE *fin, *fout, *fbits=NULL;
+ short in[FRAME_SIZE];
+ float input[FRAME_SIZE], bak[FRAME_SIZE], bak2[FRAME_SIZE];
+ char cbits[200];
+ int nbBits;
+ int i;
+ SBEncState st;
+ FrameBits bits;
+
+ for (i=0;i<FRAME_SIZE;i++)
+ bak2[i]=0;
+ sb_encoder_init(&st, &mp_sb_mode);
+ if (argc != 4 && argc != 3)
+ {
+ fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc);
+ exit(1);
+ }
+ inFile = argv[1];
+ fin = fopen(inFile, "r");
+ outFile = argv[2];
+ fout = fopen(outFile, "w");
+ if (argc==4)
+ {
+ bitsFile = argv[3];
+ fbits = fopen(bitsFile, "w");
+ }
+ frame_bits_init(&bits);
+ while (!feof(fin))
+ {
+ fread(in, sizeof(short), FRAME_SIZE, fin);
+ for (i=0;i<FRAME_SIZE;i++)
+ bak[i]=input[i]=in[i];
+ frame_bits_reset(&bits);
+ sb_encode(&st, input, &bits);
+ nbBits = frame_bits_write(&bits, cbits, 200);
+ printf ("Encoding frame in %d bits\n", nbBits*8);
+ if (argc==4)
+ fwrite(cbits, 1, nbBits, fbits);
+ {
+ float enoise=0, esig=0, snr;
+ for (i=0;i<FRAME_SIZE;i++)
+ {
+ enoise+=(bak2[i]-input[i])*(bak2[i]-input[i]);
+ esig += bak2[i]*bak2[i];
+ }
+ snr = 10*log10((esig+1)/(enoise+1));
+ printf ("real SNR = %f\n", snr);
+ }
+ frame_bits_rewind(&bits);
+
+ frame_bits_reset(&bits);
+ for (i=0;i<FRAME_SIZE;i++)
+ {
+ if (input[i]>32000)
+ input[i]=32000;
+ else if (input[i]<-32000)
+ input[i]=-32000;
+ }
+ for (i=0;i<FRAME_SIZE;i++)
+ in[i]=input[i];
+ for (i=0;i<FRAME_SIZE;i++)
+ bak2[i]=bak[i];
+ fwrite(in, sizeof(short), FRAME_SIZE, fout);
+ }
+
+ sb_encoder_destroy(&st);
+ return 1;
+}