⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcm.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
📖 第 1 页 / 共 5 页
字号:
	else	bufferlen = ARRAY_LEN (psf->u.sbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ;		writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2bes */static sf_count_tpcm_write_s2les	(SF_PRIVATE *psf, short *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	if (CPU_IS_LITTLE_ENDIAN)		return psf_fwrite (ptr, sizeof (short), len, psf) ;	bufferlen = ARRAY_LEN (psf->u.sbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		endswap_short_copy (psf->u.sbuf, ptr + total, bufferlen) ;		writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2les */static sf_count_tpcm_write_s2bet	(SF_PRIVATE *psf, short *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		s2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ;		writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2bet */static sf_count_tpcm_write_s2let	(SF_PRIVATE *psf, short *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		s2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ;		writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2let */static sf_count_tpcm_write_s2bei	(SF_PRIVATE *psf, short *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.ibuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		s2bei_array (ptr + total, psf->u.ibuf, bufferlen) ;		writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2bei */static sf_count_tpcm_write_s2lei	(SF_PRIVATE *psf, short *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.ibuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		s2lei_array (ptr + total, psf->u.ibuf, bufferlen) ;		writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_s2lei *//*-----------------------------------------------------------------------------------------------*/static sf_count_tpcm_write_i2sc	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.scbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2sc_array (ptr + total, psf->u.scbuf, bufferlen) ;		writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2sc */static sf_count_tpcm_write_i2uc	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.ucbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2uc_array (ptr + total, psf->u.ucbuf, bufferlen) ;		writecount = psf_fwrite (psf->u.ucbuf, sizeof (signed char), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2uc */static sf_count_tpcm_write_i2bes	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.sbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2bes_array (ptr + total, psf->u.sbuf, bufferlen) ;		writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2bes */static sf_count_tpcm_write_i2les	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = ARRAY_LEN (psf->u.sbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2les_array (ptr + total, psf->u.sbuf, bufferlen) ;		writecount = psf_fwrite (psf->u.sbuf, sizeof (short), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2les */static sf_count_tpcm_write_i2bet	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2bet_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ;		writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2bet */static sf_count_tpcm_write_i2let	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	bufferlen = sizeof (psf->u.ucbuf) / SIZEOF_TRIBYTE ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		i2let_array (ptr + total, (tribyte*) (psf->u.ucbuf), bufferlen) ;		writecount = psf_fwrite (psf->u.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2les */static sf_count_tpcm_write_i2bei	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	if (CPU_IS_BIG_ENDIAN)		return psf_fwrite (ptr, sizeof (int), len, psf) ;	bufferlen = ARRAY_LEN (psf->u.ibuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ;		writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2bei */static sf_count_tpcm_write_i2lei	(SF_PRIVATE *psf, int *ptr, sf_count_t len){	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	if (CPU_IS_LITTLE_ENDIAN)		return psf_fwrite (ptr, sizeof (int), len, psf) ;	bufferlen = ARRAY_LEN (psf->u.ibuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		endswap_int_copy (psf->u.ibuf, ptr + total, bufferlen) ;		writecount = psf_fwrite (psf->u.ibuf, sizeof (int), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_i2lei *//*------------------------------------------------------------------------------**==============================================================================**------------------------------------------------------------------------------*/static voidf2sc_array (float *src, signed char *dest, int count, int normalize){	float normfact ;	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;	while (--count >= 0)	{	dest [count] = lrintf (src [count] * normfact) ;		} ;} /* f2sc_array */static voidf2sc_clip_array (float *src, signed char *dest, int count, int normalize){	float	normfact, scaled_value ;	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;	while (--count >= 0)	{	scaled_value = src [count] * normfact ;		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))		{	dest [count] = 127 ;			continue ;			} ;		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))		{	dest [count] = -128 ;			continue ;			} ;		dest [count] = lrintf (scaled_value) >> 24 ;		} ;} /* f2sc_clip_array */static sf_count_tpcm_write_f2sc	(SF_PRIVATE *psf, float *ptr, sf_count_t len){	void		(*convert) (float *, signed char *, int, int) ;	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	convert = (psf->add_clipping) ? f2sc_clip_array : f2sc_array ;	bufferlen = ARRAY_LEN (psf->u.scbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		convert (ptr + total, psf->u.scbuf, bufferlen, psf->norm_float) ;		writecount = psf_fwrite (psf->u.scbuf, sizeof (signed char), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_f2sc *//*==============================================================================*/static	voidf2uc_array	(float *src, unsigned char *dest, int count, int normalize){	float normfact ;	normfact = normalize ? (1.0 * 0x7F) : 1.0 ;	while (--count >= 0)	{	dest [count] = lrintf (src [count] * normfact) + 128 ;		} ;} /* f2uc_array */static	voidf2uc_clip_array	(float *src, unsigned char *dest, int count, int normalize){	float	normfact, scaled_value ;	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;	while (--count >= 0)	{	scaled_value = src [count] * normfact ;		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))		{	dest [count] = 0xFF ;			continue ;			} ;		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))		{	dest [count] = 0 ;			continue ;			} ;		dest [count] = (lrintf (scaled_value) >> 24) + 128 ;		} ;} /* f2uc_clip_array */static sf_count_tpcm_write_f2uc	(SF_PRIVATE *psf, float *ptr, sf_count_t len){	void		(*convert) (float *, unsigned char *, int, int) ;	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	convert = (psf->add_clipping) ? f2uc_clip_array : f2uc_array ;	bufferlen = ARRAY_LEN (psf->u.ucbuf) ;	while (len > 0)	{	if (len < bufferlen)			bufferlen = (int) len ;		convert (ptr + total, psf->u.ucbuf, bufferlen, psf->norm_float) ;		writecount = psf_fwrite (psf->u.ucbuf, sizeof (unsigned char), bufferlen, psf) ;		total += writecount ;		if (writecount < bufferlen)			break ;		len -= writecount ;		} ;	return total ;} /* pcm_write_f2uc *//*==============================================================================*/static voidf2bes_array (float *src, short *dest, int count, int normalize){	unsigned char	*ucptr ;	float 			normfact ;	short			value ;	normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;	ucptr = ((unsigned char*) dest) + 2 * count ;	while (--count >= 0)	{	ucptr -= 2 ;		value = lrintf (src [count] * normfact) ;		ucptr [1] = value ;		ucptr [0] = value >> 8 ;			} ;} /* f2bes_array */static voidf2bes_clip_array (float *src, short *dest, int count, int normalize){	unsigned char	*ucptr ;	float			normfact, scaled_value ;	int				value ;	normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;	ucptr = ((unsigned char*) dest) + 2 * count ;	while (--count >= 0)	{	ucptr -= 2 ;		scaled_value = src [count] * normfact ;		if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))		{	ucptr [1] = 0xFF ;			ucptr [0] = 0x7F ;			continue ;		} ;		if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))		{	ucptr [1] = 0x00 ;			ucptr [0] = 0x80 ;			continue ;			} ;		value = lrintf (scaled_value) ;		ucptr [1] = value >> 16 ;		ucptr [0] = value >> 24 ;		} ;} /* f2bes_clip_array */static sf_count_tpcm_write_f2bes	(SF_PRIVATE *psf, float *ptr, sf_count_t len){	void		(*convert) (float *, short *t, int, int) ;	int			bufferlen, writecount ;	sf_count_t	total = 0 ;	convert = (psf->add_clipping) ? f2bes_clip_array : f2bes_array ;	bufferlen = ARRAY_LEN (psf->u.sbuf) ;	while (len > 0)	{	if (len < bufferlen)

⌨️ 快捷键说明

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