Я играю со сценариями, использующими API Google для преобразования речи в текст. API требует файлов в кодировке flac, поэтому записывающая часть скрипта выглядит следующим образом:
arecord -q -t wav -d 0 -f S16_LE -r 16000 | flac - -f --best --sample-rate 16000 -s -o "$TEMP_FILE"
Эта команда будет записывать, пока пользователь не завершит работу с помощью ctrl-c, и записанный формат wav не должен быть передан в программу flac для outut в формате flac сценарий должен продолжаться.
Проблема, с которой я столкнулся, состоит в том, что нажатие ctrl-c полностью завершает сценарий и отключает часть звука (файл flac все еще выводится). Если я запускаю сценарий без конвейера:
arecord -q -t wav -d 0 -f S16_LE -r 16000 some.wav
Тогда нажатие ctrl-c только завершит запись и продолжит выполнение сценария, как и должно быть.
Как я могу это исправить, чтобы ctrl-c только останавливал команду arecord и позволял завершить работу остальной части скрипта (включая кодировку конвейерного флака)
Эти arecord
команда имеет-d аргумент для таймаута его с этой модификацией эти arecord
, команда испытает таймаут, но не FLAC.
arecord -q -t wav -d 4 -f S16_LE -r 16000 | flac - -f --best --sample-rate 16000 -s -o "$TEMP_FILE"