From e3c9b33170f1064077aa8578342369657b9e059c Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Thu, 13 Jan 2011 10:34:09 -0600 Subject: Added volume monitor based on alsa-mixer. --- src/Plugins/Monitors/Volume.hs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/Plugins/Monitors/Volume.hs (limited to 'src/Plugins/Monitors/Volume.hs') diff --git a/src/Plugins/Monitors/Volume.hs b/src/Plugins/Monitors/Volume.hs new file mode 100644 index 0000000..c7814a8 --- /dev/null +++ b/src/Plugins/Monitors/Volume.hs @@ -0,0 +1,36 @@ +module Plugins.Monitors.Volume (runVolume, volumeConfig) where + +import Control.Monad ( liftM ) +import Data.Maybe +import Plugins.Monitors.Common +import Sound.ALSA.Mixer + +percent :: Integer -> Integer -> Integer -> Float +percent v' lo' hi' = (v - lo) / (hi - lo) + where v = fromIntegral v' + lo = fromIntegral lo' + hi = fromIntegral hi' + +volumeConfig :: IO MConfig +volumeConfig = mkMConfig "Vol: % " + ["volume","dB","on","off"] + +runVolume :: String -> String -> [String] -> Monitor String +runVolume mixerName controlName _ = do + control <- liftM fromJust $ io $ getControlByName mixerName controlName + let volumeControl = fromJust $ maybe (playback $ volume control) Just + (common $ volume control) + switchControl = fromJust $ maybe (playback $ switch control) Just + (common $ switch control) + (lo, hi) <- io $ getRange volumeControl + val <- liftM fromJust $ io $ getChannel FrontLeft $ value volumeControl + db <- liftM fromJust $ io $ getChannel FrontLeft $ dB volumeControl + sw <- liftM fromJust $ io $ getChannel FrontLeft $ switchControl + p <- showPercentsWithColors [ percent val lo hi ] + let d :: Double + d = fromIntegral db / 100.0 + dStr = showDigits 2 d + parseTemplate $ p ++ [ dStr ] + ++ [ if sw then "[on] " else "" + , if sw then "" else "[off]" + ] -- cgit v1.2.3