pcm.c

来自「SIP 1.5.0源代码」· C语言 代码 · 共 2,038 行 · 第 1/5 页

C
2,038
字号
	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		s2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_s2bet */static intpcm_write_s2let	(SF_PRIVATE *psf, short *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		s2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_s2let */static intpcm_write_s2bei	(SF_PRIVATE *psf, short *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		s2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_s2bei */static intpcm_write_s2lei	(SF_PRIVATE *psf, short *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		s2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_s2lei *//*-----------------------------------------------------------------------------------------------*/static intpcm_write_i2sc	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2sc */static intpcm_write_i2uc	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2uc */static intpcm_write_i2bes	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2bes */static intpcm_write_i2les	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2les */static intpcm_write_i2bet	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2bet */static intpcm_write_i2let	(SF_PRIVATE *psf, int *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		i2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2les */static intpcm_write_i2bei	(SF_PRIVATE *psf, int *ptr, int len){	int		total ;	if (CPU_IS_LITTLE_ENDIAN)		endswap_int_array (ptr, len) ;	total = fwrite (ptr, 1, len * sizeof (int), psf->file) ;	if (CPU_IS_LITTLE_ENDIAN)		endswap_int_array (ptr, len) ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2bei */static intpcm_write_i2lei	(SF_PRIVATE *psf, int *ptr, int len){	int		total ;	if (CPU_IS_BIG_ENDIAN)		endswap_int_array (ptr, len) ;	total = fwrite (ptr, 1, len * sizeof (int), psf->file) ;	if (CPU_IS_BIG_ENDIAN)		endswap_int_array (ptr, len) ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_i2lei *//*-----------------------------------------------------------------------------------------------*/static intpcm_write_f2sc	(SF_PRIVATE *psf, float *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		f2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth, 1.0) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_f2sc */static intpcm_write_f2uc	(SF_PRIVATE *psf, float *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		f2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, 1.0) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_f2uc */static intpcm_write_f2bes	(SF_PRIVATE *psf, float *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		f2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, 1.0) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_f2bes */static intpcm_write_f2les	(SF_PRIVATE *psf, float *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;	while (bytecount > 0)	{	writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;		f2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, 1.0) ;		thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;		total += thiswrite ;		if (thiswrite < writecount)			break ;		index += thiswrite / psf->bytewidth ;		bytecount -= thiswrite ;		} ;	total /= psf->bytewidth ;	if (total < len)		psf->error = SFE_SHORT_WRITE ;		return total ;} /* pcm_write_f2les */static intpcm_write_f2let	(SF_PRIVATE *psf, float *ptr, int len){	unsigned int	writecount, thiswrite ;	int	bytecount, bufferlen ;	int		index = 0, total = 0 ;	bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;	bytecount = len * psf->bytewidth ;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?