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

📄 sndfile.c

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 C
📖 第 1 页 / 共 3 页
字号:
	psf->Magick = SNDFILE_MAGICK ;	/* fopen with 'b' means binary file mode for Win32 systems. */		if (! (psf->file = fopen (path, "wb")))			{	sf_errno = SFE_OPEN_FAILED ;		sf_close (psf) ;		return NULL ;		} ;			psf->mode = SF_MODE_WRITE ;		psf->filelength = ftell (psf->file) ;	fseek (psf->file, 0, SEEK_SET) ;	copy_filename (psf, path) ;		switch (sfinfo->format & SF_FORMAT_TYPEMASK)	{	case	SF_FORMAT_WAV :				if ((sf_errno = wav_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;		case	SF_FORMAT_AIFF :				if ((sf_errno = aiff_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;		case	SF_FORMAT_AU :		case	SF_FORMAT_AULE :				if ((sf_errno = au_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;						case    SF_FORMAT_RAW :				if ((sf_errno = raw_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;		case    SF_FORMAT_PAF :				if ((sf_errno = paf_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;		case    SF_FORMAT_SVX :				if ((sf_errno = svx_open_write (psf)))				{	sf_close (psf) ;					return NULL ;					} ;				break ;		default :					sf_errno = SFE_UNKNOWN_FORMAT ;				sf_close (psf) ;				return NULL ;		} ;					return (SNDFILE*) psf ;} /* sf_open_write *//*------------------------------------------------------------------------------*/int	sf_perror	(SNDFILE *sndfile){	SF_PRIVATE 	*psf ;	int 		k, errnum ;	if (! sndfile)	{	errnum = sf_errno ;		}	else	{	VALIDATE_SNDFILE_AND_ASSIGN_PSF(sndfile,psf) ;		errnum = psf->error ;		} ;			errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;	for (k = 0 ; SndfileErrors[k].str ; k++)		if (errnum == SndfileErrors[k].error)		{	printf ("%s\n", SndfileErrors[k].str) ;			return SFE_NO_ERROR ;			} ;		printf ("No error string for error number %d.\n", errnum) ;	return SFE_NO_ERROR ;} /* sf_perror *//*------------------------------------------------------------------------------*/int	sf_error_str	(SNDFILE *sndfile, char *str, size_t maxlen){	SF_PRIVATE 	*psf ;	int 		errnum, k ;	if (! sndfile)	{	errnum = sf_errno ;		}	else	{	VALIDATE_SNDFILE_AND_ASSIGN_PSF(sndfile,psf) ;		errnum = psf->error ;		} ;			errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;	for (k = 0 ; SndfileErrors[k].str ; k++)		if (errnum == SndfileErrors[k].error)		{	strncpy (str, SndfileErrors [errnum].str, maxlen) ;			str [maxlen-1] = 0 ;			return SFE_NO_ERROR ;			} ;				strncpy (str, "No error defined for this error number. This is a bug in libsndfile.", maxlen) ;			str [maxlen-1] = 0 ;				return SFE_NO_ERROR ;} /* sf_error_str *//*------------------------------------------------------------------------------*/int	sf_error_number	(int errnum, char *str, size_t maxlen){	int 		k ;	errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;	for (k = 0 ; SndfileErrors[k].str ; k++)		if (errnum == SndfileErrors[k].error)		{	strncpy (str, SndfileErrors [errnum].str, maxlen) ;			str [maxlen-1] = 0 ;			return SFE_NO_ERROR ;			} ;				strncpy (str, "No error defined for this error number. This is a bug in libsndfile.", maxlen) ;			str [maxlen-1] = 0 ;				return SFE_NO_ERROR ;} /* sf_error_number *//*------------------------------------------------------------------------------*/int		sf_format_check	(const SF_INFO *info){	int	subformat = info->format & SF_FORMAT_SUBMASK ;	/* This is the place where each file format can check if the suppiled	** SF_INFO struct is valid.	** Return 0 on failure, 1 ons success. 	*/		if (info->channels < 1 || info->channels > 256)		return 0 ;	switch (info->format & SF_FORMAT_TYPEMASK)	{	case SF_FORMAT_WAV :				if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))					return 1 ;				if (subformat == SF_FORMAT_FLOAT && info->pcmbitwidth == 32)					return 1 ;				if (subformat == SF_FORMAT_IMA_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)					return 1 ;				if (subformat == SF_FORMAT_MS_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)					return 1 ;				if (subformat == SF_FORMAT_GSM610 && info->pcmbitwidth == 16 && info->channels == 1)					return 1 ;				if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)					return 1 ;				break ;						case SF_FORMAT_AIFF :				if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))					return 1 ;				break ;						case SF_FORMAT_AU :		case SF_FORMAT_AULE :				if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))					return 1 ;				if (subformat == SF_FORMAT_ULAW)					return 1 ;				if (subformat == SF_FORMAT_ALAW)					return 1 ;				if (subformat == SF_FORMAT_G721_32 && info->channels == 1)					return 1 ;				if (subformat == SF_FORMAT_G723_24 && info->channels == 1)					return 1 ;				break ;						case SF_FORMAT_RAW :				if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)					return 1 ;				if (subformat == SF_FORMAT_PCM_U8 && info->pcmbitwidth == 8)					return 1 ;				if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE)					break ;				if (info->pcmbitwidth % 8 || info->pcmbitwidth > 32)					break ;				return 1 ;				break ;						case SF_FORMAT_PAF :				if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)					return 1 ;				if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE)					break ;				if (info->pcmbitwidth % 8 || info->pcmbitwidth > 24)					break ;				return 1 ;				break ;						case SF_FORMAT_SVX :				if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth == 8 || info->pcmbitwidth == 16))					return 1 ;				break ;						default : break ;		} ;	return 0 ;} /* sf_format_check *//*------------------------------------------------------------------------------*/size_t	sf_get_header_info	(SNDFILE *sndfile, char *buffer, size_t bufferlen, size_t offset){	SF_PRIVATE	*psf ;	int			len ;		if (! sndfile)	{	strncpy (buffer, sf_strbuffer, bufferlen - 1) ;		buffer [bufferlen - 1] = 0 ;		return strlen (sf_strbuffer) ;		} ;	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;		len = strlen (psf->strbuffer) ;	if (offset < 0 || offset >= len)		return 0 ;		strncpy (buffer, psf->strbuffer, bufferlen - 1) ;	buffer [bufferlen - 1] = 0 ;		return strlen (psf->strbuffer) ;} /* sf_get_header_info *//*------------------------------------------------------------------------------*/size_t	sf_get_lib_version	(char *buffer, size_t bufferlen){	if (! buffer || ! bufferlen)		return 0 ;	strncpy (buffer, PACKAGE, bufferlen - 1) ;	buffer [bufferlen - 1] = 0 ;	strncat (buffer, "-", bufferlen - strlen (buffer) - 1) ;	strncat (buffer, VERSION, bufferlen - strlen (buffer) - 1) ;		return strlen (buffer) ;} /* sf_get_lib_version *//*------------------------------------------------------------------------------*/double  sf_signal_max   (SNDFILE *sndfile){	SF_PRIVATE 		*psf ;	off_t			position ;	unsigned int	k, len, readcount ;	double 			max = 0.0, *data, temp ;		VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;		if (! psf->sf.seekable)	{	psf->error = SFE_NOT_SEEKABLE ;		return	0.0 ;		} ;				if (! psf->read_double)	{	psf->error = SFE_UNIMPLEMENTED ;		return	-1 ;		} ;			position = sf_seek (sndfile, 0, SEEK_CUR) ; /* Get current position in file */	sf_seek (sndfile, 0, SEEK_SET) ;			/* Go to start of file. */		len = psf->sf.channels * 1024 ;		data = malloc (len * sizeof (double)) ;	readcount = len ;	while (readcount == len)	{	readcount = psf->read_double (psf, data, len, 0) ;		for (k = 0 ; k < len ; k++)		{	temp = data [k] ;			temp = temp < 0.0 ? -temp : temp ;			max  = temp > max ? temp : max ;			} ;		} ;	free (data) ;		sf_seek (sndfile, position, SEEK_SET) ;		/* Return to original position. */		return	max ;} /* sf_signal_max *//*------------------------------------------------------------------------------*/off_t	sf_seek	(SNDFILE *sndfile, off_t offset, int whence){	SF_PRIVATE 	*psf ;	off_t		realseek, position ;	VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;		if (! psf->sf.seekable)	{	psf->error = SFE_NOT_SEEKABLE ;		return	((off_t) -1) ;		} ;		if (psf->seek_func)		return	psf->seek_func (psf, offset, whence) ;			if (! (psf->blockwidth && psf->datalength && psf->dataoffset))	{	psf->error = SFE_BAD_SEEK ;		return	((off_t) -1) ;		} ;		switch (whence)	{	case SEEK_SET :				if (offset < 0 || offset * psf->blockwidth > psf->datalength)				{	psf->error = SFE_BAD_SEEK ;					return	((off_t) -1) ;					} ;				realseek = psf->dataoffset + offset * psf->blockwidth ;				fseek (psf->file, realseek, SEEK_SET) ;				position = ftell (psf->file) ;				break ;						case SEEK_CUR :				realseek = offset * psf->blockwidth ;				position = ftell (psf->file) - psf->dataoffset ;				if (position + realseek > psf->datalength || position + realseek < 0)				{	psf->error = SFE_BAD_SEEK ;					return	((off_t) -1) ;					} ;				fseek (psf->file, realseek, SEEK_CUR) ;				position = ftell (psf->file) ;				break ;						case SEEK_END :				if (offset > 0 || psf->sf.samples + offset < 0)				{	psf->error = SFE_BAD_SEEK ;					return	((off_t) -1) ;					} ;				realseek = (psf->sf.samples + offset) * psf->blockwidth + psf->dataoffset ;				fseek (psf->file, realseek, SEEK_SET) ;				position = ftell (psf->file) ;				break ;						default : 				psf->error = SFE_BAD_SEEK ;				return	((off_t) -1) ;		} ;	psf->current = (position - psf->dataoffset) / psf->blockwidth ;	return psf->current ;} /* sf_seek *//*------------------------------------------------------------------------------*/size_t		sf_read_raw		(SNDFILE *sndfile, void *ptr, size_t bytes){	SF_PRIVATE 	*psf ;	size_t		count ;	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->datalength)	{	memset (ptr, 0, bytes) ;		return 0 ;		} ;		if (bytes % (psf->sf.channels * psf->bytewidth))	{	psf->error = SFE_BAD_READ_ALIGN ;		return (size_t) -1 ;		} ;		count = fread (ptr, 1, bytes, psf->file) ;			if (count < bytes)		memset (((char*)ptr) + count, 0, bytes - count) ;	psf->current += count / psf->blockwidth ;		return count ;} /* sf_read_raw *//*------------------------------------------------------------------------------*/size_t	sf_read_short		(SNDFILE *sndfile, short *ptr, size_t len){	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 ;

⌨️ 快捷键说明

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