1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #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 *outFile;
- FILE *fout;
- /*Holds the audio that will be written to file (16 bits per sample)*/
- short out[FRAME_SIZE];
- /*Speex handle samples as float, so we need an array of floats*/
- float output[FRAME_SIZE];
- char cbits[200];
- int nbBytes;
- /*Holds the state of the decoder*/
- void *state;
- /*Holds bits so they can be read and written to by the Speex routines*/
- SpeexBits bits;
- int i, tmp;
- /*Create a new decoder state in narrowband mode*/
- state = speex_decoder_init(&speex_nb_mode);
- /*Set the perceptual enhancement on*/
- tmp=1;
- speex_decoder_ctl(state, SPEEX_SET_ENH, &tmp);
- outFile = argv[1];
- fout = fopen(outFile, "w");
- /*Initialization of the structure that holds the bits*/
- speex_bits_init(&bits);
- while (1)
- {
- /*Read the size encoded by sampleenc, this part will likely be
- different in your application*/
- fread(&nbBytes, sizeof(int), 1, stdin);
- fprintf (stderr, "nbBytes: %d\n", nbBytes);
- if (feof(stdin))
- break;
- /*Read the "packet" encoded by sampleenc*/
- fread(cbits, 1, nbBytes, stdin);
- /*Copy the data into the bit-stream struct*/
- speex_bits_read_from(&bits, cbits, nbBytes);
- /*Decode the data*/
- speex_decode(state, &bits, output);
- /*Copy from float to short (16 bits) for output*/
- for (i=0;i<FRAME_SIZE;i++)
- out[i]=output[i];
- /*Write the decoded audio to file*/
- fwrite(out, sizeof(short), FRAME_SIZE, fout);
- }
- /*Destroy the decoder state*/
- speex_decoder_destroy(state);
- /*Destroy the bit-stream truct*/
- speex_bits_destroy(&bits);
- fclose(fout);
- return 0;
- }
|