Az eredeti probléma az volt, hogy a gnomeradio nem kezeli az audio inputot, ha az nem a hangkártyára van bekötve pl. átkötőkábellel. Eredetileg ezt soxal oldottam meg, de néhány héttel/nappal? ezelőtt egy frissítés után zabálni kezdte a processzort, ráadásul a hangerő szabályozásával is problémák adódtak. A gnomeradio elindítása után néhány másodperig csak a fehér zaj dőlt a hangszórókból.
Ezekre a problémákra próbáltam meg megoldást találni a következő scriptel.
#! /bin/bash
#
# fájlnév: /usr/local/bin/gnomeradio
#
############################################
# pulseaudio & gnomeradio #
# bezárja a pulseaudio/alsa recordert
on_exit() {
if ps -A | egrep -q "$PID.*arecord|$PID.*pacat"
then
kill $PID
else
killall 'pacat'
killall 'arecord'
fi
# sleep 0.5
# echo
}
# a forrás tényleges némítása vagy a némítás tiltása,
# és állapota
_mute() {
# némítás aktuális értékét adja vissza
state() {
LANG=C pactl list | \
grep -A10 'Sink Input #'"$SINK_INPUT" | \
grep 'Mute:' | \
awk -F': ' '{print $2}'
}
SINK_INPUT=$(LANG=C pactl list | \
grep -A20 "Sink Input #" | \
grep -B20 "$CLIENTNAME" | \
grep "Sink Input #" | \
awk -F'#' '{print $2}')
if [ $(state) = $1 ]
then
# némítás állapota az stdoutra
state
return 0
fi
# mute beállítás
case $1 in
'no')
pactl set-sink-input-mute $SINK_INPUT 0
;;
'yes')
pactl set-sink-input-mute $SINK_INPUT 1
;;
esac
sleep 0.2
# visszaadja némítás állapotát
state
}
# a forrás némítása
i_mute() {
# néha-néha nem elég egyszer rászólni
if [ $(_mute 'yes') != 'yes' ]
then
_mute 'yes' > /dev/null
fi
}
# a forrás némításának tiltása
i_umute() {
# néha-néha nem elég egyszer rászólni
if [ $(_mute 'no') != 'no' ]
then
_mute 'no' > /dev/null
fi
}
# késleltető
delay() {
# i_mute
sleep $1
# némítás tiltása
i_umute
}
# ha már egy példány fut, akkor kilép
if ps -A a | grep -v "^[ ]*$$" | grep -q "bash.*[g]nomeradio"
then
echo "a gnomeradio már fut"
exit 0
fi
# a forrás száma a pulseaudioban
SOURCE=$(LANG=C pactl list | \
grep -A3 'Source #' | \
grep -B3 'Description:.*SAA71.*Video Broadcast Decoder' | \
grep 'Source #' | awk -F'#' '{print $2}')
# ha nincs megfelelő forrás
if [ -z $SOURCE ]
then
echo -e "-- HIBA! --\n\tA forrás (SAA7131/SAA7133/SAA7135 Video Broadcast Decoder)\n\tnem található"
exit 1
fi
# a forrás neve
INPUT=$(LANG=C pactl list | \
grep -A3 "Source #$SOURCE" | \
grep 'Name:' | \
awk -F': ' '{print $2}')
ALSADEV=$(arecord -l | \
grep "card [0-9]*: SAA71" | \
awk '{print $2}' | \
awk -F':' '{print $1}')
CLIENTNAME='gnomeradio'
trap 'on_exit' INT TERM EXIT
# a forrást összeköti a kimenettel
# pacat programmal
# pacat --record --latency=1 --raw --channels=2 --client-name=gnomeradio --stream-name=Input --device=$INPUT | \
# pacat --playback --latency=1 --raw --client-name=gnomeradio --stream-name=Output &
# inkább arecord programmal mert az gyorsabb
arecord -D hw:$ALSADEV,0 -r 32000 -c 2 -f S16_LE -q | \
pacat --playback --rate 32000 --latency=1 --client-name=$CLIENTNAME --stream-name=Output &
# csak a recorder PID-je kell
PID=$(ps a | grep '[a]record -D hw:'"$ALSADEV"',0' | awk '{print $1}')
# némítás amíg elindul a gnomeradio
# különbem zúg mint a fene
i_mute
echo -e "forrás: #$SOURCE ($INPUT)\n cél: alapértelmezett\n"
# késleltetés amíg rendesen elindul a gnomeradio
delay 10 &
# na most jön a lényeg
/usr/bin/gnomeradio $@
# END
A script működőképes. - az én rendszeremen -
Namost, ha valakinek van kedve, tehetne javaslatot az egyszerűsítésre, javításra, gyorsításra, vagy akármi másra:)
- apostroph3 blogja
- A hozzászóláshoz be kell jelentkezni
- 855 megtekintés