А кто-нибудь может объяснить почему звук с тюнера идет только при запусе tvtime через скрипт описанный в первом посте
Тюнеры бывают разные.
Практически все тюнеры имеют на своей плате разъем для прямого аналогового подключения к звуковой плате проводом. Если подключение выполнено так, то никакого скрипта не нужно, нужно только включить в микшере звуковой платы канал, к которому подключен провод от тюнера.
Некоторые тюнеры имеют также в своём составе встроенную "звуковуху", способную самостоятельно оцифровывать звук с телека. Это позволяет, например, записывать передачи с телевидения, не используя основную звуковую плату. Обычно такие тюнеры также обладают возможностью аппаратного сжатия видеопотока (тюнеры первого типа так не могут в принципе, потому что они не могут оцифровывать звук самостоятельно). Так вот, звук с такого тюнера "услышать" можно либо всё так же подключив его проводом к основной звуковухе, либо -
программно записывать звук с его встроенной звуковухи и воспроизводить его на основной звуковухе.
Собственно, скрипт этим и занимается. Сначала он инициирует конвейер по записи/воспроизведению звука:
arecord -q -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay -q - &
arecord - программа записи звука
-q - тихий режим - не выводить никаких отладочных сообщений в терминал;
-D hw:1,0 - устройство записи звука - по-сути звуковуха тв-тюнера;
-r 32000 - частота дискретизации;
-c 2 - два канала - стерео;
-f S16_LE - формат аудиопотока - знаковый, 16-битный, little endian;
aplay - программа воспроизведения звука
-q - тихий режим
- - указывает, что данные для воспроизведения нужно читать не из файла, а из стандартного входного потока (коим в данном случае является выход arecord);
& - запустить конвейер в фоновом режиме - не ждать его завершения.
Затем запускает программу-просмотрщик tvtime:
tvtime -m --mixer=/dev/mixer:pcm --xmltv=/var/lib/tvtime/tvguide.xml
-m - полноэкранный режим
--mixer=/dev/mixer:pcm - какое устройство:канал использовать для регулировки громкости изнутри tvtime
--xmltv - указыает на путь к файлу с расписанием телепередач
и ждет её завершения...
Как только tvtime завершается, скрипт убивает конвейер записи/воспроизведения звука:
pid=`pidof arecord`
if [ $pid ]; then
kill -9 $pid
fi