📄 read_seek_test.c
字号:
sf_close (file) ; printf ("ok\n") ;} /* double_test */staticvoid int_test (char *filename, int length){ int count, k ; SNDFILE *file ; SF_INFO sfinfo ; int *readdata ; printf (" int_test (%s) ... ", filename) ; if (! (file = sf_open_read (filename, &sfinfo))) { printf ("Could not open file '%s' for read.\n", filename) ; sf_perror (NULL) ; exit (1) ; } ; if (sfinfo.samples != length) { printf ("Expecting %d samples in file, found %d.\n", length, sfinfo.samples) ; exit (1) ; } ; readdata = (int*) malloc (sfinfo.samples * sizeof (int)) ; if ((count = sf_read_int (file, readdata, sfinfo.samples)) != sfinfo.samples) { printf ("sf_read_int failed (%d items read).\n", count) ; exit (1) ; } ; for (k = 0 ; k < sfinfo.samples ; k++) if (readdata [k] != (int) (k)) { printf ("Incorrect sample (#%d => %d).\n", k, readdata [k]) ; exit (1) ; } ; /* Check seek from start of file. */ k = sf_seek (file, 1, SEEK_SET) ; sf_read_int (file, readdata, 1) ; if (readdata [0] != 1 || k != 1) { printf ("sf_seek (SEEK_SET) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check seek forward from current position. */ k = sf_seek (file, 2, SEEK_CUR) ; sf_read_int (file, readdata, 1) ; if (readdata [0] != 4 || k != 4) { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check seek backward from current position. */ k = sf_seek (file, -2, SEEK_CUR) ; sf_read_int (file, readdata, 1) ; if (readdata [0] != 3 || k != 3) { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check that read past end of file returns number of items. */ if ((k = sf_read_int (file, readdata, sfinfo.samples)) != 12) { printf ("Return value from short sf_read_XXXX incorrect (%d).\n", k) ; exit (1) ; } ; /* Check seek backward from end. */ k = sf_seek (file, -14, SEEK_END) ; sf_read_int (file, readdata, 1) ; if (readdata [0] != 2 || k != 2) { printf ("sf_seek (SEEK_END) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check multiple reads. */ k = sf_seek (file, 0, SEEK_SET) ; count = 0 ; while ((k = sf_read_int (file, readdata, 3))) count += k ; if (count != sfinfo.samples) { printf ("failed multiple read test (%d, %d).\n", count, sfinfo.samples) ; exit (1) ; } ; free (readdata) ; sf_close (file) ; printf ("ok\n") ;} /* int_test */staticvoid short_test (char *filename, int length){ int count, k ; SNDFILE *file ; SF_INFO sfinfo ; short *readdata ; printf (" short_test (%s) ... ", filename) ; if (! (file = sf_open_read (filename, &sfinfo))) { printf ("Could not open file '%s' for read.\n", filename) ; sf_perror (NULL) ; exit (1) ; } ; if (sfinfo.samples != length) { printf ("Expecting %d samples in file, found %d.\n", length, sfinfo.samples) ; exit (1) ; } ; readdata = (short*) malloc (sfinfo.samples * sizeof (short)) ; if ((count = sf_read_short (file, readdata, sfinfo.samples)) != sfinfo.samples) { printf ("sf_read_short failed (%d items read).\n", count) ; exit (1) ; } ; for (k = 0 ; k < sfinfo.samples ; k++) if (readdata [k] != (short) (k)) { printf ("Incorrect sample (#%d => %d).\n", k, readdata [k]) ; exit (1) ; } ; /* Check seek from start of file. */ k = sf_seek (file, 1, SEEK_SET) ; sf_read_short (file, readdata, 1) ; if (readdata [0] != 1 || k != 1) { printf ("sf_seek (SEEK_SET) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check seek forward from current position. */ k = sf_seek (file, 2, SEEK_CUR) ; sf_read_short (file, readdata, 1) ; if (readdata [0] != 4 || k != 4) { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check seek backward from current position. */ k = sf_seek (file, -2, SEEK_CUR) ; sf_read_short (file, readdata, 1) ; if (readdata [0] != 3 || k != 3) { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check that read past end of file returns number of items. */ if ((k = sf_read_short (file, readdata, sfinfo.samples)) != 12) { printf ("Return value from short sf_read_XXXX incorrect (%d).\n", k) ; exit (1) ; } ; /* Check seek backward from end. */ k = sf_seek (file, -14, SEEK_END) ; sf_read_short (file, readdata, 1) ; if (readdata [0] != 2 || k != 2) { printf ("sf_seek (SEEK_END) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ; exit (1) ; } ; /* Check multiple reads. */ k = sf_seek (file, 0, SEEK_SET) ; count = 0 ; while ((k = sf_read_short (file, readdata, 3))) count += k ; if (count != sfinfo.samples) { printf ("failed multiple read test (%d, %d).\n", count, sfinfo.samples) ; exit (1) ; } ; free (readdata) ; sf_close (file) ; printf ("ok\n") ;} /* short_test */int main (int argc, char *argv []){ char *filename ; int bDoAll = 0 ; int nTests = 0 ; if (argc != 2) { printf ("Usage : %s <test>\n", argv [0]) ; printf (" Where <test> is one of the following:\n") ; printf (" wav - test WAV file functions (little endian)\n") ; printf (" aiff - test AIFF file functions (big endian)\n") ; printf (" au - test AU file functions (big endian)\n") ; /* ** printf (" paf - test PAF file functions (little endian)\n") ; ** printf (" svx - test SVX file functions (big endian)\n") ; ** printf (" nist - test NIST file functions (little endian)\n") ; */ printf (" all - perform all tests\n") ; exit (1) ; } ; bDoAll = !strcmp (argv [1], "all") ; if (bDoAll || ! strcmp (argv [1], "wav")) { filename = "wav_pcm8.wav" ; write_file (filename, wav_pcm8, sizeof (wav_pcm8)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "wav_pcm16.wav" ; write_file (filename, wav_pcm16, sizeof (wav_pcm16)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "wav_pcm24.wav" ; write_file (filename, wav_pcm24, sizeof (wav_pcm24)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "wav_pcm32.wav" ; write_file (filename, wav_pcm32, sizeof (wav_pcm32)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "wav_ieee.wav" ; write_file (filename, wav_ieee, sizeof (wav_ieee)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; nTests++ ; } ; if (bDoAll || ! strcmp (argv [1], "aiff")) { filename = "aiff_pcm8.aiff" ; write_file (filename, aiff_pcm8, sizeof (aiff_pcm8)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "aiff_pcm16.aiff" ; write_file (filename, aiff_pcm16, sizeof (aiff_pcm16)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "aiff_pcm24.aiff" ; write_file (filename, aiff_pcm24, sizeof (aiff_pcm24)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "aiff_pcm32.aiff" ; write_file (filename, aiff_pcm32, sizeof (aiff_pcm32)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; nTests++ ; } ; if (bDoAll || ! strcmp (argv [1], "au")) { filename = "au_pcm8.au" ; write_file (filename, au_pcm8, sizeof (au_pcm8)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "au_pcm16.au" ; write_file (filename, au_pcm16, sizeof (au_pcm16)) ; short_test (filename, 16) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "au_pcm24.au" ; write_file (filename, au_pcm24, sizeof (au_pcm24)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; filename = "au_pcm32.au" ; write_file (filename, au_pcm32, sizeof (au_pcm32)) ; int_test (filename, 16) ; double_test (filename, 16) ; unlink (filename) ; nTests++ ; } ; if (nTests == 0) { printf ("************************************\n") ; printf ("* No '%s' test defined.\n", argv [1]) ; printf ("************************************\n") ; return 1 ; } return 0;} /* main *//*============================================================================================ * Here are the test functions. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -