Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Mar 2004 12:25:10 -0500
From:      John Baldwin <jhb@FreeBSD.org>
To:        Mathew Kanner <mat@cnd.mcgill.ca>
Cc:        current@FreeBSD.org
Subject:   Re: /etc/rc.d/mixer script for review..
Message-ID:  <200403111225.10464.jhb@FreeBSD.org>
In-Reply-To: <20040311002242.GD20090@cnd.mcgill.ca>
References:  <200403101329.59106.jhb@FreeBSD.org> <200403101731.15772.jhb@FreeBSD.org> <20040311002242.GD20090@cnd.mcgill.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 10 March 2004 07:22 pm, Mathew Kanner wrote:
> On Mar 10, John Baldwin wrote:
> > On Wednesday 10 March 2004 01:57 pm, Mathew Kanner wrote:
> > > On Mar 10, John Baldwin wrote:
> > > > The default volume levels on my laptop (75:75) are rather loud when
> > > > using headphones, and I found myself constantly having to pop up a
> > > > terminal window to run mixer before listening to mp3's, etc.  So,
> > > > during a fit of boredom, I wrote a simple mixer rc.d script that
> > > > adjusts mixer values based on an optional /etc/mixer.conf.  It only
> > > > works with /dev/mixer though and doesn't support multiple sound
> > > > cards, mostly because I couldn't think of a sane but simple syntax
> > > > for mixer.conf.  The script and a sample mixer.conf are below. I'm
> > > > not sure where to send this for review (moving the rc list to
> > > > @FreeBSD.org would be helpful perhaps) so I'm splatting it here.
> > >
> > > 	ports/sysutils/mixer
> >
> > Then why not stick that in the base system and convert it to rc.d?
>
> 	I seem to recall long debates about where it really belongs,
> etc, etc.  I don't personally have an opinion on this issue and would
> be happy to have it included in a default install.
> 	If you move it, I will document it.

Here's a version that supports multiple mixers and is converted to rc.d:

#!/bin/sh -
#
# Copyright (c) 2004  The FreeBSD Project
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#

# PROVIDE: mixer
# REQUIRE: LOGIN usbd
# KEYWORD: FreeBSD

. /etc/rc.subr

name="mixer"
stop_cmd="mixer_stop"
start_cmd="mixer_start"
reload_cmd="mixer_start"
extra_commands="reload"

#
# List current mixer devices to stdout.
#
list_mixers()
{

	( cd /dev ; ls mixer* 2>/dev/null )
}

#
# Echo state file name for an individual mixer ($1) to stdout
#
mixer_statefile()
{
	echo "/var/db/${1}-state"
}

#
# Save state of an individual mixer specified as $1
#
mixer_save()
{
	local file dev

	dev="/dev/${1}"
	file=`mixer_statefile $1`
	if [ -r ${dev} ]; then
		/usr/sbin/mixer -f ${dev} -s > ${file} 2>/dev/null
	fi
}

#
# Restore the state of an individual mixer specified as $1
#
mixer_restore()
{
	local file dev

	dev="/dev/${1}"
	file=`mixer_statefile $1`
	if [ -r ${dev} -a -r ${file} ]; then
		/usr/sbin/mixer -f ${dev} `cat ${file}` > /dev/null
	fi
}

#
# Restore state of all mixers
#
mixer_start()
{
	local mixer

	for mixer in `list_mixers`; do
		mixer_restore ${mixer}
	done
}

#
# Save the state of all mixers
#
mixer_stop()
{
	local mixer

	for mixer in `list_mixers`; do
		mixer_save ${mixer}
	done
}

load_rc_config $name
run_rc_command "$1"

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403111225.10464.jhb>