Sigrid Solveig Haflínudóttirbetter defaults20248693 years agoHistory
230 lines · 6.1 KB · C
RawDownload
/* Implements the public API for libSoX general functions * All public functions & data are prefixed with sox_ . * * (c) 2006-8 Chris Bagwell and SoX contributors * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library 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 Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA */ #include "sox_i.h"#include <string.h> const char *sox_version(void){  static char versionstr[20];   sprintf(versionstr, "%d.%d.%d",          (SOX_LIB_VERSION_CODE & 0xff0000) >> 16,          (SOX_LIB_VERSION_CODE & 0x00ff00) >> 8,          (SOX_LIB_VERSION_CODE & 0x0000ff));  return(versionstr);} sox_version_info_t const * sox_version_info(void){#define STRINGIZE1(x) #x#define STRINGIZE(x) STRINGIZE1(x)    static char arch[30];    static sox_version_info_t info = {        /* size */        sizeof(sox_version_info_t),        /* flags */        (sox_version_flags_t)(#if HAVE_POPEN        sox_version_have_popen +#endif#if  HAVE_MAGIC        sox_version_have_magic +#endif#if HAVE_OPENMP        sox_version_have_threads +#endif#ifdef HAVE_FMEMOPEN        sox_version_have_memopen +#endif        sox_version_none),        /* version_code */        SOX_LIB_VERSION_CODE,        /* version */        NULL,        /* sox_version_extra */#ifdef PACKAGE_EXTRA        PACKAGE_EXTRA,#else        NULL,#endif        /* sox_time */        __DATE__ " " __TIME__,        /* sox_distro */#ifdef DISTRO        DISTRO,#else        NULL,#endif        /* sox_compiler */#if defined __GNUC__        "gcc " __VERSION__,#elif defined _MSC_VER        "msvc " STRINGIZE(_MSC_FULL_VER),#elif defined __SUNPRO_C    fprintf(file, "sun c " STRINGIZE(__SUNPRO_C),#elif defined __plan9__        "kencc",#else        NULL,#endif        /* sox_arch */#ifdef __arch__        __arch__#else        NULL#endif    };     if (!info.version)    {        info.version = sox_version();    }     if (!info.arch)    {        snprintf(arch, sizeof(arch),            "%" PRIuPTR "%" PRIuPTR "%" PRIuPTR "%" PRIuPTR            " %" PRIuPTR "%" PRIuPTR " %" PRIuPTR "%" PRIuPTR " %c %s",            sizeof(char), sizeof(short), sizeof(long), sizeof(off_t),            sizeof(float), sizeof(double), sizeof(int *), sizeof(int (*)(void)),            MACHINE_IS_BIGENDIAN ? 'B' : 'L',            (info.flags & sox_version_have_threads) ? "OMP" : "");        arch[sizeof(arch) - 1] = 0;        info.arch = arch;    }     return &info;} /* Default routine to output messages; can be overridden */static void output_message(    unsigned level, const char *filename, const char *fmt, va_list ap){  if (sox_globals.verbosity >= level) {    char base_name[128];    sox_basename(base_name, sizeof(base_name), filename);    fprintf(stderr, "%s: ", base_name);    vfprintf(stderr, fmt, ap);    fprintf(stderr, "\n");  }} static sox_globals_t s_sox_globals = {  2,               /* unsigned     verbosity */  output_message,  /* sox_output_message_handler */  sox_false,       /* sox_bool     repeatable */  IOUNIT,          /* size_t       bufsiz */  0,               /* size_t       input_bufsiz */  0,               /* int32_t      ranqd1 */  NULL,            /* char const * stdin_in_use_by */  NULL,            /* char const * stdout_in_use_by */  NULL,            /* char const * subsystem */  NULL,            /* char       * tmp_path */  sox_false,       /* sox_bool     use_magic */  sox_false,       /* sox_bool     use_threads */  10               /* size_t       log2_dft_min_size */}; sox_globals_t * sox_get_globals(void){    return &s_sox_globals;} /* FIXME: Not thread safe using globals */static sox_effects_globals_t s_sox_effects_globals =    {sox_plot_off, &s_sox_globals}; sox_effects_globals_t *sox_get_effects_globals(void){    return &s_sox_effects_globals;} char const * sox_strerror(int sox_errno){  static char const * const errors[] = {    "Invalid Audio Header",    "Unsupported data format",    "Can't allocate memory",    "Operation not permitted",    "Operation not supported",    "Invalid argument",  };  if (sox_errno < SOX_EHDR)    return strerror(sox_errno);  sox_errno -= SOX_EHDR;  if (sox_errno < 0 || (size_t)sox_errno >= array_length(errors))    return "Unknown error";  return errors[sox_errno];} size_t sox_basename(char * base_buffer, size_t base_buffer_len, const char * filename){  if (!base_buffer || !base_buffer_len)  {    return 0;  }  else  {    char const * slash_pos = LAST_SLASH(filename);    char const * base_name = slash_pos ? slash_pos + 1 : filename;    char const * dot_pos   = strrchr(base_name, '.');    size_t i, len;    dot_pos = dot_pos ? dot_pos : base_name + strlen(base_name);    len = dot_pos - base_name;    len = min(len, base_buffer_len - 1);    for (i = 0; i < len; i++)    {      base_buffer[i] = base_name[i];    }    base_buffer[i] = 0;    return i;  }} #define SOX_MESSAGE_FUNCTION(name,level) \void name(char const * fmt, ...) { \  va_list ap; \  va_start(ap, fmt); \  if (sox_globals.output_message_handler) \    (*sox_globals.output_message_handler)(level,sox_globals.subsystem,fmt,ap); \  va_end(ap); \} SOX_MESSAGE_FUNCTION(lsx_fail_impl  , 1)SOX_MESSAGE_FUNCTION(lsx_warn_impl  , 2)SOX_MESSAGE_FUNCTION(lsx_report_impl, 3)SOX_MESSAGE_FUNCTION(lsx_debug_impl , 4)SOX_MESSAGE_FUNCTION(lsx_debug_more_impl , 5)SOX_MESSAGE_FUNCTION(lsx_debug_most_impl , 6) #undef SOX_MESSAGE_FUNCTION int sox_init(void){  return lsx_effects_init();} int sox_quit(void){  sox_format_quit();  return lsx_effects_quit();}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t