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

📄 wav.c

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 C
📖 第 1 页 / 共 3 页
字号:
					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;						psf->sf.pcmbitwidth	= wav_fmt->min.bitwidth ;				psf->bytewidth      = BITWIDTH2BYTES (wav_fmt->min.bitwidth) ;				break ;		case WAVE_FORMAT_ALAW :		case WAVE_FORMAT_MULAW :				if (wav_fmt->min.bytespersec / wav_fmt->min.blockalign != wav_fmt->min.samplerate)					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, wav_fmt->min.samplerate * wav_fmt->min.blockalign) ;				else					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;				psf->sf.pcmbitwidth	= 16 ;				psf->bytewidth      = 1 ;				if (structsize >= 18)					psf_sprintf (psf, "  Extra Bytes   : %d\n", wav_fmt->size20.extrabytes) ;				break ;		case WAVE_FORMAT_MS_ADPCM :				if (wav_fmt->msadpcm.bitwidth != 4)					return SFE_WAV_ADPCM_NOT4BIT ;				if (wav_fmt->msadpcm.channels < 1 || wav_fmt->msadpcm.channels > 2)					return SFE_WAV_ADPCM_CHANNELS ;				bytespersec = (wav_fmt->msadpcm.samplerate * wav_fmt->msadpcm.blockalign) / wav_fmt->msadpcm.samplesperblock ;				if (wav_fmt->min.bytespersec == bytespersec)					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;				else if (wav_fmt->min.bytespersec == (wav_fmt->msadpcm.samplerate / wav_fmt->msadpcm.samplesperblock) * wav_fmt->msadpcm.blockalign) 					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d (MS BUG!))\n", wav_fmt->min.bytespersec, bytespersec) ;				else					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;				psf->sf.pcmbitwidth = 16 ;				psf->bytewidth      = 2 ;				psf_sprintf (psf, "  Extra Bytes   : %d\n", wav_fmt->msadpcm.extrabytes) ;				psf_sprintf (psf, "  Samples/Block : %d\n", wav_fmt->msadpcm.samplesperblock) ;				if (wav_fmt->msadpcm.numcoeffs > sizeof (MS_ADPCM_WAV_FMT) / sizeof (int))				{	psf_sprintf (psf, "  No. of Coeffs : %d ****\n", wav_fmt->msadpcm.numcoeffs) ;					wav_fmt->msadpcm.numcoeffs = sizeof (MS_ADPCM_WAV_FMT) / sizeof (int) ;					}				else					psf_sprintf (psf, "  No. of Coeffs : %d\n", wav_fmt->msadpcm.numcoeffs) ;				psf_sprintf (psf, "    Coeff 1 : ") ;				for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)					psf_sprintf (psf, "%d ", wav_fmt->msadpcm.coeffs [k].coeff1) ;				psf_sprintf (psf, "\n    Coeff 2 : ") ;				for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)					psf_sprintf (psf, "%d ", wav_fmt->msadpcm.coeffs [k].coeff2) ;				psf_sprintf (psf, "\n") ;				break ;						case WAVE_FORMAT_IMA_ADPCM :				if (wav_fmt->ima.bitwidth != 4)					return SFE_WAV_ADPCM_NOT4BIT ;				if (wav_fmt->ima.channels < 1 || wav_fmt->ima.channels > 2)					return SFE_WAV_ADPCM_CHANNELS ;				bytespersec = (wav_fmt->ima.samplerate * wav_fmt->ima.blockalign) / wav_fmt->ima.samplesperblock ;				if (wav_fmt->ima.bytespersec != bytespersec)					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ima.bytespersec, bytespersec) ;				else					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->ima.bytespersec) ;				psf->sf.pcmbitwidth = 16 ;				psf->bytewidth      = 2 ;				psf_sprintf (psf, "  Extra Bytes   : %d\n", wav_fmt->ima.extrabytes) ;				psf_sprintf (psf, "  Samples/Block : %d\n", wav_fmt->ima.samplesperblock) ;				break ;						case WAVE_FORMAT_EXTENSIBLE :				if (wav_fmt->ext.bytespersec / wav_fmt->ext.blockalign != wav_fmt->ext.samplerate)					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ext.bytespersec, wav_fmt->ext.samplerate * wav_fmt->ext.blockalign) ;				else					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->ext.bytespersec) ;				psf_sprintf (psf, "  Valid Bits    : %d\n", wav_fmt->ext.validbits) ;				psf_sprintf (psf, "  Channel Mask  : 0x%X\n", wav_fmt->ext.channelmask) ;				psf_sprintf (psf, "  Subformat\n") ;				psf_sprintf (psf, "    esf_field1 : 0x%X\n", wav_fmt->ext.esf.esf_field1) ;				psf_sprintf (psf, "    esf_field2 : 0x%X\n", wav_fmt->ext.esf.esf_field2) ;				psf_sprintf (psf, "    esf_field3 : 0x%X\n", wav_fmt->ext.esf.esf_field3) ;				psf_sprintf (psf, "    esf_field4 : ") ;				for (k = 0 ; k < 8 ; k++)					psf_sprintf (psf, "0x%X ", wav_fmt->ext.esf.esf_field4 [k] & 0xFF) ;				psf_sprintf (psf, "\n") ;				psf->sf.pcmbitwidth = wav_fmt->ext.bitwidth ;				psf->bytewidth      = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ;				break ;		case WAVE_FORMAT_GSM610 :				if (wav_fmt->gsm610.channels != 1 || wav_fmt->gsm610.blockalign != 65)					return SFE_WAV_GSM610_FORMAT ;				if (wav_fmt->gsm610.samplesperblock != 320)					return SFE_WAV_GSM610_FORMAT ;				bytespersec = (wav_fmt->gsm610.samplerate * wav_fmt->gsm610.blockalign) / wav_fmt->gsm610.samplesperblock ;				if (wav_fmt->gsm610.bytespersec != bytespersec)					psf_sprintf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->gsm610.bytespersec, bytespersec) ;				else					psf_sprintf (psf, "  Bytes/sec     : %d\n", wav_fmt->gsm610.bytespersec) ;				psf->sf.pcmbitwidth = 16 ;				psf->bytewidth      = 2 ;				psf_sprintf (psf, "  Extra Bytes   : %d\n", wav_fmt->gsm610.extrabytes) ;				psf_sprintf (psf, "  Samples/Block : %d\n", wav_fmt->gsm610.samplesperblock) ;				break ;		default : break ;		} ;		psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;	return 0 ;} /* read_fmt_chunk */staticint write_header (SF_PRIVATE *psf, WAV_FMT *wav_fmt, unsigned int size, int do_fact){	FACT_CHUNK		fact_chunk ;	unsigned int dword, RIFFsize ;	RIFFsize   = psf->filelength - 2 * sizeof (dword) ;	dword = RIFF_MARKER ;	fwrite (&dword, sizeof (dword), 1, psf->file) ;	dword = H2LE_INT (RIFFsize) ;	fwrite (&dword, sizeof (dword), 1, psf->file) ;		dword = WAVE_MARKER ;	fwrite (&dword, sizeof (dword), 1, psf->file) ;	dword = fmt_MARKER ;	fwrite (&dword, sizeof (dword), 1, psf->file) ;		dword = H2LE_INT (size) ;	fwrite (&dword, sizeof (dword), 1, psf->file) ;	if (CPU_IS_BIG_ENDIAN)		h2le_wav_fmt (wav_fmt) ;		fwrite (wav_fmt, size, 1, psf->file) ;		if (do_fact)	{	dword = fact_MARKER ;		fwrite (&dword, sizeof (dword), 1, psf->file) ;		dword = H2LE_INT (sizeof (FACT_CHUNK)) ;		fwrite (&dword, sizeof (dword), 1, psf->file) ;		fact_chunk.samples = H2LE_INT (psf->sf.samples) ;		fwrite (&fact_chunk, sizeof (fact_chunk), 1, psf->file) ;		} ;	return 0 ;} /* write_header */static void	le2h_wav_fmt (WAV_FMT *fmt){	int		k ;	fmt->min.format      = ENDSWAP_SHORT (fmt->min.format) ;	fmt->min.channels    = ENDSWAP_SHORT (fmt->min.channels) ;	fmt->min.samplerate  = ENDSWAP_INT   (fmt->min.samplerate) ;	fmt->min.bytespersec = ENDSWAP_INT   (fmt->min.bytespersec) ;	fmt->min.blockalign  = ENDSWAP_SHORT (fmt->min.blockalign) ;	fmt->min.bitwidth    = ENDSWAP_SHORT (fmt->min.bitwidth) ;	switch (fmt->format)	{	case WAVE_FORMAT_MS_ADPCM :					fmt->msadpcm.extrabytes      = ENDSWAP_SHORT (fmt->msadpcm.extrabytes) ;				fmt->msadpcm.samplesperblock = ENDSWAP_SHORT (fmt->msadpcm.samplesperblock) ;				fmt->msadpcm.numcoeffs       = ENDSWAP_SHORT (fmt->msadpcm.numcoeffs) ;				for (k = 0 ; k < fmt->msadpcm.numcoeffs  ; k++)				{	fmt->msadpcm.coeffs [k].coeff1 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff1) ;					fmt->msadpcm.coeffs [k].coeff2 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff2) ;					} ;				break ;						case WAVE_FORMAT_IMA_ADPCM :					fmt->ima.extrabytes      = ENDSWAP_SHORT (fmt->ima.extrabytes) ;				fmt->ima.samplesperblock = ENDSWAP_SHORT (fmt->ima.samplesperblock) ;				break ;						case WAVE_FORMAT_ALAW :			case WAVE_FORMAT_MULAW :					fmt->size20.extrabytes = ENDSWAP_SHORT (fmt->size20.extrabytes) ;				fmt->size20.dummy      = ENDSWAP_SHORT (fmt->size20.dummy) ;				break ;						case	WAVE_FORMAT_GSM610 :				fmt->gsm610.extrabytes      = ENDSWAP_SHORT (fmt->gsm610.extrabytes) ;				fmt->gsm610.samplesperblock = ENDSWAP_SHORT (fmt->gsm610.samplesperblock) ;				break ;						default : break ;		} ;} /* le2h_wav_fmt */static void	h2le_wav_fmt (WAV_FMT *fmt){	int		k ;	switch (fmt->format)	{	case WAVE_FORMAT_MS_ADPCM :					for (k = 0 ; k < fmt->msadpcm.numcoeffs  ; k++)				{	fmt->msadpcm.coeffs [k].coeff1 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff1) ;					fmt->msadpcm.coeffs [k].coeff2 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff2) ;					} ;				fmt->msadpcm.numcoeffs       = ENDSWAP_SHORT (fmt->msadpcm.numcoeffs) ;				fmt->msadpcm.extrabytes      = ENDSWAP_SHORT (fmt->msadpcm.extrabytes) ;				fmt->msadpcm.samplesperblock = ENDSWAP_SHORT (fmt->msadpcm.samplesperblock) ;				break ;						case WAVE_FORMAT_IMA_ADPCM :					fmt->ima.extrabytes      = ENDSWAP_SHORT (fmt->ima.extrabytes) ;				fmt->ima.samplesperblock = ENDSWAP_SHORT (fmt->ima.samplesperblock) ;				break ;						case WAVE_FORMAT_ALAW :			case WAVE_FORMAT_MULAW :					fmt->size20.extrabytes = ENDSWAP_SHORT (fmt->size20.extrabytes) ;				fmt->size20.dummy      = ENDSWAP_SHORT (fmt->size20.dummy) ;				break ;						case	WAVE_FORMAT_GSM610 :				fmt->gsm610.extrabytes      = ENDSWAP_SHORT (fmt->gsm610.extrabytes) ;				fmt->gsm610.samplesperblock = ENDSWAP_SHORT (fmt->gsm610.samplesperblock) ;				break ;						default : break ;		} ;	fmt->min.format      = ENDSWAP_SHORT (fmt->min.format) ;	fmt->min.channels    = ENDSWAP_SHORT (fmt->min.channels) ;	fmt->min.samplerate  = ENDSWAP_INT   (fmt->min.samplerate) ;	fmt->min.bytespersec = ENDSWAP_INT   (fmt->min.bytespersec) ;	fmt->min.blockalign  = ENDSWAP_SHORT (fmt->min.blockalign) ;	fmt->min.bitwidth    = ENDSWAP_SHORT (fmt->min.bitwidth) ;} /* h2le_wav_fmt */staticconst char* wav_format_str (int k){	switch (k)	{	case WAVE_FORMAT_UNKNOWN :			return "WAVE_FORMAT_UNKNOWN" ;		case WAVE_FORMAT_PCM          :			return "WAVE_FORMAT_PCM         " ;		case WAVE_FORMAT_MS_ADPCM :			return "WAVE_FORMAT_MS_ADPCM" ;		case WAVE_FORMAT_IEEE_FLOAT :			return "WAVE_FORMAT_IEEE_FLOAT" ;		case WAVE_FORMAT_IBM_CVSD :			return "WAVE_FORMAT_IBM_CVSD" ;		case WAVE_FORMAT_ALAW :			return "WAVE_FORMAT_ALAW" ;		case WAVE_FORMAT_MULAW :			return "WAVE_FORMAT_MULAW" ;		case WAVE_FORMAT_OKI_ADPCM :			return "WAVE_FORMAT_OKI_ADPCM" ;		case WAVE_FORMAT_IMA_ADPCM :			return "WAVE_FORMAT_IMA_ADPCM" ;		case WAVE_FORMAT_MEDIASPACE_ADPCM :			return "WAVE_FORMAT_MEDIASPACE_ADPCM" ;		case WAVE_FORMAT_SIERRA_ADPCM :			return "WAVE_FORMAT_SIERRA_ADPCM" ;		case WAVE_FORMAT_G723_ADPCM :			return "WAVE_FORMAT_G723_ADPCM" ;		case WAVE_FORMAT_DIGISTD :			return "WAVE_FORMAT_DIGISTD" ;		case WAVE_FORMAT_DIGIFIX :			return "WAVE_FORMAT_DIGIFIX" ;		case WAVE_FORMAT_DIALOGIC_OKI_ADPCM :			return "WAVE_FORMAT_DIALOGIC_OKI_ADPCM" ;		case WAVE_FORMAT_MEDIAVISION_ADPCM :			return "WAVE_FORMAT_MEDIAVISION_ADPCM" ;		case WAVE_FORMAT_YAMAHA_ADPCM :			return "WAVE_FORMAT_YAMAHA_ADPCM" ;		case WAVE_FORMAT_SONARC :			return "WAVE_FORMAT_SONARC" ;		case WAVE_FORMAT_DSPGROUP_TRUESPEECH  :			return "WAVE_FORMAT_DSPGROUP_TRUESPEECH " ;		case WAVE_FORMAT_ECHOSC1 :			return "WAVE_FORMAT_ECHOSC1" ;		case WAVE_FORMAT_AUDIOFILE_AF18   :			return "WAVE_FORMAT_AUDIOFILE_AF18  " ;		case WAVE_FORMAT_APTX :			return "WAVE_FORMAT_APTX" ;		case WAVE_FORMAT_AUDIOFILE_AF10   :			return "WAVE_FORMAT_AUDIOFILE_AF10  " ;		case WAVE_FORMAT_DOLBY_AC2 :			return "WAVE_FORMAT_DOLBY_AC2" ;		case WAVE_FORMAT_GSM610 :			return "WAVE_FORMAT_GSM610" ;		case WAVE_FORMAT_MSNAUDIO :			return "WAVE_FORMAT_MSNAUDIO" ;		case WAVE_FORMAT_ANTEX_ADPCME :			return "WAVE_FORMAT_ANTEX_ADPCME" ;		case WAVE_FORMAT_CONTROL_RES_VQLPC :			return "WAVE_FORMAT_CONTROL_RES_VQLPC" ;		case WAVE_FORMAT_DIGIREAL :			return "WAVE_FORMAT_DIGIREAL" ;		case WAVE_FORMAT_DIGIADPCM :			return "WAVE_FORMAT_DIGIADPCM" ;		case WAVE_FORMAT_CONTROL_RES_CR10 :			return "WAVE_FORMAT_CONTROL_RES_CR10" ;		case WAVE_FORMAT_NMS_VBXADPCM :			return "WAVE_FORMAT_NMS_VBXADPCM" ;		case WAVE_FORMAT_ROCKWELL_ADPCM :			return "WAVE_FORMAT_ROCKWELL_ADPCM" ;		case WAVE_FORMAT_ROCKWELL_DIGITALK :			return "WAVE_FORMAT_ROCKWELL_DIGITALK" ;		case WAVE_FORMAT_G721_ADPCM :			return "WAVE_FORMAT_G721_ADPCM" ;		case WAVE_FORMAT_MPEG :			return "WAVE_FORMAT_MPEG" ;		case WAVE_FORMAT_MPEGLAYER3 :			return "WAVE_FORMAT_MPEGLAYER3" ;		case IBM_FORMAT_MULAW :			return "IBM_FORMAT_MULAW" ;		case IBM_FORMAT_ALAW :			return "IBM_FORMAT_ALAW" ;		case IBM_FORMAT_ADPCM :			return "IBM_FORMAT_ADPCM" ;		case WAVE_FORMAT_CREATIVE_ADPCM :			return "WAVE_FORMAT_CREATIVE_ADPCM" ;		case WAVE_FORMAT_FM_TOWNS_SND :			return "WAVE_FORMAT_FM_TOWNS_SND" ;		case WAVE_FORMAT_OLIGSM :			return "WAVE_FORMAT_OLIGSM" ;		case WAVE_FORMAT_OLIADPCM :			return "WAVE_FORMAT_OLIADPCM" ;		case WAVE_FORMAT_OLICELP :			return "WAVE_FORMAT_OLICELP" ;		case WAVE_FORMAT_OLISBC :			return "WAVE_FORMAT_OLISBC" ;		case WAVE_FORMAT_OLIOPR :			return "WAVE_FORMAT_OLIOPR" ;		case WAVE_FORMAT_EXTENSIBLE :			return "WAVE_FORMAT_EXTENSIBLE" ;		break ;		} ;	return "Unknown format" ;} /* wav_format_str */

⌨️ 快捷键说明

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