Beispiel #1
0
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));
}
Beispiel #2
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));
}