SpeexDecode.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include <memory.h>
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include "TRSpeex.h"
  5. int main(int argc, char* argv[])
  6. {
  7. FILE *fpInput;
  8. FILE *fpOutput;
  9. char aInputBuffer[MAX_FRAME_SIZE*10];
  10. char aOutputBuffer[MAX_FRAME_SIZE*10];
  11. int ret;
  12. int buffer_size;
  13. int nOutSize;
  14. int nPackNo;
  15. TRSpeexDecodeContex SpeexDecode;
  16. int nTotalLen;
  17. char buf[44];
  18. if(argc <3)
  19. {
  20. printf("Usage SpeexDecode InputspxFile OutputWavFile\n");
  21. return 1;
  22. }
  23. memset(aInputBuffer,0,sizeof(char)*MAX_FRAME_SIZE*10);
  24. memset(buf,0,44);
  25. buf[0] = 'R';
  26. buf[1] = 'I';
  27. buf[2] = 'F';
  28. buf[3] = 'F';
  29. buf[8] = 'W';
  30. buf[9] = 'A';
  31. buf[10] = 'V';
  32. buf[11] = 'E';
  33. buf[12] = 'f';
  34. buf[13] = 'm';
  35. buf[14] = 't';
  36. buf[15] = 0x20;
  37. buf[16] = 0x10;
  38. buf[20] = 0x01;
  39. buf[22] = 0x01;
  40. buf[24] = 0x80;
  41. buf[25] = 0x3E;
  42. buf[29]= 0x7D;
  43. buf[32] = 0x02;
  44. buf[34] = 0x10;
  45. buf[36] = 'd';
  46. buf[37] = 'a';
  47. buf[38] = 't';
  48. buf[39] = 'a';
  49. TRSpeexDecodeInit(&SpeexDecode);
  50. fpInput = fopen(argv[1],"rb");
  51. if(fpInput == NULL)
  52. {
  53. printf("can't open input spx file");
  54. return 0;
  55. }
  56. fpOutput = fopen(argv[2],"wb");
  57. if(fpOutput == NULL)
  58. {
  59. printf("can't open output file");
  60. return 0;
  61. }
  62. fwrite(buf,1,44,fpOutput);
  63. nTotalLen = 0;
  64. buffer_size = 6;
  65. ret = fread(aInputBuffer, 1,buffer_size,fpInput);
  66. while(1)
  67. {
  68. TRSpeexDecode(&SpeexDecode,aInputBuffer,buffer_size,aOutputBuffer, &nOutSize);
  69. ret = fread(aInputBuffer, 1,buffer_size, fpInput);
  70. if(ret != buffer_size)
  71. break;
  72. fwrite(aOutputBuffer,1, nOutSize,fpOutput);
  73. nTotalLen += nOutSize;
  74. }
  75. TRSpeexDecodeRelease(&SpeexDecode);
  76. fseek(fpOutput,40,SEEK_SET);
  77. fwrite(&nTotalLen,1,4,fpOutput);
  78. fseek(fpOutput,4,SEEK_SET);
  79. nTotalLen += 36;
  80. fwrite(&nTotalLen,1,4,fpOutput);
  81. fclose(fpOutput);
  82. fclose(fpInput);
  83. return 0;
  84. }