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

📄 write_read_test.c

📁 SIP 1.5.0源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
	{	printf ("Mono : sf_open_read failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sfinfo.format != (typemajor | typeminor))	{	printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;		exit (1) ;		} ;		if (sfinfo.samples != items)	{	printf ("Mono : Incorrect number of samples in file. (%d => %d)\n", items, sfinfo.samples) ;		exit (1) ;		} ;		if (sfinfo.channels != 1)	{	printf ("Mono : Incorrect number of channels in file.\n") ;		exit (1) ;		} ;	if (sfinfo.pcmbitwidth != 32)	{	printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;		exit (1) ;		} ;	check_log_buffer (file) ;	if ((k = sf_read_int (file, data, items)) != items)	{	printf ("Mono : short read (%d).\n", k) ;		exit (1) ;		} ;	for (sign = 1, k = 0 ; k < items ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Mono : Incorrect sample (#%d : %d => %d).\n", k, (k % 2) ? 1 : -1, data [k]) ;			exit (1) ;			} ;	/* Seek to start of file. */	if ((k = sf_seek (file, 0, SEEK_SET) != 0))	{	printf ("Mono : sf_seek (file, 0, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_int (file, data, 4) ;	for (k = 0 ; k < 4 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Mono : Incorrect sample A (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};		/* Seek to offset from start of file. */	if ((k = sf_seek (file, 10, SEEK_SET) != 10))	{	printf ("Mono : sf_seek (file, 10, SEEK_SET) failed. XXXXX\n") ;		exit (1) ;		} ;	sf_read_int (file, data + 10, 4) ;	for (k = 10 ; k < 14 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Mono : Incorrect sample B (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	/* Seek to offset from current position. */	if ((k = sf_seek (file, 6, SEEK_CUR) != 20))	{	printf ("Mono : sf_seek (file, 7, SEEK_CUR) failed.\n") ;		exit (1) ;		} ;	sf_read_int (file, data + 20, 4) ;	for (k = 20 ; k < 24 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Mono : Incorrect sample C (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	/* Seek to offset from end of file. */	if ((k = sf_seek (file, -(sfinfo.samples - 10), SEEK_END) != 10))	{	printf ("Mono : sf_seek (file, -(sfinfo.samples - 10), SEEK_END) failed (%d).\n", k) ;		exit (1) ;		} ;	sf_read_int (file, data + 10, 4) ;	for (k = 10 ; k < 14 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Mono : Incorrect sample D (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	sf_close (file) ;	/* Now test Stereo. */	if (typemajor == SF_FORMAT_SVX)	{	printf ("ok\n") ;		return ;		} ;	items = BUFFER_SIZE / sizeof (int) ;	data = (int*) test_buffer ;	for (sign = 1, k = 0 ; k < items ; k++)		data [k] = k * 200000 * ((k % 2) ? 1 : -1) ;			sfinfo.samplerate  = 44100 ;	sfinfo.samples     = items ;	sfinfo.channels    = 2 ;	sfinfo.pcmbitwidth = 32 ;	sfinfo.format 	   = (typemajor | typeminor) ;		frames = items / sfinfo.channels ;	if (! (file = sf_open_write (filename, &sfinfo)))	{	printf ("Stereo : sf_open_write failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sf_writef_int (file, data, frames) != frames)	{	printf ("Stereo : sf_writef_int failed with error : ") ;		sf_perror (file) ;		exit (1) ;		} ;	sf_close (file) ;		memset (data, 0, items * sizeof (short)) ;	if (typemajor != SF_FORMAT_RAW)		memset (&sfinfo, 0, sizeof (sfinfo)) ;		if (! (file = sf_open_read (filename, &sfinfo)))	{	printf ("Stereo : sf_open_read failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sfinfo.format != (typemajor | typeminor))	{	printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;		exit (1) ;		} ;		if (sfinfo.samples != frames)	{	printf ("Stereo : Incorrect number of samples in file. (%d => %d)\n", frames, sfinfo.samples) ;		exit (1) ;		} ;		if (sfinfo.channels != 2)	{	printf ("Stereo : Incorrect number of channels in file.\n") ;		exit (1) ;		} ;	if (sfinfo.pcmbitwidth != 32)	{	printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;		exit (1) ;		} ;	check_log_buffer (file) ;	if ((k = sf_readf_int (file, data, frames)) != frames)	{	printf ("Stereo : short read (%d).\n", k) ;		exit (1) ;		} ;	for (sign = 1, k = 0 ; k < items ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Stereo : Incorrect sample (#%d : %d => %d).\n", k, (k % 2) ? 1 : -1, data [k]) ;			exit (1) ;			} ;	/* Seek to start of file. */	if ((k = sf_seek (file, 0, SEEK_SET) != 0))	{	printf ("Stereo : sf_seek (file, 0, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_int (file, data, 4) ;	for (k = 0 ; k < 4 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Stereo : Incorrect sample A (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};		/* Seek to offset from start of file. */	if ((k = sf_seek (file, 10, SEEK_SET) != 10))	{	printf ("Stereo : sf_seek (file, 10, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_int (file, data + 10, 4) ;	for (k = 20 ; k < 24 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Stereo : Incorrect sample B (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	/* Seek to offset from current position. */	if ((k = sf_seek (file, 8, SEEK_CUR)) != 20)	{	printf ("Stereo : sf_seek (file, 8, SEEK_CUR) failed. (20 -> %d)\n", k) ;		exit (1) ;		} ;	sf_read_int (file, data + 40, 4) ;	for (k = 40 ; k < 44 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Stereo : Incorrect sample C (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	/* Seek to offset from end of file. */	if ((k = sf_seek (file, -(sfinfo.samples - 10), SEEK_END) != 10))	{	printf ("Stereo : sf_seek (file, -(sfinfo.samples - 10), SEEK_END) failed (%d).\n", k) ;		exit (1) ;		} ;	sf_read_int (file, data + 20, 4) ;	for (k = 20 ; k < 24 ; k++)		if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))		{	printf ("Stereo : Incorrect sample D (#%d : %d => %d).\n", k, k * 200000 * ((k % 2) ? 1 : -1), data [k]) ;			exit (1) ;			};	sf_close (file) ;	printf ("ok\n") ;} /* pcm_test_int */static void	pcm_float_test (char *str, char *filename, int	typemajor){	SNDFILE			*file ;	SF_INFO			sfinfo ;	unsigned int	k, items, frames ;	int				sign ;	double			*data, error ;	printf ("    pcm_float_test : %s ... ", str) ;	items = BUFFER_SIZE / sizeof (double) ;	data = (double*) test_buffer ;	for (sign = 1, k = 0 ; k < items ; k++)		data [k] = ((double) k) / 100.0 * (sign *= -1) ;			sfinfo.samplerate  = 44100 ;	sfinfo.samples     = items ;	sfinfo.channels    = 1 ;	sfinfo.pcmbitwidth = 32 ;	sfinfo.format 	   = (typemajor | SF_FORMAT_FLOAT) ;	if (! (file = sf_open_write (filename, &sfinfo)))	{	printf ("Mono : sf_open_write failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sf_write_double (file, data, items, 0) != items)	{	printf ("Mono : sf_write_int failed with error : ") ;		sf_perror (file) ;		exit (1) ;		} ;	sf_close (file) ;		memset (data, 0, items * sizeof (double)) ;	memset (&sfinfo, 0, sizeof (sfinfo)) ;		if (! (file = sf_open_read (filename, &sfinfo)))	{	printf ("Mono : sf_open_read failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sfinfo.format != (typemajor | SF_FORMAT_FLOAT))	{	printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | SF_FORMAT_FLOAT), sfinfo.format) ;		exit (1) ;		} ;		if (sfinfo.samples != items)	{	printf ("Mono : Incorrect number of samples in file. (%d => %d)\n", items, sfinfo.samples) ;		exit (1) ;		} ;		if (sfinfo.channels != 1)	{	printf ("Mono : Incorrect number of channels in file.\n") ;		exit (1) ;		} ;	if (sfinfo.pcmbitwidth != 32)	{	printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;		exit (1) ;		} ;	check_log_buffer (file) ;	if ((k = sf_read_double (file, data, items, 0)) != items)	{	printf ("Mono : short read (%d).\n", k) ;		exit (1) ;		} ;	for (sign = 1, k = 0 ; k < items ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Mono : Incorrect sample (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			} ;		} ;	/* Seek to start of file. */	if ((k = sf_seek (file, 0, SEEK_SET) != 0))	{	printf ("Mono : sf_seek (file, 0, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_double (file, data, 4, 0) ;	for (k = 0 ; k < 4 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Mono : Incorrect sample A (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		};			/* Seek to offset from start of file. */	if ((k = sf_seek (file, 10, SEEK_SET) != 10))	{	printf ("Mono : sf_seek (file, 10, SEEK_SET) failed. XXXXX\n") ;		exit (1) ;		} ;	sf_read_double (file, data + 10, 4, 0) ;	for (k = 10 ; k < 14 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Mono : Incorrect sample B (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			/* Seek to offset from current position. */	if ((k = sf_seek (file, 6, SEEK_CUR) != 20))	{	printf ("Mono : sf_seek (file, 7, SEEK_CUR) failed.\n") ;		exit (1) ;		} ;	sf_read_double (file, data + 20, 4, 0) ;	for (k = 20 ; k < 24 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Mono : Incorrect sample C (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		};			/* Seek to offset from end of file. */	if ((k = sf_seek (file, -(sfinfo.samples - 10), SEEK_END) != 10))	{	printf ("Mono : sf_seek (file, -(sfinfo.samples - 10), SEEK_END) failed (%d).\n", k) ;		exit (1) ;		} ;	sf_read_double (file, data + 10, 4, 0) ;	for (k = 10 ; k < 14 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Mono : Incorrect sample D (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			sf_close (file) ;	/* Now test Stereo. */	if (typemajor == SF_FORMAT_SVX) /* SVX is mono only */	{	printf ("ok\n") ;		return ;		} ;	items = BUFFER_SIZE / sizeof (double) ;	data = (double*) test_buffer ;	for (sign = 1, k = 0 ; k < items ; k++)		data [k] = ((double) k) / 100.0 * (sign *= -1) ;			sfinfo.samplerate = 44100 ;	sfinfo.samples    = items ;	sfinfo.channels   = 2 ;	sfinfo.pcmbitwidth   = 32 ;	sfinfo.format 	  = (typemajor | SF_FORMAT_FLOAT) ;		frames = items / sfinfo.channels ;	if (! (file = sf_open_write (filename, &sfinfo)))	{	printf ("Stereo : sf_open_write failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sf_writef_double (file, data, frames, 0) != frames)	{	printf ("Stereo : sf_writef_int failed with error : ") ;		sf_perror (file) ;		exit (1) ;		} ;	sf_close (file) ;		memset (data, 0, items * sizeof (double)) ;	memset (&sfinfo, 0, sizeof (sfinfo)) ;		if (! (file = sf_open_read (filename, &sfinfo)))	{	printf ("Stereo : sf_open_read failed with error : ") ;		sf_perror (NULL) ;		exit (1) ;		} ;		if (sfinfo.format != (typemajor | SF_FORMAT_FLOAT))	{	printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | SF_FORMAT_FLOAT), sfinfo.format) ;		exit (1) ;		} ;		if (sfinfo.samples != frames)	{	printf ("Stereo : Incorrect number of samples in file. (%d => %d)\n", frames, sfinfo.samples) ;		exit (1) ;		} ;		if (sfinfo.channels != 2)	{	printf ("Stereo : Incorrect number of channels in file.\n") ;		exit (1) ;		} ;	if (sfinfo.pcmbitwidth != 32)	{	printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;		exit (1) ;		} ;	check_log_buffer (file) ;	if ((k = sf_readf_double (file, data, frames, 0)) != frames)	{	printf ("Stereo : short read (%d).\n", k) ;		exit (1) ;		} ;	for (sign = 1, k = 0 ; k < items ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Stereo : Incorrect sample (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			} ;		} ;	/* Seek to start of file. */	if ((k = sf_seek (file, 0, SEEK_SET) != 0))	{	printf ("Stereo : sf_seek (file, 0, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_double (file, data, 4, 0) ;	for (k = 0 ; k < 4 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Stereo : Incorrect sample A (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			/* Seek to offset from start of file. */	if ((k = sf_seek (file, 10, SEEK_SET) != 10))	{	printf ("Stereo : sf_seek (file, 10, SEEK_SET) failed.\n") ;		exit (1) ;		} ;	sf_read_double (file, data + 10, 4, 0) ;	for (k = 20 ; k < 24 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Stereo : Incorrect sample B (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			/* Seek to offset from current position. */	if ((k = sf_seek (file, 8, SEEK_CUR)) != 20)	{	printf ("Stereo : sf_seek (file, 8, SEEK_CUR) failed. (20 -> %d)\n", k) ;		exit (1) ;		} ;	sf_read_double (file, data + 40, 4, 0) ;	for (k = 40 ; k < 44 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Stereo : Incorrect sample C (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			/* Seek to offset from end of file. */	if ((k = sf_seek (file, -(sfinfo.samples - 10), SEEK_END) != 10))	{	printf ("Stereo : sf_seek (file, -(sfinfo.samples - 10), SEEK_END) failed (%d).\n", k) ;		exit (1) ;		} ;	sf_read_double (file, data + 20, 4, 0) ;	for (k = 20 ; k < 24 ; k++)	{	error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;		if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)		{	printf ("Stereo : Incorrect sample D (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;			exit (1) ;			};		} ;			sf_close (file) ;	printf ("ok\n") ;} /* pcm_float_test */

⌨️ 快捷键说明

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