#!/bin/sh
echo "
Alsa Mixer Gui - v1 - Created by KuLuSz y2019 m10 d05
"
CC=$(cat /etc/asound.conf | grep "pcm\.card" | cut -f2 -d' ') #current card
CD=$(cat /etc/asound.conf | grep "pcm\.device" | cut -f2 -d' ') #current device
CS=$(aplay -l | grep "card $CC:" | grep " device $CD:" | cut -f2 -d':' | cut -f1 -d'[')
CS2=$(aplay -l | grep "card $CC:" | grep " device $CD:" | cut -f3 -d':' | cut -f1 -d'[')
mkdir -p /tmp/AMG
echo '' > /tmp/AMG/mixer_play_gui
echo '' > /tmp/AMG/mixer_rec_gui
echo '' > /tmp/AMG/mixer_switch_gui
echo '' > /tmp/AMG/mixer_switch_items
gui_func(){
SWON=$(echo $9 | cut -f1 -d'|')
SWOFF=$(echo $9 | cut -f2 -d'|')
CH="$(echo "$1" | sed 's/_/ /g')"
echo '
'$1'M
'$5'
amixer -q set "'$CH'" $'$1'L%,$'$1'R% '$SWON' &
amixer -q set "'$CH'" $'$1'L%,$'$1'R% '$SWOFF' &
'$2'
'$1'L
cat /tmp/AMG/'$1'1
echo $'$1'L > /tmp/AMG/'$1'2
refresh:'$1'R
amixer -q set "'$CH'" $'$1'L%,$'$1'R% &
'$3'
'$1'R
cat /tmp/AMG/'$1'2
echo $'$1'R > /tmp/AMG/'$1'1
refresh:'$1'L
amixer -q set "'$CH'" $'$1'L%,$'$1'R% &
'$1'C
'$7'
' >> $8
echo "$2" > /tmp/AMG/${1}1
echo "$3" > /tmp/AMG/${1}2
}
export -f gui_func
switch_func (){
CH="$(echo "$1" | sed 's/_/ /g')"
CH2="$(echo "$1" | sed 's/-//g')"
for i in `echo "$3" | sed 's/:/ /g'`;do
echo '- '$i'
' >> /tmp/AMG/mixer_switch_items
done
echo '
'$CH2'_ITEM
'$2'
'`cat /tmp/AMG/mixer_switch_items`'
amixer -q set "'$CH'" "$'$CH2'_ITEM" &
' >> /tmp/AMG/mixer_switch_gui
echo '' > /tmp/AMG/mixer_switch_items
}
export -f switch_func
amixer | while read line;do
if [ "$(echo "$line" | grep "Simple mixer control")" ];then
CH="$(echo "$line" | cut -f2 -d"'" | cut -f1 -d"'" | sed 's/ /_/g')"
elif [ "$(echo "$line" | grep "Capabilities")" ];then
SW=""
if [ ! -z "$(echo "$line" | grep "cvolume\|cswitch")" -o ! -z "$(echo "$line" | grep ": volume")" ];then
OF="/tmp/AMG/mixer_rec_gui"
SW="cap|nocap"
elif [ ! -z "$(echo "$line" | grep " pvolume \| pswitch ")" ];then
OF="/tmp/AMG/mixer_play_gui"
SW="unmute|mute"
elif [ ! -z "$(echo "$line" | grep " enum ")" ];then
OF="/tmp/AMG/mixer_switch_gui"
fi
elif [ ! -z "$(echo "$line" | grep "Mono:" | cut -f2 -d':')" ];then
L="$(echo "$line" | cut -f2 -d'[' | cut -f1 -d'%')"
R="$L"
CVIS="false"
C="true"
if [ "$(echo "$line" | cut -f4 -d'[' | cut -f1 -d']')" == "on" ];then
ON="true"
VIS="true"
elif [ "$(echo "$line" | cut -f4 -d'[' | cut -f1 -d']')" == "off" ];then
ON="false"
VIS="true"
else
ON="true"
VIS="false"
fi
gui_func $CH $L $R $ON $VIS $C $CVIS $OF $SW
elif [ "$(echo "$line" | grep "Front Left:" | cut -f2 -d':')" ];then
L="$(echo "$line" | cut -f2 -d'[' | cut -f1 -d'%')"
if [ "$(echo "$line" | cut -f4 -d'[' | cut -f1 -d']')" == "on" ];then
ON="true"
VIS="true"
elif [ "$(echo "$line" | cut -f4 -d'[' | cut -f1 -d']')" == "off" ];then
ON="false"
VIS="true"
else
ON="true"
VIS="false"
fi
elif [ "$(echo "$line" | grep "Front Right:" | cut -f2 -d':')" ];then
R="$(echo "$line" | cut -f2 -d'[' | cut -f1 -d'%')"
CVIS="true"
[ "$R" == "$L" ]&& C="true" || C="false"
gui_func $CH $L $R $ON $VIS $C $CVIS $OF $SW
elif [ "$(echo "$line" | grep "Items:" | cut -f2 -d':')" ];then
ITEMS="$(echo "$line" | cut -f2 -d':' | sed "s/'//g" | sed "s/ /:/g")"
elif [ "$(echo "$line" | grep "Item0:" | cut -f2 -d':')" ];then
ITEM0="$(echo "$line" | cut -f2 -d':' | sed "s/'//g" | sed "s/ //g")"
switch_func $CH $ITEM0 $ITEMS
fi
done
PLAY_GUI="$(cat /tmp/AMG/mixer_play_gui)"
REC_GUI="$(cat /tmp/AMG/mixer_rec_gui)"
SWITCH_GUI="$(cat /tmp/AMG/mixer_switch_gui)"
export MIXER='
'$PLAY_GUI'
'$REC_GUI'
'$SWITCH_GUI'
'
eval "$(gtkdialog --program=MIXER --center)"
[ "$EXIT" == "abort" ]&& rm -r /tmp/AMG