int raw_open_write (SF_PRIVATE *psf) { unsigned int subformat, big_endian_file ; int error ; subformat = psf->sf.format & SF_FORMAT_SUBMASK ; if (subformat == SF_FORMAT_PCM_BE) big_endian_file = 1 ; else if (subformat == SF_FORMAT_PCM_LE) big_endian_file = 0 ; else if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_U8) big_endian_file = 0 ; else return SFE_BAD_OPEN_FORMAT ; psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ; psf->endian = big_endian_file ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ; psf->sf.seekable = SF_TRUE ; psf->blockwidth = psf->bytewidth * psf->sf.channels ; psf->dataoffset = 0 ; psf->datalength = psf->blockwidth * psf->sf.samples ; psf->filelength = psf->datalength ; psf->error = 0 ; if (subformat == SF_FORMAT_PCM_S8) psf->chars = SF_CHARS_SIGNED ; else if (subformat == SF_FORMAT_PCM_U8) psf->chars = SF_CHARS_UNSIGNED ; if ((error = pcm_write_init (psf))) return error ; return 0 ; } /* raw_open_write */
int nist_open_write (SF_PRIVATE *psf) { int subformat, error ; if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_NIST) return SFE_BAD_OPEN_FORMAT ; subformat = psf->sf.format & SF_FORMAT_SUBMASK ; if (subformat == SF_FORMAT_PCM_BE) psf->endian = SF_ENDIAN_BIG ; else if (subformat == SF_FORMAT_PCM_LE) psf->endian = SF_ENDIAN_LITTLE ; else if (CPU_IS_BIG_ENDIAN && subformat == SF_FORMAT_PCM) psf->endian = SF_ENDIAN_BIG ; else if (CPU_IS_LITTLE_ENDIAN && subformat == SF_FORMAT_PCM) psf->endian = SF_ENDIAN_LITTLE ; else return SFE_BAD_OPEN_FORMAT ; psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ; psf->blockwidth = psf->bytewidth * psf->sf.channels ; psf->dataoffset = NIST_HEADER_LENGTH ; psf->datalength = psf->blockwidth * psf->sf.samples ; psf->filelength = psf->datalength + psf->dataoffset ; psf->error = 0 ; if ((error = pcm_write_init (psf))) return error ; psf->close = (func_close) nist_close ; psf->write_header = (func_wr_hdr) nist_write_header ; nist_write_header (psf) ; return 0 ; } /* nist_open_write */