content: -- | Not exported by default because many of these have the same
  --   names as in "Control.Arrow"
  
  {-# LANGUAGE NoMonomorphismRestriction #-}
  {-# LANGUAGE ExtendedDefaultRules #-}
  
  module Vivid.ByteBeat (
       (&&&)
     , (|||)
     , (>>>)
     , (<<<)
       -- Reexported from Vivid.UGens.Algebraic:
     , xor
  
     , byteBeatFromHelpFile
     , baseThing
     ) where
  
  
  import Vivid.SynthDef
  -- import Vivid.SynthDef.ToSig
  import Vivid.UGens.Algebraic
  import Vivid.UGens.Args
  import Vivid.UGens.Generators.Deterministic (impulse)
  import Vivid.UGens.Triggers (pulseCount)
  
  (&&&), (|||), (>>>), (<<<)
     :: (ToSig s0 a, ToSig s1 a) => s0 -> s1 -> SDBody' a Signal
  -- | Bitwise @and@
  (&&&) = biOp BitAnd
  -- | Bitwise @or@
  (|||) = biOp BitOr
  -- | Bit shift right
  (>>>) = biOp ShiftRight
  -- | Bit shift left
  (<<<) = biOp ShiftLeft
  -- Also 'xor' from Vivid.UGens.Algebraic
  
  
  -- | E.g.
  -- 
  --   > play byteBeatFromHelpFile
  byteBeatFromHelpFile :: SDBody' a Signal
  byteBeatFromHelpFile = baseThing $ \t ->
     (((t ~* 15) &&& (t >>> 5)) |||
      ((t ~* 5)  &&& (t >>> 3)) |||
      ((t ~* 2)  &&& (t >>> 9)) |||
      ((t ~* 8)  &&& (t >>> 11)))
     ~- 3
  
  -- | E.g.
  -- 
  --   > play $ baseThing $ \t -> t &&& (t >>> 8)
  baseThing :: (Signal -> SDBody' a Signal) -> SDBody' a Signal
  baseThing f = do
     t <- pulseCount (trig_ $ impulse (freq_ 8e3))
     sig0 <- f t
     sig1 <- biOp Mod sig0 256
     ((sig1 ~/ 127) ~- 1) ~* 0.1
  