Bugfix: mixerbar showed wrong values
[monky] / src / mixer.c
index 109ce9b..9cdf2b8 100644 (file)
@@ -177,11 +177,16 @@ int mixer_init (const char *name)
 }
 static int mixer_get_avg (int i)
 {
-  long val;
+       long val;
 
-  snd_mixer_handle_events (data.mixer);
-  snd_mixer_selem_get_playback_volume (data.elem, 0, &val);
-  return (int) val;
+       snd_mixer_handle_events (data.mixer);
+       snd_mixer_selem_get_playback_volume (data.elem, 0, &val);
+       if(data.vol_max != 100) {
+               float avgf = ((float)val / data.vol_max) * 100;
+               int avg = (int)avgf;
+               return (avgf - avg < 0.5) ? avg : avg + 1;
+       }
+       return (int) val;
 }
 static int mixer_get_left (int i)
 {
@@ -276,7 +281,7 @@ int mixer_is_mute(int i)
        return !mixer_get(i);
 }
 
-#define mixer_to_255(i, x) x
+#define mixer_to_255(i, x) x * 2.55
 #endif /* MIXER_IS_ALSA */
 
 void parse_mixer_arg(struct text_object *obj, const char *arg)