Seth Troisi <brain...@gmail.com> writes:

> I'd like to know if the mp3 format is supported from python.
> it's much easier to check an exit code than to grep over stdout for a string

I'd rather not change things unnecessarily in case there's someone
relying on the current behaviour.

How about this instead?

>From 24f71c24ce62d7ea18e5480ab2544b429b652e14 Mon Sep 17 00:00:00 2001
From: Mans Rullgard <m...@mansr.com>
Date: Tue, 17 Dec 2019 12:00:32 +0000
Subject: [PATCH] add --check-read and --check-write options

---
 src/sox.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/sox.c b/src/sox.c
index 0b103e269092..ffb5d9984f7b 100644
--- a/src/sox.c
+++ b/src/sox.c
@@ -1941,6 +1941,8 @@ static void usage(char const * message)
 "GLOBAL OPTIONS (gopts) (can be specified at any point before the first 
effect):",
 "--buffer BYTES           Set the size of all processing buffers (default 
8192)",
 "--clobber                Don't prompt to overwrite output file (default)",
+"--check-read NAME        Check if format NAME can be read",
+"--check-write NAME       Check if format NAME can be written",
 "--combine concatenate    Concatenate all input files (default for sox, rec)",
 "--combine sequence       Sequence all input files (default for play)",
 "-D, --no-dither          Don't dither automatically",
@@ -2146,6 +2148,23 @@ static void usage_format(char const * name)
   exit(1);
 }
 
+static void check_format(const char *fmt, sox_bool write)
+{
+  const sox_format_handler_t *f = sox_find_format(fmt, sox_false);
+  sox_bool ok = sox_false;
+
+  if (f) {
+    if (write)
+      ok = f->startwrite || f->write;
+    else
+      ok = f->startread || f->read;
+  }
+
+  printf("%s %s: %s\n", fmt, write ? "write" : "read", ok ? "yes" : "no");
+
+  exit(!ok);
+}
+
 static void read_comment_file(sox_comments_t * comments, char const * const 
filename)
 {
   int c;
@@ -2209,6 +2228,8 @@ static struct lsx_option_t const long_options[] = {
   {"no-clobber"      , lsx_option_arg_none    , NULL, 0},
   {"multi-threaded"  , lsx_option_arg_none    , NULL, 0},
   {"dft-min"         , lsx_option_arg_required, NULL, 0},
+  {"check-read"      , lsx_option_arg_required, NULL, 0},
+  {"check-write"     , lsx_option_arg_required, NULL, 0},
 
   {"bits"            , lsx_option_arg_required, NULL, 'b'},
   {"channels"        , lsx_option_arg_required, NULL, 'c'},
@@ -2402,6 +2423,8 @@ static char parse_gopts_and_fopts(file_t * f)
         }
         sox_globals.log2_dft_min_size = i;
         break;
+      case 26: check_format(optstate.arg, sox_false); break;
+      case 27: check_format(optstate.arg, sox_true); break;
       }
       break;
 
-- 
2.24.1



-- 
Måns Rullgård


_______________________________________________
SoX-devel mailing list
SoX-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sox-devel

Reply via email to