void setVol(int left, int right) { int err; callbacks(); cure->element.data.volume1.pvoices[0]=convert_range(left,0,100,cure->info.data.volume1.prange[0].min,cure->info.data.volume1.prange[0].max); if(cure->element.data.volume1.pvoices[0]>cure->info.data.volume1.prange[0].max) cure->element.data.volume1.pvoices[0]=cure->info.data.volume1.prange[0].max; if(cure->element.data.volume1.pvoices[0]<cure->info.data.volume1.prange[0].min) cure->element.data.volume1.pvoices[0]=cure->info.data.volume1.prange[0].min; cure->element.data.volume1.pvoices[1]=convert_range(right,0,100,cure->info.data.volume1.prange[1].min,cure->info.data.volume1.prange[1].max); if(cure->element.data.volume1.pvoices[1]>cure->info.data.volume1.prange[1].max) cure->element.data.volume1.pvoices[1]=cure->info.data.volume1.prange[1].max; if((err=snd_mixer_element_write(mixer_handle,&cure->element))<0) fprintf(stderr,"Mixer element write error: %s\n",snd_strerror(err)); return; }
static int setlevels(int card, int device) { snd_mixer_t *handle; snd_mixer_element_t element; int idx; int err; if ((err = snd_mixer_open(&handle, card, device)) < 0) { fprintf(stderr, "open failed: %s\n", snd_strerror(err)); return -1; } memset((void *)&element, '\0', sizeof(element)); strcpy(element.eid.name, "MIC Input Switch"); element.eid.index = 0; element.eid.type = SND_MIXER_ETYPE_SWITCH1; err = snd_mixer_element_build(handle, &element); if (err < 0) { fprintf(stderr, "error building input switch element: %s\n",snd_strerror(err)); snd_mixer_close(handle); return -1; } /* This is a bit ugly and hardcoded, should be fixed when the ad layer API is a bit richer. SNL */ for (idx = 0; idx < element.data.switch1.sw; idx++) snd_mixer_set_bit(element.data.switch1.psw, idx, 1); err = snd_mixer_element_write(handle, &element); if (err < 0) { fprintf(stderr, "error writing switch element: %s\n",snd_strerror(err)); snd_mixer_close(handle); return -1; } snd_mixer_element_free(&element); snd_mixer_close(handle); return 0; }