{-# LANGUAGE PatternSynonyms #-} module Language.Javascript.JSaddle.DOM.Generated.AudioContext (newAudioContext, createBuffer, createBufferFromArrayBuffer, decodeAudioData, createBufferSource, createMediaElementSource, createMediaStreamSource, createMediaStreamDestination, createGain, createDelay, createBiquadFilter, createWaveShaper, createPanner, createConvolver, createDynamicsCompressor, createAnalyser, createScriptProcessor, createOscillator, createPeriodicWave, createChannelSplitter, createChannelMerger, startRendering, createGainNode, createDelayNode, createJavaScriptNode, getDestination, getCurrentTime, getSampleRate, getListener, getActiveSourceCount, complete, AudioContext, castToAudioContext, gTypeAudioContext, IsAudioContext, toAudioContext) where import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..)) import Data.Typeable (Typeable) import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, new, array) import Data.Int (Int64) import Data.Word (Word, Word64) import Language.Javascript.JSaddle.DOM.Types import Control.Applicative ((<$>)) import Control.Monad (void) import Control.Lens.Operators ((^.)) import Language.Javascript.JSaddle.DOM.EventTargetClosures (EventName, unsafeEventName) import Language.Javascript.JSaddle.DOM.Enums -- | newAudioContext :: (MonadDOM m) => m AudioContext newAudioContext = liftDOM (AudioContext <$> new (jsg "AudioContext") ()) -- | createBuffer :: (MonadDOM m, IsAudioContext self) => self -> Word -> Word -> Float -> m (Maybe AudioBuffer) createBuffer self numberOfChannels numberOfFrames sampleRate = liftDOM (((toAudioContext self) ^. jsf "createBuffer" [toJSVal numberOfChannels, toJSVal numberOfFrames, toJSVal sampleRate]) >>= fromJSVal) -- | createBufferFromArrayBuffer :: (MonadDOM m, IsAudioContext self, IsArrayBuffer buffer) => self -> Maybe buffer -> Bool -> m (Maybe AudioBuffer) createBufferFromArrayBuffer self buffer mixToMono = liftDOM (((toAudioContext self) ^. jsf "createBuffer" [toJSVal buffer, toJSVal mixToMono]) >>= fromJSVal) -- | decodeAudioData :: (MonadDOM m, IsAudioContext self, IsArrayBuffer audioData) => self -> Maybe audioData -> Maybe AudioBufferCallback -> Maybe AudioBufferCallback -> m () decodeAudioData self audioData successCallback errorCallback = liftDOM (void ((toAudioContext self) ^. jsf "decodeAudioData" [toJSVal audioData, toJSVal successCallback, toJSVal errorCallback])) -- | createBufferSource :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe AudioBufferSourceNode) createBufferSource self = liftDOM (((toAudioContext self) ^. js "createBufferSource") >>= fromJSVal) -- | createMediaElementSource :: (MonadDOM m, IsAudioContext self, IsHTMLMediaElement mediaElement) => self -> Maybe mediaElement -> m (Maybe MediaElementAudioSourceNode) createMediaElementSource self mediaElement = liftDOM (((toAudioContext self) ^. jsf "createMediaElementSource" [toJSVal mediaElement]) >>= fromJSVal) -- | createMediaStreamSource :: (MonadDOM m, IsAudioContext self) => self -> Maybe MediaStream -> m (Maybe MediaStreamAudioSourceNode) createMediaStreamSource self mediaStream = liftDOM (((toAudioContext self) ^. jsf "createMediaStreamSource" [toJSVal mediaStream]) >>= fromJSVal) -- | createMediaStreamDestination :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe MediaStreamAudioDestinationNode) createMediaStreamDestination self = liftDOM (((toAudioContext self) ^. js "createMediaStreamDestination") >>= fromJSVal) -- | createGain :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe GainNode) createGain self = liftDOM (((toAudioContext self) ^. js "createGain") >>= fromJSVal) -- | createDelay :: (MonadDOM m, IsAudioContext self) => self -> Double -> m (Maybe DelayNode) createDelay self maxDelayTime = liftDOM (((toAudioContext self) ^. jsf "createDelay" [toJSVal maxDelayTime]) >>= fromJSVal) -- | createBiquadFilter :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe BiquadFilterNode) createBiquadFilter self = liftDOM (((toAudioContext self) ^. js "createBiquadFilter") >>= fromJSVal) -- | createWaveShaper :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe WaveShaperNode) createWaveShaper self = liftDOM (((toAudioContext self) ^. js "createWaveShaper") >>= fromJSVal) -- | createPanner :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe PannerNode) createPanner self = liftDOM (((toAudioContext self) ^. js "createPanner") >>= fromJSVal) -- | createConvolver :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe ConvolverNode) createConvolver self = liftDOM (((toAudioContext self) ^. js "createConvolver") >>= fromJSVal) -- | createDynamicsCompressor :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe DynamicsCompressorNode) createDynamicsCompressor self = liftDOM (((toAudioContext self) ^. js "createDynamicsCompressor") >>= fromJSVal) -- | createAnalyser :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe AnalyserNode) createAnalyser self = liftDOM (((toAudioContext self) ^. js "createAnalyser") >>= fromJSVal) -- | createScriptProcessor :: (MonadDOM m, IsAudioContext self) => self -> Word -> Word -> Word -> m (Maybe ScriptProcessorNode) createScriptProcessor self bufferSize numberOfInputChannels numberOfOutputChannels = liftDOM (((toAudioContext self) ^. jsf "createScriptProcessor" [toJSVal bufferSize, toJSVal numberOfInputChannels, toJSVal numberOfOutputChannels]) >>= fromJSVal) -- | createOscillator :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe OscillatorNode) createOscillator self = liftDOM (((toAudioContext self) ^. js "createOscillator") >>= fromJSVal) -- | createPeriodicWave :: (MonadDOM m, IsAudioContext self, IsFloat32Array real, IsFloat32Array imag) => self -> Maybe real -> Maybe imag -> m (Maybe PeriodicWave) createPeriodicWave self real imag = liftDOM (((toAudioContext self) ^. jsf "createPeriodicWave" [toJSVal real, toJSVal imag]) >>= fromJSVal) -- | createChannelSplitter :: (MonadDOM m, IsAudioContext self) => self -> Word -> m (Maybe ChannelSplitterNode) createChannelSplitter self numberOfOutputs = liftDOM (((toAudioContext self) ^. jsf "createChannelSplitter" [toJSVal numberOfOutputs]) >>= fromJSVal) -- | createChannelMerger :: (MonadDOM m, IsAudioContext self) => self -> Word -> m (Maybe ChannelMergerNode) createChannelMerger self numberOfInputs = liftDOM (((toAudioContext self) ^. jsf "createChannelMerger" [toJSVal numberOfInputs]) >>= fromJSVal) -- | startRendering :: (MonadDOM m, IsAudioContext self) => self -> m () startRendering self = liftDOM (void ((toAudioContext self) ^. js "startRendering")) -- | createGainNode :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe GainNode) createGainNode self = liftDOM (((toAudioContext self) ^. js "createGainNode") >>= fromJSVal) -- | createDelayNode :: (MonadDOM m, IsAudioContext self) => self -> Double -> m (Maybe DelayNode) createDelayNode self maxDelayTime = liftDOM (((toAudioContext self) ^. jsf "createDelayNode" [toJSVal maxDelayTime]) >>= fromJSVal) -- | createJavaScriptNode :: (MonadDOM m, IsAudioContext self) => self -> Word -> Word -> Word -> m (Maybe ScriptProcessorNode) createJavaScriptNode self bufferSize numberOfInputChannels numberOfOutputChannels = liftDOM (((toAudioContext self) ^. jsf "createJavaScriptNode" [toJSVal bufferSize, toJSVal numberOfInputChannels, toJSVal numberOfOutputChannels]) >>= fromJSVal) -- | getDestination :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe AudioDestinationNode) getDestination self = liftDOM (((toAudioContext self) ^. js "destination") >>= fromJSVal) -- | getCurrentTime :: (MonadDOM m, IsAudioContext self) => self -> m Double getCurrentTime self = liftDOM (((toAudioContext self) ^. js "currentTime") >>= valToNumber) -- | getSampleRate :: (MonadDOM m, IsAudioContext self) => self -> m Float getSampleRate self = liftDOM (realToFrac <$> (((toAudioContext self) ^. js "sampleRate") >>= valToNumber)) -- | getListener :: (MonadDOM m, IsAudioContext self) => self -> m (Maybe AudioListener) getListener self = liftDOM (((toAudioContext self) ^. js "listener") >>= fromJSVal) -- | getActiveSourceCount :: (MonadDOM m, IsAudioContext self) => self -> m Word getActiveSourceCount self = liftDOM (round <$> (((toAudioContext self) ^. js "activeSourceCount") >>= valToNumber)) -- | complete :: (IsAudioContext self, IsEventTarget self) => EventName self OfflineAudioCompletionEvent complete = unsafeEventName (toJSString "complete")