Seth Troisi <braintwo@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 <mans@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