X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/e775f23a10c4ba37fc1a762299f52cd0d71593b7..f1f94803668061f90a5ce88bf06ee72bba8e41a5:/interpretor/lib/src/libsndfile-1.0.25/tests/multi_file_test.c diff --git a/interpretor/lib/src/libsndfile-1.0.25/tests/multi_file_test.c b/interpretor/lib/src/libsndfile-1.0.25/tests/multi_file_test.c new file mode 100644 index 0000000..041f398 --- /dev/null +++ b/interpretor/lib/src/libsndfile-1.0.25/tests/multi_file_test.c @@ -0,0 +1,237 @@ +/* +** Copyright (C) 1999-2011 Erik de Castro Lopo +** +** This program is free software; you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation; either version 2 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "sfconfig.h" + +#include +#include + +#if HAVE_UNISTD_H +#include +#endif + +#if (HAVE_DECL_S_IRGRP == 0) +#include +#endif + +#include +#include +#include +#include +#include + +#include + +#include "utils.h" + +#define DATA_LENGTH (512) + +static void write_file_at_end (int fd, int filetype, int channels, int file_num) ; + +static void multi_file_test (const char *filename, int *formats, int format_count) ; + +static short data [DATA_LENGTH] ; + +static int wav_formats [] = +{ SF_FORMAT_WAV | SF_FORMAT_PCM_16, + SF_FORMAT_WAV | SF_FORMAT_PCM_24, + SF_FORMAT_WAV | SF_FORMAT_ULAW, + SF_FORMAT_WAV | SF_FORMAT_ALAW, + /* Lite remove start */ + SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, + SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, + /* Lite remove end */ + /*-SF_FORMAT_WAV | SF_FORMAT_GSM610 Doesn't work yet. -*/ +} ; + +static int aiff_formats [] = +{ SF_FORMAT_AIFF | SF_FORMAT_PCM_16, + SF_FORMAT_AIFF | SF_FORMAT_PCM_24, + SF_FORMAT_AIFF | SF_FORMAT_ULAW, + SF_FORMAT_AIFF | SF_FORMAT_ALAW +} ; + +static int au_formats [] = +{ SF_FORMAT_AU | SF_FORMAT_PCM_16, + SF_FORMAT_AU | SF_FORMAT_PCM_24, + SF_FORMAT_AU | SF_FORMAT_ULAW, + SF_FORMAT_AU | SF_FORMAT_ALAW +} ; + +static int verbose = SF_FALSE ; + +int +main (int argc, char **argv) +{ int do_all = 0 ; + int test_count = 0 ; + + if (argc == 3 && strcmp (argv [2], "-v") == 0) + { verbose = SF_TRUE ; + argc -- ; + } ; + + if (argc != 2) + { printf ("Usage : %s \n", argv [0]) ; + printf (" Where 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\n") ; +#if 0 + printf (" svx - test 8SVX/16SV file functions\n") ; + printf (" nist - test NIST Sphere file functions\n") ; + printf (" ircam - test IRCAM file functions\n") ; + printf (" voc - Create Voice file functions\n") ; + printf (" w64 - Sonic Foundry's W64 file functions\n") ; +#endif + printf (" all - perform all tests\n") ; + exit (1) ; + } ; + + do_all = !strcmp (argv [1], "all") ; + + if (do_all || ! strcmp (argv [1], "wav")) + { multi_file_test ("multi_wav.dat", wav_formats, ARRAY_LEN (wav_formats)) ; + test_count++ ; + } ; + + if (do_all || ! strcmp (argv [1], "aiff")) + { multi_file_test ("multi_aiff.dat", aiff_formats, ARRAY_LEN (aiff_formats)) ; + test_count++ ; + } ; + + if (do_all || ! strcmp (argv [1], "au")) + { multi_file_test ("multi_au.dat", au_formats, ARRAY_LEN (au_formats)) ; + test_count++ ; + } ; + + return 0 ; +} /* main */ + +/*====================================================================================== +*/ + +static void +multi_file_test (const char *filename, int *formats, int format_count) +{ SNDFILE *sndfile ; + SF_INFO sfinfo ; + SF_EMBED_FILE_INFO embed_info ; + sf_count_t filelen ; + int fd, k, file_count = 0 ; + + print_test_name ("multi_file_test", filename) ; + + unlink (filename) ; + + if ((fd = open (filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) < 0) + { printf ("\n\nLine %d: open failed : %s\n", __LINE__, strerror (errno)) ; + exit (1) ; + } ; + + k = write (fd, "1234", 4) ; + + for (k = 0 ; k < format_count ; k++) + write_file_at_end (fd, formats [k], 2, k) ; + + filelen = file_length_fd (fd) ; + + embed_info.offset = 4 ; + embed_info.length = 0 ; + + + for (file_count = 1 ; embed_info.offset + embed_info.length < filelen ; file_count ++) + { + if (verbose) + { puts ("\n------------------------------------") ; + printf ("This offset : %ld\n", SF_COUNT_TO_LONG (embed_info.offset + embed_info.length)) ; + } ; + + if (lseek (fd, embed_info.offset + embed_info.length, SEEK_SET) < 0) + { printf ("\n\nLine %d: lseek failed : %s\n", __LINE__, strerror (errno)) ; + exit (1) ; + } ; + + memset (&sfinfo, 0, sizeof (sfinfo)) ; + if ((sndfile = sf_open_fd (fd, SFM_READ, &sfinfo, SF_FALSE)) == NULL) + { printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ; + printf ("Embedded file number : %d offset : %ld\n", file_count, SF_COUNT_TO_LONG (embed_info.offset)) ; + puts (sf_strerror (sndfile)) ; + dump_log_buffer (sndfile) ; + exit (1) ; + } ; + + sf_command (sndfile, SFC_GET_EMBED_FILE_INFO, &embed_info, sizeof (embed_info)) ; + + sf_close (sndfile) ; + + if (verbose) + printf ("\nNext offset : %ld\nNext length : %ld\n", SF_COUNT_TO_LONG (embed_info.offset), SF_COUNT_TO_LONG (embed_info.length)) ; + } ; + + file_count -- ; + + if (file_count != format_count) + { printf ("\n\nLine %d: file count (%d) not equal to %d.\n\n", __LINE__, file_count, format_count) ; + printf ("Embedded file number : %d\n", file_count) ; + exit (1) ; + } ; + + close (fd) ; + unlink (filename) ; + printf ("ok\n") ; + + return ; +} /* multi_file_test */ + +/*====================================================================================== +*/ + +static void +write_file_at_end (int fd, int filetype, int channels, int file_num) +{ SNDFILE *sndfile ; + SF_INFO sfinfo ; + + int frames, k ; + + lseek (fd, 0, SEEK_END) ; + + for (k = 0 ; k < DATA_LENGTH ; k++) + data [k] = k ; + + frames = DATA_LENGTH / channels ; + + sfinfo.format = filetype ; + sfinfo.channels = channels ; + sfinfo.samplerate = 44100 ; + + if ((sndfile = sf_open_fd (fd, SFM_WRITE, &sfinfo, SF_FALSE)) == NULL) + { printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ; + printf ("Embedded file number : %d\n", file_num) ; + puts (sf_strerror (sndfile)) ; + dump_log_buffer (sndfile) ; + exit (1) ; + } ; + + if (sf_writef_short (sndfile, data, frames) != frames) + { printf ("\n\nLine %d: short write\n", __LINE__) ; + printf ("Embedded file number : %d\n", file_num) ; + exit (1) ; + } ; + + sf_close (sndfile) ; +} /* write_file_at_end */ +