{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)

This is the base class for audio sources. Subclasses need to implement the
::create_ringbuffer vmethod. This base class will then take care of
reading samples from the ringbuffer, synchronisation and flushing.
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.GstAudio.Objects.AudioBaseSrc
    (

-- * Exported types
    AudioBaseSrc(..)                        ,
    IsAudioBaseSrc                          ,
    toAudioBaseSrc                          ,
    noAudioBaseSrc                          ,


 -- * Methods
-- ** createRingbuffer #method:createRingbuffer#

#if ENABLE_OVERLOADING
    AudioBaseSrcCreateRingbufferMethodInfo  ,
#endif
    audioBaseSrcCreateRingbuffer            ,


-- ** getProvideClock #method:getProvideClock#

#if ENABLE_OVERLOADING
    AudioBaseSrcGetProvideClockMethodInfo   ,
#endif
    audioBaseSrcGetProvideClock             ,


-- ** getSlaveMethod #method:getSlaveMethod#

#if ENABLE_OVERLOADING
    AudioBaseSrcGetSlaveMethodMethodInfo    ,
#endif
    audioBaseSrcGetSlaveMethod              ,


-- ** setProvideClock #method:setProvideClock#

#if ENABLE_OVERLOADING
    AudioBaseSrcSetProvideClockMethodInfo   ,
#endif
    audioBaseSrcSetProvideClock             ,


-- ** setSlaveMethod #method:setSlaveMethod#

#if ENABLE_OVERLOADING
    AudioBaseSrcSetSlaveMethodMethodInfo    ,
#endif
    audioBaseSrcSetSlaveMethod              ,




 -- * Properties
-- ** actualBufferTime #attr:actualBufferTime#
{- | Actual configured size of audio buffer in microseconds.
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcActualBufferTimePropertyInfo,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcActualBufferTime            ,
#endif
    getAudioBaseSrcActualBufferTime         ,


-- ** actualLatencyTime #attr:actualLatencyTime#
{- | Actual configured audio latency in microseconds.
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcActualLatencyTimePropertyInfo,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcActualLatencyTime           ,
#endif
    getAudioBaseSrcActualLatencyTime        ,


-- ** bufferTime #attr:bufferTime#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcBufferTimePropertyInfo      ,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcBufferTime                  ,
#endif
    constructAudioBaseSrcBufferTime         ,
    getAudioBaseSrcBufferTime               ,
    setAudioBaseSrcBufferTime               ,


-- ** latencyTime #attr:latencyTime#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcLatencyTimePropertyInfo     ,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcLatencyTime                 ,
#endif
    constructAudioBaseSrcLatencyTime        ,
    getAudioBaseSrcLatencyTime              ,
    setAudioBaseSrcLatencyTime              ,


-- ** provideClock #attr:provideClock#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcProvideClockPropertyInfo    ,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcProvideClock                ,
#endif
    constructAudioBaseSrcProvideClock       ,
    getAudioBaseSrcProvideClock             ,
    setAudioBaseSrcProvideClock             ,


-- ** slaveMethod #attr:slaveMethod#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    AudioBaseSrcSlaveMethodPropertyInfo     ,
#endif
#if ENABLE_OVERLOADING
    audioBaseSrcSlaveMethod                 ,
#endif
    constructAudioBaseSrcSlaveMethod        ,
    getAudioBaseSrcSlaveMethod              ,
    setAudioBaseSrcSlaveMethod              ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioRingBuffer as GstAudio.AudioRingBuffer
import qualified GI.GstBase.Objects.BaseSrc as GstBase.BaseSrc
import qualified GI.GstBase.Objects.PushSrc as GstBase.PushSrc

-- | Memory-managed wrapper type.
newtype AudioBaseSrc = AudioBaseSrc (ManagedPtr AudioBaseSrc)
foreign import ccall "gst_audio_base_src_get_type"
    c_gst_audio_base_src_get_type :: IO GType

instance GObject AudioBaseSrc where
    gobjectType = c_gst_audio_base_src_get_type


-- | Type class for types which can be safely cast to `AudioBaseSrc`, for instance with `toAudioBaseSrc`.
class (GObject o, O.IsDescendantOf AudioBaseSrc o) => IsAudioBaseSrc o
instance (GObject o, O.IsDescendantOf AudioBaseSrc o) => IsAudioBaseSrc o

instance O.HasParentTypes AudioBaseSrc
type instance O.ParentTypes AudioBaseSrc = '[GstBase.PushSrc.PushSrc, GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]

-- | Cast to `AudioBaseSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toAudioBaseSrc :: (MonadIO m, IsAudioBaseSrc o) => o -> m AudioBaseSrc
toAudioBaseSrc = liftIO . unsafeCastTo AudioBaseSrc

-- | A convenience alias for `Nothing` :: `Maybe` `AudioBaseSrc`.
noAudioBaseSrc :: Maybe AudioBaseSrc
noAudioBaseSrc = Nothing

#if ENABLE_OVERLOADING
type family ResolveAudioBaseSrcMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioBaseSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveAudioBaseSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveAudioBaseSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveAudioBaseSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveAudioBaseSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveAudioBaseSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAudioBaseSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAudioBaseSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveAudioBaseSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveAudioBaseSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveAudioBaseSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveAudioBaseSrcMethod "createRingbuffer" o = AudioBaseSrcCreateRingbufferMethodInfo
    ResolveAudioBaseSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveAudioBaseSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAudioBaseSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
    ResolveAudioBaseSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
    ResolveAudioBaseSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
    ResolveAudioBaseSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAudioBaseSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveAudioBaseSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioBaseSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveAudioBaseSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveAudioBaseSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveAudioBaseSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo
    ResolveAudioBaseSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAudioBaseSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo
    ResolveAudioBaseSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveAudioBaseSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveAudioBaseSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveAudioBaseSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveAudioBaseSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveAudioBaseSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveAudioBaseSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveAudioBaseSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveAudioBaseSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveAudioBaseSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveAudioBaseSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveAudioBaseSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveAudioBaseSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo
    ResolveAudioBaseSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveAudioBaseSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAudioBaseSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAudioBaseSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveAudioBaseSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveAudioBaseSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveAudioBaseSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveAudioBaseSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveAudioBaseSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo
    ResolveAudioBaseSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveAudioBaseSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveAudioBaseSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAudioBaseSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveAudioBaseSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveAudioBaseSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveAudioBaseSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveAudioBaseSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveAudioBaseSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAudioBaseSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveAudioBaseSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveAudioBaseSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveAudioBaseSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo
    ResolveAudioBaseSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo
    ResolveAudioBaseSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAudioBaseSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAudioBaseSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo
    ResolveAudioBaseSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveAudioBaseSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveAudioBaseSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveAudioBaseSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAudioBaseSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveAudioBaseSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveAudioBaseSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveAudioBaseSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveAudioBaseSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo
    ResolveAudioBaseSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAudioBaseSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo
    ResolveAudioBaseSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveAudioBaseSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo
    ResolveAudioBaseSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo
    ResolveAudioBaseSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveAudioBaseSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveAudioBaseSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveAudioBaseSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveAudioBaseSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveAudioBaseSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveAudioBaseSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveAudioBaseSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveAudioBaseSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveAudioBaseSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAudioBaseSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo
    ResolveAudioBaseSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveAudioBaseSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveAudioBaseSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
    ResolveAudioBaseSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveAudioBaseSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
    ResolveAudioBaseSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
    ResolveAudioBaseSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveAudioBaseSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveAudioBaseSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAudioBaseSrcMethod "getProvideClock" o = AudioBaseSrcGetProvideClockMethodInfo
    ResolveAudioBaseSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAudioBaseSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveAudioBaseSrcMethod "getSlaveMethod" o = AudioBaseSrcGetSlaveMethodMethodInfo
    ResolveAudioBaseSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveAudioBaseSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveAudioBaseSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveAudioBaseSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveAudioBaseSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo
    ResolveAudioBaseSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo
    ResolveAudioBaseSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveAudioBaseSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo
    ResolveAudioBaseSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveAudioBaseSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo
    ResolveAudioBaseSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveAudioBaseSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveAudioBaseSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioBaseSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioBaseSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveAudioBaseSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAudioBaseSrcMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveAudioBaseSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo
    ResolveAudioBaseSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo
    ResolveAudioBaseSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo
    ResolveAudioBaseSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo
    ResolveAudioBaseSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveAudioBaseSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveAudioBaseSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveAudioBaseSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAudioBaseSrcMethod "setProvideClock" o = AudioBaseSrcSetProvideClockMethodInfo
    ResolveAudioBaseSrcMethod "setSlaveMethod" o = AudioBaseSrcSetSlaveMethodMethodInfo
    ResolveAudioBaseSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveAudioBaseSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveAudioBaseSrcMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveAudioBaseSrcMethod t AudioBaseSrc, O.MethodInfo info AudioBaseSrc p) => OL.IsLabel t (AudioBaseSrc -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif

-- VVV Prop "actual-buffer-time"
   -- Type: TBasicType TInt64
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@actual-buffer-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #actualBufferTime
@
-}
getAudioBaseSrcActualBufferTime :: (MonadIO m, IsAudioBaseSrc o) => o -> m Int64
getAudioBaseSrcActualBufferTime obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "actual-buffer-time"

#if ENABLE_OVERLOADING
data AudioBaseSrcActualBufferTimePropertyInfo
instance AttrInfo AudioBaseSrcActualBufferTimePropertyInfo where
    type AttrAllowedOps AudioBaseSrcActualBufferTimePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcActualBufferTimePropertyInfo = (~) ()
    type AttrBaseTypeConstraint AudioBaseSrcActualBufferTimePropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcActualBufferTimePropertyInfo = Int64
    type AttrLabel AudioBaseSrcActualBufferTimePropertyInfo = "actual-buffer-time"
    type AttrOrigin AudioBaseSrcActualBufferTimePropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcActualBufferTime
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

-- VVV Prop "actual-latency-time"
   -- Type: TBasicType TInt64
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@actual-latency-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #actualLatencyTime
@
-}
getAudioBaseSrcActualLatencyTime :: (MonadIO m, IsAudioBaseSrc o) => o -> m Int64
getAudioBaseSrcActualLatencyTime obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "actual-latency-time"

#if ENABLE_OVERLOADING
data AudioBaseSrcActualLatencyTimePropertyInfo
instance AttrInfo AudioBaseSrcActualLatencyTimePropertyInfo where
    type AttrAllowedOps AudioBaseSrcActualLatencyTimePropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcActualLatencyTimePropertyInfo = (~) ()
    type AttrBaseTypeConstraint AudioBaseSrcActualLatencyTimePropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcActualLatencyTimePropertyInfo = Int64
    type AttrLabel AudioBaseSrcActualLatencyTimePropertyInfo = "actual-latency-time"
    type AttrOrigin AudioBaseSrcActualLatencyTimePropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcActualLatencyTime
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

-- VVV Prop "buffer-time"
   -- Type: TBasicType TInt64
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@buffer-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #bufferTime
@
-}
getAudioBaseSrcBufferTime :: (MonadIO m, IsAudioBaseSrc o) => o -> m Int64
getAudioBaseSrcBufferTime obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "buffer-time"

{- |
Set the value of the “@buffer-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' audioBaseSrc [ #bufferTime 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioBaseSrcBufferTime :: (MonadIO m, IsAudioBaseSrc o) => o -> Int64 -> m ()
setAudioBaseSrcBufferTime obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "buffer-time" val

{- |
Construct a `GValueConstruct` with valid value for the “@buffer-time@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructAudioBaseSrcBufferTime :: (IsAudioBaseSrc o) => Int64 -> IO (GValueConstruct o)
constructAudioBaseSrcBufferTime val = B.Properties.constructObjectPropertyInt64 "buffer-time" val

#if ENABLE_OVERLOADING
data AudioBaseSrcBufferTimePropertyInfo
instance AttrInfo AudioBaseSrcBufferTimePropertyInfo where
    type AttrAllowedOps AudioBaseSrcBufferTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcBufferTimePropertyInfo = (~) Int64
    type AttrBaseTypeConstraint AudioBaseSrcBufferTimePropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcBufferTimePropertyInfo = Int64
    type AttrLabel AudioBaseSrcBufferTimePropertyInfo = "buffer-time"
    type AttrOrigin AudioBaseSrcBufferTimePropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcBufferTime
    attrSet _ = setAudioBaseSrcBufferTime
    attrConstruct _ = constructAudioBaseSrcBufferTime
    attrClear _ = undefined
#endif

-- VVV Prop "latency-time"
   -- Type: TBasicType TInt64
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Nothing,Nothing)

{- |
Get the value of the “@latency-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #latencyTime
@
-}
getAudioBaseSrcLatencyTime :: (MonadIO m, IsAudioBaseSrc o) => o -> m Int64
getAudioBaseSrcLatencyTime obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "latency-time"

{- |
Set the value of the “@latency-time@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' audioBaseSrc [ #latencyTime 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioBaseSrcLatencyTime :: (MonadIO m, IsAudioBaseSrc o) => o -> Int64 -> m ()
setAudioBaseSrcLatencyTime obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "latency-time" val

{- |
Construct a `GValueConstruct` with valid value for the “@latency-time@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructAudioBaseSrcLatencyTime :: (IsAudioBaseSrc o) => Int64 -> IO (GValueConstruct o)
constructAudioBaseSrcLatencyTime val = B.Properties.constructObjectPropertyInt64 "latency-time" val

#if ENABLE_OVERLOADING
data AudioBaseSrcLatencyTimePropertyInfo
instance AttrInfo AudioBaseSrcLatencyTimePropertyInfo where
    type AttrAllowedOps AudioBaseSrcLatencyTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcLatencyTimePropertyInfo = (~) Int64
    type AttrBaseTypeConstraint AudioBaseSrcLatencyTimePropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcLatencyTimePropertyInfo = Int64
    type AttrLabel AudioBaseSrcLatencyTimePropertyInfo = "latency-time"
    type AttrOrigin AudioBaseSrcLatencyTimePropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcLatencyTime
    attrSet _ = setAudioBaseSrcLatencyTime
    attrConstruct _ = constructAudioBaseSrcLatencyTime
    attrClear _ = undefined
#endif

-- VVV Prop "provide-clock"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Just False,Just False)

{- |
Get the value of the “@provide-clock@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #provideClock
@
-}
getAudioBaseSrcProvideClock :: (MonadIO m, IsAudioBaseSrc o) => o -> m Bool
getAudioBaseSrcProvideClock obj = liftIO $ B.Properties.getObjectPropertyBool obj "provide-clock"

{- |
Set the value of the “@provide-clock@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' audioBaseSrc [ #provideClock 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioBaseSrcProvideClock :: (MonadIO m, IsAudioBaseSrc o) => o -> Bool -> m ()
setAudioBaseSrcProvideClock obj val = liftIO $ B.Properties.setObjectPropertyBool obj "provide-clock" val

{- |
Construct a `GValueConstruct` with valid value for the “@provide-clock@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructAudioBaseSrcProvideClock :: (IsAudioBaseSrc o) => Bool -> IO (GValueConstruct o)
constructAudioBaseSrcProvideClock val = B.Properties.constructObjectPropertyBool "provide-clock" val

#if ENABLE_OVERLOADING
data AudioBaseSrcProvideClockPropertyInfo
instance AttrInfo AudioBaseSrcProvideClockPropertyInfo where
    type AttrAllowedOps AudioBaseSrcProvideClockPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcProvideClockPropertyInfo = (~) Bool
    type AttrBaseTypeConstraint AudioBaseSrcProvideClockPropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcProvideClockPropertyInfo = Bool
    type AttrLabel AudioBaseSrcProvideClockPropertyInfo = "provide-clock"
    type AttrOrigin AudioBaseSrcProvideClockPropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcProvideClock
    attrSet _ = setAudioBaseSrcProvideClock
    attrConstruct _ = constructAudioBaseSrcProvideClock
    attrClear _ = undefined
#endif

-- VVV Prop "slave-method"
   -- Type: TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrcSlaveMethod"})
   -- Flags: [PropertyReadable,PropertyWritable]
   -- Nullable: (Just False,Just False)

{- |
Get the value of the “@slave-method@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioBaseSrc #slaveMethod
@
-}
getAudioBaseSrcSlaveMethod :: (MonadIO m, IsAudioBaseSrc o) => o -> m GstAudio.Enums.AudioBaseSrcSlaveMethod
getAudioBaseSrcSlaveMethod obj = liftIO $ B.Properties.getObjectPropertyEnum obj "slave-method"

{- |
Set the value of the “@slave-method@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' audioBaseSrc [ #slaveMethod 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioBaseSrcSlaveMethod :: (MonadIO m, IsAudioBaseSrc o) => o -> GstAudio.Enums.AudioBaseSrcSlaveMethod -> m ()
setAudioBaseSrcSlaveMethod obj val = liftIO $ B.Properties.setObjectPropertyEnum obj "slave-method" val

{- |
Construct a `GValueConstruct` with valid value for the “@slave-method@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
-}
constructAudioBaseSrcSlaveMethod :: (IsAudioBaseSrc o) => GstAudio.Enums.AudioBaseSrcSlaveMethod -> IO (GValueConstruct o)
constructAudioBaseSrcSlaveMethod val = B.Properties.constructObjectPropertyEnum "slave-method" val

#if ENABLE_OVERLOADING
data AudioBaseSrcSlaveMethodPropertyInfo
instance AttrInfo AudioBaseSrcSlaveMethodPropertyInfo where
    type AttrAllowedOps AudioBaseSrcSlaveMethodPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
    type AttrSetTypeConstraint AudioBaseSrcSlaveMethodPropertyInfo = (~) GstAudio.Enums.AudioBaseSrcSlaveMethod
    type AttrBaseTypeConstraint AudioBaseSrcSlaveMethodPropertyInfo = IsAudioBaseSrc
    type AttrGetType AudioBaseSrcSlaveMethodPropertyInfo = GstAudio.Enums.AudioBaseSrcSlaveMethod
    type AttrLabel AudioBaseSrcSlaveMethodPropertyInfo = "slave-method"
    type AttrOrigin AudioBaseSrcSlaveMethodPropertyInfo = AudioBaseSrc
    attrGet _ = getAudioBaseSrcSlaveMethod
    attrSet _ = setAudioBaseSrcSlaveMethod
    attrConstruct _ = constructAudioBaseSrcSlaveMethod
    attrClear _ = undefined
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList AudioBaseSrc
type instance O.AttributeList AudioBaseSrc = AudioBaseSrcAttributeList
type AudioBaseSrcAttributeList = ('[ '("actualBufferTime", AudioBaseSrcActualBufferTimePropertyInfo), '("actualLatencyTime", AudioBaseSrcActualLatencyTimePropertyInfo), '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("bufferTime", AudioBaseSrcBufferTimePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("latencyTime", AudioBaseSrcLatencyTimePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("provideClock", AudioBaseSrcProvideClockPropertyInfo), '("slaveMethod", AudioBaseSrcSlaveMethodPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
audioBaseSrcActualBufferTime :: AttrLabelProxy "actualBufferTime"
audioBaseSrcActualBufferTime = AttrLabelProxy

audioBaseSrcActualLatencyTime :: AttrLabelProxy "actualLatencyTime"
audioBaseSrcActualLatencyTime = AttrLabelProxy

audioBaseSrcBufferTime :: AttrLabelProxy "bufferTime"
audioBaseSrcBufferTime = AttrLabelProxy

audioBaseSrcLatencyTime :: AttrLabelProxy "latencyTime"
audioBaseSrcLatencyTime = AttrLabelProxy

audioBaseSrcProvideClock :: AttrLabelProxy "provideClock"
audioBaseSrcProvideClock = AttrLabelProxy

audioBaseSrcSlaveMethod :: AttrLabelProxy "slaveMethod"
audioBaseSrcSlaveMethod = AttrLabelProxy

#endif

#if ENABLE_OVERLOADING
type instance O.SignalList AudioBaseSrc = AudioBaseSrcSignalList
type AudioBaseSrcSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])

#endif

-- method AudioBaseSrc::create_ringbuffer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSrc.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_base_src_create_ringbuffer" gst_audio_base_src_create_ringbuffer ::
    Ptr AudioBaseSrc ->                     -- src : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"})
    IO (Ptr GstAudio.AudioRingBuffer.AudioRingBuffer)

{- |
Create and return the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' for /@src@/. This function will call
the ::create_ringbuffer vmethod and will set /@src@/ as the parent of the
returned buffer (see 'GI.Gst.Objects.Object.objectSetParent').
-}
audioBaseSrcCreateRingbuffer ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSrc a) =>
    a
    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc'. -}
    -> m GstAudio.AudioRingBuffer.AudioRingBuffer
    {- ^ __Returns:__ The new ringbuffer of /@src@/. -}
audioBaseSrcCreateRingbuffer src = liftIO $ do
    src' <- unsafeManagedPtrCastPtr src
    result <- gst_audio_base_src_create_ringbuffer src'
    checkUnexpectedReturnNULL "audioBaseSrcCreateRingbuffer" result
    result' <- (newObject GstAudio.AudioRingBuffer.AudioRingBuffer) result
    touchManagedPtr src
    return result'

#if ENABLE_OVERLOADING
data AudioBaseSrcCreateRingbufferMethodInfo
instance (signature ~ (m GstAudio.AudioRingBuffer.AudioRingBuffer), MonadIO m, IsAudioBaseSrc a) => O.MethodInfo AudioBaseSrcCreateRingbufferMethodInfo a signature where
    overloadedMethod _ = audioBaseSrcCreateRingbuffer

#endif

-- method AudioBaseSrc::get_provide_clock
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSrc", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_base_src_get_provide_clock" gst_audio_base_src_get_provide_clock ::
    Ptr AudioBaseSrc ->                     -- src : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"})
    IO CInt

{- |
Queries whether /@src@/ will provide a clock or not. See also
gst_audio_base_src_set_provide_clock.
-}
audioBaseSrcGetProvideClock ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSrc a) =>
    a
    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if /@src@/ will provide a clock. -}
audioBaseSrcGetProvideClock src = liftIO $ do
    src' <- unsafeManagedPtrCastPtr src
    result <- gst_audio_base_src_get_provide_clock src'
    let result' = (/= 0) result
    touchManagedPtr src
    return result'

#if ENABLE_OVERLOADING
data AudioBaseSrcGetProvideClockMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsAudioBaseSrc a) => O.MethodInfo AudioBaseSrcGetProvideClockMethodInfo a signature where
    overloadedMethod _ = audioBaseSrcGetProvideClock

#endif

-- method AudioBaseSrc::get_slave_method
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSrc", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrcSlaveMethod"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_base_src_get_slave_method" gst_audio_base_src_get_slave_method ::
    Ptr AudioBaseSrc ->                     -- src : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"})
    IO CUInt

{- |
Get the current slave method used by /@src@/.
-}
audioBaseSrcGetSlaveMethod ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSrc a) =>
    a
    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' -}
    -> m GstAudio.Enums.AudioBaseSrcSlaveMethod
    {- ^ __Returns:__ The current slave method used by /@src@/. -}
audioBaseSrcGetSlaveMethod src = liftIO $ do
    src' <- unsafeManagedPtrCastPtr src
    result <- gst_audio_base_src_get_slave_method src'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr src
    return result'

#if ENABLE_OVERLOADING
data AudioBaseSrcGetSlaveMethodMethodInfo
instance (signature ~ (m GstAudio.Enums.AudioBaseSrcSlaveMethod), MonadIO m, IsAudioBaseSrc a) => O.MethodInfo AudioBaseSrcGetSlaveMethodMethodInfo a signature where
    overloadedMethod _ = audioBaseSrcGetSlaveMethod

#endif

-- method AudioBaseSrc::set_provide_clock
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSrc", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "provide", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new state", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_base_src_set_provide_clock" gst_audio_base_src_set_provide_clock ::
    Ptr AudioBaseSrc ->                     -- src : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"})
    CInt ->                                 -- provide : TBasicType TBoolean
    IO ()

{- |
Controls whether /@src@/ will provide a clock or not. If /@provide@/ is 'True',
'GI.Gst.Objects.Element.elementProvideClock' will return a clock that reflects the datarate
of /@src@/. If /@provide@/ is 'False', 'GI.Gst.Objects.Element.elementProvideClock' will return NULL.
-}
audioBaseSrcSetProvideClock ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSrc a) =>
    a
    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' -}
    -> Bool
    {- ^ /@provide@/: new state -}
    -> m ()
audioBaseSrcSetProvideClock src provide = liftIO $ do
    src' <- unsafeManagedPtrCastPtr src
    let provide' = (fromIntegral . fromEnum) provide
    gst_audio_base_src_set_provide_clock src' provide'
    touchManagedPtr src
    return ()

#if ENABLE_OVERLOADING
data AudioBaseSrcSetProvideClockMethodInfo
instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioBaseSrc a) => O.MethodInfo AudioBaseSrcSetProvideClockMethodInfo a signature where
    overloadedMethod _ = audioBaseSrcSetProvideClock

#endif

-- method AudioBaseSrc::set_slave_method
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSrc", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "method", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrcSlaveMethod"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new slave method", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_base_src_set_slave_method" gst_audio_base_src_set_slave_method ::
    Ptr AudioBaseSrc ->                     -- src : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrc"})
    CUInt ->                                -- method : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSrcSlaveMethod"})
    IO ()

{- |
Controls how clock slaving will be performed in /@src@/.
-}
audioBaseSrcSetSlaveMethod ::
    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSrc a) =>
    a
    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' -}
    -> GstAudio.Enums.AudioBaseSrcSlaveMethod
    {- ^ /@method@/: the new slave method -}
    -> m ()
audioBaseSrcSetSlaveMethod src method = liftIO $ do
    src' <- unsafeManagedPtrCastPtr src
    let method' = (fromIntegral . fromEnum) method
    gst_audio_base_src_set_slave_method src' method'
    touchManagedPtr src
    return ()

#if ENABLE_OVERLOADING
data AudioBaseSrcSetSlaveMethodMethodInfo
instance (signature ~ (GstAudio.Enums.AudioBaseSrcSlaveMethod -> m ()), MonadIO m, IsAudioBaseSrc a) => O.MethodInfo AudioBaseSrcSetSlaveMethodMethodInfo a signature where
    overloadedMethod _ = audioBaseSrcSetSlaveMethod

#endif