diff -Naur /var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/audio.c xmms-arts-0.4/audio.c --- /var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/audio.c 2002-11-17 03:56:17.000000000 +0100 +++ xmms-arts-0.4/audio.c 2002-11-17 03:57:13.000000000 +0100 @@ -211,12 +211,17 @@ } } +float artsd_get_internal_volume(); + static void artsd_write_audio(gpointer data,gint length) { int errorcode; AFormat new_format; gint new_frequency,new_channels; EffectPlugin *ep; + short *samples = (short*)data; + gint i; + float volume = artsd_get_internal_volume(); new_format = input_format; new_frequency = input_frequency; @@ -242,6 +247,9 @@ if(effects_enabled() && ep && ep->mod_samples) length = ep->mod_samples(&data,length, input_format, input_frequency, input_channels); + for (i = 0; i < (length / 2); i++) + samples[i] *= volume * volume; + errorcode = arts_write(stream,artsd_translate(data,length),length); if(errorcode < 0) fprintf(stderr,"arts_write error: %s\n",arts_error_text(errorcode)); diff -Naur /var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/mixer.c xmms-arts-0.4/mixer.c --- /var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/mixer.c 2000-09-01 14:43:45.000000000 +0200 +++ xmms-arts-0.4/mixer.c 2002-11-17 03:47:08.000000000 +0100 @@ -25,49 +25,19 @@ #include #include +static float volume = 1.0; + void artsd_get_volume(int *l, int *r) { - int fd, v, cmd, devs; - fd = open("/dev/mixer", O_RDONLY); - if (fd != -1) - { - ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs); - if (devs & SOUND_MASK_PCM) - cmd = SOUND_MIXER_READ_PCM; - else if (devs & SOUND_MASK_VOLUME) - cmd = SOUND_MIXER_READ_VOLUME; - else - { - close(fd); - return; - } - ioctl(fd, cmd, &v); - *r = (v & 0xFF00) >> 8; - *l = (v & 0x00FF); - close(fd); - } + *l = *r = volume * 100; } void artsd_set_volume(int l, int r) { - int fd, v, cmd, devs; - - fd = open("/dev/mixer", O_RDONLY); + volume = ((float)l + (float)r) / 200; +} - if (fd != -1) - { - ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs); - if (devs & SOUND_MASK_PCM) - cmd = SOUND_MIXER_WRITE_PCM; - else if (devs & SOUND_MASK_VOLUME) - cmd = SOUND_MIXER_WRITE_VOLUME; - else - { - close(fd); - return; - } - v = (r << 8) | l; - ioctl(fd, cmd, &v); - close(fd); - } +float artsd_get_internal_volume() +{ + return volume; }