📄 write_read_test.c
字号:
{ 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 + -