int asound_get_volume() { assert(m_elem != NULL); // Return the current volume value from [0-100] return rint(100 * get_normalized_playback_volume(m_elem, 0)); }
/* Gets mixer volume with given type, if left and right channel volume differ, * then gives the larger one. * In case of an error returns "-1". */ void get_vol(snd_mixer_elem_t* elem, enum Volume_type volume_type, long int* vol) { long int l, r; if (volume_type == hardware) { // TODO: check return value (int) for errors snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &l); snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &r); } else if (volume_type == decibels) { // TODO: check return value (int) for errors snd_mixer_selem_get_playback_dB(elem, SND_MIXER_SCHN_FRONT_LEFT, &l); snd_mixer_selem_get_playback_dB(elem, SND_MIXER_SCHN_FRONT_RIGHT, &r); } else if (volume_type == alsa_percentage) { double l_norm = get_normalized_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT); double r_norm = get_normalized_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT); PD_M("Got alsa_percentage volumes: %g, %g\n", l_norm, r_norm); l = lround(l_norm*100); r = lround(r_norm*100); } else if (volume_type == hardware_percentage) { long int min, max; snd_mixer_selem_get_playback_volume_range(elem, &min, &max); snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_LEFT, &l); snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_FRONT_RIGHT, &r); long int vol_to_percentage = l >= r ? l : r; change_range(&vol_to_percentage, min, max, 0, 100, false); *vol = vol_to_percentage; return; } else { // Error l = -1; r = -1; } *vol = l >= r ? l : r; PD_M("get_vol returns: %li\n", *vol); }
int asound_get_volume() { if(m_elem == NULL) { return 0; } // Return the current volume value from [0-100] if(config_get_decibel_scale()) { long pmin, pmax, value; snd_mixer_selem_get_playback_volume_range(m_elem, &pmin, &pmax); snd_mixer_selem_get_playback_volume(m_elem, 0, &value); return 100 * (value - pmin) / (pmax - pmin); } else return rint(100 * get_normalized_playback_volume(m_elem, 0)); }