Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 10857 | Differences between
and this patch

Collapse All | Expand All

(-)/var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/audio.c (+8 lines)
Lines 211-222 Link Here
211
	}
211
	}
212
}
212
}
213
213
214
float artsd_get_internal_volume();
215
214
static void artsd_write_audio(gpointer data,gint length)
216
static void artsd_write_audio(gpointer data,gint length)
215
{
217
{
216
        int errorcode;
218
        int errorcode;
217
	AFormat new_format;
219
	AFormat new_format;
218
	gint new_frequency,new_channels;
220
	gint new_frequency,new_channels;
219
	EffectPlugin *ep;
221
	EffectPlugin *ep;
222
	short *samples = (short*)data;
223
	gint i;
224
	float volume = artsd_get_internal_volume();
220
225
221
	new_format = input_format;
226
	new_format = input_format;
222
	new_frequency = input_frequency;
227
	new_frequency = input_frequency;
Lines 242-247 Link Here
242
	if(effects_enabled() && ep && ep->mod_samples)
247
	if(effects_enabled() && ep && ep->mod_samples)
243
		length = ep->mod_samples(&data,length, input_format, input_frequency, input_channels);
248
		length = ep->mod_samples(&data,length, input_format, input_frequency, input_channels);
244
249
250
	for (i = 0; i < (length / 2); i++)
251
		samples[i] *= volume * volume;
252
245
	errorcode = arts_write(stream,artsd_translate(data,length),length);
253
	errorcode = arts_write(stream,artsd_translate(data,length),length);
246
	if(errorcode < 0)
254
	if(errorcode < 0)
247
		fprintf(stderr,"arts_write error: %s\n",arts_error_text(errorcode));
255
		fprintf(stderr,"arts_write error: %s\n",arts_error_text(errorcode));
(-)/var/tmp/portage/xmms-arts-0.4-r6/work/xmms-arts-0.4/mixer.c (-38 / +8 lines)
Lines 25-73 Link Here
25
#include <sys/ioctl.h>
25
#include <sys/ioctl.h>
26
#include <sys/soundcard.h>
26
#include <sys/soundcard.h>
27
27
28
static float volume = 1.0;
29
28
void artsd_get_volume(int *l, int *r)
30
void artsd_get_volume(int *l, int *r)
29
{
31
{
30
	int fd, v, cmd, devs;
32
	*l = *r = volume * 100;
31
	fd = open("/dev/mixer", O_RDONLY);
32
	if (fd != -1)
33
	{
34
		ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
35
		if (devs & SOUND_MASK_PCM)
36
			cmd = SOUND_MIXER_READ_PCM;
37
		else if (devs & SOUND_MASK_VOLUME)
38
			cmd = SOUND_MIXER_READ_VOLUME;
39
		else
40
		{
41
			close(fd);
42
			return;
43
		}
44
		ioctl(fd, cmd, &v);
45
		*r = (v & 0xFF00) >> 8;
46
		*l = (v & 0x00FF);
47
		close(fd);
48
	}
49
}
33
}
50
34
51
void artsd_set_volume(int l, int r)
35
void artsd_set_volume(int l, int r)
52
{
36
{
53
	int fd, v, cmd, devs;
37
	volume = ((float)l + (float)r) / 200;
54
38
}
55
	fd = open("/dev/mixer", O_RDONLY);
56
39
57
	if (fd != -1)
40
float artsd_get_internal_volume()
58
	{
41
{
59
		ioctl(fd, SOUND_MIXER_READ_DEVMASK, &devs);
42
	return volume;
60
		if (devs & SOUND_MASK_PCM)
61
			cmd = SOUND_MIXER_WRITE_PCM;
62
		else if (devs & SOUND_MASK_VOLUME)
63
			cmd = SOUND_MIXER_WRITE_VOLUME;
64
		else
65
		{
66
			close(fd);
67
			return;
68
		}
69
		v = (r << 8) | l;
70
		ioctl(fd, cmd, &v);
71
		close(fd);
72
	}
73
}
43
}

Return to bug 10857