raw.c
上传用户:shw771010
上传日期:2022-01-05
资源大小:991k
文件大小:3k
源码类别:

Audio

开发平台:

Unix_Linux

  1. /*
  2. ** Copyright (C) 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
  3. **
  4. ** This program is free software; you can redistribute it and/or modify
  5. ** it under the terms of the GNU Lesser General Public License as published by
  6. ** the Free Software Foundation; either version 2.1 of the License, or
  7. ** (at your option) any later version.
  8. **
  9. ** This program is distributed in the hope that it will be useful,
  10. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ** GNU Lesser General Public License for more details.
  13. **
  14. ** You should have received a copy of the GNU Lesser General Public License
  15. ** along with this program; if not, write to the Free Software
  16. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. #include "sfconfig.h"
  19. #include <stdio.h>
  20. #include "sndfile.h"
  21. #include "common.h"
  22. /*------------------------------------------------------------------------------
  23. ** Public function.
  24. */
  25. int
  26. raw_open (SF_PRIVATE *psf)
  27. { int subformat, error = SFE_NO_ERROR ;
  28. subformat = SF_CODEC (psf->sf.format) ;
  29. psf->endian = SF_ENDIAN (psf->sf.format) ;
  30. if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
  31. psf->endian = SF_ENDIAN_BIG ;
  32. else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
  33. psf->endian = SF_ENDIAN_LITTLE ;
  34. psf->blockwidth = psf->bytewidth * psf->sf.channels ;
  35. psf->dataoffset = 0 ;
  36. psf->datalength = psf->filelength ;
  37. switch (subformat)
  38. { case SF_FORMAT_PCM_S8 :
  39. error = pcm_init (psf) ;
  40. break ;
  41. case SF_FORMAT_PCM_U8 :
  42. error = pcm_init (psf) ;
  43. break ;
  44. case SF_FORMAT_PCM_16 :
  45. case SF_FORMAT_PCM_24 :
  46. case SF_FORMAT_PCM_32 :
  47. error = pcm_init (psf) ;
  48. break ;
  49. case SF_FORMAT_ULAW :
  50. error = ulaw_init (psf) ;
  51. break ;
  52. case SF_FORMAT_ALAW :
  53. error = alaw_init (psf) ;
  54. break ;
  55. case SF_FORMAT_GSM610 :
  56. error = gsm610_init (psf) ;
  57. break ;
  58. /* Lite remove start */
  59. case SF_FORMAT_FLOAT :
  60. error = float32_init (psf) ;
  61. break ;
  62. case SF_FORMAT_DOUBLE :
  63. error = double64_init (psf) ;
  64. break ;
  65. case SF_FORMAT_DWVW_12 :
  66. error = dwvw_init (psf, 12) ;
  67. break ;
  68. case SF_FORMAT_DWVW_16 :
  69. error = dwvw_init (psf, 16) ;
  70. break ;
  71. case SF_FORMAT_DWVW_24 :
  72. error = dwvw_init (psf, 24) ;
  73. break ;
  74. case SF_FORMAT_VOX_ADPCM :
  75. error = vox_adpcm_init (psf) ;
  76. break ;
  77. /* Lite remove end */
  78. default : return SFE_BAD_OPEN_FORMAT ;
  79. } ;
  80. return error ;
  81. } /* raw_open */