alsa-mixer-0.3.0: Bindings to the ALSA simple mixer API.
Copyright(c) Thomas Tuegel 2011
LicenseBSD
MaintainerThomas Tuegel <ttuegel@gmail.com>
Stabilityexperimental
Portabilitynon-portable (Linux only)
Safe HaskellSafe
LanguageHaskell98

Sound.ALSA.Mixer

Description

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

Types

data Control #

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.

Constructors

Control 

Fields

data Mixer #

data Channel #

Instances

Instances details
Enum Channel # 
Instance details

Defined in Sound.ALSA.Mixer.Internal

Eq Channel # 
Instance details

Defined in Sound.ALSA.Mixer.Internal

Methods

(==) :: Channel -> Channel -> Bool

(/=) :: Channel -> Channel -> Bool

Read Channel # 
Instance details

Defined in Sound.ALSA.Mixer.Internal

Methods

readsPrec :: Int -> ReadS Channel

readList :: ReadS [Channel]

readPrec :: ReadPrec Channel

readListPrec :: ReadPrec [Channel]

Show Channel # 
Instance details

Defined in Sound.ALSA.Mixer.Internal

Methods

showsPrec :: Int -> Channel -> ShowS

show :: Channel -> String

showList :: [Channel] -> ShowS

data PerChannel e #

PerChannel represents a capability that with either a separate value for each channel or with a common value for all channels.

Constructors

Joined 

Fields

PerChannel 

Fields

data Volume #

Volume represents a volume capability. There may be a separate value per channel, but each capability has only one range.

Constructors

Volume 

Fields

type Switch = PerChannel Bool #

Switch represents a switch capability for controls and channels that can be muted and unmuted.

data CUInt #

Instances

Instances details
Bounded CUInt 
Instance details

Defined in Foreign.C.Types

Enum CUInt 
Instance details

Defined in Foreign.C.Types

Eq CUInt 
Instance details

Defined in Foreign.C.Types

Methods

(==) :: CUInt -> CUInt -> Bool

(/=) :: CUInt -> CUInt -> Bool

Integral CUInt 
Instance details

Defined in Foreign.C.Types

Methods

quot :: CUInt -> CUInt -> CUInt

rem :: CUInt -> CUInt -> CUInt

div :: CUInt -> CUInt -> CUInt

mod :: CUInt -> CUInt -> CUInt

quotRem :: CUInt -> CUInt -> (CUInt, CUInt)

divMod :: CUInt -> CUInt -> (CUInt, CUInt)

toInteger :: CUInt -> Integer

Num CUInt 
Instance details

Defined in Foreign.C.Types

Methods

(+) :: CUInt -> CUInt -> CUInt

(-) :: CUInt -> CUInt -> CUInt

(*) :: CUInt -> CUInt -> CUInt

negate :: CUInt -> CUInt

abs :: CUInt -> CUInt

signum :: CUInt -> CUInt

fromInteger :: Integer -> CUInt

Ord CUInt 
Instance details

Defined in Foreign.C.Types

Methods

compare :: CUInt -> CUInt -> Ordering

(<) :: CUInt -> CUInt -> Bool

(<=) :: CUInt -> CUInt -> Bool

(>) :: CUInt -> CUInt -> Bool

(>=) :: CUInt -> CUInt -> Bool

max :: CUInt -> CUInt -> CUInt

min :: CUInt -> CUInt -> CUInt

Read CUInt 
Instance details

Defined in Foreign.C.Types

Methods

readsPrec :: Int -> ReadS CUInt

readList :: ReadS [CUInt]

readPrec :: ReadPrec CUInt

readListPrec :: ReadPrec [CUInt]

Real CUInt 
Instance details

Defined in Foreign.C.Types

Methods

toRational :: CUInt -> Rational

Show CUInt 
Instance details

Defined in Foreign.C.Types

Methods

showsPrec :: Int -> CUInt -> ShowS

show :: CUInt -> String

showList :: [CUInt] -> ShowS

Bits CUInt 
Instance details

Defined in Foreign.C.Types

Methods

(.&.) :: CUInt -> CUInt -> CUInt

(.|.) :: CUInt -> CUInt -> CUInt

xor :: CUInt -> CUInt -> CUInt

complement :: CUInt -> CUInt

shift :: CUInt -> Int -> CUInt

rotate :: CUInt -> Int -> CUInt

zeroBits :: CUInt

bit :: Int -> CUInt

setBit :: CUInt -> Int -> CUInt

clearBit :: CUInt -> Int -> CUInt

complementBit :: CUInt -> Int -> CUInt

testBit :: CUInt -> Int -> Bool

bitSizeMaybe :: CUInt -> Maybe Int

bitSize :: CUInt -> Int

isSigned :: CUInt -> Bool

shiftL :: CUInt -> Int -> CUInt

unsafeShiftL :: CUInt -> Int -> CUInt

shiftR :: CUInt -> Int -> CUInt

unsafeShiftR :: CUInt -> Int -> CUInt

rotateL :: CUInt -> Int -> CUInt

rotateR :: CUInt -> Int -> CUInt

popCount :: CUInt -> Int

FiniteBits CUInt 
Instance details

Defined in Foreign.C.Types

Storable CUInt 
Instance details

Defined in Foreign.C.Types

