mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-22 06:22:58 +02:00
Upgrades libsndfile to 1.0.24.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright (C) 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
**
|
||||
** All rights reserved.
|
||||
**
|
||||
@@ -45,15 +45,15 @@
|
||||
|
||||
#if (defined (WIN32) || defined (_WIN32))
|
||||
#include <windows.h>
|
||||
#define snprintf _snprintf
|
||||
#endif
|
||||
|
||||
static void print_version (void) ;
|
||||
static void print_usage (const char *progname) ;
|
||||
static void usage_exit (const char *progname) ;
|
||||
|
||||
static void info_dump (const char *filename) ;
|
||||
static int instrument_dump (const char *filename) ;
|
||||
static int broadcast_dump (const char *filename) ;
|
||||
static int chanmap_dump (const char *filename) ;
|
||||
static void total_dump (void) ;
|
||||
|
||||
static double total_seconds = 0.0 ;
|
||||
@@ -65,12 +65,7 @@ main (int argc, char *argv [])
|
||||
print_version () ;
|
||||
|
||||
if (argc < 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
|
||||
{ char *progname ;
|
||||
|
||||
progname = strrchr (argv [0], '/') ;
|
||||
progname = progname ? progname + 1 : argv [0] ;
|
||||
|
||||
print_usage (progname) ;
|
||||
{ usage_exit (program_name (argv [0])) ;
|
||||
return 1 ;
|
||||
} ;
|
||||
|
||||
@@ -90,6 +85,14 @@ main (int argc, char *argv [])
|
||||
return error ;
|
||||
} ;
|
||||
|
||||
if (strcmp (argv [1], "-c") == 0)
|
||||
{ int error = 0 ;
|
||||
|
||||
for (k = 2 ; k < argc ; k++)
|
||||
error += chanmap_dump (argv [k]) ;
|
||||
return error ;
|
||||
} ;
|
||||
|
||||
for (k = 1 ; k < argc ; k++)
|
||||
info_dump (argv [k]) ;
|
||||
|
||||
@@ -115,7 +118,7 @@ print_version (void)
|
||||
|
||||
|
||||
static void
|
||||
print_usage (const char *progname)
|
||||
usage_exit (const char *progname)
|
||||
{ printf ("Usage :\n %s <file> ...\n", progname) ;
|
||||
printf (" Prints out information about one or more sound files.\n\n") ;
|
||||
printf (" %s -i <file>\n", progname) ;
|
||||
@@ -135,7 +138,9 @@ print_usage (const char *progname)
|
||||
*/
|
||||
Sleep (5 * 1000) ;
|
||||
#endif
|
||||
} /* print_usage */
|
||||
printf ("Using %s.\n\n", sf_version_string ()) ;
|
||||
exit (0) ;
|
||||
} /* usage_exit */
|
||||
|
||||
/*==============================================================================
|
||||
** Dumping of sndfile info.
|
||||
@@ -247,29 +252,26 @@ info_dump (const char *filename)
|
||||
puts (strbuffer) ;
|
||||
printf ("----------------------------------------\n") ;
|
||||
|
||||
if (file == NULL)
|
||||
{ printf ("Error : Not able to open input file %s.\n", filename) ;
|
||||
fflush (stdout) ;
|
||||
memset (data, 0, sizeof (data)) ;
|
||||
puts (sf_strerror (NULL)) ;
|
||||
}
|
||||
else
|
||||
{ printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
|
||||
printf ("Frames : %" PRId64 "\n", sfinfo.frames) ;
|
||||
printf ("Channels : %d\n", sfinfo.channels) ;
|
||||
printf ("Format : 0x%08X\n", sfinfo.format) ;
|
||||
printf ("Sections : %d\n", sfinfo.sections) ;
|
||||
printf ("Seekable : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
|
||||
printf ("Duration : %s\n", generate_duration_str (&sfinfo)) ;
|
||||
printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
|
||||
|
||||
if (sfinfo.frames < 100 * 1024 * 1024)
|
||||
{ /* Do not use sf_signal_max because it doesn't work for non-seekable files . */
|
||||
signal_max = get_signal_max (file) ;
|
||||
decibels = calc_decibels (&sfinfo, signal_max) ;
|
||||
printf ("Signal Max : %g (%4.2f dB)\n", signal_max, decibels) ;
|
||||
} ;
|
||||
putchar ('\n') ;
|
||||
if (sfinfo.frames == SF_COUNT_MAX)
|
||||
printf ("Frames : unknown\n") ;
|
||||
else
|
||||
printf ("Frames : %" PRId64 "\n", sfinfo.frames) ;
|
||||
|
||||
printf ("Channels : %d\n", sfinfo.channels) ;
|
||||
printf ("Format : 0x%08X\n", sfinfo.format) ;
|
||||
printf ("Sections : %d\n", sfinfo.sections) ;
|
||||
printf ("Seekable : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
|
||||
printf ("Duration : %s\n", generate_duration_str (&sfinfo)) ;
|
||||
|
||||
if (sfinfo.frames < 100 * 1024 * 1024)
|
||||
{ /* Do not use sf_signal_max because it doesn't work for non-seekable files . */
|
||||
signal_max = get_signal_max (file) ;
|
||||
decibels = calc_decibels (&sfinfo, signal_max) ;
|
||||
printf ("Signal Max : %g (%4.2f dB)\n", signal_max, decibels) ;
|
||||
} ;
|
||||
putchar ('\n') ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
@@ -387,6 +389,82 @@ broadcast_dump (const char *filename)
|
||||
return 0 ;
|
||||
} /* broadcast_dump */
|
||||
|
||||
static int
|
||||
chanmap_dump (const char *filename)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
int * channel_map ;
|
||||
int got_chanmap, k ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
|
||||
{ printf ("Error : Not able to open input file %s.\n", filename) ;
|
||||
fflush (stdout) ;
|
||||
memset (data, 0, sizeof (data)) ;
|
||||
puts (sf_strerror (NULL)) ;
|
||||
return 1 ;
|
||||
} ;
|
||||
|
||||
if ((channel_map = calloc (sfinfo.channels, sizeof (int))) == NULL)
|
||||
{ printf ("Error : malloc failed.\n\n") ;
|
||||
return 1 ;
|
||||
} ;
|
||||
|
||||
got_chanmap = sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map, sfinfo.channels * sizeof (int)) ;
|
||||
sf_close (file) ;
|
||||
|
||||
if (got_chanmap == SF_FALSE)
|
||||
{ printf ("Error : File '%s' does not contain channel map information.\n\n", filename) ;
|
||||
free (channel_map) ;
|
||||
return 1 ;
|
||||
} ;
|
||||
|
||||
printf ("File : %s\n\n", filename) ;
|
||||
|
||||
puts (" Chan Position") ;
|
||||
for (k = 0 ; k < sfinfo.channels ; k ++)
|
||||
{ const char * name ;
|
||||
|
||||
#define CASE_NAME(x) case x : name = #x ; break ;
|
||||
switch (channel_map [k])
|
||||
{ CASE_NAME (SF_CHANNEL_MAP_INVALID) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_MONO) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_FRONT_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_REAR_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_REAR_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_REAR_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_LFE) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_SIDE_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_SIDE_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_LEFT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_RIGHT) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_CENTER) ;
|
||||
CASE_NAME (SF_CHANNEL_MAP_MAX) ;
|
||||
default : name = "default" ;
|
||||
break ;
|
||||
} ;
|
||||
|
||||
printf (" %3d %s\n", k, name) ;
|
||||
} ;
|
||||
|
||||
putchar ('\n') ;
|
||||
free (channel_map) ;
|
||||
|
||||
return 0 ;
|
||||
} /* chanmap_dump */
|
||||
|
||||
static void
|
||||
total_dump (void)
|
||||
{ printf ("========================================\n") ;
|
||||
|
Reference in New Issue
Block a user