ALT Linux Sisyphus discussions
 help / color / mirror / Atom feed
* [sisyphus] I: sound-scripts-0.2
@ 2003-11-12 12:46 Michael Shigorin
  2003-11-22  7:55 ` [sisyphus] " Michael Shigorin
  0 siblings, 1 reply; 11+ messages in thread
From: Michael Shigorin @ 2003-11-12 12:46 UTC (permalink / raw)
  To: sisyphus; +Cc: vsu, darkstar, rider, ab


[-- Attachment #1.1: Type: text/plain, Size: 973 bytes --]

	Здравствуйте.
Прилагается попытка зафиксить 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/

[-- Attachment #1.2: sound --]
[-- Type: text/plain, Size: 3813 bytes --]

#!/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

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2003-11-23 19:37 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-11-12 12:46 [sisyphus] I: sound-scripts-0.2 Michael Shigorin
2003-11-22  7:55 ` [sisyphus] " Michael Shigorin
2003-11-22 12:03   ` Alex Yustasov
2003-11-22 12:12     ` Michael Shigorin
2003-11-22 18:00     ` Michael Shigorin
2003-11-23  7:41       ` Andrey Rahmatullin
2003-11-23 11:35         ` [sisyphus] ...0.31 (was: I: sound-scripts-0.2) Michael Shigorin
2003-11-23 11:49           ` Sergey Vlasov
2003-11-23 11:56             ` [sisyphus] " Michael Shigorin
2003-11-23 11:59               ` Sergey Vlasov
2003-11-23 19:37                 ` Michael Shigorin

ALT Linux Sisyphus discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \
		sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru
	public-inbox-index sisyphus

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sisyphus


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git