diff options
author | jmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800> | 2002-03-15 10:30:46 +0300 |
---|---|---|
committer | jmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800> | 2002-03-15 10:30:46 +0300 |
commit | 49f16a1d674aca571414bc7e4312ebf9fb0472bb (patch) | |
tree | c2f33cf398d988541cd7e078630e127df5451325 /libspeex | |
parent | ee987fd1f6246c541a37e584570d6f226f348b95 (diff) |
Wideband encorer
git-svn-id: http://svn.xiph.org/trunk/speex@3149 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'libspeex')
-rw-r--r-- | libspeex/testenc_wb.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libspeex/testenc_wb.c b/libspeex/testenc_wb.c new file mode 100644 index 0000000..2a88d74 --- /dev/null +++ b/libspeex/testenc_wb.c @@ -0,0 +1,73 @@ +#include "speex.h" +#include <stdio.h> +#include <stdlib.h> + +#define FRAME_SIZE 256 +#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; + EncState st; + DecState dec; + FrameBits bits; + + for (i=0;i<FRAME_SIZE;i++) + bak2[i]=0; + encoder_init(&st, &wb_mode); + decoder_init(&dec, &wb_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); + 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); + } + + /* Save the bits here */ + frame_bits_reset(&bits); + 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); + } + + encoder_destroy(&st); + decoder_destroy(&dec); + return 1; +} |