#ifndef lint static char rcsid[] = "$Id: mixer_ctl.c,v 1.1 1997/02/28 14:02:47 tommy Exp $"; #endif #include #include #include #include #include #include "play.h" static int get_volume_channel(int fd) { int channel; int tmp; if (ioctl(fd, SOUND_MIXER_READ_DEVMASK, &tmp) >= 0) { if (tmp & (1 << SOUND_MIXER_PCM)) channel = SOUND_MIXER_PCM; else channel = SOUND_MIXER_VOLUME; } return channel; } int set_mixer(arg_params_t *params) { register int fd, stat; int vol_chan; if (params->volume < 0 && params->bass < 0 && params->treble < 0) return FALSE; if ((fd = open(DEV_MIXER, O_RDONLY)) < 0) { warn(DEV_MIXER); return TRUE; } vol_chan = get_volume_channel(fd); if (params->bass >= 0) { int bass = params->bass | (params->bass << 8); stat = ioctl(fd, MIXER_WRITE(SOUND_MIXER_WRITE_BASS), &bass); if (stat < 0) warn(DEV_MIXER); } if (params->treble >= 0) { int treble = params->treble | (params->treble << 8); stat = ioctl(fd, MIXER_WRITE(SOUND_MIXER_WRITE_TREBLE), &treble); if (stat < 0) warn(DEV_MIXER); } if (params->volume >= 0) { int volume = params->volume | (params->volume << 8); /* no panning */ stat = ioctl(fd, MIXER_WRITE(vol_chan), &volume); if (stat < 0) warn(DEV_MIXER); } close(fd); return stat; }