{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.OscillatorNode
       (start, stop, setPeriodicWave, pattern UNSCHEDULED_STATE,
        pattern SCHEDULED_STATE, pattern PLAYING_STATE,
        pattern FINISHED_STATE, setType, getType, getPlaybackState,
        getFrequency, getDetune, ended, OscillatorNode(..),
        gTypeOscillatorNode)
       where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.start Mozilla OscillatorNode.start documentation> 
start :: (MonadDOM m) => OscillatorNode -> Maybe Double -> m ()
start :: OscillatorNode -> Maybe Double -> m ()
start OscillatorNode
self Maybe Double
when
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"start" [Maybe Double -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe Double
when]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.stop Mozilla OscillatorNode.stop documentation> 
stop :: (MonadDOM m) => OscillatorNode -> Maybe Double -> m ()
stop :: OscillatorNode -> Maybe Double -> m ()
stop OscillatorNode
self Maybe Double
when = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"stop" [Maybe Double -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe Double
when]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.setPeriodicWave Mozilla OscillatorNode.setPeriodicWave documentation> 
setPeriodicWave ::
                (MonadDOM m) => OscillatorNode -> Maybe PeriodicWave -> m ()
setPeriodicWave :: OscillatorNode -> Maybe PeriodicWave -> m ()
setPeriodicWave OscillatorNode
self Maybe PeriodicWave
wave
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"setPeriodicWave" [Maybe PeriodicWave -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PeriodicWave
wave]))
pattern $bUNSCHEDULED_STATE :: a
$mUNSCHEDULED_STATE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
UNSCHEDULED_STATE = 0
pattern $bSCHEDULED_STATE :: a
$mSCHEDULED_STATE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SCHEDULED_STATE = 1
pattern $bPLAYING_STATE :: a
$mPLAYING_STATE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
PLAYING_STATE = 2
pattern $bFINISHED_STATE :: a
$mFINISHED_STATE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
FINISHED_STATE = 3

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.type Mozilla OscillatorNode.type documentation> 
setType :: (MonadDOM m) => OscillatorNode -> OscillatorType -> m ()
setType :: OscillatorNode -> OscillatorType -> m ()
setType OscillatorNode
self OscillatorType
val = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (OscillatorNode
self OscillatorNode
-> Getting (DOM ()) OscillatorNode (DOM ()) -> DOM ()
forall s a. s -> Getting a s a -> a
^. [Char]
-> JSM JSVal
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
forall name val.
(ToJSString name, ToJSVal val) =>
name
-> val
-> forall o. MakeObject o => IndexPreservingGetter o (DOM ())
jss [Char]
"type" (OscillatorType -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal OscillatorType
val))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.type Mozilla OscillatorNode.type documentation> 
getType :: (MonadDOM m) => OscillatorNode -> m OscillatorType
getType :: OscillatorNode -> m OscillatorType
getType OscillatorNode
self = DOM OscillatorType -> m OscillatorType
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter OscillatorNode (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"type") JSM JSVal -> (JSVal -> DOM OscillatorType) -> DOM OscillatorType
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM OscillatorType
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.playbackState Mozilla OscillatorNode.playbackState documentation> 
getPlaybackState :: (MonadDOM m) => OscillatorNode -> m Word
getPlaybackState :: OscillatorNode -> m Word
getPlaybackState OscillatorNode
self
  = DOM Word -> m Word
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Double -> Word
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Word) -> JSM Double -> DOM Word
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter OscillatorNode (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"playbackState") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.frequency Mozilla OscillatorNode.frequency documentation> 
getFrequency :: (MonadDOM m) => OscillatorNode -> m AudioParam
getFrequency :: OscillatorNode -> m AudioParam
getFrequency OscillatorNode
self
  = DOM AudioParam -> m AudioParam
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter OscillatorNode (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"frequency") JSM JSVal -> (JSVal -> DOM AudioParam) -> DOM AudioParam
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM AudioParam
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.detune Mozilla OscillatorNode.detune documentation> 
getDetune :: (MonadDOM m) => OscillatorNode -> m AudioParam
getDetune :: OscillatorNode -> m AudioParam
getDetune OscillatorNode
self
  = DOM AudioParam -> m AudioParam
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((OscillatorNode
self OscillatorNode
-> Getting (JSM JSVal) OscillatorNode (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter OscillatorNode (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"detune") JSM JSVal -> (JSVal -> DOM AudioParam) -> DOM AudioParam
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM AudioParam
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/OscillatorNode.onended Mozilla OscillatorNode.onended documentation> 
ended :: EventName OscillatorNode Event
ended :: EventName OscillatorNode Event
ended = DOMString -> EventName OscillatorNode Event
forall t e. DOMString -> EventName t e
unsafeEventName ([Char] -> DOMString
forall a. ToJSString a => a -> DOMString
toJSString [Char]
"ended")