diff options
Diffstat (limited to 'doc/sampleenc.c')
-rw-r--r-- | doc/sampleenc.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/doc/sampleenc.c b/doc/sampleenc.c new file mode 100644 index 0000000..a0ec8b6 --- /dev/null +++ b/doc/sampleenc.c @@ -0,0 +1,64 @@ +#include <speex/speex.h> +#include <stdio.h> + +/*The frame size in hardcoded for this sample code but it doesn't have to be*/ +#define FRAME_SIZE 160 +int main(int argc, char **argv) +{ + char *inFile; + FILE *fin; + short in[FRAME_SIZE]; + float input[FRAME_SIZE]; + char cbits[200]; + int nbBytes; + /*Holds the state of the encoder*/ + void *state; + /*Holds bits so they can be read and written to by the Speex routines*/ + SpeexBits bits; + int i, tmp; + + /*Create a new encoder state in narrowband mode*/ + state = speex_encoder_init(&speex_nb_mode); + + /*Set the quality to 8 (15 kbps)*/ + tmp=8; + speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp); + + inFile = argv[1]; + fin = fopen(inFile, "r"); + + /*Initialization of the structure that holds the bits*/ + speex_bits_init(&bits); + while (1) + { + /*Read a 16 bits/sample audio frame*/ + fread(in, sizeof(short), FRAME_SIZE, fin); + if (feof(fin)) + break; + /*Copy the 16 bits values to float so Speex can work on them*/ + for (i=0;i<FRAME_SIZE;i++) + input[i]=in[i]; + + /*Flush all the bits in the struct so we can encode a new frame*/ + speex_bits_reset(&bits); + + /*Encode the frame*/ + speex_encode(state, input, &bits); + /*Copy the bits to an array of char that can be written*/ + nbBytes = speex_bits_write(&bits, cbits, 200); + + /*Write the size of the frame first. This is what sampledec expects but + it's likely to be different in your own application*/ + fwrite(&nbBytes, sizeof(int), 1, stdout); + /*Write the compressed data*/ + fwrite(cbits, 1, nbBytes, stdout); + + } + + /*Destroy the encoder state*/ + speex_encoder_destroy(state); + /*Destroy the bit-packing struct*/ + speex_bits_destroy(&bits); + fclose(fin); + return 0; +} |