Methods

sizeOf :: CUInt -> Int

alignment :: CUInt -> Int

peekElemOff :: Ptr CUInt -> Int -> IO CUInt

pokeElemOff :: Ptr CUInt -> Int -> CUInt -> IO ()

peekByteOff :: Ptr b -> Int -> IO CUInt

pokeByteOff :: Ptr b -> Int -> CUInt -> IO ()

peek :: Ptr CUInt -> IO CUInt

poke :: Ptr CUInt -> CUInt -> IO ()

data CLong #

Instances

Instances details
Bounded CLong 
Instance details

Defined in Foreign.C.Types

Enum CLong 
Instance details

Defined in Foreign.C.Types

Eq CLong 
Instance details

Defined in Foreign.C.Types

Methods

(==) :: CLong -> CLong -> Bool

(/=) :: CLong -> CLong -> Bool

Integral CLong 
Instance details

Defined in Foreign.C.Types

Methods

quot :: CLong -> CLong -> CLong

rem :: CLong -> CLong -> CLong

div :: CLong -> CLong -> CLong

mod :: CLong -> CLong -> CLong

quotRem :: CLong -> CLong -> (CLong, CLong)

divMod :: CLong -> CLong -> (CLong, CLong)

toInteger :: CLong -> Integer

Num CLong 
Instance details

Defined in Foreign.C.Types

Methods

(+) :: CLong -> CLong -> CLong

(-) :: CLong -> CLong -> CLong

(*) :: CLong -> CLong -> CLong

negate :: CLong -> CLong

abs :: CLong -> CLong

signum :: CLong -> CLong

fromInteger :: Integer -> CLong

Ord CLong 
Instance details

Defined in Foreign.C.Types

Methods

compare :: CLong -> CLong -> Ordering

(<) :: CLong -> CLong -> Bool

(<=) :: CLong -> CLong -> Bool

(>) :: CLong -> CLong -> Bool

(>=) :: CLong -> CLong -> Bool

max :: CLong -> CLong -> CLong

min :: CLong -> CLong -> CLong

Read CLong 
Instance details

Defined in Foreign.C.Types

Methods

readsPrec :: Int -> ReadS CLong

readList :: ReadS [CLong]

readPrec :: ReadPrec CLong

readListPrec :: ReadPrec [CLong]

Real CLong 
Instance details

Defined in Foreign.C.Types

Methods

toRational :: CLong -> Rational

Show CLong 
Instance details

Defined in Foreign.C.Types

Methods

showsPrec :: Int -> CLong -> ShowS

show :: CLong -> String

showList :: [CLong] -> ShowS

Bits CLong 
Instance details

Defined in Foreign.C.Types

Methods

(.&.) :: CLong -> CLong -> CLong

(.|.) :: CLong -> CLong -> CLong

xor :: CLong -> CLong -> CLong

complement :: CLong -> CLong

shift :: CLong -> Int -> CLong

rotate :: CLong -> Int -> CLong

zeroBits :: CLong

bit :: Int -> CLong

setBit :: CLong -> Int -> CLong

clearBit :: CLong -> Int -> CLong

complementBit :: CLong -> Int -> CLong

testBit :: CLong -> Int -> Bool

bitSizeMaybe :: CLong -> Maybe Int

bitSize :: CLong -> Int

isSigned :: CLong -> Bool

shiftL :: CLong -> Int -> CLong

unsafeShiftL :: CLong -> Int -> CLong

shiftR :: CLong -> Int -> CLong

unsafeShiftR :: CLong -> Int -> CLong

rotateL :: CLong -> Int -> CLong

rotateR :: CLong -> Int -> CLong

popCount :: CLong -> Int

FiniteBits CLong 
Instance details

Defined in Foreign.C.Types

Storable CLong 
Instance details

Defined in Foreign.C.Types

Methods

sizeOf :: CLong -> Int

alignment :: CLong -> Int

peekElemOff :: Ptr CLong -> Int -> IO CLong

pokeElemOff :: Ptr CLong -> Int -> CLong -> IO ()

peekByteOff :: Ptr b -> Int -> IO CLong

pokeByteOff :: Ptr b -> Int -> CLong -> IO ()

peek :: Ptr CLong -> IO CLong

poke :: Ptr CLong -> CLong -> IO ()

Functions

Mixers

controls :: Mixer -> IO [Control] #

All the Control objects associated with a particular Mixer.

withMixer :: String -> (Mixer -> IO a) -> IO a #

Perform an IO action with the named mixer. An exception of type T will be thrown if the named mixer cannot be found. A mixer named "default" should always exist.

Controls

getControlByName #

Arguments

:: Mixer

Mixer

-> String

Control name

-> IO (Maybe Control) 

Get the named Control, if it exists, from the named Mixer.

common :: Either a (Maybe a, Maybe a) -> Maybe a #

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 #

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 #

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] #

All channels supported by a PerChannel object.

joined :: PerChannel e -> Bool #

True if the PerChannel object has a common value for all channels.

perChannel :: PerChannel e -> Bool #

True if the PerChannel object has a separate value for each channel.

getChannel :: Channel -> PerChannel x -> IO (Maybe x) #

Get the value associated with a particular channel, if that channel exists.

setChannel :: Channel -> PerChannel x -> x -> IO () #

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