Как я могу убедиться, что sox не выполняет автоматический дизеринг, не зная версии?

Я использую sox для передискретизации звука перед тем, как ввести его в нашу систему обнаружения речи, но я столкнулся с проблемой в версии 14.3 sox, добавляющей автоматический дизеринг по умолчанию к операции передискретизации, чего мы не хотим.

Это не было бы проблемой, если бы мы знали, что всегда использовали sox 14.3, так как мы могли бы просто использовать новый флаг -D, чтобы отключить его:

sox original.wav -Dr 8000 new.wav

Однако мы не можем гарантировать, что будем использовать sox 14.3, поэтому мне нужно каким-то образом указать флаг -D, если это необходимо, но в противном случае не использовать его (поскольку он выдает ошибку, когда не распознает его).

Любые идеи?


person David Dean    schedule 20.11.2009    source источник


Ответы (1)


Моя первая мысль примерно такая:

# assume -D flag is available to disable automatic dithering
sox original.wav -Dr 8000 new.wav
# if -D flag isn't available (sox < 14.3), then dithering isn't automatic
if [$? -ne 0]; then
   sox original.wav -r 8000 new.wav
fi

Поскольку проверка номеров версий, казалось, что это, вероятно, будет больно и не очень перспективно.

Единственным основным недостатком является то, что при наличии какой-либо другой ошибки операция выполняется дважды.

person David Dean    schedule 20.11.2009