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

📄 common.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
📖 第 1 页 / 共 3 页
字号:
			psf->headend += psf_fread (psf->header + psf->headend, 1, position - (psf->headend - psf->headindex), psf) ;			psf->headindex = psf->headend ;			break ;		case SEEK_END :		default :			psf_log_printf (psf, "Bad whence param in header_seek().\n") ;			break ;		} ;	return ;} /* header_seek */static intheader_gets (SF_PRIVATE *psf, char *ptr, int bufsize){	int		k ;	for (k = 0 ; k < bufsize - 1 ; k++)	{	if (psf->headindex < psf->headend)		{	ptr [k] = psf->header [psf->headindex] ;			psf->headindex ++ ;			}		else		{	psf->headend += psf_fread (psf->header + psf->headend, 1, 1, psf) ;			ptr [k] = psf->header [psf->headindex] ;			psf->headindex = psf->headend ;			} ;		if (ptr [k] == '\n')			break ;		} ;	ptr [k] = 0 ;	return k ;} /* header_gets */intpsf_binheader_readf (SF_PRIVATE *psf, char const *format, ...){	va_list			argptr ;	sf_count_t		*countptr, countdata ;	unsigned char	*ucptr, sixteen_bytes [16] ;	unsigned int 	*intptr, intdata ;	unsigned short	*shortptr ;	char			*charptr ;	float			*floatptr ;	double			*doubleptr ;	char			c ;	int				byte_count = 0, count ;	if (! format)		return psf_ftell (psf) ;	va_start (argptr, format) ;	while ((c = *format++))	{	switch (c)		{	case 'e' : /* All conversions are now from LE to host. */					psf->rwf_endian = SF_ENDIAN_LITTLE ;					break ;			case 'E' : /* All conversions are now from BE to host. */					psf->rwf_endian = SF_ENDIAN_BIG ;					break ;			case 'm' :					intptr = va_arg (argptr, unsigned int*) ;					ucptr = (unsigned char*) intptr ;					byte_count += header_read (psf, ucptr, sizeof (int)) ;					*intptr = GET_MARKER (ucptr) ;					break ;			case 'h' :					intptr = va_arg (argptr, unsigned int*) ;					ucptr = (unsigned char*) intptr ;					byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;					{	int k ;						intdata = 0 ;						for (k = 0 ; k < 16 ; k++)							intdata ^= sixteen_bytes [k] << k ;						}					*intptr = intdata ;					break ;			case '1' :					charptr = va_arg (argptr, char*) ;					byte_count += header_read (psf, charptr, sizeof (char)) ;					break ;			case '2' :					shortptr = va_arg (argptr, unsigned short*) ;					ucptr = (unsigned char*) shortptr ;					byte_count += header_read (psf, ucptr, sizeof (short)) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						*shortptr = GET_BE_SHORT (ucptr) ;					else						*shortptr = GET_LE_SHORT (ucptr) ;					break ;			case '3' :					intptr = va_arg (argptr, unsigned int*) ;					byte_count += header_read (psf, sixteen_bytes, 3) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						*intptr = GET_BE_3BYTE (sixteen_bytes) ;					else						*intptr = GET_LE_3BYTE (sixteen_bytes) ;					break ;			case '4' :					intptr = va_arg (argptr, unsigned int*) ;					ucptr = (unsigned char*) intptr ;					byte_count += header_read (psf, ucptr, sizeof (int)) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						*intptr = GET_BE_INT (ucptr) ;					else						*intptr = GET_LE_INT (ucptr) ;					break ;			case '8' :					countptr = va_arg (argptr, sf_count_t*) ;					byte_count += header_read (psf, sixteen_bytes, 8) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						countdata = GET_BE_8BYTE (sixteen_bytes) ;					else						countdata = GET_LE_8BYTE (sixteen_bytes) ;					*countptr = countdata ;					break ;			case 'f' : /* Float conversion */					floatptr = va_arg (argptr, float *) ;					*floatptr = 0.0 ;					byte_count += header_read (psf, floatptr, sizeof (float)) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						*floatptr = float32_be_read ((unsigned char*) floatptr) ;					else						*floatptr = float32_le_read ((unsigned char*) floatptr) ;					break ;			case 'd' : /* double conversion */					doubleptr = va_arg (argptr, double *) ;					*doubleptr = 0.0 ;					byte_count += header_read (psf, doubleptr, sizeof (double)) ;					if (psf->rwf_endian == SF_ENDIAN_BIG)						*doubleptr = double64_be_read ((unsigned char*) doubleptr) ;					else						*doubleptr = double64_le_read ((unsigned char*) doubleptr) ;					break ;			case 's' :					psf_log_printf (psf, "Format conversion 's' not implemented yet.\n") ;					/*					strptr = va_arg (argptr, char *) ;					size   = strlen (strptr) + 1 ;					size  += (size & 1) ;					longdata = H2LE_INT (size) ;					get_int (psf, longdata) ;					memcpy (&(psf->header [psf->headindex]), strptr, size) ;					psf->headindex += size ;					*/					break ;			case 'b' :					charptr = va_arg (argptr, char*) ;					count = va_arg (argptr, int) ;					if (count > 0)						byte_count += header_read (psf, charptr, count) ;					break ;			case 'G' :					charptr = va_arg (argptr, char*) ;					count = va_arg (argptr, int) ;					if (count > 0)						byte_count += header_gets (psf, charptr, count) ;					break ;			case 'z' :					psf_log_printf (psf, "Format conversion 'z' not implemented yet.\n") ;					/*					size    = va_arg (argptr, size_t) ;					while (size)					{	psf->header [psf->headindex] = 0 ;						psf->headindex ++ ;						size -- ;						} ;					*/					break ;			case 'p' :					/* Get the seek position first. */					count = va_arg (argptr, int) ;					header_seek (psf, count, SEEK_SET) ;					byte_count = count ;					break ;			case 'j' :					/* Get the seek position first. */					count = va_arg (argptr, int) ;					header_seek (psf, count, SEEK_CUR) ;					byte_count += count ;					break ;			default :				psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;				psf->error = SFE_INTERNAL ;				break ;			} ;		} ;	va_end (argptr) ;	return byte_count ;} /* psf_binheader_readf *//*-----------------------------------------------------------------------------------------------*/sf_count_tpsf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start){	sf_count_t position, retval ;	if (! (psf->blockwidth && psf->dataoffset >= 0))	{	psf->error = SFE_BAD_SEEK ;		return	((sf_count_t) -1) ;		} ;	if (! psf->sf.seekable)	{	psf->error = SFE_NOT_SEEKABLE ;		return	((sf_count_t) -1) ;		} ;	position = psf->dataoffset + psf->blockwidth * samples_from_start ;	if ((retval = psf_fseek (psf, position, SEEK_SET)) != position)	{	psf->error = SFE_SEEK_FAILED ;		return ((sf_count_t) -1) ;		} ;	mode = mode ;	return samples_from_start ;} /* psf_default_seek *//*-----------------------------------------------------------------------------------------------*/voidpsf_hexdump (void *ptr, int len){	char	ascii [17], *data ;	int		k, m ;	if ((data = ptr) == NULL)		return ;	if (len <= 0)		return ;	puts ("") ;	for (k = 0 ; k < len ; k += 16)	{	memset (ascii, ' ', sizeof (ascii)) ;		printf ("%08X: ", k) ;		for (m = 0 ; m < 16 && k + m < len ; m++)		{	printf (m == 8 ? " %02X " : "%02X ", data [k + m] & 0xFF) ;			ascii [m] = isprint (data [k + m]) ? data [k + m] : '.' ;			} ;		if (m <= 8) printf (" ") ;		for ( ; m < 16 ; m++) printf ("   ") ;		ascii [16] = 0 ;		printf (" %s\n", ascii) ;		} ;	puts ("") ;} /* psf_hexdump */voidpsf_log_SF_INFO (SF_PRIVATE *psf){	psf_log_printf (psf, "---------------------------------\n") ;	psf_log_printf (psf, " Sample rate :   %d\n", psf->sf.samplerate) ;	psf_log_printf (psf, " Frames      :   %C\n", psf->sf.frames) ;	psf_log_printf (psf, " Channels    :   %d\n", psf->sf.channels) ;	psf_log_printf (psf, " Format      :   0x%X\n", psf->sf.format) ;	psf_log_printf (psf, " Sections    :   %d\n", psf->sf.sections) ;	psf_log_printf (psf, " Seekable    :   %s\n", psf->sf.seekable ? "TRUE" : "FALSE") ;	psf_log_printf (psf, "---------------------------------\n") ;} /* psf_dump_SFINFO *//*========================================================================================*/void*psf_memset (void *s, int c, sf_count_t len){	char	*ptr ;	int 	setcount ;	ptr = (char *) s ;	while (len > 0)	{	setcount = (len > 0x10000000) ? 0x10000000 : (int) len ;		memset (ptr, c, setcount) ;		ptr += setcount ;		len -= setcount ;		} ;	return s ;} /* psf_memset */void psf_get_date_str (char *str, int maxlen){	time_t		current ;	struct tm	timedata, *tmptr ;	time (&current) ;#if defined (HAVE_GMTIME_R)	/* If the re-entrant version is available, use it. */	tmptr = gmtime_r (&current, &timedata) ;#elif defined (HAVE_GMTIME)	/* Otherwise use the standard one and copy the data to local storage. */	tmptr = gmtime (&current) ;	memcpy (&timedata, tmptr, sizeof (timedata)) ;#else	tmptr = NULL ;#endif	if (tmptr)		LSF_SNPRINTF (str, maxlen, "%4d-%02d-%02d %02d:%02d:%02d UTC",			1900 + timedata.tm_year, timedata.tm_mon, timedata.tm_mday,			timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;	else		LSF_SNPRINTF (str, maxlen, "Unknown date") ;	return ;} /* psf_get_date_str */intsubformat_to_bytewidth (int format){	switch (format)	{	case SF_FORMAT_PCM_U8 :		case SF_FORMAT_PCM_S8 :				return 1 ;		case SF_FORMAT_PCM_16 :				return 2 ;		case SF_FORMAT_PCM_24 :				return 3 ;		case SF_FORMAT_PCM_32 :		case SF_FORMAT_FLOAT :				return 4 ;		case SF_FORMAT_DOUBLE :				return 8 ;		} ;	return 0 ;} /* subformat_to_bytewidth */ints_bitwidth_to_subformat (int bits){	static int array [] =	{	SF_FORMAT_PCM_S8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32		} ;	if (bits < 8 || bits > 32)		return 0 ;	return array [((bits + 7) / 8) - 1] ;} /* bitwidth_to_subformat */intu_bitwidth_to_subformat (int bits){	static int array [] =	{	SF_FORMAT_PCM_U8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32		} ;	if (bits < 8 || bits > 32)		return 0 ;	return array [((bits + 7) / 8) - 1] ;} /* bitwidth_to_subformat */#endif /* PSF_LOG_PRINTF_ONLY *//*** Do not edit or modify anything in this comment block.** The arch-tag line is a file identity tag for the GNU Arch** revision control system.**** arch-tag: 33e9795e-f717-461a-9feb-65d083a56395*/

⌨️ 快捷键说明

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