Copyright | (c) Thomas Tuegel 2011 |
---|---|
License | BSD |
Maintainer | Thomas Tuegel <ttuegel@gmail.com> |
Stability | experimental |
Portability | non-portable (Linux only) |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
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). The functions in this library
throw errors of type T
on failure.
Synopsis
- data Control = Control {}
- data Mixer
- data Channel
- data PerChannel e
- = Joined { }
- | PerChannel {
- getPerChannel :: IO [(Channel, e)]
- setPerChannel :: [(Channel, e)] -> IO ()
- perChannels :: [Channel]
- data Volume = Volume {}
- type Switch = PerChannel Bool
- data CUInt
- data CLong
- 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.
Unknown | |
FrontLeft | |
SND_MIXER_SCHN_MONO | |
FrontRight | |
RearLeft | |
RearRight | |
FrontCenter | |
Woofer | |
SideLeft | |
SideRight | |
RearCenter | |
Last |
Instances
Enum Channel Source # | |
Read Channel Source # | |
Show Channel Source # | |
Eq Channel Source # | |
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 Bool Source #
Switch
represents a switch capability for controls and channels that can
be muted and unmuted.
Haskell type representing the C unsigned int
type.
(The concrete types of Foreign.C.Types are platform-specific.)
Instances
Storable CUInt | |
Bits CUInt | |
Defined in Foreign.C.Types (.&.) :: CUInt -> CUInt -> CUInt # (.|.) :: CUInt -> CUInt -> CUInt # xor :: CUInt -> CUInt -> CUInt # complement :: CUInt -> CUInt # shift :: CUInt -> Int -> CUInt # rotate :: CUInt -> Int -> CUInt # setBit :: CUInt -> Int -> CUInt # clearBit :: CUInt -> Int -> CUInt # complementBit :: CUInt -> Int -> CUInt # testBit :: CUInt -> Int -> Bool # bitSizeMaybe :: CUInt -> Maybe Int # shiftL :: CUInt -> Int -> CUInt # unsafeShiftL :: CUInt -> Int -> CUInt # shiftR :: CUInt -> Int -> CUInt # unsafeShiftR :: CUInt -> Int -> CUInt # rotateL :: CUInt -> Int -> CUInt # | |
FiniteBits CUInt | |
Defined in Foreign.C.Types finiteBitSize :: CUInt -> Int # countLeadingZeros :: CUInt -> Int # countTrailingZeros :: CUInt -> Int # | |
Bounded CUInt | |
Enum CUInt | |
Ix CUInt | |
Num CUInt | |
Read CUInt | |
Integral CUInt | |
Real CUInt | |
Defined in Foreign.C.Types toRational :: CUInt -> Rational # | |
Show CUInt | |
Eq CUInt | |
Ord CUInt | |
Haskell type representing the C long
type.
(The concrete types of Foreign.C.Types are platform-specific.)
Instances
Storable CLong | |
Bits CLong | |
Defined in Foreign.C.Types (.&.) :: CLong -> CLong -> CLong # (.|.) :: CLong -> CLong -> CLong # xor :: CLong -> CLong -> CLong # complement :: CLong -> CLong # shift :: CLong -> Int -> CLong # rotate :: CLong -> Int -> CLong # setBit :: CLong -> Int -> CLong # clearBit :: CLong -> Int -> CLong # complementBit :: CLong -> Int -> CLong # testBit :: CLong -> Int -> Bool # bitSizeMaybe :: CLong -> Maybe Int # shiftL :: CLong -> Int -> CLong # unsafeShiftL :: CLong -> Int -> CLong # shiftR :: CLong -> Int -> CLong # unsafeShiftR :: CLong -> Int -> CLong # rotateL :: CLong -> Int -> CLong # | |
FiniteBits CLong | |
Defined in Foreign.C.Types finiteBitSize :: CLong -> Int # countLeadingZeros :: CLong -> Int # countTrailingZeros :: CLong -> Int # | |
Bounded CLong | |
Enum CLong | |
Ix CLong | |
Num CLong | |
Read CLong | |
Integral CLong | |
Real CLong | |
Defined in Foreign.C.Types toRational :: CLong -> Rational # | |
Show CLong | |
Eq CLong | |
Ord CLong | |
Functions
Mixers
Controls
common :: Either a (Maybe a, Maybe a) -> Maybe a Source #
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 a Source #
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 a Source #
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 -> Bool Source #
True if the PerChannel
object has a common value for all channels.
perChannel :: PerChannel e -> Bool Source #
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 :: CLong -> 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 mixer "Master" let Just playbackSwitch = playback $ switch control Just sw <- getChannel FrontLeft playbackSwitch setChannel FrontLeft playbackSwitch $ not sw