diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2008-12-19 14:24:19 -0500 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2008-12-19 14:24:19 -0500 |
commit | 1d493f9523a7fbd67802d325c767f92c1ca2b3ee (patch) | |
tree | d21013c69da899e98dabc208e23f1324afa3a230 | |
download | volfixd-1d493f9523a7fbd67802d325c767f92c1ca2b3ee.tar.xz volfixd-1d493f9523a7fbd67802d325c767f92c1ca2b3ee.zip |
Initial commit.
-rwxr-xr-x | build.sh | 4 | ||||
-rw-r--r-- | etc.init.d.volfixd | 18 | ||||
-rw-r--r-- | volfixd.c | 60 |
3 files changed, 82 insertions, 0 deletions
diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..7f9e09e --- /dev/null +++ b/build.sh @@ -0,0 +1,4 @@ +gcc -O2 -lasound -I/usr/include/alsa -o volfixd volfixd.c +cp volfixd /usr/bin/volfixd +cp etc.init.d.volfixd /etc/init.d/volfixd +chmod 755 /etc/init.d/volfixd diff --git a/etc.init.d.volfixd b/etc.init.d.volfixd new file mode 100644 index 0000000..b68f9e6 --- /dev/null +++ b/etc.init.d.volfixd @@ -0,0 +1,18 @@ +#!/sbin/runscript + +start(){ + ebegin "Starting volfixd" + start-stop-daemon --start --quiet --exec /usr/bin/volfixd --nicelevel 12 --background --make-pidfile --pidfile /var/run/volfixd.pid + eend $? +} + +stop(){ + ebegin "Stopping volfixd" + start-stop-daemon --stop --quiet --pidfile=/var/run/volfixd.pid + eend $? +} + +restart(){ + svc_stop + svc_start +} diff --git a/volfixd.c b/volfixd.c new file mode 100644 index 0000000..0e8fcda --- /dev/null +++ b/volfixd.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <stdlib.h> +#include <alsa/asoundlib.h> + +int main(int argc, char *argv[]) { + struct snd_mixer_selem_regopt smixer_options; + int err, ival; + char card[64] = "default"; + long lval; + static snd_mixer_t *handle = NULL; + snd_mixer_elem_t *elem,*elemLFE; + snd_mixer_selem_id_t *sid; + + + if ((err = snd_mixer_open(&handle, 0)) < 0) { + error("Mixer %s open error: %s\n", card, snd_strerror(err)); + return err; + } + if ((err = snd_mixer_attach(handle, card)) < 0) { + error("Mixer attach %s error: %s", card, snd_strerror(err)); + snd_mixer_close(handle); + handle = NULL; + return err; + } + if ((err = snd_mixer_selem_register(handle, NULL, NULL)) < 0) { + error("Mixer register error: %s", snd_strerror(err)); + snd_mixer_close(handle); + handle = NULL; + return err; + } + if ((err = snd_mixer_load(handle)) < 0) { + error("Mixer %s load error: %s", card, snd_strerror(err)); + snd_mixer_close(handle); + handle = NULL; + return err; + } + + snd_mixer_selem_id_alloca(&sid); + snd_mixer_selem_id_set_index(sid, 0); + + snd_mixer_selem_id_set_name(sid, "Master"); + elem = snd_mixer_find_selem(handle, sid); + + snd_mixer_selem_id_set_name(sid, "LFE"); + elemLFE = snd_mixer_find_selem(handle, sid); + + while (1==1) { + snd_mixer_wait(handle,-1); + snd_mixer_handle_events(handle); + + snd_mixer_selem_get_playback_volume(elem, 1, &lval); + snd_mixer_selem_set_playback_volume(elemLFE, 0, lval); + + snd_mixer_selem_get_playback_switch(elem, 1, &ival); + snd_mixer_selem_set_playback_switch(elemLFE, 0, ival); + } + snd_mixer_close(handle); + snd_mixer_free(handle); + return(0); +} |