12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #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);
- if (argc < 2)
- return 1;
- 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;
- }
|