Portability | non-portable (Linux only) |
---|---|
Stability | experimental |
Maintainer | Thomas Tuegel <ttuegel@gmail.com> |
Safe Haskell | None |
This library provides bindings to the Advanced Linux Sound Architecture (ALSA) library API. The portability of this library is limited to systems with ALSA (i.e., Linux systems).
- data Control = Control {}
- data Mixer
- data Channel
- = Unknown
- | FrontLeft
- | FrontRight
- | RearLeft
- | RearRight
- | FrontCenter
- | Woofer
- | SideLeft
- | SideRight
- | RearCenter
- | Last
- | SND_MIXER_SCHN_MONO
- data PerChannel e
- = Joined { }
- | PerChannel {
- getPerChannel :: IO [(Channel, e)]
- setPerChannel :: [(Channel, e)] -> IO ()
- perChannels :: [Channel]
- data Volume = Volume {}
- type Switch = PerChannel Bool
- controls :: Mixer -> IO [Control]
- withMixer :: String -> (Mixer -> IO a) -> IO a
- getControlByName :: Mixer -> String -> IO (Maybe Control)
- common :: Either a (Maybe a, Maybe a) -> Maybe a
- playback :: Either a (Maybe a, Maybe a) -> Maybe a
- capture :: Either a (Maybe a, Maybe a) -> Maybe a
- channels :: PerChannel e -> [Channel]
- allChannels :: [Channel]
- joined :: PerChannel e -> Bool
- perChannel :: PerChannel e -> Bool
- getChannel :: Channel -> PerChannel x -> IO (Maybe x)
- setChannel :: Channel -> PerChannel x -> x -> IO ()
Types
Control
represents one of the controls belonging to an ALSA mixer
element. Each control has a number of playback and capture channels.
The control may also have a switch and/or a volume capability associated
with it. The capability can be common to both playback and capture, or
there can be separate capabilities for each.
data PerChannel e Source
PerChannel
represents a capability that with either a separate value for
each channel or with a common value for all channels.
Joined | |
PerChannel | |
|
Volume
represents a volume capability. There may be a separate value per
channel, but each capability has only one range.
Volume | |
|
type Switch = PerChannel BoolSource
Switch
represents a switch capability for controls and channels that can
be muted and unmuted.
Functions
Mixers
withMixer :: String -> (Mixer -> IO a) -> IO aSource
Perform an IO
action with the named mixer. An exception will be
thrown if the named mixer cannot be found. A mixer named "default"
should always exist.
Controls
common :: Either a (Maybe a, Maybe a) -> Maybe aSource
For a given capability, which may be for either playback or capture, or common to both, return the common capability if it exists.
playback :: Either a (Maybe a, Maybe a) -> Maybe aSource
For a given capability, which may be for either playback or capture, or common to both, return the playback capability if it exists.
capture :: Either a (Maybe a, Maybe a) -> Maybe aSource
For a given capability, which may be for either playback or capture, or common to both, return the capture capability if it exists.
PerChannels
channels :: PerChannel e -> [Channel]Source
All channels supported by a PerChannel
object.
allChannels :: [Channel]Source
joined :: PerChannel e -> BoolSource
True if the PerChannel
object has a common value for all channels.
perChannel :: PerChannel e -> BoolSource
True if the PerChannel
object has a separate value for each channel.
getChannel :: Channel -> PerChannel x -> IO (Maybe x)Source
Get the value associated with a particular channel, if that channel exists.
setChannel :: Channel -> PerChannel x -> x -> IO ()Source
Set the value associated with a particular channel, if that channel exists.
Examples
Getting and setting the volume of a Control
This example demonstrates the method of accessing the volume of a Control. The example function reads the volume and increases it by the value supplied.
changeVolumeBy :: Integer -> IO () changeVolumeBy i = withMixer "default" $ \mixer -> do Just control <- getControlByName mixer "Master" let Just playbackVolume = playback $ volume control (min, max) <- getRange playbackVolume Just vol <- getChannel FrontLeft $ value $ playbackVolume when ((i > 0 && vol < max) || (i < 0 && vol > min)) $ setChannel FrontLeft (value $ playbackVolume) $ vol + i
Getting and setting the switch of a Control
This example demonstrates the method of accessing the switch of a Control. The example function reads the value of the switch and toggles it.
toggleMute :: IO () toggleMute = withMixer "default" $ \mixer -> do Just control <- getControlByName "default" "Master" let Just playbackSwitch = playback $ switch control Just sw <- getChannel FrontLeft playbackSwitch setChannel FrontLeft playbackSwitch $ not sw