Codebase list squeezelite / f8c30ef
use raw volume api if db range is insufficent Adrian Smith 9 years ago
1 changed file(s) with 7 addition(s) and 7 deletion(s). Raw diff Collapse all Expand all
199199 snd_mixer_selem_set_playback_switch_all(elem, 1); // unmute
200200 }
201201
202 if ((err = snd_mixer_selem_get_playback_dB_range(elem, &min, &max)) < 0) {
203 // unable to get db range - set using raw values
202 if ((err = snd_mixer_selem_get_playback_dB_range(elem, &min, &max)) < 0 || max - min < 1000) {
203 // unable to get db range or range is less than 10dB - ignore and set using raw values
204204 if ((err = snd_mixer_selem_get_playback_volume_range(elem, &min, &max)) < 0) {
205 LOG_ERROR("unable to get volume raw", min, max);
205 LOG_ERROR("unable to get volume raw");
206206 } else {
207 long lraw = (MINVOL_DB + floor(ldB)) / MINVOL_DB * max;
208 long rraw = (MINVOL_DB + floor(rdB)) / MINVOL_DB * max;
209 LOG_DEBUG("setting vol raw [%ld-%ld]", min, max);
207 long lraw = (ldB > -MINVOL_DB ? MINVOL_DB + floor(ldB) : 0) / MINVOL_DB * max;
208 long rraw = (rdB > -MINVOL_DB ? MINVOL_DB + floor(rdB) : 0) / MINVOL_DB * max;
209 LOG_DEBUG("setting vol raw [%ld..%ld]", min, max);
210210 if ((err = snd_mixer_selem_set_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, lraw)) < 0) {
211211 LOG_ERROR("error setting left volume: %s", snd_strerror(err));
212212 }
216216 }
217217 } else {
218218 // set db directly
219 LOG_DEBUG("setting vol dB");
219 LOG_DEBUG("setting vol dB [%ld..%ld]", min, max);
220220 if ((err = snd_mixer_selem_set_playback_dB(elem, SND_MIXER_SCHN_FRONT_LEFT, 100 * ldB, 1)) < 0) {
221221 LOG_ERROR("error setting left volume: %s", snd_strerror(err));
222222 }