📄 sndfile.c
字号:
} ; if (len % psf->sf.channels) { psf->error = SFE_BAD_READ_ALIGN ; return (size_t) -1 ; } ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, len * sizeof (short)) ; return 0 ; /* End of file. */ } ; if (! psf->read_short) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_short (psf, ptr, len) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = len - count ; memset (ptr + count, 0, extra * sizeof (short)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count ;} /* sf_read_short */size_t sf_readf_short (SNDFILE *sndfile, short *ptr, size_t frames){ SF_PRIVATE *psf ; size_t count, extra ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_READ) { psf->error = SFE_NOT_READMODE ; return (size_t) -1 ; } ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ; return 0 ; /* End of file. */ } ; if (! psf->read_short) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_short (psf, ptr, frames * psf->sf.channels) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = frames * psf->sf.channels - count ; memset (ptr + count, 0, extra * sizeof (short)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_readf_short *//*------------------------------------------------------------------------------*/size_t sf_read_int (SNDFILE *sndfile, int *ptr, size_t len){ SF_PRIVATE *psf ; size_t count, extra ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_READ) return SFE_NOT_READMODE ; if (len % psf->sf.channels) return (psf->error = SFE_BAD_READ_ALIGN) ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, len * sizeof (int)) ; return 0 ; } ; if (! psf->read_int) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_int (psf, ptr, len) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = len - count ; memset (ptr + count, 0, extra * sizeof (int)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count ;} /* sf_read_int */size_t sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames){ SF_PRIVATE *psf ; size_t count, extra ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_READ) return SFE_NOT_READMODE ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ; return 0 ; } ; if (! psf->read_int) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_int (psf, ptr, frames * psf->sf.channels) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = frames * psf->sf.channels - count ; memset (ptr + count, 0, extra * sizeof (int)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_readf_int *//*------------------------------------------------------------------------------*/size_t sf_read_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize){ SF_PRIVATE *psf ; size_t count, extra ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ; if (psf->mode != SF_MODE_READ) return SFE_NOT_READMODE ; if (len % psf->sf.channels) return (psf->error = SFE_BAD_READ_ALIGN) ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, len * sizeof (double)) ; return 0 ; } ; if (! psf->read_double) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_double (psf, ptr, len, normalize) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = len - count ; memset (ptr + count, 0, extra * sizeof (double)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count ;} /* sf_read_double */size_t sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize){ SF_PRIVATE *psf ; size_t count, extra ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ; if (psf->mode != SF_MODE_READ) return SFE_NOT_READMODE ; if (psf->current >= psf->sf.samples) { memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ; return 0 ; } ; if (! psf->read_double) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->read_double (psf, ptr, frames * psf->sf.channels, normalize) ; if (psf->current + count / psf->sf.channels > psf->sf.samples) { count = (psf->sf.samples - psf->current) * psf->sf.channels ; extra = frames * psf->sf.channels - count ; memset (ptr + count, 0, extra * sizeof (double)) ; psf->current = psf->sf.samples ; } ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_readf_double *//*------------------------------------------------------------------------------*/size_t sf_write_raw (SNDFILE *sndfile, void *ptr, size_t len){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (len % (psf->sf.channels * psf->bytewidth)) { psf->error = SFE_BAD_WRITE_ALIGN ; return (size_t) -1 ; } ; count = fwrite (ptr, 1, len, psf->file) ; psf->current += count / psf->blockwidth ; return count ;} /* sf_write_raw *//*------------------------------------------------------------------------------*/size_t sf_write_short (SNDFILE *sndfile, short *ptr, size_t len){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (len % psf->sf.channels) { psf->error = SFE_BAD_WRITE_ALIGN ; return (size_t) -1 ; } ; if (! psf->write_short) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_short (sndfile, ptr, len) ; psf->current += count / psf->sf.channels ; return count ;} /* sf_write_short */size_t sf_writef_short (SNDFILE *sndfile, short *ptr, size_t frames){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (! psf->write_short) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_short (sndfile, ptr, frames * psf->sf.channels) ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_writef_short *//*------------------------------------------------------------------------------*/size_t sf_write_int (SNDFILE *sndfile, int *ptr, size_t len){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (len % psf->sf.channels) { psf->error = SFE_BAD_WRITE_ALIGN ; return (size_t) -1 ; } ; if (! psf->write_int) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_int (sndfile, ptr, len) ; psf->current += count / psf->sf.channels ; return count ;} /* sf_write_int */size_t sf_writef_int (SNDFILE *sndfile, int *ptr, size_t frames){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (! psf->write_int) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_int (sndfile, ptr, frames * psf->sf.channels) ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_writef_int *//*------------------------------------------------------------------------------*/size_t sf_write_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (len % psf->sf.channels) { psf->error = SFE_BAD_WRITE_ALIGN ; return (size_t) -1 ; } ; if (! psf->write_double) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_double (sndfile, ptr, len, normalize) ; psf->current += count / psf->sf.channels ; return count ;} /* sf_write_double */size_t sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize){ SF_PRIVATE *psf ; size_t count ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->mode != SF_MODE_WRITE) { psf->error = SFE_NOT_WRITEMODE ; return (size_t) -1 ; } ; if (! psf->write_double) { psf->error = SFE_UNIMPLEMENTED ; return (size_t) -1 ; } ; count = psf->write_double (sndfile, ptr, frames * psf->sf.channels, normalize) ; psf->current += count / psf->sf.channels ; return count / psf->sf.channels ;} /* sf_writef_double *//*------------------------------------------------------------------------------*/int sf_close (SNDFILE *sndfile){ SF_PRIVATE *psf ; int error ; VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ; if (psf->close) error = psf->close (psf) ; fclose (psf->file) ; memset (psf, 0, sizeof (SF_PRIVATE)) ; free (psf) ; return 0 ;} /* sf_close *//*=========================================================================** Private functions.*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -