[sisyphus] I: sound-scripts-0.2
Michael Shigorin
=?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Ср Ноя 12 15:46:45 MSK 2003
Здравствуйте.
Прилагается попытка зафиксить sound-scripts хотя бы немного.
Ее надо проверить на нормальную отработку ситуации:
- одна звуковая карта (точнее, один драйвер);
- alsa или oss;
- наличие/отсутствие /etc/asound.state или /etc/.aumixrc, соотв.
Ожиаемый эффект:
- инициализируется указанный для sound-slot-0 драйвер;
- при отсутствии сохраненных значений уровней выставляются
более-менее разумные;
- при наличии сохраненных значений уровней они применяются,
по возможности используя alsactl (alsa-utils) для микшера alsa.
---
* Wed Nov 12 2003 Michael Shigorin <mike на altlinux.ru> 0.2-alt1
- fixed #1049, #1711 -- introduced initial specific ALSA support
(modified patch by Dmitry Vukolov <dvukol rosmail ru>):
* alsactl save/restore;
* if /etc/asound.state is absent, initialize the mixer with
non-zero values and unmuted channels.
- added TODO
--
---- WBR, Michael Shigorin <mike на altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
----------- следующая часть -----------
#!/bin/sh
# $Id: sound,v 1.14 2003/10/08 15:03:12 ldv Exp $
#
# sound: This shell script launch the sound on your system.
#
# chkconfig: 2345 30 70
# description: This shell script launch the sound on your system.
# halt: yes
# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1
# Source function library.
. /etc/init.d/functions
PKLVL=
SOUND_ALSA=
ChangePrintk()
{
[ -n "$PKLVL" ] || PKLVL=`sed 's/^\(.\).*/\1/' < /proc/sys/kernel/printk`
sysctl -w kernel.printk=0
}
exit_handler()
{
local rc=$?
trap - EXIT
[ -z "$PKLVL" ] || sysctl -w "kernel.printk=$PKLVL"
exit $rc
}
trap exit_handler SIGHUP SIGPIPE SIGINT SIGQUIT SIGTERM EXIT
LOCKFILE=/var/lock/subsys/sound
AUMIX=
[ ! -x /usr/bin/aumix ] || AUMIX=/usr/bin/aumix
[ ! -x /bin/aumix-minimal ] || AUMIX=/bin/aumix-minimal
ALSACTL=
[ -x /usr/sbin/alsactl ] && ALSACTL=/usr/sbin/alsactl
TMP_ALSA_STATE=`mktemp -t alsa-state.XXXXXX`
LookupDevices()
{
egrep -qs '(sparcaudio|sound)' /proc/devices
}
LoadModule()
{
local phrase=$1 pattern=$2 m opt=
[ -n "$3" ] && opt='-r'
for m in `modprobe -c |egrep "^alias $pattern " |cut -d\ -f3`; do
if [ -n "$m" ] && [ "$m" != off ]; then
action "$phrase ($m):" modprobe "$opt" "$m"
local rc=$?
[ $rc -eq 0 ] || return $rc
fi
done
}
load_alsa()
{
modprobe -c |egrep '^alias [^ ]+ snd-' |cut -d\ -f3 |\
while read line; do
L=1
action "Starting ALSA sound driver $line:" modprobe $line
done
if [ -d /proc/asound ]; then
RETVAL=0 start_mixer alsa
fi
}
start_alsa()
{
[ -d /proc/asound ] || load_alsa
[ -d /proc/asound ] && touch "$LOCKFILE"
}
unload_alsa()
{
RETVAL=0 stop_mixer alsa;
/sbin/lsmod |grep "^snd" |
while read line; do
/sbin/rmmod `echo $line |cut -d\ -f 1`
done
/sbin/rmmod soundcore 2>/dev/null
}
fix_alsa_levels()
{
# provide sane default audio levels even with alsa
alsactl -f $TMP_ALSA_STATE store
# set volume to 67%
subst 's/(value\w*\S*)\s* 0/\1 20/' $TMP_ALSA_STATE
# unmute all channels
subst 's/(value\w*\S*)\s* false/\1 true/' $TMP_ALSA_STATE
action "Initializing ALSA mixer settings" alsactl -f $TMP_ALSA_STATE restore
rm -f $TMP_ALSA_STATE
}
start_mixer()
{
LookupDevices || return
# ALSA
if [ "$1" = "alsa" -a -n "$ALSACTL" ]; then
if [ -r /etc/asound.state ]; then
action "Loading ALSA mixer settings:" "$ALSACTL" restore
else
fix_alsa_levels
return 0
fi
elif [ -n "$AUMIX" ]; then
if [ -s /etc/.aumixrc ]; then
action "Loading OSS mixer settings:" "$AUMIX" -f /etc/.aumixrc -L
else
action "Initializing OSS mixer settings:" "$AUMIX" -v90 -w90 -c90
fi
fi
}
stop_mixer()
{
LookupDevices || return
if [ "$1" = "alsa" -a -n "$ALSACTL" ]; then
action "Saving ALSA mixer settings:" "$ALSACTL" store
elif [ -n "$AUMIX" ]; then
action "Saving OSS mixer settings:" "$AUMIX" -f /etc/.aumixrc -S
fi
}
start()
{
ChangePrintk
# if there is alsa driver configured load it and exit.
# FIXME: we know it's wrong since there could be OSS too.
# TODO: for now codepaths are extremely crappy :((
start_alsa && exit
RETVAL=0
LoadModule "Loading sound module" 'sound[^ ]*' || RETVAL=1
LoadModule "Loading midi module" midi
start_mixer oss
touch "$LOCKFILE"
}
stop()
{
ChangePrintk
if [ -d /proc/asound ]; then
unload_alsa
rm -f "$LOCKFILE"
return
fi
if [ -d /proc/asound ]; then
stop_mixer alsa
else
stop_mixer oss
fi
LoadModule "Unloading midi module" midi REMOVE
LoadModule "Unloading sound module" 'sound[^ ]*' REMOVE
rm -f "$LOCKFILE"
}
restart()
{
stop
start
}
case $1 in
start)
start
;;
stop|condstop)
stop
;;
restart|reload)
restart
;;
status)
if lsmod |egrep -qs '^(sound|snd)'; then
echo "Sound modules loaded"
fi
;;
condrestart|condreload)
;;
*)
msg_usage "${0##*/} {start|stop|restart|status}"
exit 1
esac
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/sisyphus/attachments/20031112/93b3dbce/attachment-0009.bin>
Подробная информация о списке рассылки Sisyphus