-------------------------------------------------------------------------------- -- | -- Module : Sound.ALSA.Sequencer.Queue.Tempo -- Copyright : (c) Henning Thielemann, 2010 -- (c) Iavor S. Diatchki, 2007 -- License : BSD3 -- -- Maintainer: Henning Thielemann -- Stability : provisional -- -- This module contains functions for working with sequencer queue. -- Reference: -- -------------------------------------------------------------------------------- module Sound.ALSA.Sequencer.Queue.Tempo ( T , get , set , copy , clone , getQueue , getTempo , getPPQ , getSkew , getSkewBase , setTempo , setPPQ , setSkew , setSkewBase ) where import qualified Sound.ALSA.Sequencer.Marshal.Queue as Queue import qualified Sound.ALSA.Sequencer.Marshal.Sequencer as Seq import qualified Sound.ALSA.Sequencer.Area as Area import qualified Sound.ALSA.Exception as Exc import Foreign.Ptr (Ptr, ) import Foreign.C.Types (CInt, ) import Data.Word (Word, ) type T = Area.QueueTempo type T_ = Area.QueueTempo_ get :: Seq.T mode -> Queue.T -> IO T get (Seq.Cons h) q = do tempo <- Area.queue_tempo_malloc Exc.checkResult "get_queue_tempo" =<< Area.with_queue_tempo tempo (snd_seq_get_queue_tempo h (Queue.exp q)) return tempo foreign import ccall "alsa/asoundlib.h snd_seq_get_queue_tempo" snd_seq_get_queue_tempo :: Ptr Seq.Core -> CInt -> Ptr T_ -> IO CInt set :: Seq.T mode -> Queue.T -> T -> IO () set (Seq.Cons h) p tempo = Exc.checkResult_ "set_queue_tempo" =<< Area.with_queue_tempo tempo (snd_seq_set_queue_tempo h (Queue.exp p)) foreign import ccall "alsa/asoundlib.h snd_seq_set_queue_tempo" snd_seq_set_queue_tempo :: Ptr Seq.Core -> CInt -> Ptr T_ -> IO CInt copy :: T -> T -> IO () clone :: T -> IO T getQueue :: T -> IO Queue.T getTempo :: T -> IO Word getPPQ :: T -> IO Int getSkew :: T -> IO Word getSkewBase :: T -> IO Word setTempo :: T -> Word -> IO () setPPQ :: T -> Int -> IO () setSkew :: T -> Word -> IO () setSkewBase :: T -> Word -> IO () copy = Area.queue_tempo_copy clone = Area.queue_tempo_clone getQueue = Area.queue_tempo_get_queue getTempo = Area.queue_tempo_get_tempo getPPQ = Area.queue_tempo_get_ppq getSkew = Area.queue_tempo_get_skew getSkewBase = Area.queue_tempo_get_skew_base setTempo = Area.queue_tempo_set_tempo setPPQ = Area.queue_tempo_set_ppq setSkew = Area.queue_tempo_set_skew setSkewBase = Area.queue_tempo_set_skew_base