io-sparc.c
上传用户:touchwatch
上传日期:2007-01-06
资源大小:168k
文件大小:3k
源码类别:

语音压缩

开发平台:

Unix_Linux

  1. /*************************************************************************/
  2. /*                                                                       */
  3. /*                            LD-CELP  G.728                             */
  4. /*                                                                       */
  5. /*    Low-Delay Code Excitation Linear Prediction speech compression.    */
  6. /*                                                                       */
  7. /*    Code edited by Michael Concannon.                                  */
  8. /*    Based on code written by Alex Zatsman, Analog Devices 1993         */
  9. /*                                                                       */
  10. /*************************************************************************/
  11. #include <fcntl.h>
  12. #include <stdio.h>
  13. #include "common.h"
  14. #include "prototyp.h"
  15. extern int fprintf();
  16. extern void audio_read_filehdr();
  17. extern int read(int, char*, int);
  18. real rscale=0.125;  /* Scaling factor for input */
  19. char * xfile_name;
  20. #ifdef CODER
  21. int oxfd = 0; /* output file (codebook indices) */
  22. int ifd  = 1; /* input file */
  23. char *ifile_name;
  24. void
  25. init_input()
  26. {
  27.     if ((ifd=open(ifile_name, O_RDONLY)) < 0) {
  28. (void) fprintf(stderr, "Can't open "%s"n", ifile_name);
  29. exit(1);
  30.     }
  31.     if ((oxfd=open(xfile_name, O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) {
  32. (void) fprintf(stderr, "Can't open "%s"n", xfile_name);
  33.     }
  34. }
  35. void
  36. put_index(int x)
  37. {
  38.     short sx = x;
  39.     write(oxfd, &sx, 2);
  40. }
  41. #endif
  42. #ifdef DECODER
  43. char * ofile_name;
  44. static int ofd=1; /* Outpu file */
  45. static ixfd = 0; /* Input file (codebook indices) */
  46. int sound_overflow = 0;
  47. void init_output()
  48. {
  49.     sound_overflow = 0;
  50.     if ((ofd=open(ofile_name, O_WRONLY|O_CREAT|O_TRUNC, 0644)) < 0) {
  51. extern  int errno;
  52. extern char *sys_errlist[];
  53. int ee = errno;
  54. (void) fprintf(stderr, "Can't open "%s" for outputn", ofile_name);
  55. printf(sys_errlist[ee]);
  56. exit(1);
  57.     }
  58.     if ((ixfd = open(xfile_name, O_RDONLY)) < 0) {
  59. (void) fprintf(stderr, "Can't open "%s"n", xfile_name);
  60. exit(3);
  61.     }
  62. }
  63. int get_index()
  64. {
  65.     short sx;
  66.     if (read(ixfd, (char*)&sx, sizeof(sx)) < sizeof(sx))
  67. return -1;
  68.     return (int)sx;
  69. }
  70. #endif
  71. /* Return Number of Samples Read */
  72. #ifdef CODER
  73. int read_sound_buffer(int n, real buf[])
  74. {
  75.     short s;
  76.     int i, c=0;
  77.     
  78.     for (i=0; i<n && read(ifd, &s, 2) > 0; i++) {
  79.       buf[c++] =  rscale * (real) s;
  80.     }
  81.     return c;
  82. }
  83. #endif
  84. #ifdef DECODER
  85. int
  86. write_sound_buffer(int n, real buf[])
  87. {
  88.     int i;
  89.     short s;
  90.     float xx;
  91.     for (i=0; i<n; i++) {
  92. xx = buf[i]/rscale;
  93. if (xx > 0.0)
  94.   if (xx > 32767.0)
  95.     xx = 32767.0;
  96.   else
  97.     xx += 0.5;
  98. else
  99.   if (xx < -32768.0)
  100.     xx = -32768.0;
  101.   else
  102.     xx -= 0.5;
  103. s = (short) xx;
  104. write(ofd, &s, 2);
  105.     }
  106.     return 0;
  107. }
  108. #endif