diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,11 @@
+### 1.0.17
+
++ Update to haskell-gi(-base) 0.22
+
+### 1.0.16
+
++ Update stack version to 12.10
+
 ### 1.0.15
 
 + Remove enable-overloading flags, and use instead explicit CPP checks for 'haskell-gi-overloading-1.0', see [how to disable overloading](https://github.com/haskell-gi/haskell-gi/wiki/Overloading\#disabling-overloading).
diff --git a/GI/GstAudio.hs b/GI/GstAudio.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio.hs
@@ -0,0 +1,60 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio
+    (     module GI.GstAudio.Callbacks            ,
+    module GI.GstAudio.Constants            ,
+    module GI.GstAudio.Enums                ,
+    module GI.GstAudio.Flags                ,
+    module GI.GstAudio.Functions            ,
+    module GI.GstAudio.Interfaces           ,
+    module GI.GstAudio.Objects              ,
+    module GI.GstAudio.Structs              ,
+
+
+
+    module Data.GI.Base                     ,
+
+
+    ) where
+
+import GI.GstAudio.Callbacks
+import GI.GstAudio.Constants
+import GI.GstAudio.Enums
+import GI.GstAudio.Flags
+import GI.GstAudio.Functions
+import GI.GstAudio.Interfaces
+import GI.GstAudio.Objects
+import GI.GstAudio.Structs
+
+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 Data.GI.Base
+
diff --git a/GI/GstAudio/Callbacks.hs b/GI/GstAudio/Callbacks.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Callbacks.hs
@@ -0,0 +1,641 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Callbacks
+    ( 
+
+ -- * Signals
+-- ** AudioBaseSinkCustomSlavingCallback #signal:AudioBaseSinkCustomSlavingCallback#
+
+    AudioBaseSinkCustomSlavingCallback      ,
+    AudioBaseSinkCustomSlavingCallback_WithClosures,
+    C_AudioBaseSinkCustomSlavingCallback    ,
+    drop_closures_AudioBaseSinkCustomSlavingCallback,
+    dynamic_AudioBaseSinkCustomSlavingCallback,
+    genClosure_AudioBaseSinkCustomSlavingCallback,
+    mk_AudioBaseSinkCustomSlavingCallback   ,
+    noAudioBaseSinkCustomSlavingCallback    ,
+    noAudioBaseSinkCustomSlavingCallback_WithClosures,
+    wrap_AudioBaseSinkCustomSlavingCallback ,
+
+
+-- ** AudioClockGetTimeFunc #signal:AudioClockGetTimeFunc#
+
+    AudioClockGetTimeFunc                   ,
+    AudioClockGetTimeFunc_WithClosures      ,
+    C_AudioClockGetTimeFunc                 ,
+    drop_closures_AudioClockGetTimeFunc     ,
+    dynamic_AudioClockGetTimeFunc           ,
+    genClosure_AudioClockGetTimeFunc        ,
+    mk_AudioClockGetTimeFunc                ,
+    noAudioClockGetTimeFunc                 ,
+    noAudioClockGetTimeFunc_WithClosures    ,
+    wrap_AudioClockGetTimeFunc              ,
+
+
+-- ** AudioFormatPack #signal:AudioFormatPack#
+
+    AudioFormatPack                         ,
+    C_AudioFormatPack                       ,
+    dynamic_AudioFormatPack                 ,
+    genClosure_AudioFormatPack              ,
+    mk_AudioFormatPack                      ,
+    noAudioFormatPack                       ,
+    wrap_AudioFormatPack                    ,
+
+
+-- ** AudioFormatUnpack #signal:AudioFormatUnpack#
+
+    AudioFormatUnpack                       ,
+    C_AudioFormatUnpack                     ,
+    dynamic_AudioFormatUnpack               ,
+    genClosure_AudioFormatUnpack            ,
+    mk_AudioFormatUnpack                    ,
+    noAudioFormatUnpack                     ,
+    wrap_AudioFormatUnpack                  ,
+
+
+-- ** AudioRingBufferCallback #signal:AudioRingBufferCallback#
+
+    AudioRingBufferCallback                 ,
+    AudioRingBufferCallback_WithClosures    ,
+    C_AudioRingBufferCallback               ,
+    drop_closures_AudioRingBufferCallback   ,
+    dynamic_AudioRingBufferCallback         ,
+    genClosure_AudioRingBufferCallback      ,
+    mk_AudioRingBufferCallback              ,
+    noAudioRingBufferCallback               ,
+    noAudioRingBufferCallback_WithClosures  ,
+    wrap_AudioRingBufferCallback            ,
+
+
+
+
+    ) 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.Gst.Objects.Clock as Gst.Clock
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags
+import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioBaseSink as GstAudio.AudioBaseSink
+import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioRingBuffer as GstAudio.AudioRingBuffer
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioFormatInfo as GstAudio.AudioFormatInfo
+
+-- callback AudioRingBufferCallback
+--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "rbuf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioRingBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) 2 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "target to fill", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to fill", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 3, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "This function is set with gst_audio_ring_buffer_set_callback() and is\ncalled to fill the memory at @data with @len bytes of samples.", sinceVersion = Nothing}}
+-- | Type for the callback on the (unwrapped) C side.
+type C_AudioRingBufferCallback =
+    Ptr GstAudio.AudioRingBuffer.AudioRingBuffer ->
+    Ptr Word8 ->
+    Word32 ->
+    Ptr () ->
+    IO ()
+
+-- Args : [Arg {argCName = "rbuf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioRingBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) 2 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "target to fill", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to fill", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 3, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "len", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "amount to fill", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "dynamic" __dynamic_C_AudioRingBufferCallback :: FunPtr C_AudioRingBufferCallback -> C_AudioRingBufferCallback
+
+-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
+dynamic_AudioRingBufferCallback ::
+    (B.CallStack.HasCallStack, MonadIO m, GstAudio.AudioRingBuffer.IsAudioRingBuffer a) =>
+    FunPtr C_AudioRingBufferCallback
+    -> a
+    {- ^ /@rbuf@/: a 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> ByteString
+    {- ^ /@data@/: target to fill -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> m ()
+dynamic_AudioRingBufferCallback __funPtr rbuf data_ userData = liftIO $ do
+    let len = fromIntegral $ B.length data_
+    rbuf' <- unsafeManagedPtrCastPtr rbuf
+    data_' <- packByteString data_
+    (__dynamic_C_AudioRingBufferCallback __funPtr) rbuf' data_' len userData
+    touchManagedPtr rbuf
+    freeMem data_'
+    return ()
+
+-- | Generate a function pointer callable from C code, from a `C_AudioRingBufferCallback`.
+foreign import ccall "wrapper"
+    mk_AudioRingBufferCallback :: C_AudioRingBufferCallback -> IO (FunPtr C_AudioRingBufferCallback)
+
+{- |
+This function is set with @/gst_audio_ring_buffer_set_callback()/@ and is
+called to fill the memory at /@data@/ with /@len@/ bytes of samples.
+-}
+type AudioRingBufferCallback =
+    GstAudio.AudioRingBuffer.AudioRingBuffer
+    {- ^ /@rbuf@/: a 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> ByteString
+    {- ^ /@data@/: target to fill -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioRingBufferCallback`@.
+noAudioRingBufferCallback :: Maybe AudioRingBufferCallback
+noAudioRingBufferCallback = Nothing
+
+{- |
+This function is set with @/gst_audio_ring_buffer_set_callback()/@ and is
+called to fill the memory at /@data@/ with /@len@/ bytes of samples.
+-}
+type AudioRingBufferCallback_WithClosures =
+    GstAudio.AudioRingBuffer.AudioRingBuffer
+    {- ^ /@rbuf@/: a 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> ByteString
+    {- ^ /@data@/: target to fill -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioRingBufferCallback_WithClosures`@.
+noAudioRingBufferCallback_WithClosures :: Maybe AudioRingBufferCallback_WithClosures
+noAudioRingBufferCallback_WithClosures = Nothing
+
+-- | A simple wrapper that ignores the closure arguments.
+drop_closures_AudioRingBufferCallback :: AudioRingBufferCallback -> AudioRingBufferCallback_WithClosures
+drop_closures_AudioRingBufferCallback _f rbuf data_ _ = _f rbuf data_
+
+-- | Wrap the callback into a `GClosure`.
+genClosure_AudioRingBufferCallback :: MonadIO m => AudioRingBufferCallback -> m (GClosure C_AudioRingBufferCallback)
+genClosure_AudioRingBufferCallback cb = liftIO $ do
+    let cb' = drop_closures_AudioRingBufferCallback cb
+    let cb'' = wrap_AudioRingBufferCallback Nothing cb'
+    mk_AudioRingBufferCallback cb'' >>= B.GClosure.newGClosure
+
+
+-- | Wrap a `AudioRingBufferCallback` into a `C_AudioRingBufferCallback`.
+wrap_AudioRingBufferCallback ::
+    Maybe (Ptr (FunPtr C_AudioRingBufferCallback)) ->
+    AudioRingBufferCallback_WithClosures ->
+    C_AudioRingBufferCallback
+wrap_AudioRingBufferCallback funptrptr _cb rbuf data_ len userData = do
+    rbuf' <- (newObject GstAudio.AudioRingBuffer.AudioRingBuffer) rbuf
+    data_' <- (unpackByteStringWithLength len) data_
+    _cb  rbuf' data_' userData
+    maybeReleaseFunPtr funptrptr
+
+
+-- callback AudioFormatUnpack
+--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormatInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioFormatInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioPackFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioPackFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a destination array", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to the audio data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the amount of samples to unpack.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "Unpacks @length samples from the given data of format @info.\nThe samples will be unpacked into @dest which each channel\ninterleaved. @dest should at least be big enough to hold @length *\nchannels * size(unpack_format) bytes.", sinceVersion = Nothing}}
+-- | Type for the callback on the (unwrapped) C side.
+type C_AudioFormatUnpack =
+    Ptr GstAudio.AudioFormatInfo.AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormatInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioFormatInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioPackFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioPackFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a destination array", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to the audio data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the amount of samples to unpack.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "dynamic" __dynamic_C_AudioFormatUnpack :: FunPtr C_AudioFormatUnpack -> C_AudioFormatUnpack
+
+-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
+dynamic_AudioFormatUnpack ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    FunPtr C_AudioFormatUnpack
+    -> GstAudio.AudioFormatInfo.AudioFormatInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioFormatInfo.AudioFormatInfo' -}
+    -> [GstAudio.Flags.AudioPackFlags]
+    {- ^ /@flags@/: 'GI.GstAudio.Flags.AudioPackFlags' -}
+    -> Ptr Word8
+    {- ^ /@dest@/: a destination array -}
+    -> Ptr Word8
+    {- ^ /@data@/: pointer to the audio data -}
+    -> Int32
+    {- ^ /@length@/: the amount of samples to unpack. -}
+    -> m ()
+dynamic_AudioFormatUnpack __funPtr info flags dest data_ length_ = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    let flags' = gflagsToWord flags
+    (__dynamic_C_AudioFormatUnpack __funPtr) info' flags' dest data_ length_
+    touchManagedPtr info
+    return ()
+
+-- | Generate a function pointer callable from C code, from a `C_AudioFormatUnpack`.
+foreign import ccall "wrapper"
+    mk_AudioFormatUnpack :: C_AudioFormatUnpack -> IO (FunPtr C_AudioFormatUnpack)
+
+{- |
+Unpacks /@length@/ samples from the given data of format /@info@/.
+The samples will be unpacked into /@dest@/ which each channel
+interleaved. /@dest@/ should at least be big enough to hold /@length@/ *
+channels * size(unpack_format) bytes.
+-}
+type AudioFormatUnpack =
+    GstAudio.AudioFormatInfo.AudioFormatInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioFormatInfo.AudioFormatInfo' -}
+    -> [GstAudio.Flags.AudioPackFlags]
+    {- ^ /@flags@/: 'GI.GstAudio.Flags.AudioPackFlags' -}
+    -> Ptr Word8
+    {- ^ /@dest@/: a destination array -}
+    -> Ptr Word8
+    {- ^ /@data@/: pointer to the audio data -}
+    -> Int32
+    {- ^ /@length@/: the amount of samples to unpack. -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioFormatUnpack`@.
+noAudioFormatUnpack :: Maybe AudioFormatUnpack
+noAudioFormatUnpack = Nothing
+
+-- | Wrap the callback into a `GClosure`.
+genClosure_AudioFormatUnpack :: MonadIO m => AudioFormatUnpack -> m (GClosure C_AudioFormatUnpack)
+genClosure_AudioFormatUnpack cb = liftIO $ do
+    let cb' = wrap_AudioFormatUnpack Nothing cb
+    mk_AudioFormatUnpack cb' >>= B.GClosure.newGClosure
+
+
+-- | Wrap a `AudioFormatUnpack` into a `C_AudioFormatUnpack`.
+wrap_AudioFormatUnpack ::
+    Maybe (Ptr (FunPtr C_AudioFormatUnpack)) ->
+    AudioFormatUnpack ->
+    C_AudioFormatUnpack
+wrap_AudioFormatUnpack funptrptr _cb info flags dest data_ length_ = do
+    info' <- (newPtr GstAudio.AudioFormatInfo.AudioFormatInfo) info
+    let flags' = wordToGFlags flags
+    _cb  info' flags' dest data_ length_
+    maybeReleaseFunPtr funptrptr
+
+
+-- callback AudioFormatPack
+--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormatInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioFormatInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioPackFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioPackFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a source array", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to the destination\n  data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the amount of samples to pack.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "Packs @length samples from @src to the data array in format @info.\nThe samples from source have each channel interleaved\nand will be packed into @data.", sinceVersion = Nothing}}
+-- | Type for the callback on the (unwrapped) C side.
+type C_AudioFormatPack =
+    Ptr GstAudio.AudioFormatInfo.AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormatInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioFormatInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioPackFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioPackFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a source array", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to the destination\n  data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the amount of samples to pack.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "dynamic" __dynamic_C_AudioFormatPack :: FunPtr C_AudioFormatPack -> C_AudioFormatPack
+
+-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
+dynamic_AudioFormatPack ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    FunPtr C_AudioFormatPack
+    -> GstAudio.AudioFormatInfo.AudioFormatInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioFormatInfo.AudioFormatInfo' -}
+    -> [GstAudio.Flags.AudioPackFlags]
+    {- ^ /@flags@/: 'GI.GstAudio.Flags.AudioPackFlags' -}
+    -> Ptr Word8
+    {- ^ /@src@/: a source array -}
+    -> Ptr Word8
+    {- ^ /@data@/: pointer to the destination
+  data -}
+    -> Int32
+    {- ^ /@length@/: the amount of samples to pack. -}
+    -> m ()
+dynamic_AudioFormatPack __funPtr info flags src data_ length_ = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    let flags' = gflagsToWord flags
+    (__dynamic_C_AudioFormatPack __funPtr) info' flags' src data_ length_
+    touchManagedPtr info
+    return ()
+
+-- | Generate a function pointer callable from C code, from a `C_AudioFormatPack`.
+foreign import ccall "wrapper"
+    mk_AudioFormatPack :: C_AudioFormatPack -> IO (FunPtr C_AudioFormatPack)
+
+{- |
+Packs /@length@/ samples from /@src@/ to the data array in format /@info@/.
+The samples from source have each channel interleaved
+and will be packed into /@data@/.
+-}
+type AudioFormatPack =
+    GstAudio.AudioFormatInfo.AudioFormatInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioFormatInfo.AudioFormatInfo' -}
+    -> [GstAudio.Flags.AudioPackFlags]
+    {- ^ /@flags@/: 'GI.GstAudio.Flags.AudioPackFlags' -}
+    -> Ptr Word8
+    {- ^ /@src@/: a source array -}
+    -> Ptr Word8
+    {- ^ /@data@/: pointer to the destination
+  data -}
+    -> Int32
+    {- ^ /@length@/: the amount of samples to pack. -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioFormatPack`@.
+noAudioFormatPack :: Maybe AudioFormatPack
+noAudioFormatPack = Nothing
+
+-- | Wrap the callback into a `GClosure`.
+genClosure_AudioFormatPack :: MonadIO m => AudioFormatPack -> m (GClosure C_AudioFormatPack)
+genClosure_AudioFormatPack cb = liftIO $ do
+    let cb' = wrap_AudioFormatPack Nothing cb
+    mk_AudioFormatPack cb' >>= B.GClosure.newGClosure
+
+
+-- | Wrap a `AudioFormatPack` into a `C_AudioFormatPack`.
+wrap_AudioFormatPack ::
+    Maybe (Ptr (FunPtr C_AudioFormatPack)) ->
+    AudioFormatPack ->
+    C_AudioFormatPack
+wrap_AudioFormatPack funptrptr _cb info flags src data_ length_ = do
+    info' <- (newPtr GstAudio.AudioFormatInfo.AudioFormatInfo) info
+    let flags' = wordToGFlags flags
+    _cb  info' flags' src data_ length_
+    maybeReleaseFunPtr funptrptr
+
+
+-- callback AudioClockGetTimeFunc
+--          -> Callable {returnType = Just (TBasicType TUInt64), returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Just "the current time or #GST_CLOCK_TIME_NONE if the previous time should\nbe used.", sinceVersion = Nothing}, args = [Arg {argCName = "clock", argType = TInterface (Name {namespace = "Gst", name = "Clock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioClock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "This function will be called whenever the current clock time needs to be\ncalculated. If this function returns #GST_CLOCK_TIME_NONE, the last reported\ntime will be returned by the clock.", sinceVersion = Nothing}}
+-- | Type for the callback on the (unwrapped) C side.
+type C_AudioClockGetTimeFunc =
+    Ptr Gst.Clock.Clock ->
+    Ptr () ->
+    IO Word64
+
+-- Args : [Arg {argCName = "clock", argType = TInterface (Name {namespace = "Gst", name = "Clock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioClock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "dynamic" __dynamic_C_AudioClockGetTimeFunc :: FunPtr C_AudioClockGetTimeFunc -> C_AudioClockGetTimeFunc
+
+-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
+dynamic_AudioClockGetTimeFunc ::
+    (B.CallStack.HasCallStack, MonadIO m, Gst.Clock.IsClock a) =>
+    FunPtr C_AudioClockGetTimeFunc
+    -> a
+    {- ^ /@clock@/: the 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> m Word64
+    {- ^ __Returns:__ the current time or 'GI.Gst.Constants.CLOCK_TIME_NONE' if the previous time should
+be used. -}
+dynamic_AudioClockGetTimeFunc __funPtr clock userData = liftIO $ do
+    clock' <- unsafeManagedPtrCastPtr clock
+    result <- (__dynamic_C_AudioClockGetTimeFunc __funPtr) clock' userData
+    touchManagedPtr clock
+    return result
+
+-- | Generate a function pointer callable from C code, from a `C_AudioClockGetTimeFunc`.
+foreign import ccall "wrapper"
+    mk_AudioClockGetTimeFunc :: C_AudioClockGetTimeFunc -> IO (FunPtr C_AudioClockGetTimeFunc)
+
+{- |
+This function will be called whenever the current clock time needs to be
+calculated. If this function returns 'GI.Gst.Constants.CLOCK_TIME_NONE', the last reported
+time will be returned by the clock.
+-}
+type AudioClockGetTimeFunc =
+    Gst.Clock.Clock
+    {- ^ /@clock@/: the 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> IO Word64
+    {- ^ __Returns:__ the current time or 'GI.Gst.Constants.CLOCK_TIME_NONE' if the previous time should
+be used. -}
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioClockGetTimeFunc`@.
+noAudioClockGetTimeFunc :: Maybe AudioClockGetTimeFunc
+noAudioClockGetTimeFunc = Nothing
+
+{- |
+This function will be called whenever the current clock time needs to be
+calculated. If this function returns 'GI.Gst.Constants.CLOCK_TIME_NONE', the last reported
+time will be returned by the clock.
+-}
+type AudioClockGetTimeFunc_WithClosures =
+    Gst.Clock.Clock
+    {- ^ /@clock@/: the 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> IO Word64
+    {- ^ __Returns:__ the current time or 'GI.Gst.Constants.CLOCK_TIME_NONE' if the previous time should
+be used. -}
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioClockGetTimeFunc_WithClosures`@.
+noAudioClockGetTimeFunc_WithClosures :: Maybe AudioClockGetTimeFunc_WithClosures
+noAudioClockGetTimeFunc_WithClosures = Nothing
+
+-- | A simple wrapper that ignores the closure arguments.
+drop_closures_AudioClockGetTimeFunc :: AudioClockGetTimeFunc -> AudioClockGetTimeFunc_WithClosures
+drop_closures_AudioClockGetTimeFunc _f clock _ = _f clock
+
+-- | Wrap the callback into a `GClosure`.
+genClosure_AudioClockGetTimeFunc :: MonadIO m => AudioClockGetTimeFunc -> m (GClosure C_AudioClockGetTimeFunc)
+genClosure_AudioClockGetTimeFunc cb = liftIO $ do
+    let cb' = drop_closures_AudioClockGetTimeFunc cb
+    let cb'' = wrap_AudioClockGetTimeFunc Nothing cb'
+    mk_AudioClockGetTimeFunc cb'' >>= B.GClosure.newGClosure
+
+
+-- | Wrap a `AudioClockGetTimeFunc` into a `C_AudioClockGetTimeFunc`.
+wrap_AudioClockGetTimeFunc ::
+    Maybe (Ptr (FunPtr C_AudioClockGetTimeFunc)) ->
+    AudioClockGetTimeFunc_WithClosures ->
+    C_AudioClockGetTimeFunc
+wrap_AudioClockGetTimeFunc funptrptr _cb clock userData = do
+    clock' <- (newObject Gst.Clock.Clock) clock
+    result <- _cb  clock' userData
+    maybeReleaseFunPtr funptrptr
+    return result
+
+
+-- callback AudioBaseSinkCustomSlavingCallback
+--          -> Callable {returnType = Nothing, returnMayBeNull = False, returnTransfer = TransferNothing, returnDocumentation = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, args = [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "etime", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "external clock time", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "itime", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "internal clock time", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "requested_skew", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "skew amount requested by the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_reason", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkDiscontReason"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "reason for discontinuity (if any)", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 5, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}], skipReturn = False, callableThrows = False, callableDeprecated = Nothing, callableDocumentation = Documentation {rawDocText = Just "This function is set with gst_audio_base_sink_set_custom_slaving_callback()\nand is called during playback. It receives the current time of external and\ninternal clocks, which the callback can then use to apply any custom\nslaving/synchronization schemes.\n\nThe external clock is the sink's element clock, the internal one is the\ninternal audio clock. The internal audio clock's calibration is applied to\nthe timestamps before they are passed to the callback. The difference between\netime and itime is the skew; how much internal and external clock lie apart\nfrom each other. A skew of 0 means both clocks are perfectly in sync.\nitime > etime means the external clock is going slower, while itime < etime\nmeans it is going faster than the internal clock. etime and itime are always\nvalid timestamps, except for when a discontinuity happens.\n\nrequested_skew is an output value the callback can write to. It informs the\nsink of whether or not it should move the playout pointer, and if so, by how\nmuch. This pointer is only NULL if a discontinuity occurs; otherwise, it is\nsafe to write to *requested_skew. The default skew is 0.\n\nThe sink may experience discontinuities. If one happens, discont is TRUE,\nitime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL.\nThis makes it possible to reset custom clock slaving algorithms when a\ndiscontinuity happens.", sinceVersion = Just "1.6"}}
+-- | Type for the callback on the (unwrapped) C side.
+type C_AudioBaseSinkCustomSlavingCallback =
+    Ptr GstAudio.AudioBaseSink.AudioBaseSink ->
+    Word64 ->
+    Word64 ->
+    Int64 ->
+    CUInt ->
+    Ptr () ->
+    IO ()
+
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "etime", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "external clock time", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "itime", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "internal clock time", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "requested_skew", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "skew amount requested by the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_reason", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkDiscontReason"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "reason for discontinuity (if any)", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = 5, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "dynamic" __dynamic_C_AudioBaseSinkCustomSlavingCallback :: FunPtr C_AudioBaseSinkCustomSlavingCallback -> C_AudioBaseSinkCustomSlavingCallback
+
+-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
+dynamic_AudioBaseSinkCustomSlavingCallback ::
+    (B.CallStack.HasCallStack, MonadIO m, GstAudio.AudioBaseSink.IsAudioBaseSink a) =>
+    FunPtr C_AudioBaseSinkCustomSlavingCallback
+    -> a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Word64
+    {- ^ /@etime@/: external clock time -}
+    -> Word64
+    {- ^ /@itime@/: internal clock time -}
+    -> Int64
+    {- ^ /@requestedSkew@/: skew amount requested by the callback -}
+    -> GstAudio.Enums.AudioBaseSinkDiscontReason
+    {- ^ /@discontReason@/: reason for discontinuity (if any) -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> m ()
+dynamic_AudioBaseSinkCustomSlavingCallback __funPtr sink etime itime requestedSkew discontReason userData = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    let discontReason' = (fromIntegral . fromEnum) discontReason
+    (__dynamic_C_AudioBaseSinkCustomSlavingCallback __funPtr) sink' etime itime requestedSkew discontReason' userData
+    touchManagedPtr sink
+    return ()
+
+-- | Generate a function pointer callable from C code, from a `C_AudioBaseSinkCustomSlavingCallback`.
+foreign import ccall "wrapper"
+    mk_AudioBaseSinkCustomSlavingCallback :: C_AudioBaseSinkCustomSlavingCallback -> IO (FunPtr C_AudioBaseSinkCustomSlavingCallback)
+
+{- |
+This function is set with 'GI.GstAudio.Objects.AudioBaseSink.audioBaseSinkSetCustomSlavingCallback'
+and is called during playback. It receives the current time of external and
+internal clocks, which the callback can then use to apply any custom
+slaving\/synchronization schemes.
+
+The external clock is the sink\'s element clock, the internal one is the
+internal audio clock. The internal audio clock\'s calibration is applied to
+the timestamps before they are passed to the callback. The difference between
+etime and itime is the skew; how much internal and external clock lie apart
+from each other. A skew of 0 means both clocks are perfectly in sync.
+itime > etime means the external clock is going slower, while itime \< etime
+means it is going faster than the internal clock. etime and itime are always
+valid timestamps, except for when a discontinuity happens.
+
+requested_skew is an output value the callback can write to. It informs the
+sink of whether or not it should move the playout pointer, and if so, by how
+much. This pointer is only NULL if a discontinuity occurs; otherwise, it is
+safe to write to *requested_skew. The default skew is 0.
+
+The sink may experience discontinuities. If one happens, discont is TRUE,
+itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL.
+This makes it possible to reset custom clock slaving algorithms when a
+discontinuity happens.
+
+/Since: 1.6/
+-}
+type AudioBaseSinkCustomSlavingCallback =
+    GstAudio.AudioBaseSink.AudioBaseSink
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Word64
+    {- ^ /@etime@/: external clock time -}
+    -> Word64
+    {- ^ /@itime@/: internal clock time -}
+    -> Int64
+    {- ^ /@requestedSkew@/: skew amount requested by the callback -}
+    -> GstAudio.Enums.AudioBaseSinkDiscontReason
+    {- ^ /@discontReason@/: reason for discontinuity (if any) -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioBaseSinkCustomSlavingCallback`@.
+noAudioBaseSinkCustomSlavingCallback :: Maybe AudioBaseSinkCustomSlavingCallback
+noAudioBaseSinkCustomSlavingCallback = Nothing
+
+{- |
+This function is set with 'GI.GstAudio.Objects.AudioBaseSink.audioBaseSinkSetCustomSlavingCallback'
+and is called during playback. It receives the current time of external and
+internal clocks, which the callback can then use to apply any custom
+slaving\/synchronization schemes.
+
+The external clock is the sink\'s element clock, the internal one is the
+internal audio clock. The internal audio clock\'s calibration is applied to
+the timestamps before they are passed to the callback. The difference between
+etime and itime is the skew; how much internal and external clock lie apart
+from each other. A skew of 0 means both clocks are perfectly in sync.
+itime > etime means the external clock is going slower, while itime \< etime
+means it is going faster than the internal clock. etime and itime are always
+valid timestamps, except for when a discontinuity happens.
+
+requested_skew is an output value the callback can write to. It informs the
+sink of whether or not it should move the playout pointer, and if so, by how
+much. This pointer is only NULL if a discontinuity occurs; otherwise, it is
+safe to write to *requested_skew. The default skew is 0.
+
+The sink may experience discontinuities. If one happens, discont is TRUE,
+itime, etime are set to GST_CLOCK_TIME_NONE, and requested_skew is NULL.
+This makes it possible to reset custom clock slaving algorithms when a
+discontinuity happens.
+
+/Since: 1.6/
+-}
+type AudioBaseSinkCustomSlavingCallback_WithClosures =
+    GstAudio.AudioBaseSink.AudioBaseSink
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Word64
+    {- ^ /@etime@/: external clock time -}
+    -> Word64
+    {- ^ /@itime@/: internal clock time -}
+    -> Int64
+    {- ^ /@requestedSkew@/: skew amount requested by the callback -}
+    -> GstAudio.Enums.AudioBaseSinkDiscontReason
+    {- ^ /@discontReason@/: reason for discontinuity (if any) -}
+    -> Ptr ()
+    {- ^ /@userData@/: user data -}
+    -> IO ()
+
+-- | A convenience synonym for @`Nothing` :: `Maybe` `AudioBaseSinkCustomSlavingCallback_WithClosures`@.
+noAudioBaseSinkCustomSlavingCallback_WithClosures :: Maybe AudioBaseSinkCustomSlavingCallback_WithClosures
+noAudioBaseSinkCustomSlavingCallback_WithClosures = Nothing
+
+-- | A simple wrapper that ignores the closure arguments.
+drop_closures_AudioBaseSinkCustomSlavingCallback :: AudioBaseSinkCustomSlavingCallback -> AudioBaseSinkCustomSlavingCallback_WithClosures
+drop_closures_AudioBaseSinkCustomSlavingCallback _f sink etime itime requestedSkew discontReason _ = _f sink etime itime requestedSkew discontReason
+
+-- | Wrap the callback into a `GClosure`.
+genClosure_AudioBaseSinkCustomSlavingCallback :: MonadIO m => AudioBaseSinkCustomSlavingCallback -> m (GClosure C_AudioBaseSinkCustomSlavingCallback)
+genClosure_AudioBaseSinkCustomSlavingCallback cb = liftIO $ do
+    let cb' = drop_closures_AudioBaseSinkCustomSlavingCallback cb
+    let cb'' = wrap_AudioBaseSinkCustomSlavingCallback Nothing cb'
+    mk_AudioBaseSinkCustomSlavingCallback cb'' >>= B.GClosure.newGClosure
+
+
+-- | Wrap a `AudioBaseSinkCustomSlavingCallback` into a `C_AudioBaseSinkCustomSlavingCallback`.
+wrap_AudioBaseSinkCustomSlavingCallback ::
+    Maybe (Ptr (FunPtr C_AudioBaseSinkCustomSlavingCallback)) ->
+    AudioBaseSinkCustomSlavingCallback_WithClosures ->
+    C_AudioBaseSinkCustomSlavingCallback
+wrap_AudioBaseSinkCustomSlavingCallback funptrptr _cb sink etime itime requestedSkew discontReason userData = do
+    sink' <- (newObject GstAudio.AudioBaseSink.AudioBaseSink) sink
+    let discontReason' = (toEnum . fromIntegral) discontReason
+    _cb  sink' etime itime requestedSkew discontReason' userData
+    maybeReleaseFunPtr funptrptr
+
+
+
diff --git a/GI/GstAudio/Constants.hs b/GI/GstAudio/Constants.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Constants.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE PatternSynonyms, ScopedTypeVariables, ViewPatterns #-}
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Constants
+    ( 
+    pattern META_TAG_AUDIO_STR              ,
+    pattern META_TAG_AUDIO_RATE_STR         ,
+    pattern META_TAG_AUDIO_CHANNELS_STR     ,
+    pattern AUDIO_RESAMPLER_QUALITY_MIN     ,
+    pattern AUDIO_RESAMPLER_QUALITY_MAX     ,
+    pattern AUDIO_RESAMPLER_QUALITY_DEFAULT ,
+    pattern AUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH,
+    pattern AUDIO_RESAMPLER_OPT_STOP_ATTENUATION,
+    pattern AUDIO_RESAMPLER_OPT_N_TAPS      ,
+    pattern AUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR,
+    pattern AUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE,
+    pattern AUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD,
+    pattern AUDIO_RESAMPLER_OPT_FILTER_MODE ,
+    pattern AUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION,
+    pattern AUDIO_RESAMPLER_OPT_CUTOFF      ,
+    pattern AUDIO_RESAMPLER_OPT_CUBIC_C     ,
+    pattern AUDIO_RESAMPLER_OPT_CUBIC_B     ,
+    pattern AUDIO_RATE_RANGE                ,
+    pattern AUDIO_FORMATS_ALL               ,
+    pattern AUDIO_ENCODER_SRC_NAME          ,
+    pattern AUDIO_ENCODER_SINK_NAME         ,
+    pattern AUDIO_DEF_RATE                  ,
+    pattern AUDIO_DEF_FORMAT                ,
+    pattern AUDIO_DEF_CHANNELS              ,
+    pattern AUDIO_DECODER_SRC_NAME          ,
+    pattern AUDIO_DECODER_SINK_NAME         ,
+    pattern AUDIO_DECODER_MAX_ERRORS        ,
+    pattern AUDIO_CONVERTER_OPT_RESAMPLER_METHOD,
+    pattern AUDIO_CONVERTER_OPT_QUANTIZATION,
+    pattern AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD,
+    pattern AUDIO_CONVERTER_OPT_MIX_MATRIX  ,
+    pattern AUDIO_CONVERTER_OPT_DITHER_METHOD,
+    pattern AUDIO_CHANNELS_RANGE            ,
+
+    ) 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
+
+
+{- |
+This metadata is relevant for audio streams.
+
+/Since: 1.2/
+-}
+pattern META_TAG_AUDIO_STR = "audio" :: T.Text
+
+{- |
+This metadata stays relevant as long as sample rate is unchanged.
+
+/Since: 1.8/
+-}
+pattern META_TAG_AUDIO_RATE_STR = "rate" :: T.Text
+
+{- |
+This metadata stays relevant as long as channels are unchanged.
+
+/Since: 1.2/
+-}
+pattern META_TAG_AUDIO_CHANNELS_STR = "channels" :: T.Text
+
+{- |
+/No description available in the introspection data./
+-}
+pattern AUDIO_RESAMPLER_QUALITY_MIN = 0 :: Int32
+
+{- |
+/No description available in the introspection data./
+-}
+pattern AUDIO_RESAMPLER_QUALITY_MAX = 10 :: Int32
+
+{- |
+/No description available in the introspection data./
+-}
+pattern AUDIO_RESAMPLER_QUALITY_DEFAULT = 4 :: Int32
+
+{- |
+G_TYPE_DOUBLE, transition bandwidth. The width of the
+transition band for the kaiser window. 0.087 is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH = "GstAudioResampler.transition-bandwidth" :: T.Text
+
+{- |
+G_TYPE_DOUBLE, stopband attenuation in decibels. The attenuation
+after the stopband for the kaiser window. 85 dB is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_STOP_ATTENUATION = "GstAudioResampler.stop-attenutation" :: T.Text
+
+{- |
+G_TYPE_INT: the number of taps to use for the filter.
+0 is the default and selects the taps automatically.
+-}
+pattern AUDIO_RESAMPLER_OPT_N_TAPS = "GstAudioResampler.n-taps" :: T.Text
+
+{- |
+G_TYPE_DOUBLE: The maximum allowed phase error when switching sample
+rates.
+0.1 is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR = "GstAudioResampler.max-phase-error" :: T.Text
+
+{- |
+G_TYPE_UINT, oversampling to use when interpolating filters
+8 is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE = "GstAudioResampler.filter-oversample" :: T.Text
+
+{- |
+G_TYPE_UINT: the amount of memory to use for full filter tables before
+switching to interpolated filter tables.
+1048576 is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD = "GstAudioResampler.filter-mode-threshold" :: T.Text
+
+{- |
+GST_TYPE_AUDIO_RESAMPLER_FILTER_MODE: how the filter tables should be
+constructed.
+GST_AUDIO_RESAMPLER_FILTER_MODE_AUTO is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_FILTER_MODE = "GstAudioResampler.filter-mode" :: T.Text
+
+{- |
+GST_TYPE_AUDIO_RESAMPLER_INTERPOLATION: how the filter coeficients should be
+   interpolated.
+GST_AUDIO_RESAMPLER_FILTER_INTERPOLATION_CUBIC is default.
+-}
+pattern AUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION = "GstAudioResampler.filter-interpolation" :: T.Text
+
+{- |
+G_TYPE_DOUBLE, Cutoff parameter for the filter. 0.940 is the default.
+-}
+pattern AUDIO_RESAMPLER_OPT_CUTOFF = "GstAudioResampler.cutoff" :: T.Text
+
+{- |
+G_TYPE_DOUBLE, C parameter of the cubic filter.
+Values between 0.0 and 2.0 are accepted. 0.0 is the default.
+
+See 'GI.GstAudio.Constants.AUDIO_RESAMPLER_OPT_CUBIC_B' for some more common values
+-}
+pattern AUDIO_RESAMPLER_OPT_CUBIC_C = "GstAudioResampler.cubic-c" :: T.Text
+
+{- |
+G_TYPE_DOUBLE, B parameter of the cubic filter.
+Values between 0.0 and 2.0 are accepted. 1.0 is the default.
+
+Below are some values of popular filters:
+                   B       C
+Hermite           0.0     0.0
+Spline            1.0     0.0
+Catmull-Rom       0.0     1\/2
+-}
+pattern AUDIO_RESAMPLER_OPT_CUBIC_B = "GstAudioResampler.cubic-b" :: T.Text
+
+{- |
+Maximum range of allowed sample rates, for use in template caps strings.
+-}
+pattern AUDIO_RATE_RANGE = "(int) [ 1, max ]" :: T.Text
+
+{- |
+List of all audio formats, for use in template caps strings.
+-}
+pattern AUDIO_FORMATS_ALL = " { S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }" :: T.Text
+
+{- |
+the name of the templates for the source pad
+-}
+pattern AUDIO_ENCODER_SRC_NAME = "src" :: T.Text
+
+{- |
+the name of the templates for the sink pad
+-}
+pattern AUDIO_ENCODER_SINK_NAME = "sink" :: T.Text
+
+{- |
+Standard sampling rate used in consumer audio.
+-}
+pattern AUDIO_DEF_RATE = 44100 :: Int32
+
+{- |
+Standard format used in consumer audio.
+-}
+pattern AUDIO_DEF_FORMAT = "S16LE" :: T.Text
+
+{- |
+Standard number of channels used in consumer audio.
+-}
+pattern AUDIO_DEF_CHANNELS = 2 :: Int32
+
+{- |
+The name of the templates for the source pad.
+-}
+pattern AUDIO_DECODER_SRC_NAME = "src" :: T.Text
+
+{- |
+The name of the templates for the sink pad.
+-}
+pattern AUDIO_DECODER_SINK_NAME = "sink" :: T.Text
+
+{- |
+Default maximum number of errors tolerated before signaling error.
+-}
+pattern AUDIO_DECODER_MAX_ERRORS = 10 :: Int32
+
+{- |
+@/GST_TYPE_AUDIO_RESAMPLER_METHOD/@, The resampler method to use when
+changing sample rates.
+Default is @/GST_AUDIO_RESAMPLER_METHOD_BLACKMAN_NUTTALL/@.
+-}
+pattern AUDIO_CONVERTER_OPT_RESAMPLER_METHOD = "GstAudioConverter.resampler-method" :: T.Text
+
+{- |
+@/G_TYPE_UINT/@, The quantization amount. Components will be
+quantized to multiples of this value.
+Default is 1
+-}
+pattern AUDIO_CONVERTER_OPT_QUANTIZATION = "GstAudioConverter.quantization" :: T.Text
+
+{- |
+@/GST_TYPE_AUDIO_NOISE_SHAPING_METHOD/@, The noise shaping method to use
+to mask noise from quantization errors.
+Default is @/GST_AUDIO_NOISE_SHAPING_NONE/@.
+-}
+pattern AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD = "GstAudioConverter.noise-shaping-method" :: T.Text
+
+{- |
+@/GST_TYPE_VALUE_LIST/@, The channel mapping matrix.
+
+The matrix coefficients must be between -1 and 1: the number of rows is equal
+to the number of output channels and the number of columns is equal to the
+number of input channels.
+
+== Example matrix generation code
+To generate the matrix using code:
+
+>
+>GValue v = G_VALUE_INIT;
+>GValue v2 = G_VALUE_INIT;
+>GValue v3 = G_VALUE_INIT;
+>
+>g_value_init (&v2, GST_TYPE_ARRAY);
+>g_value_init (&v3, G_TYPE_DOUBLE);
+>g_value_set_double (&v3, 1);
+>gst_value_array_append_value (&v2, &v3);
+>g_value_unset (&v3);
+>[ Repeat for as many double as your input channels - unset and reinit v3 ]
+>g_value_init (&v, GST_TYPE_ARRAY);
+>gst_value_array_append_value (&v, &v2);
+>g_value_unset (&v2);
+>[ Repeat for as many v2's as your output channels - unset and reinit v2]
+>g_object_set_property (G_OBJECT (audiomixmatrix), "matrix", &v);
+>g_value_unset (&v);
+-}
+pattern AUDIO_CONVERTER_OPT_MIX_MATRIX = "GstAudioConverter.mix-matrix" :: T.Text
+
+{- |
+@/GST_TYPE_AUDIO_DITHER_METHOD/@, The dither method to use when
+changing bit depth.
+Default is @/GST_AUDIO_DITHER_NONE/@.
+-}
+pattern AUDIO_CONVERTER_OPT_DITHER_METHOD = "GstAudioConverter.dither-method" :: T.Text
+
+{- |
+Maximum range of allowed channels, for use in template caps strings.
+-}
+pattern AUDIO_CHANNELS_RANGE = "(int) [ 1, max ]" :: T.Text
+
+
diff --git a/GI/GstAudio/Enums.hs b/GI/GstAudio/Enums.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Enums.hs
@@ -0,0 +1,1328 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Enums
+    ( 
+
+ -- * Enumerations
+-- ** AudioBaseSinkDiscontReason #enum:AudioBaseSinkDiscontReason#
+
+    AudioBaseSinkDiscontReason(..)          ,
+
+
+-- ** AudioBaseSinkSlaveMethod #enum:AudioBaseSinkSlaveMethod#
+
+    AudioBaseSinkSlaveMethod(..)            ,
+
+
+-- ** AudioBaseSrcSlaveMethod #enum:AudioBaseSrcSlaveMethod#
+
+    AudioBaseSrcSlaveMethod(..)             ,
+
+
+-- ** AudioCdSrcMode #enum:AudioCdSrcMode#
+
+    AudioCdSrcMode(..)                      ,
+
+
+-- ** AudioChannelPosition #enum:AudioChannelPosition#
+
+    AudioChannelPosition(..)                ,
+
+
+-- ** AudioDitherMethod #enum:AudioDitherMethod#
+
+    AudioDitherMethod(..)                   ,
+
+
+-- ** AudioFormat #enum:AudioFormat#
+
+    AudioFormat(..)                         ,
+
+
+-- ** AudioLayout #enum:AudioLayout#
+
+    AudioLayout(..)                         ,
+
+
+-- ** AudioNoiseShapingMethod #enum:AudioNoiseShapingMethod#
+
+    AudioNoiseShapingMethod(..)             ,
+
+
+-- ** AudioResamplerFilterInterpolation #enum:AudioResamplerFilterInterpolation#
+
+    AudioResamplerFilterInterpolation(..)   ,
+
+
+-- ** AudioResamplerFilterMode #enum:AudioResamplerFilterMode#
+
+    AudioResamplerFilterMode(..)            ,
+
+
+-- ** AudioResamplerMethod #enum:AudioResamplerMethod#
+
+    AudioResamplerMethod(..)                ,
+
+
+-- ** AudioRingBufferFormatType #enum:AudioRingBufferFormatType#
+
+    AudioRingBufferFormatType(..)           ,
+
+
+-- ** AudioRingBufferState #enum:AudioRingBufferState#
+
+    AudioRingBufferState(..)                ,
+
+
+-- ** StreamVolumeFormat #enum:StreamVolumeFormat#
+
+    StreamVolumeFormat(..)                  ,
+
+
+
+
+    ) 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
+
+
+-- Enum StreamVolumeFormat
+{- |
+Different representations of a stream volume. 'GI.GstAudio.Functions.streamVolumeConvertVolume'
+allows to convert between the different representations.
+
+Formulas to convert from a linear to a cubic or dB volume are
+cbrt(val) and 20 * log10 (val).
+-}
+data StreamVolumeFormat = 
+      StreamVolumeFormatLinear
+    {- ^
+    Linear scale factor, 1.0 = 100%
+    -}
+    | StreamVolumeFormatCubic
+    {- ^
+    Cubic volume scale
+    -}
+    | StreamVolumeFormatDb
+    {- ^
+    Logarithmic volume scale (dB, amplitude not power)
+    -}
+    | AnotherStreamVolumeFormat Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum StreamVolumeFormat where
+    fromEnum StreamVolumeFormatLinear = 0
+    fromEnum StreamVolumeFormatCubic = 1
+    fromEnum StreamVolumeFormatDb = 2
+    fromEnum (AnotherStreamVolumeFormat k) = k
+
+    toEnum 0 = StreamVolumeFormatLinear
+    toEnum 1 = StreamVolumeFormatCubic
+    toEnum 2 = StreamVolumeFormatDb
+    toEnum k = AnotherStreamVolumeFormat k
+
+instance P.Ord StreamVolumeFormat where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+-- Enum AudioRingBufferState
+{- |
+The state of the ringbuffer.
+-}
+data AudioRingBufferState = 
+      AudioRingBufferStateStopped
+    {- ^
+    The ringbuffer is stopped
+    -}
+    | AudioRingBufferStatePaused
+    {- ^
+    The ringbuffer is paused
+    -}
+    | AudioRingBufferStateStarted
+    {- ^
+    The ringbuffer is started
+    -}
+    | AudioRingBufferStateError
+    {- ^
+    The ringbuffer has encountered an
+        error after it has been started, e.g. because the device was
+        disconnected (Since 1.2)
+    -}
+    | AnotherAudioRingBufferState Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioRingBufferState where
+    fromEnum AudioRingBufferStateStopped = 0
+    fromEnum AudioRingBufferStatePaused = 1
+    fromEnum AudioRingBufferStateStarted = 2
+    fromEnum AudioRingBufferStateError = 3
+    fromEnum (AnotherAudioRingBufferState k) = k
+
+    toEnum 0 = AudioRingBufferStateStopped
+    toEnum 1 = AudioRingBufferStatePaused
+    toEnum 2 = AudioRingBufferStateStarted
+    toEnum 3 = AudioRingBufferStateError
+    toEnum k = AnotherAudioRingBufferState k
+
+instance P.Ord AudioRingBufferState where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_ring_buffer_state_get_type" c_gst_audio_ring_buffer_state_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioRingBufferState where
+    boxedEnumType _ = c_gst_audio_ring_buffer_state_get_type
+
+-- Enum AudioRingBufferFormatType
+{- |
+The format of the samples in the ringbuffer.
+-}
+data AudioRingBufferFormatType = 
+      AudioRingBufferFormatTypeRaw
+    {- ^
+    samples in linear or float
+    -}
+    | AudioRingBufferFormatTypeMuLaw
+    {- ^
+    samples in mulaw
+    -}
+    | AudioRingBufferFormatTypeALaw
+    {- ^
+    samples in alaw
+    -}
+    | AudioRingBufferFormatTypeImaAdpcm
+    {- ^
+    samples in ima adpcm
+    -}
+    | AudioRingBufferFormatTypeMpeg
+    {- ^
+    samples in mpeg audio (but not AAC) format
+    -}
+    | AudioRingBufferFormatTypeGsm
+    {- ^
+    samples in gsm format
+    -}
+    | AudioRingBufferFormatTypeIec958
+    {- ^
+    samples in IEC958 frames (e.g. AC3)
+    -}
+    | AudioRingBufferFormatTypeAc3
+    {- ^
+    samples in AC3 format
+    -}
+    | AudioRingBufferFormatTypeEac3
+    {- ^
+    samples in EAC3 format
+    -}
+    | AudioRingBufferFormatTypeDts
+    {- ^
+    samples in DTS format
+    -}
+    | AudioRingBufferFormatTypeMpeg2Aac
+    {- ^
+    samples in MPEG-2 AAC ADTS format
+    -}
+    | AudioRingBufferFormatTypeMpeg4Aac
+    {- ^
+    samples in MPEG-4 AAC ADTS format
+    -}
+    | AudioRingBufferFormatTypeMpeg2AacRaw
+    {- ^
+    samples in MPEG-2 AAC raw format (Since 1.12)
+    -}
+    | AudioRingBufferFormatTypeMpeg4AacRaw
+    {- ^
+    samples in MPEG-4 AAC raw format (Since 1.12)
+    -}
+    | AudioRingBufferFormatTypeFlac
+    {- ^
+    samples in FLAC format (Since 1.12)
+    -}
+    | AnotherAudioRingBufferFormatType Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioRingBufferFormatType where
+    fromEnum AudioRingBufferFormatTypeRaw = 0
+    fromEnum AudioRingBufferFormatTypeMuLaw = 1
+    fromEnum AudioRingBufferFormatTypeALaw = 2
+    fromEnum AudioRingBufferFormatTypeImaAdpcm = 3
+    fromEnum AudioRingBufferFormatTypeMpeg = 4
+    fromEnum AudioRingBufferFormatTypeGsm = 5
+    fromEnum AudioRingBufferFormatTypeIec958 = 6
+    fromEnum AudioRingBufferFormatTypeAc3 = 7
+    fromEnum AudioRingBufferFormatTypeEac3 = 8
+    fromEnum AudioRingBufferFormatTypeDts = 9
+    fromEnum AudioRingBufferFormatTypeMpeg2Aac = 10
+    fromEnum AudioRingBufferFormatTypeMpeg4Aac = 11
+    fromEnum AudioRingBufferFormatTypeMpeg2AacRaw = 12
+    fromEnum AudioRingBufferFormatTypeMpeg4AacRaw = 13
+    fromEnum AudioRingBufferFormatTypeFlac = 14
+    fromEnum (AnotherAudioRingBufferFormatType k) = k
+
+    toEnum 0 = AudioRingBufferFormatTypeRaw
+    toEnum 1 = AudioRingBufferFormatTypeMuLaw
+    toEnum 2 = AudioRingBufferFormatTypeALaw
+    toEnum 3 = AudioRingBufferFormatTypeImaAdpcm
+    toEnum 4 = AudioRingBufferFormatTypeMpeg
+    toEnum 5 = AudioRingBufferFormatTypeGsm
+    toEnum 6 = AudioRingBufferFormatTypeIec958
+    toEnum 7 = AudioRingBufferFormatTypeAc3
+    toEnum 8 = AudioRingBufferFormatTypeEac3
+    toEnum 9 = AudioRingBufferFormatTypeDts
+    toEnum 10 = AudioRingBufferFormatTypeMpeg2Aac
+    toEnum 11 = AudioRingBufferFormatTypeMpeg4Aac
+    toEnum 12 = AudioRingBufferFormatTypeMpeg2AacRaw
+    toEnum 13 = AudioRingBufferFormatTypeMpeg4AacRaw
+    toEnum 14 = AudioRingBufferFormatTypeFlac
+    toEnum k = AnotherAudioRingBufferFormatType k
+
+instance P.Ord AudioRingBufferFormatType where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_ring_buffer_format_type_get_type" c_gst_audio_ring_buffer_format_type_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioRingBufferFormatType where
+    boxedEnumType _ = c_gst_audio_ring_buffer_format_type_get_type
+
+-- Enum AudioResamplerMethod
+{- |
+Different subsampling and upsampling methods
+
+/Since: 1.6/
+-}
+data AudioResamplerMethod = 
+      AudioResamplerMethodNearest
+    {- ^
+    Duplicates the samples when
+       upsampling and drops when downsampling
+    -}
+    | AudioResamplerMethodLinear
+    {- ^
+    Uses linear interpolation to reconstruct
+       missing samples and averaging to downsample
+    -}
+    | AudioResamplerMethodCubic
+    {- ^
+    Uses cubic interpolation
+    -}
+    | AudioResamplerMethodBlackmanNuttall
+    {- ^
+    Uses Blackman-Nuttall windowed sinc interpolation
+    -}
+    | AudioResamplerMethodKaiser
+    {- ^
+    Uses Kaiser windowed sinc interpolation
+    -}
+    | AnotherAudioResamplerMethod Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioResamplerMethod where
+    fromEnum AudioResamplerMethodNearest = 0
+    fromEnum AudioResamplerMethodLinear = 1
+    fromEnum AudioResamplerMethodCubic = 2
+    fromEnum AudioResamplerMethodBlackmanNuttall = 3
+    fromEnum AudioResamplerMethodKaiser = 4
+    fromEnum (AnotherAudioResamplerMethod k) = k
+
+    toEnum 0 = AudioResamplerMethodNearest
+    toEnum 1 = AudioResamplerMethodLinear
+    toEnum 2 = AudioResamplerMethodCubic
+    toEnum 3 = AudioResamplerMethodBlackmanNuttall
+    toEnum 4 = AudioResamplerMethodKaiser
+    toEnum k = AnotherAudioResamplerMethod k
+
+instance P.Ord AudioResamplerMethod where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_resampler_method_get_type" c_gst_audio_resampler_method_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioResamplerMethod where
+    boxedEnumType _ = c_gst_audio_resampler_method_get_type
+
+-- Enum AudioResamplerFilterMode
+{- |
+Select for the filter tables should be set up.
+-}
+data AudioResamplerFilterMode = 
+      AudioResamplerFilterModeInterpolated
+    {- ^
+    Use interpolated filter tables. This
+        uses less memory but more CPU and is slightly less accurate but it allows for more
+        efficient variable rate resampling with 'GI.GstAudio.Structs.AudioResampler.audioResamplerUpdate'.
+    -}
+    | AudioResamplerFilterModeFull
+    {- ^
+    Use full filter table. This uses more memory
+        but less CPU.
+    -}
+    | AudioResamplerFilterModeAuto
+    {- ^
+    Automatically choose between interpolated
+        and full filter tables.
+    -}
+    | AnotherAudioResamplerFilterMode Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioResamplerFilterMode where
+    fromEnum AudioResamplerFilterModeInterpolated = 0
+    fromEnum AudioResamplerFilterModeFull = 1
+    fromEnum AudioResamplerFilterModeAuto = 2
+    fromEnum (AnotherAudioResamplerFilterMode k) = k
+
+    toEnum 0 = AudioResamplerFilterModeInterpolated
+    toEnum 1 = AudioResamplerFilterModeFull
+    toEnum 2 = AudioResamplerFilterModeAuto
+    toEnum k = AnotherAudioResamplerFilterMode k
+
+instance P.Ord AudioResamplerFilterMode where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_resampler_filter_mode_get_type" c_gst_audio_resampler_filter_mode_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioResamplerFilterMode where
+    boxedEnumType _ = c_gst_audio_resampler_filter_mode_get_type
+
+-- Enum AudioResamplerFilterInterpolation
+{- |
+The different filter interpolation methods.
+-}
+data AudioResamplerFilterInterpolation = 
+      AudioResamplerFilterInterpolationNone
+    {- ^
+    no interpolation
+    -}
+    | AudioResamplerFilterInterpolationLinear
+    {- ^
+    linear interpolation of the
+      filter coeficients.
+    -}
+    | AudioResamplerFilterInterpolationCubic
+    {- ^
+    cubic interpolation of the
+      filter coeficients.
+    -}
+    | AnotherAudioResamplerFilterInterpolation Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioResamplerFilterInterpolation where
+    fromEnum AudioResamplerFilterInterpolationNone = 0
+    fromEnum AudioResamplerFilterInterpolationLinear = 1
+    fromEnum AudioResamplerFilterInterpolationCubic = 2
+    fromEnum (AnotherAudioResamplerFilterInterpolation k) = k
+
+    toEnum 0 = AudioResamplerFilterInterpolationNone
+    toEnum 1 = AudioResamplerFilterInterpolationLinear
+    toEnum 2 = AudioResamplerFilterInterpolationCubic
+    toEnum k = AnotherAudioResamplerFilterInterpolation k
+
+instance P.Ord AudioResamplerFilterInterpolation where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_resampler_filter_interpolation_get_type" c_gst_audio_resampler_filter_interpolation_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioResamplerFilterInterpolation where
+    boxedEnumType _ = c_gst_audio_resampler_filter_interpolation_get_type
+
+-- Enum AudioNoiseShapingMethod
+{- |
+Set of available noise shaping methods
+-}
+data AudioNoiseShapingMethod = 
+      AudioNoiseShapingMethodNone
+    {- ^
+    No noise shaping (default)
+    -}
+    | AudioNoiseShapingMethodErrorFeedback
+    {- ^
+    Error feedback
+    -}
+    | AudioNoiseShapingMethodSimple
+    {- ^
+    Simple 2-pole noise shaping
+    -}
+    | AudioNoiseShapingMethodMedium
+    {- ^
+    Medium 5-pole noise shaping
+    -}
+    | AudioNoiseShapingMethodHigh
+    {- ^
+    High 8-pole noise shaping
+    -}
+    | AnotherAudioNoiseShapingMethod Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioNoiseShapingMethod where
+    fromEnum AudioNoiseShapingMethodNone = 0
+    fromEnum AudioNoiseShapingMethodErrorFeedback = 1
+    fromEnum AudioNoiseShapingMethodSimple = 2
+    fromEnum AudioNoiseShapingMethodMedium = 3
+    fromEnum AudioNoiseShapingMethodHigh = 4
+    fromEnum (AnotherAudioNoiseShapingMethod k) = k
+
+    toEnum 0 = AudioNoiseShapingMethodNone
+    toEnum 1 = AudioNoiseShapingMethodErrorFeedback
+    toEnum 2 = AudioNoiseShapingMethodSimple
+    toEnum 3 = AudioNoiseShapingMethodMedium
+    toEnum 4 = AudioNoiseShapingMethodHigh
+    toEnum k = AnotherAudioNoiseShapingMethod k
+
+instance P.Ord AudioNoiseShapingMethod where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_noise_shaping_method_get_type" c_gst_audio_noise_shaping_method_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioNoiseShapingMethod where
+    boxedEnumType _ = c_gst_audio_noise_shaping_method_get_type
+
+-- Enum AudioLayout
+{- |
+Layout of the audio samples for the different channels.
+-}
+data AudioLayout = 
+      AudioLayoutInterleaved
+    {- ^
+    interleaved audio
+    -}
+    | AudioLayoutNonInterleaved
+    {- ^
+    non-interleaved audio
+    -}
+    | AnotherAudioLayout Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioLayout where
+    fromEnum AudioLayoutInterleaved = 0
+    fromEnum AudioLayoutNonInterleaved = 1
+    fromEnum (AnotherAudioLayout k) = k
+
+    toEnum 0 = AudioLayoutInterleaved
+    toEnum 1 = AudioLayoutNonInterleaved
+    toEnum k = AnotherAudioLayout k
+
+instance P.Ord AudioLayout where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_layout_get_type" c_gst_audio_layout_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioLayout where
+    boxedEnumType _ = c_gst_audio_layout_get_type
+
+-- Enum AudioFormat
+{- |
+Enum value describing the most common audio formats.
+-}
+data AudioFormat = 
+      AudioFormatUnknown
+    {- ^
+    unknown or unset audio format
+    -}
+    | AudioFormatEncoded
+    {- ^
+    encoded audio format
+    -}
+    | AudioFormatS8
+    {- ^
+    8 bits in 8 bits, signed
+    -}
+    | AudioFormatU8
+    {- ^
+    8 bits in 8 bits, unsigned
+    -}
+    | AudioFormatS16le
+    {- ^
+    16 bits in 16 bits, signed, little endian
+    -}
+    | AudioFormatS16be
+    {- ^
+    16 bits in 16 bits, signed, big endian
+    -}
+    | AudioFormatU16le
+    {- ^
+    16 bits in 16 bits, unsigned, little endian
+    -}
+    | AudioFormatU16be
+    {- ^
+    16 bits in 16 bits, unsigned, big endian
+    -}
+    | AudioFormatS2432le
+    {- ^
+    24 bits in 32 bits, signed, little endian
+    -}
+    | AudioFormatS2432be
+    {- ^
+    24 bits in 32 bits, signed, big endian
+    -}
+    | AudioFormatU2432le
+    {- ^
+    24 bits in 32 bits, unsigned, little endian
+    -}
+    | AudioFormatU2432be
+    {- ^
+    24 bits in 32 bits, unsigned, big endian
+    -}
+    | AudioFormatS32le
+    {- ^
+    32 bits in 32 bits, signed, little endian
+    -}
+    | AudioFormatS32be
+    {- ^
+    32 bits in 32 bits, signed, big endian
+    -}
+    | AudioFormatU32le
+    {- ^
+    32 bits in 32 bits, unsigned, little endian
+    -}
+    | AudioFormatU32be
+    {- ^
+    32 bits in 32 bits, unsigned, big endian
+    -}
+    | AudioFormatS24le
+    {- ^
+    24 bits in 24 bits, signed, little endian
+    -}
+    | AudioFormatS24be
+    {- ^
+    24 bits in 24 bits, signed, big endian
+    -}
+    | AudioFormatU24le
+    {- ^
+    24 bits in 24 bits, unsigned, little endian
+    -}
+    | AudioFormatU24be
+    {- ^
+    24 bits in 24 bits, unsigned, big endian
+    -}
+    | AudioFormatS20le
+    {- ^
+    20 bits in 24 bits, signed, little endian
+    -}
+    | AudioFormatS20be
+    {- ^
+    20 bits in 24 bits, signed, big endian
+    -}
+    | AudioFormatU20le
+    {- ^
+    20 bits in 24 bits, unsigned, little endian
+    -}
+    | AudioFormatU20be
+    {- ^
+    20 bits in 24 bits, unsigned, big endian
+    -}
+    | AudioFormatS18le
+    {- ^
+    18 bits in 24 bits, signed, little endian
+    -}
+    | AudioFormatS18be
+    {- ^
+    18 bits in 24 bits, signed, big endian
+    -}
+    | AudioFormatU18le
+    {- ^
+    18 bits in 24 bits, unsigned, little endian
+    -}
+    | AudioFormatU18be
+    {- ^
+    18 bits in 24 bits, unsigned, big endian
+    -}
+    | AudioFormatF32le
+    {- ^
+    32-bit floating point samples, little endian
+    -}
+    | AudioFormatF32be
+    {- ^
+    32-bit floating point samples, big endian
+    -}
+    | AudioFormatF64le
+    {- ^
+    64-bit floating point samples, little endian
+    -}
+    | AudioFormatF64be
+    {- ^
+    64-bit floating point samples, big endian
+    -}
+    | AudioFormatS16
+    {- ^
+    16 bits in 16 bits, signed, native endianness
+    -}
+    | AudioFormatU16
+    {- ^
+    16 bits in 16 bits, unsigned, native endianness
+    -}
+    | AudioFormatS2432
+    {- ^
+    24 bits in 32 bits, signed, native endianness
+    -}
+    | AudioFormatU2432
+    {- ^
+    24 bits in 32 bits, unsigned, native endianness
+    -}
+    | AudioFormatS32
+    {- ^
+    32 bits in 32 bits, signed, native endianness
+    -}
+    | AudioFormatU32
+    {- ^
+    32 bits in 32 bits, unsigned, native endianness
+    -}
+    | AudioFormatS24
+    {- ^
+    24 bits in 24 bits, signed, native endianness
+    -}
+    | AudioFormatU24
+    {- ^
+    24 bits in 24 bits, unsigned, native endianness
+    -}
+    | AudioFormatS20
+    {- ^
+    20 bits in 24 bits, signed, native endianness
+    -}
+    | AudioFormatU20
+    {- ^
+    20 bits in 24 bits, unsigned, native endianness
+    -}
+    | AudioFormatS18
+    {- ^
+    18 bits in 24 bits, signed, native endianness
+    -}
+    | AudioFormatU18
+    {- ^
+    18 bits in 24 bits, unsigned, native endianness
+    -}
+    | AudioFormatF32
+    {- ^
+    32-bit floating point samples, native endianness
+    -}
+    | AudioFormatF64
+    {- ^
+    64-bit floating point samples, native endianness
+    -}
+    | AnotherAudioFormat Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioFormat where
+    fromEnum AudioFormatUnknown = 0
+    fromEnum AudioFormatEncoded = 1
+    fromEnum AudioFormatS8 = 2
+    fromEnum AudioFormatU8 = 3
+    fromEnum AudioFormatS16le = 4
+    fromEnum AudioFormatS16be = 5
+    fromEnum AudioFormatU16le = 6
+    fromEnum AudioFormatU16be = 7
+    fromEnum AudioFormatS2432le = 8
+    fromEnum AudioFormatS2432be = 9
+    fromEnum AudioFormatU2432le = 10
+    fromEnum AudioFormatU2432be = 11
+    fromEnum AudioFormatS32le = 12
+    fromEnum AudioFormatS32be = 13
+    fromEnum AudioFormatU32le = 14
+    fromEnum AudioFormatU32be = 15
+    fromEnum AudioFormatS24le = 16
+    fromEnum AudioFormatS24be = 17
+    fromEnum AudioFormatU24le = 18
+    fromEnum AudioFormatU24be = 19
+    fromEnum AudioFormatS20le = 20
+    fromEnum AudioFormatS20be = 21
+    fromEnum AudioFormatU20le = 22
+    fromEnum AudioFormatU20be = 23
+    fromEnum AudioFormatS18le = 24
+    fromEnum AudioFormatS18be = 25
+    fromEnum AudioFormatU18le = 26
+    fromEnum AudioFormatU18be = 27
+    fromEnum AudioFormatF32le = 28
+    fromEnum AudioFormatF32be = 29
+    fromEnum AudioFormatF64le = 30
+    fromEnum AudioFormatF64be = 31
+    fromEnum AudioFormatS16 = 4
+    fromEnum AudioFormatU16 = 6
+    fromEnum AudioFormatS2432 = 8
+    fromEnum AudioFormatU2432 = 10
+    fromEnum AudioFormatS32 = 12
+    fromEnum AudioFormatU32 = 14
+    fromEnum AudioFormatS24 = 16
+    fromEnum AudioFormatU24 = 18
+    fromEnum AudioFormatS20 = 20
+    fromEnum AudioFormatU20 = 22
+    fromEnum AudioFormatS18 = 24
+    fromEnum AudioFormatU18 = 26
+    fromEnum AudioFormatF32 = 28
+    fromEnum AudioFormatF64 = 30
+    fromEnum (AnotherAudioFormat k) = k
+
+    toEnum 0 = AudioFormatUnknown
+    toEnum 1 = AudioFormatEncoded
+    toEnum 2 = AudioFormatS8
+    toEnum 3 = AudioFormatU8
+    toEnum 4 = AudioFormatS16le
+    toEnum 5 = AudioFormatS16be
+    toEnum 6 = AudioFormatU16le
+    toEnum 7 = AudioFormatU16be
+    toEnum 8 = AudioFormatS2432le
+    toEnum 9 = AudioFormatS2432be
+    toEnum 10 = AudioFormatU2432le
+    toEnum 11 = AudioFormatU2432be
+    toEnum 12 = AudioFormatS32le
+    toEnum 13 = AudioFormatS32be
+    toEnum 14 = AudioFormatU32le
+    toEnum 15 = AudioFormatU32be
+    toEnum 16 = AudioFormatS24le
+    toEnum 17 = AudioFormatS24be
+    toEnum 18 = AudioFormatU24le
+    toEnum 19 = AudioFormatU24be
+    toEnum 20 = AudioFormatS20le
+    toEnum 21 = AudioFormatS20be
+    toEnum 22 = AudioFormatU20le
+    toEnum 23 = AudioFormatU20be
+    toEnum 24 = AudioFormatS18le
+    toEnum 25 = AudioFormatS18be
+    toEnum 26 = AudioFormatU18le
+    toEnum 27 = AudioFormatU18be
+    toEnum 28 = AudioFormatF32le
+    toEnum 29 = AudioFormatF32be
+    toEnum 30 = AudioFormatF64le
+    toEnum 31 = AudioFormatF64be
+    toEnum 4 = AudioFormatS16
+    toEnum 6 = AudioFormatU16
+    toEnum 8 = AudioFormatS2432
+    toEnum 10 = AudioFormatU2432
+    toEnum 12 = AudioFormatS32
+    toEnum 14 = AudioFormatU32
+    toEnum 16 = AudioFormatS24
+    toEnum 18 = AudioFormatU24
+    toEnum 20 = AudioFormatS20
+    toEnum 22 = AudioFormatU20
+    toEnum 24 = AudioFormatS18
+    toEnum 26 = AudioFormatU18
+    toEnum 28 = AudioFormatF32
+    toEnum 30 = AudioFormatF64
+    toEnum k = AnotherAudioFormat k
+
+instance P.Ord AudioFormat where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_format_get_type" c_gst_audio_format_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioFormat where
+    boxedEnumType _ = c_gst_audio_format_get_type
+
+-- Enum AudioDitherMethod
+{- |
+Set of available dithering methods.
+-}
+data AudioDitherMethod = 
+      AudioDitherMethodNone
+    {- ^
+    No dithering
+    -}
+    | AudioDitherMethodRpdf
+    {- ^
+    Rectangular dithering
+    -}
+    | AudioDitherMethodTpdf
+    {- ^
+    Triangular dithering (default)
+    -}
+    | AudioDitherMethodTpdfHf
+    {- ^
+    High frequency triangular dithering
+    -}
+    | AnotherAudioDitherMethod Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioDitherMethod where
+    fromEnum AudioDitherMethodNone = 0
+    fromEnum AudioDitherMethodRpdf = 1
+    fromEnum AudioDitherMethodTpdf = 2
+    fromEnum AudioDitherMethodTpdfHf = 3
+    fromEnum (AnotherAudioDitherMethod k) = k
+
+    toEnum 0 = AudioDitherMethodNone
+    toEnum 1 = AudioDitherMethodRpdf
+    toEnum 2 = AudioDitherMethodTpdf
+    toEnum 3 = AudioDitherMethodTpdfHf
+    toEnum k = AnotherAudioDitherMethod k
+
+instance P.Ord AudioDitherMethod where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_dither_method_get_type" c_gst_audio_dither_method_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioDitherMethod where
+    boxedEnumType _ = c_gst_audio_dither_method_get_type
+
+-- Enum AudioChannelPosition
+{- |
+Audio channel positions.
+
+These are the channels defined in SMPTE 2036-2-2008
+Table 1 for 22.2 audio systems with the Surround and Wide channels from
+DTS Coherent Acoustics (v.1.3.1) and 10.2 and 7.1 layouts. In the caps the
+actual channel layout is expressed with a channel count and a channel mask,
+which describes the existing channels. The positions in the bit mask correspond
+to the enum values.
+For negotiation it is allowed to have more bits set in the channel mask than
+the number of channels to specify the allowed channel positions but this is
+not allowed in negotiated caps. It is not allowed in any situation other
+than the one mentioned below to have less bits set in the channel mask than
+the number of channels.
+
+/@gSTAUDIOCHANNELPOSITIONMONO@/ can only be used with a single mono channel that
+has no direction information and would be mixed into all directional channels.
+This is expressed in caps by having a single channel and no channel mask.
+
+/@gSTAUDIOCHANNELPOSITIONNONE@/ can only be used if all channels have this position.
+This is expressed in caps by having a channel mask with no bits set.
+
+As another special case it is allowed to have two channels without a channel mask.
+This implicitely means that this is a stereo stream with a front left and front right
+channel.
+-}
+data AudioChannelPosition = 
+      AudioChannelPositionNone
+    {- ^
+    used for position-less channels, e.g.
+        from a sound card that records 1024 channels; mutually exclusive with
+        any other channel position
+    -}
+    | AudioChannelPositionMono
+    {- ^
+    Mono without direction;
+        can only be used with 1 channel
+    -}
+    | AudioChannelPositionInvalid
+    {- ^
+    invalid position
+    -}
+    | AudioChannelPositionFrontLeft
+    {- ^
+    Front left
+    -}
+    | AudioChannelPositionFrontRight
+    {- ^
+    Front right
+    -}
+    | AudioChannelPositionFrontCenter
+    {- ^
+    Front center
+    -}
+    | AudioChannelPositionLfe1
+    {- ^
+    Low-frequency effects 1 (subwoofer)
+    -}
+    | AudioChannelPositionRearLeft
+    {- ^
+    Rear left
+    -}
+    | AudioChannelPositionRearRight
+    {- ^
+    Rear right
+    -}
+    | AudioChannelPositionFrontLeftOfCenter
+    {- ^
+    Front left of center
+    -}
+    | AudioChannelPositionFrontRightOfCenter
+    {- ^
+    Front right of center
+    -}
+    | AudioChannelPositionRearCenter
+    {- ^
+    Rear center
+    -}
+    | AudioChannelPositionLfe2
+    {- ^
+    Low-frequency effects 2 (subwoofer)
+    -}
+    | AudioChannelPositionSideLeft
+    {- ^
+    Side left
+    -}
+    | AudioChannelPositionSideRight
+    {- ^
+    Side right
+    -}
+    | AudioChannelPositionTopFrontLeft
+    {- ^
+    Top front left
+    -}
+    | AudioChannelPositionTopFrontRight
+    {- ^
+    Top front right
+    -}
+    | AudioChannelPositionTopFrontCenter
+    {- ^
+    Top front center
+    -}
+    | AudioChannelPositionTopCenter
+    {- ^
+    Top center
+    -}
+    | AudioChannelPositionTopRearLeft
+    {- ^
+    Top rear left
+    -}
+    | AudioChannelPositionTopRearRight
+    {- ^
+    Top rear right
+    -}
+    | AudioChannelPositionTopSideLeft
+    {- ^
+    Top side right
+    -}
+    | AudioChannelPositionTopSideRight
+    {- ^
+    Top rear right
+    -}
+    | AudioChannelPositionTopRearCenter
+    {- ^
+    Top rear center
+    -}
+    | AudioChannelPositionBottomFrontCenter
+    {- ^
+    Bottom front center
+    -}
+    | AudioChannelPositionBottomFrontLeft
+    {- ^
+    Bottom front left
+    -}
+    | AudioChannelPositionBottomFrontRight
+    {- ^
+    Bottom front right
+    -}
+    | AudioChannelPositionWideLeft
+    {- ^
+    Wide left (between front left and side left)
+    -}
+    | AudioChannelPositionWideRight
+    {- ^
+    Wide right (between front right and side right)
+    -}
+    | AudioChannelPositionSurroundLeft
+    {- ^
+    Surround left (between rear left and side left)
+    -}
+    | AudioChannelPositionSurroundRight
+    {- ^
+    Surround right (between rear right and side right)
+    -}
+    | AnotherAudioChannelPosition Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioChannelPosition where
+    fromEnum AudioChannelPositionNone = -3
+    fromEnum AudioChannelPositionMono = -2
+    fromEnum AudioChannelPositionInvalid = -1
+    fromEnum AudioChannelPositionFrontLeft = 0
+    fromEnum AudioChannelPositionFrontRight = 1
+    fromEnum AudioChannelPositionFrontCenter = 2
+    fromEnum AudioChannelPositionLfe1 = 3
+    fromEnum AudioChannelPositionRearLeft = 4
+    fromEnum AudioChannelPositionRearRight = 5
+    fromEnum AudioChannelPositionFrontLeftOfCenter = 6
+    fromEnum AudioChannelPositionFrontRightOfCenter = 7
+    fromEnum AudioChannelPositionRearCenter = 8
+    fromEnum AudioChannelPositionLfe2 = 9
+    fromEnum AudioChannelPositionSideLeft = 10
+    fromEnum AudioChannelPositionSideRight = 11
+    fromEnum AudioChannelPositionTopFrontLeft = 12
+    fromEnum AudioChannelPositionTopFrontRight = 13
+    fromEnum AudioChannelPositionTopFrontCenter = 14
+    fromEnum AudioChannelPositionTopCenter = 15
+    fromEnum AudioChannelPositionTopRearLeft = 16
+    fromEnum AudioChannelPositionTopRearRight = 17
+    fromEnum AudioChannelPositionTopSideLeft = 18
+    fromEnum AudioChannelPositionTopSideRight = 19
+    fromEnum AudioChannelPositionTopRearCenter = 20
+    fromEnum AudioChannelPositionBottomFrontCenter = 21
+    fromEnum AudioChannelPositionBottomFrontLeft = 22
+    fromEnum AudioChannelPositionBottomFrontRight = 23
+    fromEnum AudioChannelPositionWideLeft = 24
+    fromEnum AudioChannelPositionWideRight = 25
+    fromEnum AudioChannelPositionSurroundLeft = 26
+    fromEnum AudioChannelPositionSurroundRight = 27
+    fromEnum (AnotherAudioChannelPosition k) = k
+
+    toEnum -3 = AudioChannelPositionNone
+    toEnum -2 = AudioChannelPositionMono
+    toEnum -1 = AudioChannelPositionInvalid
+    toEnum 0 = AudioChannelPositionFrontLeft
+    toEnum 1 = AudioChannelPositionFrontRight
+    toEnum 2 = AudioChannelPositionFrontCenter
+    toEnum 3 = AudioChannelPositionLfe1
+    toEnum 4 = AudioChannelPositionRearLeft
+    toEnum 5 = AudioChannelPositionRearRight
+    toEnum 6 = AudioChannelPositionFrontLeftOfCenter
+    toEnum 7 = AudioChannelPositionFrontRightOfCenter
+    toEnum 8 = AudioChannelPositionRearCenter
+    toEnum 9 = AudioChannelPositionLfe2
+    toEnum 10 = AudioChannelPositionSideLeft
+    toEnum 11 = AudioChannelPositionSideRight
+    toEnum 12 = AudioChannelPositionTopFrontLeft
+    toEnum 13 = AudioChannelPositionTopFrontRight
+    toEnum 14 = AudioChannelPositionTopFrontCenter
+    toEnum 15 = AudioChannelPositionTopCenter
+    toEnum 16 = AudioChannelPositionTopRearLeft
+    toEnum 17 = AudioChannelPositionTopRearRight
+    toEnum 18 = AudioChannelPositionTopSideLeft
+    toEnum 19 = AudioChannelPositionTopSideRight
+    toEnum 20 = AudioChannelPositionTopRearCenter
+    toEnum 21 = AudioChannelPositionBottomFrontCenter
+    toEnum 22 = AudioChannelPositionBottomFrontLeft
+    toEnum 23 = AudioChannelPositionBottomFrontRight
+    toEnum 24 = AudioChannelPositionWideLeft
+    toEnum 25 = AudioChannelPositionWideRight
+    toEnum 26 = AudioChannelPositionSurroundLeft
+    toEnum 27 = AudioChannelPositionSurroundRight
+    toEnum k = AnotherAudioChannelPosition k
+
+instance P.Ord AudioChannelPosition where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_channel_position_get_type" c_gst_audio_channel_position_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioChannelPosition where
+    boxedEnumType _ = c_gst_audio_channel_position_get_type
+
+-- Enum AudioCdSrcMode
+{- |
+Mode in which the CD audio source operates. Influences timestamping,
+EOS handling and seeking.
+-}
+data AudioCdSrcMode = 
+      AudioCdSrcModeNormal
+    {- ^
+    each single track is a stream
+    -}
+    | AudioCdSrcModeContinuous
+    {- ^
+    the entire disc is a single stream
+    -}
+    | AnotherAudioCdSrcMode Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioCdSrcMode where
+    fromEnum AudioCdSrcModeNormal = 0
+    fromEnum AudioCdSrcModeContinuous = 1
+    fromEnum (AnotherAudioCdSrcMode k) = k
+
+    toEnum 0 = AudioCdSrcModeNormal
+    toEnum 1 = AudioCdSrcModeContinuous
+    toEnum k = AnotherAudioCdSrcMode k
+
+instance P.Ord AudioCdSrcMode where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_cd_src_mode_get_type" c_gst_audio_cd_src_mode_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioCdSrcMode where
+    boxedEnumType _ = c_gst_audio_cd_src_mode_get_type
+
+-- Enum AudioBaseSrcSlaveMethod
+{- |
+Different possible clock slaving algorithms when the internal audio clock was
+not selected as the pipeline clock.
+-}
+data AudioBaseSrcSlaveMethod = 
+      AudioBaseSrcSlaveMethodResample
+    {- ^
+    Resample to match the master clock.
+    -}
+    | AudioBaseSrcSlaveMethodReTimestamp
+    {- ^
+    Retimestamp output buffers with master
+    clock time.
+    -}
+    | AudioBaseSrcSlaveMethodSkew
+    {- ^
+    Adjust capture pointer when master clock
+    drifts too much.
+    -}
+    | AudioBaseSrcSlaveMethodNone
+    {- ^
+    No adjustment is done.
+    -}
+    | AnotherAudioBaseSrcSlaveMethod Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioBaseSrcSlaveMethod where
+    fromEnum AudioBaseSrcSlaveMethodResample = 0
+    fromEnum AudioBaseSrcSlaveMethodReTimestamp = 1
+    fromEnum AudioBaseSrcSlaveMethodSkew = 2
+    fromEnum AudioBaseSrcSlaveMethodNone = 3
+    fromEnum (AnotherAudioBaseSrcSlaveMethod k) = k
+
+    toEnum 0 = AudioBaseSrcSlaveMethodResample
+    toEnum 1 = AudioBaseSrcSlaveMethodReTimestamp
+    toEnum 2 = AudioBaseSrcSlaveMethodSkew
+    toEnum 3 = AudioBaseSrcSlaveMethodNone
+    toEnum k = AnotherAudioBaseSrcSlaveMethod k
+
+instance P.Ord AudioBaseSrcSlaveMethod where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_base_src_slave_method_get_type" c_gst_audio_base_src_slave_method_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioBaseSrcSlaveMethod where
+    boxedEnumType _ = c_gst_audio_base_src_slave_method_get_type
+
+-- Enum AudioBaseSinkSlaveMethod
+{- |
+Different possible clock slaving algorithms used when the internal audio
+clock is not selected as the pipeline master clock.
+-}
+data AudioBaseSinkSlaveMethod = 
+      AudioBaseSinkSlaveMethodResample
+    {- ^
+    Resample to match the master clock
+    -}
+    | AudioBaseSinkSlaveMethodSkew
+    {- ^
+    Adjust playout pointer when master clock
+    drifts too much.
+    -}
+    | AudioBaseSinkSlaveMethodNone
+    {- ^
+    No adjustment is done.
+    -}
+    | AudioBaseSinkSlaveMethodCustom
+    {- ^
+    Use custom clock slaving algorithm (Since: 1.6)
+    -}
+    | AnotherAudioBaseSinkSlaveMethod Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioBaseSinkSlaveMethod where
+    fromEnum AudioBaseSinkSlaveMethodResample = 0
+    fromEnum AudioBaseSinkSlaveMethodSkew = 1
+    fromEnum AudioBaseSinkSlaveMethodNone = 2
+    fromEnum AudioBaseSinkSlaveMethodCustom = 3
+    fromEnum (AnotherAudioBaseSinkSlaveMethod k) = k
+
+    toEnum 0 = AudioBaseSinkSlaveMethodResample
+    toEnum 1 = AudioBaseSinkSlaveMethodSkew
+    toEnum 2 = AudioBaseSinkSlaveMethodNone
+    toEnum 3 = AudioBaseSinkSlaveMethodCustom
+    toEnum k = AnotherAudioBaseSinkSlaveMethod k
+
+instance P.Ord AudioBaseSinkSlaveMethod where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_base_sink_slave_method_get_type" c_gst_audio_base_sink_slave_method_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioBaseSinkSlaveMethod where
+    boxedEnumType _ = c_gst_audio_base_sink_slave_method_get_type
+
+-- Enum AudioBaseSinkDiscontReason
+{- |
+Different possible reasons for discontinuities. This enum is useful for the custom
+slave method.
+
+/Since: 1.6/
+-}
+data AudioBaseSinkDiscontReason = 
+      AudioBaseSinkDiscontReasonNoDiscont
+    {- ^
+    No discontinuity occurred
+    -}
+    | AudioBaseSinkDiscontReasonNewCaps
+    {- ^
+    New caps are set, causing renegotiotion
+    -}
+    | AudioBaseSinkDiscontReasonFlush
+    {- ^
+    Samples have been flushed
+    -}
+    | AudioBaseSinkDiscontReasonSyncLatency
+    {- ^
+    Sink was synchronized to the estimated latency (occurs during initialization)
+    -}
+    | AudioBaseSinkDiscontReasonAlignment
+    {- ^
+    Aligning buffers failed because the timestamps are too discontinuous
+    -}
+    | AudioBaseSinkDiscontReasonDeviceFailure
+    {- ^
+    Audio output device experienced and recovered from an error but introduced latency in the process (see also /@gstAudioBaseSinkReportDeviceFailure@/())
+    -}
+    | AnotherAudioBaseSinkDiscontReason Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioBaseSinkDiscontReason where
+    fromEnum AudioBaseSinkDiscontReasonNoDiscont = 0
+    fromEnum AudioBaseSinkDiscontReasonNewCaps = 1
+    fromEnum AudioBaseSinkDiscontReasonFlush = 2
+    fromEnum AudioBaseSinkDiscontReasonSyncLatency = 3
+    fromEnum AudioBaseSinkDiscontReasonAlignment = 4
+    fromEnum AudioBaseSinkDiscontReasonDeviceFailure = 5
+    fromEnum (AnotherAudioBaseSinkDiscontReason k) = k
+
+    toEnum 0 = AudioBaseSinkDiscontReasonNoDiscont
+    toEnum 1 = AudioBaseSinkDiscontReasonNewCaps
+    toEnum 2 = AudioBaseSinkDiscontReasonFlush
+    toEnum 3 = AudioBaseSinkDiscontReasonSyncLatency
+    toEnum 4 = AudioBaseSinkDiscontReasonAlignment
+    toEnum 5 = AudioBaseSinkDiscontReasonDeviceFailure
+    toEnum k = AnotherAudioBaseSinkDiscontReason k
+
+instance P.Ord AudioBaseSinkDiscontReason where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_base_sink_discont_reason_get_type" c_gst_audio_base_sink_discont_reason_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioBaseSinkDiscontReason where
+    boxedEnumType _ = c_gst_audio_base_sink_discont_reason_get_type
+
+
diff --git a/GI/GstAudio/Enums.hs-boot b/GI/GstAudio/Enums.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Enums.hs-boot
@@ -0,0 +1,68 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Enums 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
+
+data StreamVolumeFormat
+instance P.Enum StreamVolumeFormat where
+data AudioRingBufferState
+instance P.Enum AudioRingBufferState where
+instance BoxedEnum AudioRingBufferState where
+data AudioRingBufferFormatType
+instance P.Enum AudioRingBufferFormatType where
+instance BoxedEnum AudioRingBufferFormatType where
+data AudioResamplerMethod
+instance P.Enum AudioResamplerMethod where
+instance BoxedEnum AudioResamplerMethod where
+data AudioResamplerFilterMode
+instance P.Enum AudioResamplerFilterMode where
+instance BoxedEnum AudioResamplerFilterMode where
+data AudioResamplerFilterInterpolation
+instance P.Enum AudioResamplerFilterInterpolation where
+instance BoxedEnum AudioResamplerFilterInterpolation where
+data AudioNoiseShapingMethod
+instance P.Enum AudioNoiseShapingMethod where
+instance BoxedEnum AudioNoiseShapingMethod where
+data AudioLayout
+instance P.Enum AudioLayout where
+instance BoxedEnum AudioLayout where
+data AudioFormat
+instance P.Enum AudioFormat where
+instance BoxedEnum AudioFormat where
+data AudioDitherMethod
+instance P.Enum AudioDitherMethod where
+instance BoxedEnum AudioDitherMethod where
+data AudioChannelPosition
+instance P.Enum AudioChannelPosition where
+instance BoxedEnum AudioChannelPosition where
+data AudioCdSrcMode
+instance P.Enum AudioCdSrcMode where
+instance BoxedEnum AudioCdSrcMode where
+data AudioBaseSrcSlaveMethod
+instance P.Enum AudioBaseSrcSlaveMethod where
+instance BoxedEnum AudioBaseSrcSlaveMethod where
+data AudioBaseSinkSlaveMethod
+instance P.Enum AudioBaseSinkSlaveMethod where
+instance BoxedEnum AudioBaseSinkSlaveMethod where
+data AudioBaseSinkDiscontReason
+instance P.Enum AudioBaseSinkDiscontReason where
+instance BoxedEnum AudioBaseSinkDiscontReason where
diff --git a/GI/GstAudio/Flags.hs b/GI/GstAudio/Flags.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Flags.hs
@@ -0,0 +1,403 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Flags
+    ( 
+
+ -- * Flags
+-- ** AudioChannelMixerFlags #flag:AudioChannelMixerFlags#
+
+    AudioChannelMixerFlags(..)              ,
+
+
+-- ** AudioConverterFlags #flag:AudioConverterFlags#
+
+    AudioConverterFlags(..)                 ,
+
+
+-- ** AudioFlags #flag:AudioFlags#
+
+    AudioFlags(..)                          ,
+
+
+-- ** AudioFormatFlags #flag:AudioFormatFlags#
+
+    AudioFormatFlags(..)                    ,
+
+
+-- ** AudioPackFlags #flag:AudioPackFlags#
+
+    AudioPackFlags(..)                      ,
+
+
+-- ** AudioQuantizeFlags #flag:AudioQuantizeFlags#
+
+    AudioQuantizeFlags(..)                  ,
+
+
+-- ** AudioResamplerFlags #flag:AudioResamplerFlags#
+
+    AudioResamplerFlags(..)                 ,
+
+
+
+
+    ) 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
+
+
+-- Flags AudioResamplerFlags
+{- |
+Different resampler flags.
+-}
+data AudioResamplerFlags = 
+      AudioResamplerFlagsNone
+    {- ^
+    no flags
+    -}
+    | AudioResamplerFlagsNonInterleavedIn
+    {- ^
+    input samples are non-interleaved.
+       an array of blocks of samples, one for each channel, should be passed to the
+       resample function.
+    -}
+    | AudioResamplerFlagsNonInterleavedOut
+    {- ^
+    output samples are non-interleaved.
+       an array of blocks of samples, one for each channel, should be passed to the
+       resample function.
+    -}
+    | AudioResamplerFlagsVariableRate
+    {- ^
+    optimize for dynamic updates of the sample
+       rates with 'GI.GstAudio.Structs.AudioResampler.audioResamplerUpdate'. This will select an interpolating filter
+       when @/GST_AUDIO_RESAMPLER_FILTER_MODE_AUTO/@ is configured.
+    -}
+    | AnotherAudioResamplerFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioResamplerFlags where
+    fromEnum AudioResamplerFlagsNone = 0
+    fromEnum AudioResamplerFlagsNonInterleavedIn = 1
+    fromEnum AudioResamplerFlagsNonInterleavedOut = 2
+    fromEnum AudioResamplerFlagsVariableRate = 4
+    fromEnum (AnotherAudioResamplerFlags k) = k
+
+    toEnum 0 = AudioResamplerFlagsNone
+    toEnum 1 = AudioResamplerFlagsNonInterleavedIn
+    toEnum 2 = AudioResamplerFlagsNonInterleavedOut
+    toEnum 4 = AudioResamplerFlagsVariableRate
+    toEnum k = AnotherAudioResamplerFlags k
+
+instance P.Ord AudioResamplerFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_resampler_flags_get_type" c_gst_audio_resampler_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioResamplerFlags where
+    boxedFlagsType _ = c_gst_audio_resampler_flags_get_type
+
+instance IsGFlag AudioResamplerFlags
+
+-- Flags AudioQuantizeFlags
+{- |
+Extra flags that can be passed to @/gst_audio_quantize_new()/@
+-}
+data AudioQuantizeFlags = 
+      AudioQuantizeFlagsNone
+    {- ^
+    no flags
+    -}
+    | AudioQuantizeFlagsNonInterleaved
+    {- ^
+    samples are non-interleaved
+    -}
+    | AnotherAudioQuantizeFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioQuantizeFlags where
+    fromEnum AudioQuantizeFlagsNone = 0
+    fromEnum AudioQuantizeFlagsNonInterleaved = 1
+    fromEnum (AnotherAudioQuantizeFlags k) = k
+
+    toEnum 0 = AudioQuantizeFlagsNone
+    toEnum 1 = AudioQuantizeFlagsNonInterleaved
+    toEnum k = AnotherAudioQuantizeFlags k
+
+instance P.Ord AudioQuantizeFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_quantize_flags_get_type" c_gst_audio_quantize_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioQuantizeFlags where
+    boxedFlagsType _ = c_gst_audio_quantize_flags_get_type
+
+instance IsGFlag AudioQuantizeFlags
+
+-- Flags AudioPackFlags
+{- |
+The different flags that can be used when packing and unpacking.
+-}
+data AudioPackFlags = 
+      AudioPackFlagsNone
+    {- ^
+    No flag
+    -}
+    | AudioPackFlagsTruncateRange
+    {- ^
+    When the source has a smaller depth
+      than the target format, set the least significant bits of the target
+      to 0. This is likely sightly faster but less accurate. When this flag
+      is not specified, the most significant bits of the source are duplicated
+      in the least significant bits of the destination.
+    -}
+    | AnotherAudioPackFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioPackFlags where
+    fromEnum AudioPackFlagsNone = 0
+    fromEnum AudioPackFlagsTruncateRange = 1
+    fromEnum (AnotherAudioPackFlags k) = k
+
+    toEnum 0 = AudioPackFlagsNone
+    toEnum 1 = AudioPackFlagsTruncateRange
+    toEnum k = AnotherAudioPackFlags k
+
+instance P.Ord AudioPackFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_pack_flags_get_type" c_gst_audio_pack_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioPackFlags where
+    boxedFlagsType _ = c_gst_audio_pack_flags_get_type
+
+instance IsGFlag AudioPackFlags
+
+-- Flags AudioFormatFlags
+{- |
+The different audio flags that a format info can have.
+-}
+data AudioFormatFlags = 
+      AudioFormatFlagsInteger
+    {- ^
+    integer samples
+    -}
+    | AudioFormatFlagsFloat
+    {- ^
+    float samples
+    -}
+    | AudioFormatFlagsSigned
+    {- ^
+    signed samples
+    -}
+    | AudioFormatFlagsComplex
+    {- ^
+    complex layout
+    -}
+    | AudioFormatFlagsUnpack
+    {- ^
+    the format can be used in
+    'GI.GstAudio.Callbacks.AudioFormatUnpack' and 'GI.GstAudio.Callbacks.AudioFormatPack' functions
+    -}
+    | AnotherAudioFormatFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioFormatFlags where
+    fromEnum AudioFormatFlagsInteger = 1
+    fromEnum AudioFormatFlagsFloat = 2
+    fromEnum AudioFormatFlagsSigned = 4
+    fromEnum AudioFormatFlagsComplex = 16
+    fromEnum AudioFormatFlagsUnpack = 32
+    fromEnum (AnotherAudioFormatFlags k) = k
+
+    toEnum 1 = AudioFormatFlagsInteger
+    toEnum 2 = AudioFormatFlagsFloat
+    toEnum 4 = AudioFormatFlagsSigned
+    toEnum 16 = AudioFormatFlagsComplex
+    toEnum 32 = AudioFormatFlagsUnpack
+    toEnum k = AnotherAudioFormatFlags k
+
+instance P.Ord AudioFormatFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_format_flags_get_type" c_gst_audio_format_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioFormatFlags where
+    boxedFlagsType _ = c_gst_audio_format_flags_get_type
+
+instance IsGFlag AudioFormatFlags
+
+-- Flags AudioFlags
+{- |
+Extra audio flags
+-}
+data AudioFlags = 
+      AudioFlagsNone
+    {- ^
+    no valid flag
+    -}
+    | AudioFlagsUnpositioned
+    {- ^
+    the position array explicitly
+        contains unpositioned channels.
+    -}
+    | AnotherAudioFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioFlags where
+    fromEnum AudioFlagsNone = 0
+    fromEnum AudioFlagsUnpositioned = 1
+    fromEnum (AnotherAudioFlags k) = k
+
+    toEnum 0 = AudioFlagsNone
+    toEnum 1 = AudioFlagsUnpositioned
+    toEnum k = AnotherAudioFlags k
+
+instance P.Ord AudioFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_flags_get_type" c_gst_audio_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioFlags where
+    boxedFlagsType _ = c_gst_audio_flags_get_type
+
+instance IsGFlag AudioFlags
+
+-- Flags AudioConverterFlags
+{- |
+Extra flags passed to 'GI.GstAudio.Structs.AudioConverter.audioConverterNew' and 'GI.GstAudio.Structs.AudioConverter.audioConverterSamples'.
+-}
+data AudioConverterFlags = 
+      AudioConverterFlagsNone
+    {- ^
+    no flag
+    -}
+    | AudioConverterFlagsInWritable
+    {- ^
+    the input sample arrays are writable and can be
+       used as temporary storage during conversion.
+    -}
+    | AudioConverterFlagsVariableRate
+    {- ^
+    allow arbitrary rate updates with
+       'GI.GstAudio.Structs.AudioConverter.audioConverterUpdateConfig'.
+    -}
+    | AnotherAudioConverterFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioConverterFlags where
+    fromEnum AudioConverterFlagsNone = 0
+    fromEnum AudioConverterFlagsInWritable = 1
+    fromEnum AudioConverterFlagsVariableRate = 2
+    fromEnum (AnotherAudioConverterFlags k) = k
+
+    toEnum 0 = AudioConverterFlagsNone
+    toEnum 1 = AudioConverterFlagsInWritable
+    toEnum 2 = AudioConverterFlagsVariableRate
+    toEnum k = AnotherAudioConverterFlags k
+
+instance P.Ord AudioConverterFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_converter_flags_get_type" c_gst_audio_converter_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioConverterFlags where
+    boxedFlagsType _ = c_gst_audio_converter_flags_get_type
+
+instance IsGFlag AudioConverterFlags
+
+-- Flags AudioChannelMixerFlags
+{- |
+Flags passed to @/gst_audio_channel_mixer_new()/@
+-}
+data AudioChannelMixerFlags = 
+      AudioChannelMixerFlagsNone
+    {- ^
+    no flag
+    -}
+    | AudioChannelMixerFlagsNonInterleavedIn
+    {- ^
+    input channels are not interleaved
+    -}
+    | AudioChannelMixerFlagsNonInterleavedOut
+    {- ^
+    output channels are not interleaved
+    -}
+    | AudioChannelMixerFlagsUnpositionedIn
+    {- ^
+    input channels are explicitly unpositioned
+    -}
+    | AudioChannelMixerFlagsUnpositionedOut
+    {- ^
+    output channels are explicitly unpositioned
+    -}
+    | AnotherAudioChannelMixerFlags Int
+    -- ^ Catch-all for unknown values
+    deriving (Show, Eq)
+
+instance P.Enum AudioChannelMixerFlags where
+    fromEnum AudioChannelMixerFlagsNone = 0
+    fromEnum AudioChannelMixerFlagsNonInterleavedIn = 1
+    fromEnum AudioChannelMixerFlagsNonInterleavedOut = 2
+    fromEnum AudioChannelMixerFlagsUnpositionedIn = 4
+    fromEnum AudioChannelMixerFlagsUnpositionedOut = 8
+    fromEnum (AnotherAudioChannelMixerFlags k) = k
+
+    toEnum 0 = AudioChannelMixerFlagsNone
+    toEnum 1 = AudioChannelMixerFlagsNonInterleavedIn
+    toEnum 2 = AudioChannelMixerFlagsNonInterleavedOut
+    toEnum 4 = AudioChannelMixerFlagsUnpositionedIn
+    toEnum 8 = AudioChannelMixerFlagsUnpositionedOut
+    toEnum k = AnotherAudioChannelMixerFlags k
+
+instance P.Ord AudioChannelMixerFlags where
+    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)
+
+foreign import ccall "gst_audio_channel_mixer_flags_get_type" c_gst_audio_channel_mixer_flags_get_type :: 
+    IO GType
+
+instance BoxedFlags AudioChannelMixerFlags where
+    boxedFlagsType _ = c_gst_audio_channel_mixer_flags_get_type
+
+instance IsGFlag AudioChannelMixerFlags
+
+
diff --git a/GI/GstAudio/Flags.hs-boot b/GI/GstAudio/Flags.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Flags.hs-boot
@@ -0,0 +1,52 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Flags 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
+
+data AudioResamplerFlags
+instance P.Enum AudioResamplerFlags where
+instance BoxedFlags AudioResamplerFlags where
+instance IsGFlag AudioResamplerFlags
+data AudioQuantizeFlags
+instance P.Enum AudioQuantizeFlags where
+instance BoxedFlags AudioQuantizeFlags where
+instance IsGFlag AudioQuantizeFlags
+data AudioPackFlags
+instance P.Enum AudioPackFlags where
+instance BoxedFlags AudioPackFlags where
+instance IsGFlag AudioPackFlags
+data AudioFormatFlags
+instance P.Enum AudioFormatFlags where
+instance BoxedFlags AudioFormatFlags where
+instance IsGFlag AudioFormatFlags
+data AudioFlags
+instance P.Enum AudioFlags where
+instance BoxedFlags AudioFlags where
+instance IsGFlag AudioFlags
+data AudioConverterFlags
+instance P.Enum AudioConverterFlags where
+instance BoxedFlags AudioConverterFlags where
+instance IsGFlag AudioConverterFlags
+data AudioChannelMixerFlags
+instance P.Enum AudioChannelMixerFlags where
+instance BoxedFlags AudioChannelMixerFlags where
+instance IsGFlag AudioChannelMixerFlags
diff --git a/GI/GstAudio/Functions.hs b/GI/GstAudio/Functions.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Functions.hs
@@ -0,0 +1,837 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Functions
+    ( 
+
+ -- * Methods
+-- ** audioChannelGetFallbackMask #method:audioChannelGetFallbackMask#
+
+    audioChannelGetFallbackMask             ,
+
+
+-- ** audioChannelPositionsFromMask #method:audioChannelPositionsFromMask#
+
+    audioChannelPositionsFromMask           ,
+
+
+-- ** audioChannelPositionsToMask #method:audioChannelPositionsToMask#
+
+    audioChannelPositionsToMask             ,
+
+
+-- ** audioChannelPositionsToString #method:audioChannelPositionsToString#
+
+    audioChannelPositionsToString           ,
+
+
+-- ** audioChannelPositionsToValidOrder #method:audioChannelPositionsToValidOrder#
+
+    audioChannelPositionsToValidOrder       ,
+
+
+-- ** audioCheckValidChannelPositions #method:audioCheckValidChannelPositions#
+
+    audioCheckValidChannelPositions         ,
+
+
+-- ** audioClippingMetaApiGetType #method:audioClippingMetaApiGetType#
+
+    audioClippingMetaApiGetType             ,
+
+
+-- ** audioDownmixMetaApiGetType #method:audioDownmixMetaApiGetType#
+
+    audioDownmixMetaApiGetType              ,
+
+
+-- ** audioFormatInfoGetType #method:audioFormatInfoGetType#
+
+    audioFormatInfoGetType                  ,
+
+
+-- ** audioGetChannelReorderMap #method:audioGetChannelReorderMap#
+
+    audioGetChannelReorderMap               ,
+
+
+-- ** audioIec61937FrameSize #method:audioIec61937FrameSize#
+
+    audioIec61937FrameSize                  ,
+
+
+-- ** audioIec61937Payload #method:audioIec61937Payload#
+
+    audioIec61937Payload                    ,
+
+
+-- ** audioMetaApiGetType #method:audioMetaApiGetType#
+
+    audioMetaApiGetType                     ,
+
+
+-- ** audioReorderChannels #method:audioReorderChannels#
+
+    audioReorderChannels                    ,
+
+
+-- ** bufferAddAudioClippingMeta #method:bufferAddAudioClippingMeta#
+
+    bufferAddAudioClippingMeta              ,
+
+
+-- ** bufferAddAudioDownmixMeta #method:bufferAddAudioDownmixMeta#
+
+    bufferAddAudioDownmixMeta               ,
+
+
+-- ** bufferAddAudioMeta #method:bufferAddAudioMeta#
+
+    bufferAddAudioMeta                      ,
+
+
+-- ** bufferGetAudioDownmixMetaForChannels #method:bufferGetAudioDownmixMetaForChannels#
+
+    bufferGetAudioDownmixMetaForChannels    ,
+
+
+
+
+    ) 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.Gst.Enums as Gst.Enums
+import qualified GI.Gst.Structs.Buffer as Gst.Buffer
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioClippingMeta as GstAudio.AudioClippingMeta
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioDownmixMeta as GstAudio.AudioDownmixMeta
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioMeta as GstAudio.AudioMeta
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioRingBufferSpec as GstAudio.AudioRingBufferSpec
+
+-- function gst_buffer_get_audio_downmix_meta_for_channels
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions of\n  the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioDownmixMeta"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_buffer_get_audio_downmix_meta_for_channels" gst_buffer_get_audio_downmix_meta_for_channels :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Ptr CInt ->                             -- to_position : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- to_channels : TBasicType TInt
+    IO (Ptr GstAudio.AudioDownmixMeta.AudioDownmixMeta)
+
+{- |
+Find the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/ for the given destination
+channel positions.
+-}
+bufferGetAudioDownmixMetaForChannels ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@toPosition@/: the channel positions of
+  the destination -}
+    -> m GstAudio.AudioDownmixMeta.AudioDownmixMeta
+    {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/. -}
+bufferGetAudioDownmixMetaForChannels buffer toPosition = liftIO $ do
+    let toChannels = fromIntegral $ length toPosition
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    let toPosition' = map (fromIntegral . fromEnum) toPosition
+    toPosition'' <- packStorableArray toPosition'
+    result <- gst_buffer_get_audio_downmix_meta_for_channels buffer' toPosition'' toChannels
+    checkUnexpectedReturnNULL "bufferGetAudioDownmixMetaForChannels" result
+    result' <- (newPtr GstAudio.AudioDownmixMeta.AudioDownmixMeta) result
+    touchManagedPtr buffer
+    freeMem toPosition''
+    return result'
+
+
+-- function gst_buffer_add_audio_meta
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the audio properties of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of valid samples in the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offsets", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the offsets (in bytes) where each channel plane starts\n  in the buffer or %NULL to calculate it (see below); must be %NULL also\n  when @info->layout is %GST_AUDIO_LAYOUT_INTERLEAVED", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioMeta"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_buffer_add_audio_meta" gst_buffer_add_audio_meta :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Ptr GstAudio.AudioInfo.AudioInfo ->     -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Word64 ->                               -- samples : TBasicType TUInt64
+    Word64 ->                               -- offsets : TBasicType TUInt64
+    IO (Ptr GstAudio.AudioMeta.AudioMeta)
+
+{- |
+Allocates and attaches a 'GI.GstAudio.Structs.AudioMeta.AudioMeta' on /@buffer@/, which must be writable
+for that purpose. The fields of the 'GI.GstAudio.Structs.AudioMeta.AudioMeta' are directly populated
+from the arguments of this function.
+
+When /@info@/->layout is 'GI.GstAudio.Enums.AudioLayoutNonInterleaved' and /@offsets@/ is
+'Nothing', the offsets are calculated with a formula that assumes the planes are
+tightly packed and in sequence:
+offsets[channel] = channel * /@samples@/ * sample_stride
+
+It is not allowed for channels to overlap in memory,
+i.e. for each i in [0, channels), the range
+[/@offsets@/[i], /@offsets@/[i] + /@samples@/ * sample_stride) must not overlap
+with any other such range. This function will assert if the parameters
+specified cause this restriction to be violated.
+
+It is, obviously, also not allowed to specify parameters that would cause
+out-of-bounds memory access on /@buffer@/. This is also checked, which means
+that you must add enough memory on the /@buffer@/ before adding this meta.
+
+/Since: 1.16/
+-}
+bufferAddAudioMeta ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -}
+    -> GstAudio.AudioInfo.AudioInfo
+    {- ^ /@info@/: the audio properties of the buffer -}
+    -> Word64
+    {- ^ /@samples@/: the number of valid samples in the buffer -}
+    -> Word64
+    {- ^ /@offsets@/: the offsets (in bytes) where each channel plane starts
+  in the buffer or 'Nothing' to calculate it (see below); must be 'Nothing' also
+  when /@info@/->layout is 'GI.GstAudio.Enums.AudioLayoutInterleaved' -}
+    -> m GstAudio.AudioMeta.AudioMeta
+    {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioMeta.AudioMeta' that was attached on the /@buffer@/ -}
+bufferAddAudioMeta buffer info samples offsets = liftIO $ do
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    info' <- unsafeManagedPtrGetPtr info
+    result <- gst_buffer_add_audio_meta buffer' info' samples offsets
+    checkUnexpectedReturnNULL "bufferAddAudioMeta" result
+    result' <- (newPtr GstAudio.AudioMeta.AudioMeta) result
+    touchManagedPtr buffer
+    touchManagedPtr info
+    return result'
+
+
+-- function gst_buffer_add_audio_downmix_meta
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_position", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions\n  of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 4 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions of\n  the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "matrix", argType = TBasicType TFloat, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The matrix coefficients.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioDownmixMeta"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_buffer_add_audio_downmix_meta" gst_buffer_add_audio_downmix_meta :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Ptr CInt ->                             -- from_position : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- from_channels : TBasicType TInt
+    Ptr CInt ->                             -- to_position : TCArray False (-1) 4 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- to_channels : TBasicType TInt
+    CFloat ->                               -- matrix : TBasicType TFloat
+    IO (Ptr GstAudio.AudioDownmixMeta.AudioDownmixMeta)
+
+{- |
+Attaches 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' metadata to /@buffer@/ with the given parameters.
+
+/@matrix@/ is an two-dimensional array of /@toChannels@/ times /@fromChannels@/
+coefficients, i.e. the i-th output channels is constructed by multiplicating
+the input channels with the coefficients in /@matrix@/[i] and taking the sum
+of the results.
+-}
+bufferAddAudioDownmixMeta ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@fromPosition@/: the channel positions
+  of the source -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@toPosition@/: the channel positions of
+  the destination -}
+    -> Float
+    {- ^ /@matrix@/: The matrix coefficients. -}
+    -> m GstAudio.AudioDownmixMeta.AudioDownmixMeta
+    {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/. -}
+bufferAddAudioDownmixMeta buffer fromPosition toPosition matrix = liftIO $ do
+    let toChannels = fromIntegral $ length toPosition
+    let fromChannels = fromIntegral $ length fromPosition
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    let fromPosition' = map (fromIntegral . fromEnum) fromPosition
+    fromPosition'' <- packStorableArray fromPosition'
+    let toPosition' = map (fromIntegral . fromEnum) toPosition
+    toPosition'' <- packStorableArray toPosition'
+    let matrix' = realToFrac matrix
+    result <- gst_buffer_add_audio_downmix_meta buffer' fromPosition'' fromChannels toPosition'' toChannels matrix'
+    checkUnexpectedReturnNULL "bufferAddAudioDownmixMeta" result
+    result' <- (newPtr GstAudio.AudioDownmixMeta.AudioDownmixMeta) result
+    touchManagedPtr buffer
+    freeMem fromPosition''
+    freeMem toPosition''
+    return result'
+
+
+-- function gst_buffer_add_audio_clipping_meta
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "GstFormat of @start and @stop, GST_FORMAT_DEFAULT is samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "start", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Amount of audio to clip from start of buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "end", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Amount of  to clip from end of buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioClippingMeta"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_buffer_add_audio_clipping_meta" gst_buffer_add_audio_clipping_meta :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "Gst", name = "Format"})
+    Word64 ->                               -- start : TBasicType TUInt64
+    Word64 ->                               -- end : TBasicType TUInt64
+    IO (Ptr GstAudio.AudioClippingMeta.AudioClippingMeta)
+
+{- |
+Attaches 'GI.GstAudio.Structs.AudioClippingMeta.AudioClippingMeta' metadata to /@buffer@/ with the given parameters.
+
+/Since: 1.8/
+-}
+bufferAddAudioClippingMeta ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -}
+    -> Gst.Enums.Format
+    {- ^ /@format@/: GstFormat of /@start@/ and /@stop@/, GST_FORMAT_DEFAULT is samples -}
+    -> Word64
+    {- ^ /@start@/: Amount of audio to clip from start of buffer -}
+    -> Word64
+    {- ^ /@end@/: Amount of  to clip from end of buffer -}
+    -> m GstAudio.AudioClippingMeta.AudioClippingMeta
+    {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioClippingMeta.AudioClippingMeta' on /@buffer@/. -}
+bufferAddAudioClippingMeta buffer format start end = liftIO $ do
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    let format' = (fromIntegral . fromEnum) format
+    result <- gst_buffer_add_audio_clipping_meta buffer' format' start end
+    checkUnexpectedReturnNULL "bufferAddAudioClippingMeta" result
+    result' <- (newPtr GstAudio.AudioClippingMeta.AudioClippingMeta) result
+    touchManagedPtr buffer
+    return result'
+
+
+-- function gst_audio_reorder_channels
+-- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The pointer to\n  the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The size of the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioFormat of the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions in the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to convert to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The size of the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_reorder_channels" gst_audio_reorder_channels :: 
+    Ptr Word8 ->                            -- data : TCArray False (-1) 1 (TBasicType TUInt8)
+    Word64 ->                               -- size : TBasicType TUInt64
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "AudioFormat"})
+    Int32 ->                                -- channels : TBasicType TInt
+    Ptr CInt ->                             -- from : TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Ptr CInt ->                             -- to : TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    IO CInt
+
+{- |
+Reorders /@data@/ from the channel positions /@from@/ to the channel
+positions /@to@/. /@from@/ and /@to@/ must contain the same number of
+positions and the same positions, only in a different order.
+
+Note: this function assumes the audio data is in interleaved layout
+-}
+audioReorderChannels ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    ByteString
+    {- ^ /@data@/: The pointer to
+  the memory. -}
+    -> GstAudio.Enums.AudioFormat
+    {- ^ /@format@/: The @/GstAudioFormat/@ of the buffer. -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@from@/: The channel positions in the buffer. -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@to@/: The channel positions to convert to. -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the reordering was possible. -}
+audioReorderChannels data_ format from to = liftIO $ do
+    let channels = fromIntegral $ length to
+    let from_expected_length_ = fromIntegral $ length from
+    when (from_expected_length_ /= channels) $
+        error "GstAudio.audioReorderChannels : length of 'from' does not agree with that of 'to'."
+    let size = fromIntegral $ B.length data_
+    data_' <- packByteString data_
+    let format' = (fromIntegral . fromEnum) format
+    let from' = map (fromIntegral . fromEnum) from
+    from'' <- packStorableArray from'
+    let to' = map (fromIntegral . fromEnum) to
+    to'' <- packStorableArray to'
+    result <- gst_audio_reorder_channels data_' size format' channels from'' to''
+    let result' = (/= 0) result
+    freeMem data_'
+    freeMem from''
+    freeMem to''
+    return result'
+
+
+-- function gst_audio_meta_api_get_type
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TBasicType TGType)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_meta_api_get_type" gst_audio_meta_api_get_type :: 
+    IO CGType
+
+{- |
+/No description available in the introspection data./
+-}
+audioMetaApiGetType ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m GType
+audioMetaApiGetType  = liftIO $ do
+    result <- gst_audio_meta_api_get_type
+    let result' = GType result
+    return result'
+
+
+-- function gst_audio_iec61937_payload
+-- Args : [Arg {argCName = "src", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a buffer containing the data to payload", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @src in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the destination buffer to store the\n      payloaded contents in. Should not overlap with @src", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @dst in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the ringbufer spec for @src", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "endianness", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the expected byte order of the payloaded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "dst_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @dst in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @src in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_iec61937_payload" gst_audio_iec61937_payload :: 
+    Ptr Word8 ->                            -- src : TCArray False (-1) 1 (TBasicType TUInt8)
+    Word32 ->                               -- src_n : TBasicType TUInt
+    Ptr Word8 ->                            -- dst : TCArray False (-1) 3 (TBasicType TUInt8)
+    Word32 ->                               -- dst_n : TBasicType TUInt
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    Int32 ->                                -- endianness : TBasicType TInt
+    IO CInt
+
+{- |
+Payloads /@src@/ in the form specified by IEC 61937 for the type from /@spec@/ and
+stores the result in /@dst@/. /@src@/ must contain exactly one frame of data and
+the frame is not checked for errors.
+-}
+audioIec61937Payload ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    ByteString
+    {- ^ /@src@/: a buffer containing the data to payload -}
+    -> ByteString
+    {- ^ /@dst@/: the destination buffer to store the
+      payloaded contents in. Should not overlap with /@src@/ -}
+    -> GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: the ringbufer spec for /@src@/ -}
+    -> Int32
+    {- ^ /@endianness@/: the expected byte order of the payloaded data -}
+    -> m Bool
+    {- ^ __Returns:__ transfer-full: 'True' if the payloading was successful, 'False'
+otherwise. -}
+audioIec61937Payload src dst spec endianness = liftIO $ do
+    let dstN = fromIntegral $ B.length dst
+    let srcN = fromIntegral $ B.length src
+    src' <- packByteString src
+    dst' <- packByteString dst
+    spec' <- unsafeManagedPtrGetPtr spec
+    result <- gst_audio_iec61937_payload src' srcN dst' dstN spec' endianness
+    let result' = (/= 0) result
+    touchManagedPtr spec
+    freeMem src'
+    freeMem dst'
+    return result'
+
+
+-- function gst_audio_iec61937_frame_size
+-- Args : [Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the ringbufer spec", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_iec61937_frame_size" gst_audio_iec61937_frame_size :: 
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    IO Word32
+
+{- |
+Calculated the size of the buffer expected by 'GI.GstAudio.Functions.audioIec61937Payload' for
+payloading type from /@spec@/.
+-}
+audioIec61937FrameSize ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: the ringbufer spec -}
+    -> m Word32
+    {- ^ __Returns:__ the size or 0 if the given /@type@/ is not supported or cannot be
+payloaded. -}
+audioIec61937FrameSize spec = liftIO $ do
+    spec' <- unsafeManagedPtrGetPtr spec
+    result <- gst_audio_iec61937_frame_size spec'
+    touchManagedPtr spec
+    return result
+
+
+-- function gst_audio_get_channel_reorder_map
+-- Args : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to reorder from.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to reorder to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "reorder_map", argType = TCArray False (-1) 0 (TBasicType TInt), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Pointer to the reorder map.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_get_channel_reorder_map" gst_audio_get_channel_reorder_map :: 
+    Int32 ->                                -- channels : TBasicType TInt
+    Ptr CInt ->                             -- from : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Ptr CInt ->                             -- to : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Ptr Int32 ->                            -- reorder_map : TCArray False (-1) 0 (TBasicType TInt)
+    IO CInt
+
+{- |
+Returns a reorder map for /@from@/ to /@to@/ that can be used in
+custom channel reordering code, e.g. to convert from or to the
+GStreamer channel order. /@from@/ and /@to@/ must contain the same
+number of positions and the same positions, only in a
+different order.
+
+The resulting /@reorderMap@/ can be used for reordering by assigning
+channel i of the input to channel reorder_map[i] of the output.
+-}
+audioGetChannelReorderMap ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@from@/: The channel positions to reorder from. -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@to@/: The channel positions to reorder to. -}
+    -> [Int32]
+    {- ^ /@reorderMap@/: Pointer to the reorder map. -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the channel positions are valid and reordering
+is possible. -}
+audioGetChannelReorderMap from to reorderMap = liftIO $ do
+    let channels = fromIntegral $ length reorderMap
+    let to_expected_length_ = fromIntegral $ length to
+    when (to_expected_length_ /= channels) $
+        error "GstAudio.audioGetChannelReorderMap : length of 'to' does not agree with that of 'reorderMap'."
+    let from_expected_length_ = fromIntegral $ length from
+    when (from_expected_length_ /= channels) $
+        error "GstAudio.audioGetChannelReorderMap : length of 'from' does not agree with that of 'to'."
+    let from' = map (fromIntegral . fromEnum) from
+    from'' <- packStorableArray from'
+    let to' = map (fromIntegral . fromEnum) to
+    to'' <- packStorableArray to'
+    reorderMap' <- packStorableArray reorderMap
+    result <- gst_audio_get_channel_reorder_map channels from'' to'' reorderMap'
+    let result' = (/= 0) result
+    freeMem from''
+    freeMem to''
+    freeMem reorderMap'
+    return result'
+
+
+-- function gst_audio_format_info_get_type
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TBasicType TGType)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_format_info_get_type" gst_audio_format_info_get_type :: 
+    IO CGType
+
+{- |
+/No description available in the introspection data./
+-}
+audioFormatInfoGetType ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m GType
+audioFormatInfoGetType  = liftIO $ do
+    result <- gst_audio_format_info_get_type
+    let result' = GType result
+    return result'
+
+
+-- function gst_audio_downmix_meta_api_get_type
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TBasicType TGType)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_downmix_meta_api_get_type" gst_audio_downmix_meta_api_get_type :: 
+    IO CGType
+
+{- |
+/No description available in the introspection data./
+-}
+audioDownmixMetaApiGetType ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m GType
+audioDownmixMetaApiGetType  = liftIO $ do
+    result <- gst_audio_downmix_meta_api_get_type
+    let result' = GType result
+    return result'
+
+
+-- function gst_audio_clipping_meta_api_get_type
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TBasicType TGType)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clipping_meta_api_get_type" gst_audio_clipping_meta_api_get_type :: 
+    IO CGType
+
+{- |
+/No description available in the introspection data./
+-}
+audioClippingMetaApiGetType ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m GType
+audioClippingMetaApiGetType  = liftIO $ do
+    result <- gst_audio_clipping_meta_api_get_type
+    let result' = GType result
+    return result'
+
+
+-- function gst_audio_check_valid_channel_positions
+-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions\n  to check.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Only consider the GStreamer channel order.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_check_valid_channel_positions" gst_audio_check_valid_channel_positions :: 
+    Ptr CInt ->                             -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- channels : TBasicType TInt
+    CInt ->                                 -- force_order : TBasicType TBoolean
+    IO CInt
+
+{- |
+Checks if /@position@/ contains valid channel positions for
+/@channels@/ channels. If /@forceOrder@/ is 'True' it additionally
+checks if the channels are in the order required by GStreamer.
+-}
+audioCheckValidChannelPositions ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: The @/GstAudioChannelPositions/@
+  to check. -}
+    -> Bool
+    {- ^ /@forceOrder@/: Only consider the GStreamer channel order. -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the channel positions are valid. -}
+audioCheckValidChannelPositions position forceOrder = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    let forceOrder' = (fromIntegral . fromEnum) forceOrder
+    result <- gst_audio_check_valid_channel_positions position'' channels forceOrder'
+    let result' = (/= 0) result
+    freeMem position''
+    return result'
+
+
+-- function gst_audio_channel_positions_to_valid_order
+-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to\n  reorder to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_positions_to_valid_order" gst_audio_channel_positions_to_valid_order :: 
+    Ptr CInt ->                             -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- channels : TBasicType TInt
+    IO CInt
+
+{- |
+Reorders the channel positions in /@position@/ from any order to
+the GStreamer channel order.
+-}
+audioChannelPositionsToValidOrder ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: The channel positions to
+  reorder to. -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the channel positions are valid and reordering
+was successful. -}
+audioChannelPositionsToValidOrder position = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    result <- gst_audio_channel_positions_to_valid_order position'' channels
+    let result' = (/= 0) result
+    freeMem position''
+    return result'
+
+
+-- function gst_audio_channel_positions_to_string
+-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions\n  to convert.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TUTF8)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_positions_to_string" gst_audio_channel_positions_to_string :: 
+    Ptr CInt ->                             -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- channels : TBasicType TInt
+    IO CString
+
+{- |
+Converts /@position@/ to a human-readable string representation for
+debugging purposes.
+-}
+audioChannelPositionsToString ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: The @/GstAudioChannelPositions/@
+  to convert. -}
+    -> m T.Text
+    {- ^ __Returns:__ a newly allocated string representing
+/@position@/
+
+Since 1.10 -}
+audioChannelPositionsToString position = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    result <- gst_audio_channel_positions_to_string position'' channels
+    checkUnexpectedReturnNULL "audioChannelPositionsToString" result
+    result' <- cstringToText result
+    freeMem result
+    freeMem position''
+    return result'
+
+
+-- function gst_audio_channel_positions_to_mask
+-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Only consider the GStreamer channel order.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the output channel mask", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_positions_to_mask" gst_audio_channel_positions_to_mask :: 
+    Ptr CInt ->                             -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Int32 ->                                -- channels : TBasicType TInt
+    CInt ->                                 -- force_order : TBasicType TBoolean
+    Ptr Word64 ->                           -- channel_mask : TBasicType TUInt64
+    IO CInt
+
+{- |
+Convert the /@position@/ array of /@channels@/ channels to a bitmask.
+
+If /@forceOrder@/ is 'True' it additionally checks if the channels are
+in the order required by GStreamer.
+-}
+audioChannelPositionsToMask ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: The @/GstAudioChannelPositions/@ -}
+    -> Bool
+    {- ^ /@forceOrder@/: Only consider the GStreamer channel order. -}
+    -> m ((Bool, Word64))
+    {- ^ __Returns:__ 'True' if the channel positions are valid and could be converted. -}
+audioChannelPositionsToMask position forceOrder = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    let forceOrder' = (fromIntegral . fromEnum) forceOrder
+    channelMask <- allocMem :: IO (Ptr Word64)
+    result <- gst_audio_channel_positions_to_mask position'' channels forceOrder' channelMask
+    let result' = (/= 0) result
+    channelMask' <- peek channelMask
+    freeMem position''
+    freeMem channelMask
+    return (result', channelMask')
+
+
+-- function gst_audio_channel_positions_from_mask
+-- Args : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The input channel_mask", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The\n  %GstAudioChannelPosition<!-- -->s", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_positions_from_mask" gst_audio_channel_positions_from_mask :: 
+    Int32 ->                                -- channels : TBasicType TInt
+    Word64 ->                               -- channel_mask : TBasicType TUInt64
+    Ptr CInt ->                             -- position : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    IO CInt
+
+{- |
+Convert the /@channels@/ present in /@channelMask@/ to a /@position@/ array
+(which should have at least /@channels@/ entries ensured by caller).
+If /@channelMask@/ is set to 0, it is considered as \'not present\' for purpose
+of conversion.
+A partially valid /@channelMask@/ with less bits set than the number
+of channels is considered valid.
+-}
+audioChannelPositionsFromMask ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Word64
+    {- ^ /@channelMask@/: The input channel_mask -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: The
+  @/GstAudioChannelPosition/@\<!-- -->s -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if channel and channel mask are valid and could be converted -}
+audioChannelPositionsFromMask channelMask position = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    result <- gst_audio_channel_positions_from_mask channels channelMask position''
+    let result' = (/= 0) result
+    freeMem position''
+    return result'
+
+
+-- function gst_audio_channel_get_fallback_mask
+-- Args : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_get_fallback_mask" gst_audio_channel_get_fallback_mask :: 
+    Int32 ->                                -- channels : TBasicType TInt
+    IO Word64
+
+{- |
+Get the fallback channel-mask for the given number of channels.
+
+This function returns a reasonable fallback channel-mask and should be
+called as a last resort when the specific channel map is unknown.
+
+/Since: 1.8/
+-}
+audioChannelGetFallbackMask ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Int32
+    {- ^ /@channels@/: the number of channels -}
+    -> m Word64
+    {- ^ __Returns:__ a fallback channel-mask for /@channels@/ or 0 when there is no
+mask and mono. -}
+audioChannelGetFallbackMask channels = liftIO $ do
+    result <- gst_audio_channel_get_fallback_mask channels
+    return result
+
+
+
diff --git a/GI/GstAudio/Interfaces.hs b/GI/GstAudio/Interfaces.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Interfaces.hs
@@ -0,0 +1,41 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Interfaces
+    (     module GI.GstAudio.Interfaces.StreamVolume,
+
+
+    ) where
+
+import GI.GstAudio.Interfaces.StreamVolume
+
+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
+
+
+
diff --git a/GI/GstAudio/Interfaces/StreamVolume.hs b/GI/GstAudio/Interfaces/StreamVolume.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Interfaces/StreamVolume.hs
@@ -0,0 +1,505 @@
+
+
+{- |
+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 interface is implemented by elements that provide a stream volume. Examples for
+such elements are @/volume/@ and @/playbin/@.
+
+Applications can use this interface to get or set the current stream volume. For this
+the \"volume\" 'GI.GObject.Objects.Object.Object' property can be used or the helper functions 'GI.GstAudio.Interfaces.StreamVolume.streamVolumeSetVolume'
+and 'GI.GstAudio.Interfaces.StreamVolume.streamVolumeGetVolume'. This volume is always a linear factor, i.e. 0.0 is muted
+1.0 is 100%. For showing the volume in a GUI it might make sense to convert it to
+a different format by using 'GI.GstAudio.Functions.streamVolumeConvertVolume'. Volume sliders should usually
+use a cubic volume.
+
+Separate from the volume the stream can also be muted by the \"mute\" 'GI.GObject.Objects.Object.Object' property or
+'GI.GstAudio.Interfaces.StreamVolume.streamVolumeSetMute' and 'GI.GstAudio.Interfaces.StreamVolume.streamVolumeGetMute'.
+
+Elements that provide some kind of stream volume should implement the \"volume\" and
+\"mute\" 'GI.GObject.Objects.Object.Object' properties and handle setting and getting of them properly.
+The volume property is defined to be a linear volume factor.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Interfaces.StreamVolume
+    ( 
+
+-- * Exported types
+    StreamVolume(..)                        ,
+    noStreamVolume                          ,
+    IsStreamVolume                          ,
+    toStreamVolume                          ,
+
+
+ -- * Methods
+-- ** convertVolume #method:convertVolume#
+
+    streamVolumeConvertVolume               ,
+
+
+-- ** getMute #method:getMute#
+
+#if ENABLE_OVERLOADING
+    StreamVolumeGetMuteMethodInfo           ,
+#endif
+    streamVolumeGetMute                     ,
+
+
+-- ** getVolume #method:getVolume#
+
+#if ENABLE_OVERLOADING
+    StreamVolumeGetVolumeMethodInfo         ,
+#endif
+    streamVolumeGetVolume                   ,
+
+
+-- ** setMute #method:setMute#
+
+#if ENABLE_OVERLOADING
+    StreamVolumeSetMuteMethodInfo           ,
+#endif
+    streamVolumeSetMute                     ,
+
+
+-- ** setVolume #method:setVolume#
+
+#if ENABLE_OVERLOADING
+    StreamVolumeSetVolumeMethodInfo         ,
+#endif
+    streamVolumeSetVolume                   ,
+
+
+
+
+ -- * Properties
+-- ** mute #attr:mute#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    StreamVolumeMutePropertyInfo            ,
+#endif
+    constructStreamVolumeMute               ,
+    getStreamVolumeMute                     ,
+    setStreamVolumeMute                     ,
+#if ENABLE_OVERLOADING
+    streamVolumeMute                        ,
+#endif
+
+
+-- ** volume #attr:volume#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    StreamVolumeVolumePropertyInfo          ,
+#endif
+    constructStreamVolumeVolume             ,
+    getStreamVolumeVolume                   ,
+    setStreamVolumeVolume                   ,
+#if ENABLE_OVERLOADING
+    streamVolumeVolume                      ,
+#endif
+
+
+
+
+    ) 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 {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+
+-- interface StreamVolume 
+-- | Memory-managed wrapper type.
+newtype StreamVolume = StreamVolume (ManagedPtr StreamVolume)
+-- | A convenience alias for `Nothing` :: `Maybe` `StreamVolume`.
+noStreamVolume :: Maybe StreamVolume
+noStreamVolume = Nothing
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList StreamVolume = StreamVolumeSignalList
+type StreamVolumeSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+foreign import ccall "gst_stream_volume_get_type"
+    c_gst_stream_volume_get_type :: IO GType
+
+instance GObject StreamVolume where
+    gobjectType = c_gst_stream_volume_get_type
+    
+
+-- | Type class for types which can be safely cast to `StreamVolume`, for instance with `toStreamVolume`.
+class (GObject o, O.IsDescendantOf StreamVolume o) => IsStreamVolume o
+instance (GObject o, O.IsDescendantOf StreamVolume o) => IsStreamVolume o
+
+instance O.HasParentTypes StreamVolume
+type instance O.ParentTypes StreamVolume = '[GObject.Object.Object]
+
+-- | Cast to `StreamVolume`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toStreamVolume :: (MonadIO m, IsStreamVolume o) => o -> m StreamVolume
+toStreamVolume = liftIO . unsafeCastTo StreamVolume
+
+-- VVV Prop "mute"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@mute@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' streamVolume #mute
+@
+-}
+getStreamVolumeMute :: (MonadIO m, IsStreamVolume o) => o -> m Bool
+getStreamVolumeMute obj = liftIO $ B.Properties.getObjectPropertyBool obj "mute"
+
+{- |
+Set the value of the “@mute@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' streamVolume [ #mute 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setStreamVolumeMute :: (MonadIO m, IsStreamVolume o) => o -> Bool -> m ()
+setStreamVolumeMute obj val = liftIO $ B.Properties.setObjectPropertyBool obj "mute" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@mute@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructStreamVolumeMute :: (IsStreamVolume o) => Bool -> IO (GValueConstruct o)
+constructStreamVolumeMute val = B.Properties.constructObjectPropertyBool "mute" val
+
+#if ENABLE_OVERLOADING
+data StreamVolumeMutePropertyInfo
+instance AttrInfo StreamVolumeMutePropertyInfo where
+    type AttrAllowedOps StreamVolumeMutePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint StreamVolumeMutePropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint StreamVolumeMutePropertyInfo = IsStreamVolume
+    type AttrGetType StreamVolumeMutePropertyInfo = Bool
+    type AttrLabel StreamVolumeMutePropertyInfo = "mute"
+    type AttrOrigin StreamVolumeMutePropertyInfo = StreamVolume
+    attrGet _ = getStreamVolumeMute
+    attrSet _ = setStreamVolumeMute
+    attrConstruct _ = constructStreamVolumeMute
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "volume"
+   -- Type: TBasicType TDouble
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@volume@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' streamVolume #volume
+@
+-}
+getStreamVolumeVolume :: (MonadIO m, IsStreamVolume o) => o -> m Double
+getStreamVolumeVolume obj = liftIO $ B.Properties.getObjectPropertyDouble obj "volume"
+
+{- |
+Set the value of the “@volume@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' streamVolume [ #volume 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setStreamVolumeVolume :: (MonadIO m, IsStreamVolume o) => o -> Double -> m ()
+setStreamVolumeVolume obj val = liftIO $ B.Properties.setObjectPropertyDouble obj "volume" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@volume@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructStreamVolumeVolume :: (IsStreamVolume o) => Double -> IO (GValueConstruct o)
+constructStreamVolumeVolume val = B.Properties.constructObjectPropertyDouble "volume" val
+
+#if ENABLE_OVERLOADING
+data StreamVolumeVolumePropertyInfo
+instance AttrInfo StreamVolumeVolumePropertyInfo where
+    type AttrAllowedOps StreamVolumeVolumePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint StreamVolumeVolumePropertyInfo = (~) Double
+    type AttrBaseTypeConstraint StreamVolumeVolumePropertyInfo = IsStreamVolume
+    type AttrGetType StreamVolumeVolumePropertyInfo = Double
+    type AttrLabel StreamVolumeVolumePropertyInfo = "volume"
+    type AttrOrigin StreamVolumeVolumePropertyInfo = StreamVolume
+    attrGet _ = getStreamVolumeVolume
+    attrSet _ = setStreamVolumeVolume
+    attrConstruct _ = constructStreamVolumeVolume
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList StreamVolume
+type instance O.AttributeList StreamVolume = StreamVolumeAttributeList
+type StreamVolumeAttributeList = ('[ '("mute", StreamVolumeMutePropertyInfo), '("volume", StreamVolumeVolumePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+streamVolumeMute :: AttrLabelProxy "mute"
+streamVolumeMute = AttrLabelProxy
+
+streamVolumeVolume :: AttrLabelProxy "volume"
+streamVolumeVolume = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveStreamVolumeMethod (t :: Symbol) (o :: *) :: * where
+    ResolveStreamVolumeMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveStreamVolumeMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveStreamVolumeMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveStreamVolumeMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveStreamVolumeMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveStreamVolumeMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveStreamVolumeMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveStreamVolumeMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveStreamVolumeMethod "ref" o = GObject.Object.ObjectRefMethodInfo
+    ResolveStreamVolumeMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveStreamVolumeMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveStreamVolumeMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveStreamVolumeMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveStreamVolumeMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveStreamVolumeMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
+    ResolveStreamVolumeMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveStreamVolumeMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveStreamVolumeMethod "getMute" o = StreamVolumeGetMuteMethodInfo
+    ResolveStreamVolumeMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveStreamVolumeMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveStreamVolumeMethod "getVolume" o = StreamVolumeGetVolumeMethodInfo
+    ResolveStreamVolumeMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveStreamVolumeMethod "setMute" o = StreamVolumeSetMuteMethodInfo
+    ResolveStreamVolumeMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveStreamVolumeMethod "setVolume" o = StreamVolumeSetVolumeMethodInfo
+    ResolveStreamVolumeMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveStreamVolumeMethod t StreamVolume, O.MethodInfo info StreamVolume p) => OL.IsLabel t (StreamVolume -> 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
+
+-- method StreamVolume::get_mute
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "volume", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolume"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolume that should be used", 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_stream_volume_get_mute" gst_stream_volume_get_mute :: 
+    Ptr StreamVolume ->                     -- volume : TInterface (Name {namespace = "GstAudio", name = "StreamVolume"})
+    IO CInt
+
+{- |
+/No description available in the introspection data./
+-}
+streamVolumeGetMute ::
+    (B.CallStack.HasCallStack, MonadIO m, IsStreamVolume a) =>
+    a
+    {- ^ /@volume@/: 'GI.GstAudio.Interfaces.StreamVolume.StreamVolume' that should be used -}
+    -> m Bool
+    {- ^ __Returns:__ Returns 'True' if the stream is muted -}
+streamVolumeGetMute volume = liftIO $ do
+    volume' <- unsafeManagedPtrCastPtr volume
+    result <- gst_stream_volume_get_mute volume'
+    let result' = (/= 0) result
+    touchManagedPtr volume
+    return result'
+
+#if ENABLE_OVERLOADING
+data StreamVolumeGetMuteMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsStreamVolume a) => O.MethodInfo StreamVolumeGetMuteMethodInfo a signature where
+    overloadedMethod _ = streamVolumeGetMute
+
+#endif
+
+-- method StreamVolume::get_volume
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "volume", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolume"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolume that should be used", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolumeFormat which should be returned", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TDouble)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_get_volume" gst_stream_volume_get_volume :: 
+    Ptr StreamVolume ->                     -- volume : TInterface (Name {namespace = "GstAudio", name = "StreamVolume"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"})
+    IO CDouble
+
+{- |
+/No description available in the introspection data./
+-}
+streamVolumeGetVolume ::
+    (B.CallStack.HasCallStack, MonadIO m, IsStreamVolume a) =>
+    a
+    {- ^ /@volume@/: 'GI.GstAudio.Interfaces.StreamVolume.StreamVolume' that should be used -}
+    -> GstAudio.Enums.StreamVolumeFormat
+    {- ^ /@format@/: 'GI.GstAudio.Enums.StreamVolumeFormat' which should be returned -}
+    -> m Double
+    {- ^ __Returns:__ The current stream volume as linear factor -}
+streamVolumeGetVolume volume format = liftIO $ do
+    volume' <- unsafeManagedPtrCastPtr volume
+    let format' = (fromIntegral . fromEnum) format
+    result <- gst_stream_volume_get_volume volume' format'
+    let result' = realToFrac result
+    touchManagedPtr volume
+    return result'
+
+#if ENABLE_OVERLOADING
+data StreamVolumeGetVolumeMethodInfo
+instance (signature ~ (GstAudio.Enums.StreamVolumeFormat -> m Double), MonadIO m, IsStreamVolume a) => O.MethodInfo StreamVolumeGetVolumeMethodInfo a signature where
+    overloadedMethod _ = streamVolumeGetVolume
+
+#endif
+
+-- method StreamVolume::set_mute
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "volume", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolume"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolume that should be used", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mute", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Mute state that should be set", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_set_mute" gst_stream_volume_set_mute :: 
+    Ptr StreamVolume ->                     -- volume : TInterface (Name {namespace = "GstAudio", name = "StreamVolume"})
+    CInt ->                                 -- mute : TBasicType TBoolean
+    IO ()
+
+{- |
+/No description available in the introspection data./
+-}
+streamVolumeSetMute ::
+    (B.CallStack.HasCallStack, MonadIO m, IsStreamVolume a) =>
+    a
+    {- ^ /@volume@/: 'GI.GstAudio.Interfaces.StreamVolume.StreamVolume' that should be used -}
+    -> Bool
+    {- ^ /@mute@/: Mute state that should be set -}
+    -> m ()
+streamVolumeSetMute volume mute = liftIO $ do
+    volume' <- unsafeManagedPtrCastPtr volume
+    let mute' = (fromIntegral . fromEnum) mute
+    gst_stream_volume_set_mute volume' mute'
+    touchManagedPtr volume
+    return ()
+
+#if ENABLE_OVERLOADING
+data StreamVolumeSetMuteMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsStreamVolume a) => O.MethodInfo StreamVolumeSetMuteMethodInfo a signature where
+    overloadedMethod _ = streamVolumeSetMute
+
+#endif
+
+-- method StreamVolume::set_volume
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "volume", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolume"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolume that should be used", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolumeFormat of @val", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "val", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Linear volume factor that should be set", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_set_volume" gst_stream_volume_set_volume :: 
+    Ptr StreamVolume ->                     -- volume : TInterface (Name {namespace = "GstAudio", name = "StreamVolume"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"})
+    CDouble ->                              -- val : TBasicType TDouble
+    IO ()
+
+{- |
+/No description available in the introspection data./
+-}
+streamVolumeSetVolume ::
+    (B.CallStack.HasCallStack, MonadIO m, IsStreamVolume a) =>
+    a
+    {- ^ /@volume@/: 'GI.GstAudio.Interfaces.StreamVolume.StreamVolume' that should be used -}
+    -> GstAudio.Enums.StreamVolumeFormat
+    {- ^ /@format@/: 'GI.GstAudio.Enums.StreamVolumeFormat' of /@val@/ -}
+    -> Double
+    {- ^ /@val@/: Linear volume factor that should be set -}
+    -> m ()
+streamVolumeSetVolume volume format val = liftIO $ do
+    volume' <- unsafeManagedPtrCastPtr volume
+    let format' = (fromIntegral . fromEnum) format
+    let val' = realToFrac val
+    gst_stream_volume_set_volume volume' format' val'
+    touchManagedPtr volume
+    return ()
+
+#if ENABLE_OVERLOADING
+data StreamVolumeSetVolumeMethodInfo
+instance (signature ~ (GstAudio.Enums.StreamVolumeFormat -> Double -> m ()), MonadIO m, IsStreamVolume a) => O.MethodInfo StreamVolumeSetVolumeMethodInfo a signature where
+    overloadedMethod _ = streamVolumeSetVolume
+
+#endif
+
+-- method StreamVolume::convert_volume
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "from", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolumeFormat to convert from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstStreamVolumeFormat to convert to", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "val", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Volume in @from format that should be converted", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TDouble)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_convert_volume" gst_stream_volume_convert_volume :: 
+    CUInt ->                                -- from : TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"})
+    CUInt ->                                -- to : TInterface (Name {namespace = "GstAudio", name = "StreamVolumeFormat"})
+    CDouble ->                              -- val : TBasicType TDouble
+    IO CDouble
+
+{- |
+/No description available in the introspection data./
+-}
+streamVolumeConvertVolume ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.Enums.StreamVolumeFormat
+    {- ^ /@from@/: 'GI.GstAudio.Enums.StreamVolumeFormat' to convert from -}
+    -> GstAudio.Enums.StreamVolumeFormat
+    {- ^ /@to@/: 'GI.GstAudio.Enums.StreamVolumeFormat' to convert to -}
+    -> Double
+    {- ^ /@val@/: Volume in /@from@/ format that should be converted -}
+    -> m Double
+    {- ^ __Returns:__ the converted volume -}
+streamVolumeConvertVolume from to val = liftIO $ do
+    let from' = (fromIntegral . fromEnum) from
+    let to' = (fromIntegral . fromEnum) to
+    let val' = realToFrac val
+    result <- gst_stream_volume_convert_volume from' to' val'
+    let result' = realToFrac result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+
diff --git a/GI/GstAudio/Interfaces/StreamVolume.hs-boot b/GI/GstAudio/Interfaces/StreamVolume.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Interfaces/StreamVolume.hs-boot
@@ -0,0 +1,47 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Interfaces.StreamVolume 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
+
+newtype StreamVolume = StreamVolume (ManagedPtr StreamVolume)
+instance GObject StreamVolume where
+class (GObject o, O.IsDescendantOf StreamVolume o) => IsStreamVolume o
+instance (GObject o, O.IsDescendantOf StreamVolume o) => IsStreamVolume o
+instance O.HasParentTypes StreamVolume
+#if ENABLE_OVERLOADING
+data StreamVolumeMutePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data StreamVolumeVolumePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data StreamVolumeGetMuteMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data StreamVolumeGetVolumeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data StreamVolumeSetMuteMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data StreamVolumeSetVolumeMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects.hs b/GI/GstAudio/Objects.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects.hs
@@ -0,0 +1,65 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects
+    (     module GI.GstAudio.Objects.AudioAggregator,
+    module GI.GstAudio.Objects.AudioAggregatorConvertPad,
+    module GI.GstAudio.Objects.AudioAggregatorPad,
+    module GI.GstAudio.Objects.AudioBaseSink,
+    module GI.GstAudio.Objects.AudioBaseSrc ,
+    module GI.GstAudio.Objects.AudioCdSrc   ,
+    module GI.GstAudio.Objects.AudioClock   ,
+    module GI.GstAudio.Objects.AudioDecoder ,
+    module GI.GstAudio.Objects.AudioEncoder ,
+    module GI.GstAudio.Objects.AudioFilter  ,
+    module GI.GstAudio.Objects.AudioRingBuffer,
+    module GI.GstAudio.Objects.AudioSink    ,
+    module GI.GstAudio.Objects.AudioSrc     ,
+
+
+    ) where
+
+import GI.GstAudio.Objects.AudioAggregator
+import GI.GstAudio.Objects.AudioAggregatorConvertPad
+import GI.GstAudio.Objects.AudioAggregatorPad
+import GI.GstAudio.Objects.AudioBaseSink
+import GI.GstAudio.Objects.AudioBaseSrc
+import GI.GstAudio.Objects.AudioCdSrc
+import GI.GstAudio.Objects.AudioClock
+import GI.GstAudio.Objects.AudioDecoder
+import GI.GstAudio.Objects.AudioEncoder
+import GI.GstAudio.Objects.AudioFilter
+import GI.GstAudio.Objects.AudioRingBuffer
+import GI.GstAudio.Objects.AudioSink
+import GI.GstAudio.Objects.AudioSrc
+
+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
+
+
+
diff --git a/GI/GstAudio/Objects/AudioAggregator.hs b/GI/GstAudio/Objects/AudioAggregator.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregator.hs
@@ -0,0 +1,497 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Subclasses must use (a subclass of) 'GI.GstAudio.Objects.AudioAggregatorPad.AudioAggregatorPad' for both
+their source and sink pads,
+'GI.Gst.Structs.ElementClass.elementClassAddStaticPadTemplateWithGtype' is a convenient
+helper.
+
+'GI.GstAudio.Objects.AudioAggregator.AudioAggregator' can perform conversion on the data arriving
+on its sink pads, based on the format expected downstream: in order
+to enable that behaviour, the GType of the sink pads must either be
+a (subclass of) 'GI.GstAudio.Objects.AudioAggregatorConvertPad.AudioAggregatorConvertPad' to use the default
+'GI.GstAudio.Structs.AudioConverter.AudioConverter' implementation, or a subclass of 'GI.GstAudio.Objects.AudioAggregatorPad.AudioAggregatorPad'
+implementing 'GI.GstAudio.Structs.AudioAggregatorPadClass.AudioAggregatorPadClass'.@/convert_buffer/@.
+
+To allow for the output caps to change, the mechanism is the same as
+above, with the GType of the source pad.
+
+See @/GstAudioMixer/@ for an example.
+
+When conversion is enabled, 'GI.GstAudio.Objects.AudioAggregator.AudioAggregator' will accept
+any type of raw audio caps and perform conversion
+on the data arriving on its sink pads, with whatever downstream
+expects as the target format.
+
+In case downstream caps are not fully fixated, it will use
+the first configured sink pad to finish fixating its source pad
+caps.
+
+A notable exception for now is the sample rate, sink pads must
+have the same sample rate as either the downstream requirement,
+or the first configured pad, or a combination of both (when
+downstream specifies a range or a set of acceptable rates).
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioAggregator
+    ( 
+
+-- * Exported types
+    AudioAggregator(..)                     ,
+    IsAudioAggregator                       ,
+    toAudioAggregator                       ,
+    noAudioAggregator                       ,
+
+
+ -- * Methods
+-- ** setSinkCaps #method:setSinkCaps#
+
+#if ENABLE_OVERLOADING
+    AudioAggregatorSetSinkCapsMethodInfo    ,
+#endif
+    audioAggregatorSetSinkCaps              ,
+
+
+
+
+ -- * Properties
+-- ** alignmentThreshold #attr:alignmentThreshold#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioAggregatorAlignmentThresholdPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioAggregatorAlignmentThreshold       ,
+#endif
+    constructAudioAggregatorAlignmentThreshold,
+    getAudioAggregatorAlignmentThreshold    ,
+    setAudioAggregatorAlignmentThreshold    ,
+
+
+-- ** discontWait #attr:discontWait#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioAggregatorDiscontWaitPropertyInfo  ,
+#endif
+#if ENABLE_OVERLOADING
+    audioAggregatorDiscontWait              ,
+#endif
+    constructAudioAggregatorDiscontWait     ,
+    getAudioAggregatorDiscontWait           ,
+    setAudioAggregatorDiscontWait           ,
+
+
+-- ** outputBufferDuration #attr:outputBufferDuration#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioAggregatorOutputBufferDurationPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioAggregatorOutputBufferDuration     ,
+#endif
+    constructAudioAggregatorOutputBufferDuration,
+    getAudioAggregatorOutputBufferDuration  ,
+    setAudioAggregatorOutputBufferDuration  ,
+
+
+
+
+    ) 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 qualified GI.Gst.Structs.Caps as Gst.Caps
+import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioAggregatorPad as GstAudio.AudioAggregatorPad
+import qualified GI.GstBase.Objects.Aggregator as GstBase.Aggregator
+
+-- | Memory-managed wrapper type.
+newtype AudioAggregator = AudioAggregator (ManagedPtr AudioAggregator)
+foreign import ccall "gst_audio_aggregator_get_type"
+    c_gst_audio_aggregator_get_type :: IO GType
+
+instance GObject AudioAggregator where
+    gobjectType = c_gst_audio_aggregator_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioAggregator`, for instance with `toAudioAggregator`.
+class (GObject o, O.IsDescendantOf AudioAggregator o) => IsAudioAggregator o
+instance (GObject o, O.IsDescendantOf AudioAggregator o) => IsAudioAggregator o
+
+instance O.HasParentTypes AudioAggregator
+type instance O.ParentTypes AudioAggregator = '[GstBase.Aggregator.Aggregator, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioAggregator`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioAggregator :: (MonadIO m, IsAudioAggregator o) => o -> m AudioAggregator
+toAudioAggregator = liftIO . unsafeCastTo AudioAggregator
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioAggregator`.
+noAudioAggregator :: Maybe AudioAggregator
+noAudioAggregator = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioAggregatorMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioAggregatorMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioAggregatorMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioAggregatorMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioAggregatorMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioAggregatorMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioAggregatorMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioAggregatorMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioAggregatorMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioAggregatorMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioAggregatorMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioAggregatorMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioAggregatorMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioAggregatorMethod "finishBuffer" o = GstBase.Aggregator.AggregatorFinishBufferMethodInfo
+    ResolveAudioAggregatorMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioAggregatorMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioAggregatorMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioAggregatorMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioAggregatorMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioAggregatorMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioAggregatorMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioAggregatorMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioAggregatorMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioAggregatorMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioAggregatorMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioAggregatorMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioAggregatorMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioAggregatorMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioAggregatorMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioAggregatorMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioAggregatorMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioAggregatorMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioAggregatorMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioAggregatorMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioAggregatorMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioAggregatorMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioAggregatorMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioAggregatorMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioAggregatorMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioAggregatorMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioAggregatorMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioAggregatorMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioAggregatorMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioAggregatorMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioAggregatorMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioAggregatorMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioAggregatorMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioAggregatorMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioAggregatorMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioAggregatorMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioAggregatorMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioAggregatorMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioAggregatorMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioAggregatorMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioAggregatorMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioAggregatorMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioAggregatorMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioAggregatorMethod "simpleGetNextTime" o = GstBase.Aggregator.AggregatorSimpleGetNextTimeMethodInfo
+    ResolveAudioAggregatorMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioAggregatorMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioAggregatorMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioAggregatorMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioAggregatorMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioAggregatorMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioAggregatorMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioAggregatorMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioAggregatorMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioAggregatorMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioAggregatorMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioAggregatorMethod "getAllocator" o = GstBase.Aggregator.AggregatorGetAllocatorMethodInfo
+    ResolveAudioAggregatorMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioAggregatorMethod "getBufferPool" o = GstBase.Aggregator.AggregatorGetBufferPoolMethodInfo
+    ResolveAudioAggregatorMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioAggregatorMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioAggregatorMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioAggregatorMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioAggregatorMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioAggregatorMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioAggregatorMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioAggregatorMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioAggregatorMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioAggregatorMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioAggregatorMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioAggregatorMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioAggregatorMethod "getLatency" o = GstBase.Aggregator.AggregatorGetLatencyMethodInfo
+    ResolveAudioAggregatorMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioAggregatorMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioAggregatorMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioAggregatorMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioAggregatorMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioAggregatorMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioAggregatorMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioAggregatorMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioAggregatorMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioAggregatorMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioAggregatorMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioAggregatorMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioAggregatorMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioAggregatorMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioAggregatorMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioAggregatorMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioAggregatorMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioAggregatorMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioAggregatorMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioAggregatorMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioAggregatorMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioAggregatorMethod "setLatency" o = GstBase.Aggregator.AggregatorSetLatencyMethodInfo
+    ResolveAudioAggregatorMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioAggregatorMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioAggregatorMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioAggregatorMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioAggregatorMethod "setSinkCaps" o = AudioAggregatorSetSinkCapsMethodInfo
+    ResolveAudioAggregatorMethod "setSrcCaps" o = GstBase.Aggregator.AggregatorSetSrcCapsMethodInfo
+    ResolveAudioAggregatorMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioAggregatorMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioAggregatorMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioAggregatorMethod t AudioAggregator, O.MethodInfo info AudioAggregator p) => OL.IsLabel t (AudioAggregator -> 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 "alignment-threshold"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@alignment-threshold@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioAggregator #alignmentThreshold
+@
+-}
+getAudioAggregatorAlignmentThreshold :: (MonadIO m, IsAudioAggregator o) => o -> m Word64
+getAudioAggregatorAlignmentThreshold obj = liftIO $ B.Properties.getObjectPropertyUInt64 obj "alignment-threshold"
+
+{- |
+Set the value of the “@alignment-threshold@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioAggregator [ #alignmentThreshold 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioAggregatorAlignmentThreshold :: (MonadIO m, IsAudioAggregator o) => o -> Word64 -> m ()
+setAudioAggregatorAlignmentThreshold obj val = liftIO $ B.Properties.setObjectPropertyUInt64 obj "alignment-threshold" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@alignment-threshold@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioAggregatorAlignmentThreshold :: (IsAudioAggregator o) => Word64 -> IO (GValueConstruct o)
+constructAudioAggregatorAlignmentThreshold val = B.Properties.constructObjectPropertyUInt64 "alignment-threshold" val
+
+#if ENABLE_OVERLOADING
+data AudioAggregatorAlignmentThresholdPropertyInfo
+instance AttrInfo AudioAggregatorAlignmentThresholdPropertyInfo where
+    type AttrAllowedOps AudioAggregatorAlignmentThresholdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioAggregatorAlignmentThresholdPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioAggregatorAlignmentThresholdPropertyInfo = IsAudioAggregator
+    type AttrGetType AudioAggregatorAlignmentThresholdPropertyInfo = Word64
+    type AttrLabel AudioAggregatorAlignmentThresholdPropertyInfo = "alignment-threshold"
+    type AttrOrigin AudioAggregatorAlignmentThresholdPropertyInfo = AudioAggregator
+    attrGet _ = getAudioAggregatorAlignmentThreshold
+    attrSet _ = setAudioAggregatorAlignmentThreshold
+    attrConstruct _ = constructAudioAggregatorAlignmentThreshold
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "discont-wait"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@discont-wait@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioAggregator #discontWait
+@
+-}
+getAudioAggregatorDiscontWait :: (MonadIO m, IsAudioAggregator o) => o -> m Word64
+getAudioAggregatorDiscontWait obj = liftIO $ B.Properties.getObjectPropertyUInt64 obj "discont-wait"
+
+{- |
+Set the value of the “@discont-wait@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioAggregator [ #discontWait 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioAggregatorDiscontWait :: (MonadIO m, IsAudioAggregator o) => o -> Word64 -> m ()
+setAudioAggregatorDiscontWait obj val = liftIO $ B.Properties.setObjectPropertyUInt64 obj "discont-wait" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@discont-wait@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioAggregatorDiscontWait :: (IsAudioAggregator o) => Word64 -> IO (GValueConstruct o)
+constructAudioAggregatorDiscontWait val = B.Properties.constructObjectPropertyUInt64 "discont-wait" val
+
+#if ENABLE_OVERLOADING
+data AudioAggregatorDiscontWaitPropertyInfo
+instance AttrInfo AudioAggregatorDiscontWaitPropertyInfo where
+    type AttrAllowedOps AudioAggregatorDiscontWaitPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioAggregatorDiscontWaitPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioAggregatorDiscontWaitPropertyInfo = IsAudioAggregator
+    type AttrGetType AudioAggregatorDiscontWaitPropertyInfo = Word64
+    type AttrLabel AudioAggregatorDiscontWaitPropertyInfo = "discont-wait"
+    type AttrOrigin AudioAggregatorDiscontWaitPropertyInfo = AudioAggregator
+    attrGet _ = getAudioAggregatorDiscontWait
+    attrSet _ = setAudioAggregatorDiscontWait
+    attrConstruct _ = constructAudioAggregatorDiscontWait
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "output-buffer-duration"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@output-buffer-duration@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioAggregator #outputBufferDuration
+@
+-}
+getAudioAggregatorOutputBufferDuration :: (MonadIO m, IsAudioAggregator o) => o -> m Word64
+getAudioAggregatorOutputBufferDuration obj = liftIO $ B.Properties.getObjectPropertyUInt64 obj "output-buffer-duration"
+
+{- |
+Set the value of the “@output-buffer-duration@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioAggregator [ #outputBufferDuration 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioAggregatorOutputBufferDuration :: (MonadIO m, IsAudioAggregator o) => o -> Word64 -> m ()
+setAudioAggregatorOutputBufferDuration obj val = liftIO $ B.Properties.setObjectPropertyUInt64 obj "output-buffer-duration" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@output-buffer-duration@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioAggregatorOutputBufferDuration :: (IsAudioAggregator o) => Word64 -> IO (GValueConstruct o)
+constructAudioAggregatorOutputBufferDuration val = B.Properties.constructObjectPropertyUInt64 "output-buffer-duration" val
+
+#if ENABLE_OVERLOADING
+data AudioAggregatorOutputBufferDurationPropertyInfo
+instance AttrInfo AudioAggregatorOutputBufferDurationPropertyInfo where
+    type AttrAllowedOps AudioAggregatorOutputBufferDurationPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioAggregatorOutputBufferDurationPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioAggregatorOutputBufferDurationPropertyInfo = IsAudioAggregator
+    type AttrGetType AudioAggregatorOutputBufferDurationPropertyInfo = Word64
+    type AttrLabel AudioAggregatorOutputBufferDurationPropertyInfo = "output-buffer-duration"
+    type AttrOrigin AudioAggregatorOutputBufferDurationPropertyInfo = AudioAggregator
+    attrGet _ = getAudioAggregatorOutputBufferDuration
+    attrSet _ = setAudioAggregatorOutputBufferDuration
+    attrConstruct _ = constructAudioAggregatorOutputBufferDuration
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioAggregator
+type instance O.AttributeList AudioAggregator = AudioAggregatorAttributeList
+type AudioAggregatorAttributeList = ('[ '("alignmentThreshold", AudioAggregatorAlignmentThresholdPropertyInfo), '("discontWait", AudioAggregatorDiscontWaitPropertyInfo), '("latency", GstBase.Aggregator.AggregatorLatencyPropertyInfo), '("minUpstreamLatency", GstBase.Aggregator.AggregatorMinUpstreamLatencyPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("outputBufferDuration", AudioAggregatorOutputBufferDurationPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("startTime", GstBase.Aggregator.AggregatorStartTimePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioAggregatorAlignmentThreshold :: AttrLabelProxy "alignmentThreshold"
+audioAggregatorAlignmentThreshold = AttrLabelProxy
+
+audioAggregatorDiscontWait :: AttrLabelProxy "discontWait"
+audioAggregatorDiscontWait = AttrLabelProxy
+
+audioAggregatorOutputBufferDuration :: AttrLabelProxy "outputBufferDuration"
+audioAggregatorOutputBufferDuration = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioAggregator = AudioAggregatorSignalList
+type AudioAggregatorSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioAggregator::set_sink_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "aagg", argType = TInterface (Name {namespace = "GstAudio", name = "AudioAggregator"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pad", argType = TInterface (Name {namespace = "GstAudio", name = "AudioAggregatorPad"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_aggregator_set_sink_caps" gst_audio_aggregator_set_sink_caps :: 
+    Ptr AudioAggregator ->                  -- aagg : TInterface (Name {namespace = "GstAudio", name = "AudioAggregator"})
+    Ptr GstAudio.AudioAggregatorPad.AudioAggregatorPad -> -- pad : TInterface (Name {namespace = "GstAudio", name = "AudioAggregatorPad"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO ()
+
+{- |
+/No description available in the introspection data./
+-}
+audioAggregatorSetSinkCaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioAggregator a, GstAudio.AudioAggregatorPad.IsAudioAggregatorPad b) =>
+    a
+    -> b
+    -> Gst.Caps.Caps
+    -> m ()
+audioAggregatorSetSinkCaps aagg pad caps = liftIO $ do
+    aagg' <- unsafeManagedPtrCastPtr aagg
+    pad' <- unsafeManagedPtrCastPtr pad
+    caps' <- unsafeManagedPtrGetPtr caps
+    gst_audio_aggregator_set_sink_caps aagg' pad' caps'
+    touchManagedPtr aagg
+    touchManagedPtr pad
+    touchManagedPtr caps
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioAggregatorSetSinkCapsMethodInfo
+instance (signature ~ (b -> Gst.Caps.Caps -> m ()), MonadIO m, IsAudioAggregator a, GstAudio.AudioAggregatorPad.IsAudioAggregatorPad b) => O.MethodInfo AudioAggregatorSetSinkCapsMethodInfo a signature where
+    overloadedMethod _ = audioAggregatorSetSinkCaps
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioAggregator.hs-boot b/GI/GstAudio/Objects/AudioAggregator.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregator.hs-boot
@@ -0,0 +1,41 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioAggregator 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
+
+newtype AudioAggregator = AudioAggregator (ManagedPtr AudioAggregator)
+instance GObject AudioAggregator where
+class (GObject o, O.IsDescendantOf AudioAggregator o) => IsAudioAggregator o
+instance (GObject o, O.IsDescendantOf AudioAggregator o) => IsAudioAggregator o
+instance O.HasParentTypes AudioAggregator
+#if ENABLE_OVERLOADING
+data AudioAggregatorAlignmentThresholdPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioAggregatorDiscontWaitPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioAggregatorOutputBufferDurationPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioAggregatorSetSinkCapsMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs b/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs
@@ -0,0 +1,314 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+An implementation of GstPad that can be used with 'GI.GstAudio.Objects.AudioAggregator.AudioAggregator'.
+
+See 'GI.GstAudio.Objects.AudioAggregator.AudioAggregator' for more details.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioAggregatorConvertPad
+    ( 
+
+-- * Exported types
+    AudioAggregatorConvertPad(..)           ,
+    IsAudioAggregatorConvertPad             ,
+    toAudioAggregatorConvertPad             ,
+    noAudioAggregatorConvertPad             ,
+
+
+ -- * Properties
+-- ** converterConfig #attr:converterConfig#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioAggregatorConvertPadConverterConfigPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioAggregatorConvertPadConverterConfig,
+#endif
+    clearAudioAggregatorConvertPadConverterConfig,
+    constructAudioAggregatorConvertPadConverterConfig,
+    getAudioAggregatorConvertPadConverterConfig,
+    setAudioAggregatorConvertPadConverterConfig,
+
+
+
+
+    ) 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.Object as Gst.Object
+import qualified GI.Gst.Objects.Pad as Gst.Pad
+import qualified GI.Gst.Structs.Structure as Gst.Structure
+import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioAggregatorPad as GstAudio.AudioAggregatorPad
+import qualified GI.GstBase.Objects.AggregatorPad as GstBase.AggregatorPad
+
+-- | Memory-managed wrapper type.
+newtype AudioAggregatorConvertPad = AudioAggregatorConvertPad (ManagedPtr AudioAggregatorConvertPad)
+foreign import ccall "gst_audio_aggregator_convert_pad_get_type"
+    c_gst_audio_aggregator_convert_pad_get_type :: IO GType
+
+instance GObject AudioAggregatorConvertPad where
+    gobjectType = c_gst_audio_aggregator_convert_pad_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioAggregatorConvertPad`, for instance with `toAudioAggregatorConvertPad`.
+class (GObject o, O.IsDescendantOf AudioAggregatorConvertPad o) => IsAudioAggregatorConvertPad o
+instance (GObject o, O.IsDescendantOf AudioAggregatorConvertPad o) => IsAudioAggregatorConvertPad o
+
+instance O.HasParentTypes AudioAggregatorConvertPad
+type instance O.ParentTypes AudioAggregatorConvertPad = '[GstAudio.AudioAggregatorPad.AudioAggregatorPad, GstBase.AggregatorPad.AggregatorPad, Gst.Pad.Pad, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioAggregatorConvertPad`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioAggregatorConvertPad :: (MonadIO m, IsAudioAggregatorConvertPad o) => o -> m AudioAggregatorConvertPad
+toAudioAggregatorConvertPad = liftIO . unsafeCastTo AudioAggregatorConvertPad
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioAggregatorConvertPad`.
+noAudioAggregatorConvertPad :: Maybe AudioAggregatorConvertPad
+noAudioAggregatorConvertPad = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioAggregatorConvertPadMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioAggregatorConvertPadMethod "activateMode" o = Gst.Pad.PadActivateModeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "addProbe" o = Gst.Pad.PadAddProbeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "canLink" o = Gst.Pad.PadCanLinkMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "chain" o = Gst.Pad.PadChainMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "chainList" o = Gst.Pad.PadChainListMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "checkReconfigure" o = Gst.Pad.PadCheckReconfigureMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "createStreamId" o = Gst.Pad.PadCreateStreamIdMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "dropBuffer" o = GstBase.AggregatorPad.AggregatorPadDropBufferMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "eventDefault" o = Gst.Pad.PadEventDefaultMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "forward" o = Gst.Pad.PadForwardMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasBuffer" o = GstBase.AggregatorPad.AggregatorPadHasBufferMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "hasCurrentCaps" o = Gst.Pad.PadHasCurrentCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isActive" o = Gst.Pad.PadIsActiveMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isBlocked" o = Gst.Pad.PadIsBlockedMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isBlocking" o = Gst.Pad.PadIsBlockingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isEos" o = GstBase.AggregatorPad.AggregatorPadIsEosMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "isLinked" o = Gst.Pad.PadIsLinkedMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "iterateInternalLinks" o = Gst.Pad.PadIterateInternalLinksMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "iterateInternalLinksDefault" o = Gst.Pad.PadIterateInternalLinksDefaultMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "link" o = Gst.Pad.PadLinkMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "linkFull" o = Gst.Pad.PadLinkFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "linkMaybeGhosting" o = Gst.Pad.PadLinkMaybeGhostingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "linkMaybeGhostingFull" o = Gst.Pad.PadLinkMaybeGhostingFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "markReconfigure" o = Gst.Pad.PadMarkReconfigureMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "needsReconfigure" o = Gst.Pad.PadNeedsReconfigureMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "pauseTask" o = Gst.Pad.PadPauseTaskMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peekBuffer" o = GstBase.AggregatorPad.AggregatorPadPeekBufferMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQuery" o = Gst.Pad.PadPeerQueryMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQueryAcceptCaps" o = Gst.Pad.PadPeerQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQueryCaps" o = Gst.Pad.PadPeerQueryCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQueryConvert" o = Gst.Pad.PadPeerQueryConvertMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQueryDuration" o = Gst.Pad.PadPeerQueryDurationMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "peerQueryPosition" o = Gst.Pad.PadPeerQueryPositionMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "popBuffer" o = GstBase.AggregatorPad.AggregatorPadPopBufferMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "proxyQueryAcceptCaps" o = Gst.Pad.PadProxyQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "proxyQueryCaps" o = Gst.Pad.PadProxyQueryCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "pullRange" o = Gst.Pad.PadPullRangeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "push" o = Gst.Pad.PadPushMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "pushEvent" o = Gst.Pad.PadPushEventMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "pushList" o = Gst.Pad.PadPushListMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "query" o = Gst.Pad.PadQueryMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryAcceptCaps" o = Gst.Pad.PadQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryCaps" o = Gst.Pad.PadQueryCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryConvert" o = Gst.Pad.PadQueryConvertMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryDefault" o = Gst.Pad.PadQueryDefaultMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryDuration" o = Gst.Pad.PadQueryDurationMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "queryPosition" o = Gst.Pad.PadQueryPositionMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "removeProbe" o = Gst.Pad.PadRemoveProbeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "sendEvent" o = Gst.Pad.PadSendEventMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "startTask" o = Gst.Pad.PadStartTaskMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "stickyEventsForeach" o = Gst.Pad.PadStickyEventsForeachMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "stopTask" o = Gst.Pad.PadStopTaskMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "storeStickyEvent" o = Gst.Pad.PadStoreStickyEventMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "unlink" o = Gst.Pad.PadUnlinkMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "useFixedCaps" o = Gst.Pad.PadUseFixedCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getAllowedCaps" o = Gst.Pad.PadGetAllowedCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getCurrentCaps" o = Gst.Pad.PadGetCurrentCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getDirection" o = Gst.Pad.PadGetDirectionMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getElementPrivate" o = Gst.Pad.PadGetElementPrivateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getLastFlowReturn" o = Gst.Pad.PadGetLastFlowReturnMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getOffset" o = Gst.Pad.PadGetOffsetMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getPadTemplate" o = Gst.Pad.PadGetPadTemplateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getPadTemplateCaps" o = Gst.Pad.PadGetPadTemplateCapsMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getParentElement" o = Gst.Pad.PadGetParentElementMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getPeer" o = Gst.Pad.PadGetPeerMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getRange" o = Gst.Pad.PadGetRangeMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getStickyEvent" o = Gst.Pad.PadGetStickyEventMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getStream" o = Gst.Pad.PadGetStreamMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getStreamId" o = Gst.Pad.PadGetStreamIdMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getTaskState" o = Gst.Pad.PadGetTaskStateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setActivateFunctionFull" o = Gst.Pad.PadSetActivateFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setActivatemodeFunctionFull" o = Gst.Pad.PadSetActivatemodeFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setActive" o = Gst.Pad.PadSetActiveMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setChainFunctionFull" o = Gst.Pad.PadSetChainFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setChainListFunctionFull" o = Gst.Pad.PadSetChainListFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setElementPrivate" o = Gst.Pad.PadSetElementPrivateMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setEventFullFunctionFull" o = Gst.Pad.PadSetEventFullFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setEventFunctionFull" o = Gst.Pad.PadSetEventFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setGetrangeFunctionFull" o = Gst.Pad.PadSetGetrangeFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setIterateInternalLinksFunctionFull" o = Gst.Pad.PadSetIterateInternalLinksFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setLinkFunctionFull" o = Gst.Pad.PadSetLinkFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setOffset" o = Gst.Pad.PadSetOffsetMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setQueryFunctionFull" o = Gst.Pad.PadSetQueryFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod "setUnlinkFunctionFull" o = Gst.Pad.PadSetUnlinkFunctionFullMethodInfo
+    ResolveAudioAggregatorConvertPadMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioAggregatorConvertPadMethod t AudioAggregatorConvertPad, O.MethodInfo info AudioAggregatorConvertPad p) => OL.IsLabel t (AudioAggregatorConvertPad -> 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 "converter-config"
+   -- Type: TInterface (Name {namespace = "Gst", name = "Structure"})
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@converter-config@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioAggregatorConvertPad #converterConfig
+@
+-}
+getAudioAggregatorConvertPadConverterConfig :: (MonadIO m, IsAudioAggregatorConvertPad o) => o -> m (Maybe Gst.Structure.Structure)
+getAudioAggregatorConvertPadConverterConfig obj = liftIO $ B.Properties.getObjectPropertyBoxed obj "converter-config" Gst.Structure.Structure
+
+{- |
+Set the value of the “@converter-config@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioAggregatorConvertPad [ #converterConfig 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioAggregatorConvertPadConverterConfig :: (MonadIO m, IsAudioAggregatorConvertPad o) => o -> Gst.Structure.Structure -> m ()
+setAudioAggregatorConvertPadConverterConfig obj val = liftIO $ B.Properties.setObjectPropertyBoxed obj "converter-config" (Just val)
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@converter-config@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioAggregatorConvertPadConverterConfig :: (IsAudioAggregatorConvertPad o) => Gst.Structure.Structure -> IO (GValueConstruct o)
+constructAudioAggregatorConvertPadConverterConfig val = B.Properties.constructObjectPropertyBoxed "converter-config" (Just val)
+
+{- |
+Set the value of the “@converter-config@” property to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #converterConfig
+@
+-}
+clearAudioAggregatorConvertPadConverterConfig :: (MonadIO m, IsAudioAggregatorConvertPad o) => o -> m ()
+clearAudioAggregatorConvertPadConverterConfig obj = liftIO $ B.Properties.setObjectPropertyBoxed obj "converter-config" (Nothing :: Maybe Gst.Structure.Structure)
+
+#if ENABLE_OVERLOADING
+data AudioAggregatorConvertPadConverterConfigPropertyInfo
+instance AttrInfo AudioAggregatorConvertPadConverterConfigPropertyInfo where
+    type AttrAllowedOps AudioAggregatorConvertPadConverterConfigPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioAggregatorConvertPadConverterConfigPropertyInfo = (~) Gst.Structure.Structure
+    type AttrBaseTypeConstraint AudioAggregatorConvertPadConverterConfigPropertyInfo = IsAudioAggregatorConvertPad
+    type AttrGetType AudioAggregatorConvertPadConverterConfigPropertyInfo = (Maybe Gst.Structure.Structure)
+    type AttrLabel AudioAggregatorConvertPadConverterConfigPropertyInfo = "converter-config"
+    type AttrOrigin AudioAggregatorConvertPadConverterConfigPropertyInfo = AudioAggregatorConvertPad
+    attrGet _ = getAudioAggregatorConvertPadConverterConfig
+    attrSet _ = setAudioAggregatorConvertPadConverterConfig
+    attrConstruct _ = constructAudioAggregatorConvertPadConverterConfig
+    attrClear _ = clearAudioAggregatorConvertPadConverterConfig
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioAggregatorConvertPad
+type instance O.AttributeList AudioAggregatorConvertPad = AudioAggregatorConvertPadAttributeList
+type AudioAggregatorConvertPadAttributeList = ('[ '("caps", Gst.Pad.PadCapsPropertyInfo), '("converterConfig", AudioAggregatorConvertPadConverterConfigPropertyInfo), '("direction", Gst.Pad.PadDirectionPropertyInfo), '("emitSignals", GstBase.AggregatorPad.AggregatorPadEmitSignalsPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("offset", Gst.Pad.PadOffsetPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("template", Gst.Pad.PadTemplatePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioAggregatorConvertPadConverterConfig :: AttrLabelProxy "converterConfig"
+audioAggregatorConvertPadConverterConfig = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioAggregatorConvertPad = AudioAggregatorConvertPadSignalList
+type AudioAggregatorConvertPadSignalList = ('[ '("bufferConsumed", GstBase.AggregatorPad.AggregatorPadBufferConsumedSignalInfo), '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("linked", Gst.Pad.PadLinkedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("unlinked", Gst.Pad.PadUnlinkedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs-boot b/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregatorConvertPad.hs-boot
@@ -0,0 +1,32 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioAggregatorConvertPad 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
+
+newtype AudioAggregatorConvertPad = AudioAggregatorConvertPad (ManagedPtr AudioAggregatorConvertPad)
+instance GObject AudioAggregatorConvertPad where
+class (GObject o, O.IsDescendantOf AudioAggregatorConvertPad o) => IsAudioAggregatorConvertPad o
+instance (GObject o, O.IsDescendantOf AudioAggregatorConvertPad o) => IsAudioAggregatorConvertPad o
+instance O.HasParentTypes AudioAggregatorConvertPad
+#if ENABLE_OVERLOADING
+data AudioAggregatorConvertPadConverterConfigPropertyInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioAggregatorPad.hs b/GI/GstAudio/Objects/AudioAggregatorPad.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregatorPad.hs
@@ -0,0 +1,230 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+The default implementation of GstPad used with 'GI.GstAudio.Objects.AudioAggregator.AudioAggregator'
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioAggregatorPad
+    ( 
+
+-- * Exported types
+    AudioAggregatorPad(..)                  ,
+    IsAudioAggregatorPad                    ,
+    toAudioAggregatorPad                    ,
+    noAudioAggregatorPad                    ,
+
+
+    ) 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.Object as Gst.Object
+import qualified GI.Gst.Objects.Pad as Gst.Pad
+import qualified GI.GstBase.Objects.AggregatorPad as GstBase.AggregatorPad
+
+-- | Memory-managed wrapper type.
+newtype AudioAggregatorPad = AudioAggregatorPad (ManagedPtr AudioAggregatorPad)
+foreign import ccall "gst_audio_aggregator_pad_get_type"
+    c_gst_audio_aggregator_pad_get_type :: IO GType
+
+instance GObject AudioAggregatorPad where
+    gobjectType = c_gst_audio_aggregator_pad_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioAggregatorPad`, for instance with `toAudioAggregatorPad`.
+class (GObject o, O.IsDescendantOf AudioAggregatorPad o) => IsAudioAggregatorPad o
+instance (GObject o, O.IsDescendantOf AudioAggregatorPad o) => IsAudioAggregatorPad o
+
+instance O.HasParentTypes AudioAggregatorPad
+type instance O.ParentTypes AudioAggregatorPad = '[GstBase.AggregatorPad.AggregatorPad, Gst.Pad.Pad, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioAggregatorPad`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioAggregatorPad :: (MonadIO m, IsAudioAggregatorPad o) => o -> m AudioAggregatorPad
+toAudioAggregatorPad = liftIO . unsafeCastTo AudioAggregatorPad
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioAggregatorPad`.
+noAudioAggregatorPad :: Maybe AudioAggregatorPad
+noAudioAggregatorPad = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioAggregatorPadMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioAggregatorPadMethod "activateMode" o = Gst.Pad.PadActivateModeMethodInfo
+    ResolveAudioAggregatorPadMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioAggregatorPadMethod "addProbe" o = Gst.Pad.PadAddProbeMethodInfo
+    ResolveAudioAggregatorPadMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioAggregatorPadMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioAggregatorPadMethod "canLink" o = Gst.Pad.PadCanLinkMethodInfo
+    ResolveAudioAggregatorPadMethod "chain" o = Gst.Pad.PadChainMethodInfo
+    ResolveAudioAggregatorPadMethod "chainList" o = Gst.Pad.PadChainListMethodInfo
+    ResolveAudioAggregatorPadMethod "checkReconfigure" o = Gst.Pad.PadCheckReconfigureMethodInfo
+    ResolveAudioAggregatorPadMethod "createStreamId" o = Gst.Pad.PadCreateStreamIdMethodInfo
+    ResolveAudioAggregatorPadMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioAggregatorPadMethod "dropBuffer" o = GstBase.AggregatorPad.AggregatorPadDropBufferMethodInfo
+    ResolveAudioAggregatorPadMethod "eventDefault" o = Gst.Pad.PadEventDefaultMethodInfo
+    ResolveAudioAggregatorPadMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioAggregatorPadMethod "forward" o = Gst.Pad.PadForwardMethodInfo
+    ResolveAudioAggregatorPadMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioAggregatorPadMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioAggregatorPadMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioAggregatorPadMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioAggregatorPadMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioAggregatorPadMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioAggregatorPadMethod "hasBuffer" o = GstBase.AggregatorPad.AggregatorPadHasBufferMethodInfo
+    ResolveAudioAggregatorPadMethod "hasCurrentCaps" o = Gst.Pad.PadHasCurrentCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "isActive" o = Gst.Pad.PadIsActiveMethodInfo
+    ResolveAudioAggregatorPadMethod "isBlocked" o = Gst.Pad.PadIsBlockedMethodInfo
+    ResolveAudioAggregatorPadMethod "isBlocking" o = Gst.Pad.PadIsBlockingMethodInfo
+    ResolveAudioAggregatorPadMethod "isEos" o = GstBase.AggregatorPad.AggregatorPadIsEosMethodInfo
+    ResolveAudioAggregatorPadMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioAggregatorPadMethod "isLinked" o = Gst.Pad.PadIsLinkedMethodInfo
+    ResolveAudioAggregatorPadMethod "iterateInternalLinks" o = Gst.Pad.PadIterateInternalLinksMethodInfo
+    ResolveAudioAggregatorPadMethod "iterateInternalLinksDefault" o = Gst.Pad.PadIterateInternalLinksDefaultMethodInfo
+    ResolveAudioAggregatorPadMethod "link" o = Gst.Pad.PadLinkMethodInfo
+    ResolveAudioAggregatorPadMethod "linkFull" o = Gst.Pad.PadLinkFullMethodInfo
+    ResolveAudioAggregatorPadMethod "linkMaybeGhosting" o = Gst.Pad.PadLinkMaybeGhostingMethodInfo
+    ResolveAudioAggregatorPadMethod "linkMaybeGhostingFull" o = Gst.Pad.PadLinkMaybeGhostingFullMethodInfo
+    ResolveAudioAggregatorPadMethod "markReconfigure" o = Gst.Pad.PadMarkReconfigureMethodInfo
+    ResolveAudioAggregatorPadMethod "needsReconfigure" o = Gst.Pad.PadNeedsReconfigureMethodInfo
+    ResolveAudioAggregatorPadMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioAggregatorPadMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioAggregatorPadMethod "pauseTask" o = Gst.Pad.PadPauseTaskMethodInfo
+    ResolveAudioAggregatorPadMethod "peekBuffer" o = GstBase.AggregatorPad.AggregatorPadPeekBufferMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQuery" o = Gst.Pad.PadPeerQueryMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQueryAcceptCaps" o = Gst.Pad.PadPeerQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQueryCaps" o = Gst.Pad.PadPeerQueryCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQueryConvert" o = Gst.Pad.PadPeerQueryConvertMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQueryDuration" o = Gst.Pad.PadPeerQueryDurationMethodInfo
+    ResolveAudioAggregatorPadMethod "peerQueryPosition" o = Gst.Pad.PadPeerQueryPositionMethodInfo
+    ResolveAudioAggregatorPadMethod "popBuffer" o = GstBase.AggregatorPad.AggregatorPadPopBufferMethodInfo
+    ResolveAudioAggregatorPadMethod "proxyQueryAcceptCaps" o = Gst.Pad.PadProxyQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "proxyQueryCaps" o = Gst.Pad.PadProxyQueryCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "pullRange" o = Gst.Pad.PadPullRangeMethodInfo
+    ResolveAudioAggregatorPadMethod "push" o = Gst.Pad.PadPushMethodInfo
+    ResolveAudioAggregatorPadMethod "pushEvent" o = Gst.Pad.PadPushEventMethodInfo
+    ResolveAudioAggregatorPadMethod "pushList" o = Gst.Pad.PadPushListMethodInfo
+    ResolveAudioAggregatorPadMethod "query" o = Gst.Pad.PadQueryMethodInfo
+    ResolveAudioAggregatorPadMethod "queryAcceptCaps" o = Gst.Pad.PadQueryAcceptCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "queryCaps" o = Gst.Pad.PadQueryCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "queryConvert" o = Gst.Pad.PadQueryConvertMethodInfo
+    ResolveAudioAggregatorPadMethod "queryDefault" o = Gst.Pad.PadQueryDefaultMethodInfo
+    ResolveAudioAggregatorPadMethod "queryDuration" o = Gst.Pad.PadQueryDurationMethodInfo
+    ResolveAudioAggregatorPadMethod "queryPosition" o = Gst.Pad.PadQueryPositionMethodInfo
+    ResolveAudioAggregatorPadMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioAggregatorPadMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioAggregatorPadMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioAggregatorPadMethod "removeProbe" o = Gst.Pad.PadRemoveProbeMethodInfo
+    ResolveAudioAggregatorPadMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioAggregatorPadMethod "sendEvent" o = Gst.Pad.PadSendEventMethodInfo
+    ResolveAudioAggregatorPadMethod "startTask" o = Gst.Pad.PadStartTaskMethodInfo
+    ResolveAudioAggregatorPadMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioAggregatorPadMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioAggregatorPadMethod "stickyEventsForeach" o = Gst.Pad.PadStickyEventsForeachMethodInfo
+    ResolveAudioAggregatorPadMethod "stopTask" o = Gst.Pad.PadStopTaskMethodInfo
+    ResolveAudioAggregatorPadMethod "storeStickyEvent" o = Gst.Pad.PadStoreStickyEventMethodInfo
+    ResolveAudioAggregatorPadMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioAggregatorPadMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioAggregatorPadMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioAggregatorPadMethod "unlink" o = Gst.Pad.PadUnlinkMethodInfo
+    ResolveAudioAggregatorPadMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioAggregatorPadMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioAggregatorPadMethod "useFixedCaps" o = Gst.Pad.PadUseFixedCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioAggregatorPadMethod "getAllowedCaps" o = Gst.Pad.PadGetAllowedCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioAggregatorPadMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioAggregatorPadMethod "getCurrentCaps" o = Gst.Pad.PadGetCurrentCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioAggregatorPadMethod "getDirection" o = Gst.Pad.PadGetDirectionMethodInfo
+    ResolveAudioAggregatorPadMethod "getElementPrivate" o = Gst.Pad.PadGetElementPrivateMethodInfo
+    ResolveAudioAggregatorPadMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioAggregatorPadMethod "getLastFlowReturn" o = Gst.Pad.PadGetLastFlowReturnMethodInfo
+    ResolveAudioAggregatorPadMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioAggregatorPadMethod "getOffset" o = Gst.Pad.PadGetOffsetMethodInfo
+    ResolveAudioAggregatorPadMethod "getPadTemplate" o = Gst.Pad.PadGetPadTemplateMethodInfo
+    ResolveAudioAggregatorPadMethod "getPadTemplateCaps" o = Gst.Pad.PadGetPadTemplateCapsMethodInfo
+    ResolveAudioAggregatorPadMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioAggregatorPadMethod "getParentElement" o = Gst.Pad.PadGetParentElementMethodInfo
+    ResolveAudioAggregatorPadMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioAggregatorPadMethod "getPeer" o = Gst.Pad.PadGetPeerMethodInfo
+    ResolveAudioAggregatorPadMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioAggregatorPadMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioAggregatorPadMethod "getRange" o = Gst.Pad.PadGetRangeMethodInfo
+    ResolveAudioAggregatorPadMethod "getStickyEvent" o = Gst.Pad.PadGetStickyEventMethodInfo
+    ResolveAudioAggregatorPadMethod "getStream" o = Gst.Pad.PadGetStreamMethodInfo
+    ResolveAudioAggregatorPadMethod "getStreamId" o = Gst.Pad.PadGetStreamIdMethodInfo
+    ResolveAudioAggregatorPadMethod "getTaskState" o = Gst.Pad.PadGetTaskStateMethodInfo
+    ResolveAudioAggregatorPadMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioAggregatorPadMethod "setActivateFunctionFull" o = Gst.Pad.PadSetActivateFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setActivatemodeFunctionFull" o = Gst.Pad.PadSetActivatemodeFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setActive" o = Gst.Pad.PadSetActiveMethodInfo
+    ResolveAudioAggregatorPadMethod "setChainFunctionFull" o = Gst.Pad.PadSetChainFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setChainListFunctionFull" o = Gst.Pad.PadSetChainListFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioAggregatorPadMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioAggregatorPadMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioAggregatorPadMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioAggregatorPadMethod "setElementPrivate" o = Gst.Pad.PadSetElementPrivateMethodInfo
+    ResolveAudioAggregatorPadMethod "setEventFullFunctionFull" o = Gst.Pad.PadSetEventFullFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setEventFunctionFull" o = Gst.Pad.PadSetEventFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setGetrangeFunctionFull" o = Gst.Pad.PadSetGetrangeFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setIterateInternalLinksFunctionFull" o = Gst.Pad.PadSetIterateInternalLinksFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setLinkFunctionFull" o = Gst.Pad.PadSetLinkFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioAggregatorPadMethod "setOffset" o = Gst.Pad.PadSetOffsetMethodInfo
+    ResolveAudioAggregatorPadMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioAggregatorPadMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioAggregatorPadMethod "setQueryFunctionFull" o = Gst.Pad.PadSetQueryFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod "setUnlinkFunctionFull" o = Gst.Pad.PadSetUnlinkFunctionFullMethodInfo
+    ResolveAudioAggregatorPadMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioAggregatorPadMethod t AudioAggregatorPad, O.MethodInfo info AudioAggregatorPad p) => OL.IsLabel t (AudioAggregatorPad -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioAggregatorPad
+type instance O.AttributeList AudioAggregatorPad = AudioAggregatorPadAttributeList
+type AudioAggregatorPadAttributeList = ('[ '("caps", Gst.Pad.PadCapsPropertyInfo), '("direction", Gst.Pad.PadDirectionPropertyInfo), '("emitSignals", GstBase.AggregatorPad.AggregatorPadEmitSignalsPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("offset", Gst.Pad.PadOffsetPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("template", Gst.Pad.PadTemplatePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioAggregatorPad = AudioAggregatorPadSignalList
+type AudioAggregatorPadSignalList = ('[ '("bufferConsumed", GstBase.AggregatorPad.AggregatorPadBufferConsumedSignalInfo), '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("linked", Gst.Pad.PadLinkedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("unlinked", Gst.Pad.PadUnlinkedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioAggregatorPad.hs-boot b/GI/GstAudio/Objects/AudioAggregatorPad.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioAggregatorPad.hs-boot
@@ -0,0 +1,29 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioAggregatorPad 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
+
+newtype AudioAggregatorPad = AudioAggregatorPad (ManagedPtr AudioAggregatorPad)
+instance GObject AudioAggregatorPad where
+class (GObject o, O.IsDescendantOf AudioAggregatorPad o) => IsAudioAggregatorPad o
+instance (GObject o, O.IsDescendantOf AudioAggregatorPad o) => IsAudioAggregatorPad o
+instance O.HasParentTypes AudioAggregatorPad
diff --git a/GI/GstAudio/Objects/AudioBaseSink.hs b/GI/GstAudio/Objects/AudioBaseSink.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioBaseSink.hs
@@ -0,0 +1,1376 @@
+
+
+{- |
+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 sinks. Subclasses need to implement the
+::create_ringbuffer vmethod. This base class will then take care of
+writing samples to the ringbuffer, synchronisation, clipping and flushing.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioBaseSink
+    ( 
+
+-- * Exported types
+    AudioBaseSink(..)                       ,
+    IsAudioBaseSink                         ,
+    toAudioBaseSink                         ,
+    noAudioBaseSink                         ,
+
+
+ -- * Methods
+-- ** createRingbuffer #method:createRingbuffer#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkCreateRingbufferMethodInfo ,
+#endif
+    audioBaseSinkCreateRingbuffer           ,
+
+
+-- ** getAlignmentThreshold #method:getAlignmentThreshold#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkGetAlignmentThresholdMethodInfo,
+#endif
+    audioBaseSinkGetAlignmentThreshold      ,
+
+
+-- ** getDiscontWait #method:getDiscontWait#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkGetDiscontWaitMethodInfo   ,
+#endif
+    audioBaseSinkGetDiscontWait             ,
+
+
+-- ** getDriftTolerance #method:getDriftTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkGetDriftToleranceMethodInfo,
+#endif
+    audioBaseSinkGetDriftTolerance          ,
+
+
+-- ** getProvideClock #method:getProvideClock#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkGetProvideClockMethodInfo  ,
+#endif
+    audioBaseSinkGetProvideClock            ,
+
+
+-- ** getSlaveMethod #method:getSlaveMethod#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkGetSlaveMethodMethodInfo   ,
+#endif
+    audioBaseSinkGetSlaveMethod             ,
+
+
+-- ** reportDeviceFailure #method:reportDeviceFailure#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkReportDeviceFailureMethodInfo,
+#endif
+    audioBaseSinkReportDeviceFailure        ,
+
+
+-- ** setAlignmentThreshold #method:setAlignmentThreshold#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetAlignmentThresholdMethodInfo,
+#endif
+    audioBaseSinkSetAlignmentThreshold      ,
+
+
+-- ** setCustomSlavingCallback #method:setCustomSlavingCallback#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetCustomSlavingCallbackMethodInfo,
+#endif
+    audioBaseSinkSetCustomSlavingCallback   ,
+
+
+-- ** setDiscontWait #method:setDiscontWait#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetDiscontWaitMethodInfo   ,
+#endif
+    audioBaseSinkSetDiscontWait             ,
+
+
+-- ** setDriftTolerance #method:setDriftTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetDriftToleranceMethodInfo,
+#endif
+    audioBaseSinkSetDriftTolerance          ,
+
+
+-- ** setProvideClock #method:setProvideClock#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetProvideClockMethodInfo  ,
+#endif
+    audioBaseSinkSetProvideClock            ,
+
+
+-- ** setSlaveMethod #method:setSlaveMethod#
+
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSetSlaveMethodMethodInfo   ,
+#endif
+    audioBaseSinkSetSlaveMethod             ,
+
+
+
+
+ -- * Properties
+-- ** alignmentThreshold #attr:alignmentThreshold#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkAlignmentThresholdPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkAlignmentThreshold         ,
+#endif
+    constructAudioBaseSinkAlignmentThreshold,
+    getAudioBaseSinkAlignmentThreshold      ,
+    setAudioBaseSinkAlignmentThreshold      ,
+
+
+-- ** bufferTime #attr:bufferTime#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkBufferTimePropertyInfo     ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkBufferTime                 ,
+#endif
+    constructAudioBaseSinkBufferTime        ,
+    getAudioBaseSinkBufferTime              ,
+    setAudioBaseSinkBufferTime              ,
+
+
+-- ** canActivatePull #attr:canActivatePull#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkCanActivatePullPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkCanActivatePull            ,
+#endif
+    constructAudioBaseSinkCanActivatePull   ,
+    getAudioBaseSinkCanActivatePull         ,
+    setAudioBaseSinkCanActivatePull         ,
+
+
+-- ** discontWait #attr:discontWait#
+{- | A window of time in nanoseconds to wait before creating a discontinuity as
+a result of breaching the drift-tolerance.
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkDiscontWaitPropertyInfo    ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkDiscontWait                ,
+#endif
+    constructAudioBaseSinkDiscontWait       ,
+    getAudioBaseSinkDiscontWait             ,
+    setAudioBaseSinkDiscontWait             ,
+
+
+-- ** driftTolerance #attr:driftTolerance#
+{- | Controls the amount of time in microseconds that clocks are allowed
+to drift before resynchronisation happens.
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkDriftTolerancePropertyInfo ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkDriftTolerance             ,
+#endif
+    constructAudioBaseSinkDriftTolerance    ,
+    getAudioBaseSinkDriftTolerance          ,
+    setAudioBaseSinkDriftTolerance          ,
+
+
+-- ** latencyTime #attr:latencyTime#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkLatencyTimePropertyInfo    ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkLatencyTime                ,
+#endif
+    constructAudioBaseSinkLatencyTime       ,
+    getAudioBaseSinkLatencyTime             ,
+    setAudioBaseSinkLatencyTime             ,
+
+
+-- ** provideClock #attr:provideClock#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkProvideClockPropertyInfo   ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkProvideClock               ,
+#endif
+    constructAudioBaseSinkProvideClock      ,
+    getAudioBaseSinkProvideClock            ,
+    setAudioBaseSinkProvideClock            ,
+
+
+-- ** slaveMethod #attr:slaveMethod#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioBaseSinkSlaveMethodPropertyInfo    ,
+#endif
+#if ENABLE_OVERLOADING
+    audioBaseSinkSlaveMethod                ,
+#endif
+    constructAudioBaseSinkSlaveMethod       ,
+    getAudioBaseSinkSlaveMethod             ,
+    setAudioBaseSinkSlaveMethod             ,
+
+
+
+
+    ) 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.GLib.Callbacks as GLib.Callbacks
+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 qualified GI.GstAudio.Callbacks as GstAudio.Callbacks
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioRingBuffer as GstAudio.AudioRingBuffer
+import qualified GI.GstBase.Objects.BaseSink as GstBase.BaseSink
+
+-- | Memory-managed wrapper type.
+newtype AudioBaseSink = AudioBaseSink (ManagedPtr AudioBaseSink)
+foreign import ccall "gst_audio_base_sink_get_type"
+    c_gst_audio_base_sink_get_type :: IO GType
+
+instance GObject AudioBaseSink where
+    gobjectType = c_gst_audio_base_sink_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioBaseSink`, for instance with `toAudioBaseSink`.
+class (GObject o, O.IsDescendantOf AudioBaseSink o) => IsAudioBaseSink o
+instance (GObject o, O.IsDescendantOf AudioBaseSink o) => IsAudioBaseSink o
+
+instance O.HasParentTypes AudioBaseSink
+type instance O.ParentTypes AudioBaseSink = '[GstBase.BaseSink.BaseSink, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioBaseSink`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioBaseSink :: (MonadIO m, IsAudioBaseSink o) => o -> m AudioBaseSink
+toAudioBaseSink = liftIO . unsafeCastTo AudioBaseSink
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioBaseSink`.
+noAudioBaseSink :: Maybe AudioBaseSink
+noAudioBaseSink = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioBaseSinkMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioBaseSinkMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioBaseSinkMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioBaseSinkMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioBaseSinkMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioBaseSinkMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioBaseSinkMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioBaseSinkMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioBaseSinkMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioBaseSinkMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioBaseSinkMethod "createRingbuffer" o = AudioBaseSinkCreateRingbufferMethodInfo
+    ResolveAudioBaseSinkMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioBaseSinkMethod "doPreroll" o = GstBase.BaseSink.BaseSinkDoPrerollMethodInfo
+    ResolveAudioBaseSinkMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioBaseSinkMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioBaseSinkMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioBaseSinkMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioBaseSinkMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioBaseSinkMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioBaseSinkMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioBaseSinkMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioBaseSinkMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioBaseSinkMethod "isAsyncEnabled" o = GstBase.BaseSink.BaseSinkIsAsyncEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioBaseSinkMethod "isLastSampleEnabled" o = GstBase.BaseSink.BaseSinkIsLastSampleEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioBaseSinkMethod "isQosEnabled" o = GstBase.BaseSink.BaseSinkIsQosEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioBaseSinkMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioBaseSinkMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioBaseSinkMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioBaseSinkMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioBaseSinkMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioBaseSinkMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioBaseSinkMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioBaseSinkMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioBaseSinkMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioBaseSinkMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioBaseSinkMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioBaseSinkMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioBaseSinkMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioBaseSinkMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioBaseSinkMethod "queryLatency" o = GstBase.BaseSink.BaseSinkQueryLatencyMethodInfo
+    ResolveAudioBaseSinkMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioBaseSinkMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioBaseSinkMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioBaseSinkMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioBaseSinkMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioBaseSinkMethod "reportDeviceFailure" o = AudioBaseSinkReportDeviceFailureMethodInfo
+    ResolveAudioBaseSinkMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioBaseSinkMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioBaseSinkMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioBaseSinkMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioBaseSinkMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioBaseSinkMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioBaseSinkMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioBaseSinkMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioBaseSinkMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioBaseSinkMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioBaseSinkMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioBaseSinkMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioBaseSinkMethod "wait" o = GstBase.BaseSink.BaseSinkWaitMethodInfo
+    ResolveAudioBaseSinkMethod "waitClock" o = GstBase.BaseSink.BaseSinkWaitClockMethodInfo
+    ResolveAudioBaseSinkMethod "waitPreroll" o = GstBase.BaseSink.BaseSinkWaitPrerollMethodInfo
+    ResolveAudioBaseSinkMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioBaseSinkMethod "getAlignmentThreshold" o = AudioBaseSinkGetAlignmentThresholdMethodInfo
+    ResolveAudioBaseSinkMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getBlocksize" o = GstBase.BaseSink.BaseSinkGetBlocksizeMethodInfo
+    ResolveAudioBaseSinkMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioBaseSinkMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioBaseSinkMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioBaseSinkMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioBaseSinkMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioBaseSinkMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioBaseSinkMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioBaseSinkMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioBaseSinkMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioBaseSinkMethod "getDiscontWait" o = AudioBaseSinkGetDiscontWaitMethodInfo
+    ResolveAudioBaseSinkMethod "getDriftTolerance" o = AudioBaseSinkGetDriftToleranceMethodInfo
+    ResolveAudioBaseSinkMethod "getDropOutOfSegment" o = GstBase.BaseSink.BaseSinkGetDropOutOfSegmentMethodInfo
+    ResolveAudioBaseSinkMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioBaseSinkMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioBaseSinkMethod "getLastSample" o = GstBase.BaseSink.BaseSinkGetLastSampleMethodInfo
+    ResolveAudioBaseSinkMethod "getLatency" o = GstBase.BaseSink.BaseSinkGetLatencyMethodInfo
+    ResolveAudioBaseSinkMethod "getMaxBitrate" o = GstBase.BaseSink.BaseSinkGetMaxBitrateMethodInfo
+    ResolveAudioBaseSinkMethod "getMaxLateness" o = GstBase.BaseSink.BaseSinkGetMaxLatenessMethodInfo
+    ResolveAudioBaseSinkMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioBaseSinkMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioBaseSinkMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioBaseSinkMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioBaseSinkMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioBaseSinkMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioBaseSinkMethod "getProcessingDeadline" o = GstBase.BaseSink.BaseSinkGetProcessingDeadlineMethodInfo
+    ResolveAudioBaseSinkMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "getProvideClock" o = AudioBaseSinkGetProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioBaseSinkMethod "getRenderDelay" o = GstBase.BaseSink.BaseSinkGetRenderDelayMethodInfo
+    ResolveAudioBaseSinkMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "getSlaveMethod" o = AudioBaseSinkGetSlaveMethodMethodInfo
+    ResolveAudioBaseSinkMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioBaseSinkMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioBaseSinkMethod "getSync" o = GstBase.BaseSink.BaseSinkGetSyncMethodInfo
+    ResolveAudioBaseSinkMethod "getThrottleTime" o = GstBase.BaseSink.BaseSinkGetThrottleTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getTsOffset" o = GstBase.BaseSink.BaseSinkGetTsOffsetMethodInfo
+    ResolveAudioBaseSinkMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioBaseSinkMethod "setAlignmentThreshold" o = AudioBaseSinkSetAlignmentThresholdMethodInfo
+    ResolveAudioBaseSinkMethod "setAsyncEnabled" o = GstBase.BaseSink.BaseSinkSetAsyncEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setBlocksize" o = GstBase.BaseSink.BaseSinkSetBlocksizeMethodInfo
+    ResolveAudioBaseSinkMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioBaseSinkMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioBaseSinkMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioBaseSinkMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioBaseSinkMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioBaseSinkMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioBaseSinkMethod "setCustomSlavingCallback" o = AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+    ResolveAudioBaseSinkMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioBaseSinkMethod "setDiscontWait" o = AudioBaseSinkSetDiscontWaitMethodInfo
+    ResolveAudioBaseSinkMethod "setDriftTolerance" o = AudioBaseSinkSetDriftToleranceMethodInfo
+    ResolveAudioBaseSinkMethod "setDropOutOfSegment" o = GstBase.BaseSink.BaseSinkSetDropOutOfSegmentMethodInfo
+    ResolveAudioBaseSinkMethod "setLastSampleEnabled" o = GstBase.BaseSink.BaseSinkSetLastSampleEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioBaseSinkMethod "setMaxBitrate" o = GstBase.BaseSink.BaseSinkSetMaxBitrateMethodInfo
+    ResolveAudioBaseSinkMethod "setMaxLateness" o = GstBase.BaseSink.BaseSinkSetMaxLatenessMethodInfo
+    ResolveAudioBaseSinkMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioBaseSinkMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioBaseSinkMethod "setProcessingDeadline" o = GstBase.BaseSink.BaseSinkSetProcessingDeadlineMethodInfo
+    ResolveAudioBaseSinkMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "setProvideClock" o = AudioBaseSinkSetProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "setQosEnabled" o = GstBase.BaseSink.BaseSinkSetQosEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setRenderDelay" o = GstBase.BaseSink.BaseSinkSetRenderDelayMethodInfo
+    ResolveAudioBaseSinkMethod "setSlaveMethod" o = AudioBaseSinkSetSlaveMethodMethodInfo
+    ResolveAudioBaseSinkMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioBaseSinkMethod "setSync" o = GstBase.BaseSink.BaseSinkSetSyncMethodInfo
+    ResolveAudioBaseSinkMethod "setThrottleTime" o = GstBase.BaseSink.BaseSinkSetThrottleTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setTsOffset" o = GstBase.BaseSink.BaseSinkSetTsOffsetMethodInfo
+    ResolveAudioBaseSinkMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioBaseSinkMethod t AudioBaseSink, O.MethodInfo info AudioBaseSink p) => OL.IsLabel t (AudioBaseSink -> 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 "alignment-threshold"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@alignment-threshold@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBaseSink #alignmentThreshold
+@
+-}
+getAudioBaseSinkAlignmentThreshold :: (MonadIO m, IsAudioBaseSink o) => o -> m Word64
+getAudioBaseSinkAlignmentThreshold obj = liftIO $ B.Properties.getObjectPropertyUInt64 obj "alignment-threshold"
+
+{- |
+Set the value of the “@alignment-threshold@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBaseSink [ #alignmentThreshold 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkAlignmentThreshold :: (MonadIO m, IsAudioBaseSink o) => o -> Word64 -> m ()
+setAudioBaseSinkAlignmentThreshold obj val = liftIO $ B.Properties.setObjectPropertyUInt64 obj "alignment-threshold" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@alignment-threshold@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioBaseSinkAlignmentThreshold :: (IsAudioBaseSink o) => Word64 -> IO (GValueConstruct o)
+constructAudioBaseSinkAlignmentThreshold val = B.Properties.constructObjectPropertyUInt64 "alignment-threshold" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkAlignmentThresholdPropertyInfo
+instance AttrInfo AudioBaseSinkAlignmentThresholdPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkAlignmentThresholdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkAlignmentThresholdPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioBaseSinkAlignmentThresholdPropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkAlignmentThresholdPropertyInfo = Word64
+    type AttrLabel AudioBaseSinkAlignmentThresholdPropertyInfo = "alignment-threshold"
+    type AttrOrigin AudioBaseSinkAlignmentThresholdPropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkAlignmentThreshold
+    attrSet _ = setAudioBaseSinkAlignmentThreshold
+    attrConstruct _ = constructAudioBaseSinkAlignmentThreshold
+    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' audioBaseSink #bufferTime
+@
+-}
+getAudioBaseSinkBufferTime :: (MonadIO m, IsAudioBaseSink o) => o -> m Int64
+getAudioBaseSinkBufferTime 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' audioBaseSink [ #bufferTime 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkBufferTime :: (MonadIO m, IsAudioBaseSink o) => o -> Int64 -> m ()
+setAudioBaseSinkBufferTime 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`.
+-}
+constructAudioBaseSinkBufferTime :: (IsAudioBaseSink o) => Int64 -> IO (GValueConstruct o)
+constructAudioBaseSinkBufferTime val = B.Properties.constructObjectPropertyInt64 "buffer-time" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkBufferTimePropertyInfo
+instance AttrInfo AudioBaseSinkBufferTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkBufferTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkBufferTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkBufferTimePropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkBufferTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkBufferTimePropertyInfo = "buffer-time"
+    type AttrOrigin AudioBaseSinkBufferTimePropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkBufferTime
+    attrSet _ = setAudioBaseSinkBufferTime
+    attrConstruct _ = constructAudioBaseSinkBufferTime
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "can-activate-pull"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@can-activate-pull@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBaseSink #canActivatePull
+@
+-}
+getAudioBaseSinkCanActivatePull :: (MonadIO m, IsAudioBaseSink o) => o -> m Bool
+getAudioBaseSinkCanActivatePull obj = liftIO $ B.Properties.getObjectPropertyBool obj "can-activate-pull"
+
+{- |
+Set the value of the “@can-activate-pull@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBaseSink [ #canActivatePull 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkCanActivatePull :: (MonadIO m, IsAudioBaseSink o) => o -> Bool -> m ()
+setAudioBaseSinkCanActivatePull obj val = liftIO $ B.Properties.setObjectPropertyBool obj "can-activate-pull" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@can-activate-pull@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioBaseSinkCanActivatePull :: (IsAudioBaseSink o) => Bool -> IO (GValueConstruct o)
+constructAudioBaseSinkCanActivatePull val = B.Properties.constructObjectPropertyBool "can-activate-pull" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkCanActivatePullPropertyInfo
+instance AttrInfo AudioBaseSinkCanActivatePullPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkCanActivatePullPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkCanActivatePullPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioBaseSinkCanActivatePullPropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkCanActivatePullPropertyInfo = Bool
+    type AttrLabel AudioBaseSinkCanActivatePullPropertyInfo = "can-activate-pull"
+    type AttrOrigin AudioBaseSinkCanActivatePullPropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkCanActivatePull
+    attrSet _ = setAudioBaseSinkCanActivatePull
+    attrConstruct _ = constructAudioBaseSinkCanActivatePull
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "discont-wait"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@discont-wait@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBaseSink #discontWait
+@
+-}
+getAudioBaseSinkDiscontWait :: (MonadIO m, IsAudioBaseSink o) => o -> m Word64
+getAudioBaseSinkDiscontWait obj = liftIO $ B.Properties.getObjectPropertyUInt64 obj "discont-wait"
+
+{- |
+Set the value of the “@discont-wait@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBaseSink [ #discontWait 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkDiscontWait :: (MonadIO m, IsAudioBaseSink o) => o -> Word64 -> m ()
+setAudioBaseSinkDiscontWait obj val = liftIO $ B.Properties.setObjectPropertyUInt64 obj "discont-wait" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@discont-wait@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioBaseSinkDiscontWait :: (IsAudioBaseSink o) => Word64 -> IO (GValueConstruct o)
+constructAudioBaseSinkDiscontWait val = B.Properties.constructObjectPropertyUInt64 "discont-wait" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkDiscontWaitPropertyInfo
+instance AttrInfo AudioBaseSinkDiscontWaitPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkDiscontWaitPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkDiscontWaitPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioBaseSinkDiscontWaitPropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkDiscontWaitPropertyInfo = Word64
+    type AttrLabel AudioBaseSinkDiscontWaitPropertyInfo = "discont-wait"
+    type AttrOrigin AudioBaseSinkDiscontWaitPropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkDiscontWait
+    attrSet _ = setAudioBaseSinkDiscontWait
+    attrConstruct _ = constructAudioBaseSinkDiscontWait
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "drift-tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@drift-tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBaseSink #driftTolerance
+@
+-}
+getAudioBaseSinkDriftTolerance :: (MonadIO m, IsAudioBaseSink o) => o -> m Int64
+getAudioBaseSinkDriftTolerance obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "drift-tolerance"
+
+{- |
+Set the value of the “@drift-tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBaseSink [ #driftTolerance 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkDriftTolerance :: (MonadIO m, IsAudioBaseSink o) => o -> Int64 -> m ()
+setAudioBaseSinkDriftTolerance obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "drift-tolerance" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@drift-tolerance@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioBaseSinkDriftTolerance :: (IsAudioBaseSink o) => Int64 -> IO (GValueConstruct o)
+constructAudioBaseSinkDriftTolerance val = B.Properties.constructObjectPropertyInt64 "drift-tolerance" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkDriftTolerancePropertyInfo
+instance AttrInfo AudioBaseSinkDriftTolerancePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkDriftTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkDriftTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkDriftTolerancePropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkDriftTolerancePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkDriftTolerancePropertyInfo = "drift-tolerance"
+    type AttrOrigin AudioBaseSinkDriftTolerancePropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkDriftTolerance
+    attrSet _ = setAudioBaseSinkDriftTolerance
+    attrConstruct _ = constructAudioBaseSinkDriftTolerance
+    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' audioBaseSink #latencyTime
+@
+-}
+getAudioBaseSinkLatencyTime :: (MonadIO m, IsAudioBaseSink o) => o -> m Int64
+getAudioBaseSinkLatencyTime 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' audioBaseSink [ #latencyTime 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkLatencyTime :: (MonadIO m, IsAudioBaseSink o) => o -> Int64 -> m ()
+setAudioBaseSinkLatencyTime 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`.
+-}
+constructAudioBaseSinkLatencyTime :: (IsAudioBaseSink o) => Int64 -> IO (GValueConstruct o)
+constructAudioBaseSinkLatencyTime val = B.Properties.constructObjectPropertyInt64 "latency-time" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkLatencyTimePropertyInfo
+instance AttrInfo AudioBaseSinkLatencyTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkLatencyTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkLatencyTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkLatencyTimePropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkLatencyTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkLatencyTimePropertyInfo = "latency-time"
+    type AttrOrigin AudioBaseSinkLatencyTimePropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkLatencyTime
+    attrSet _ = setAudioBaseSinkLatencyTime
+    attrConstruct _ = constructAudioBaseSinkLatencyTime
+    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' audioBaseSink #provideClock
+@
+-}
+getAudioBaseSinkProvideClock :: (MonadIO m, IsAudioBaseSink o) => o -> m Bool
+getAudioBaseSinkProvideClock 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' audioBaseSink [ #provideClock 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkProvideClock :: (MonadIO m, IsAudioBaseSink o) => o -> Bool -> m ()
+setAudioBaseSinkProvideClock 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`.
+-}
+constructAudioBaseSinkProvideClock :: (IsAudioBaseSink o) => Bool -> IO (GValueConstruct o)
+constructAudioBaseSinkProvideClock val = B.Properties.constructObjectPropertyBool "provide-clock" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkProvideClockPropertyInfo
+instance AttrInfo AudioBaseSinkProvideClockPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkProvideClockPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkProvideClockPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioBaseSinkProvideClockPropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkProvideClockPropertyInfo = Bool
+    type AttrLabel AudioBaseSinkProvideClockPropertyInfo = "provide-clock"
+    type AttrOrigin AudioBaseSinkProvideClockPropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkProvideClock
+    attrSet _ = setAudioBaseSinkProvideClock
+    attrConstruct _ = constructAudioBaseSinkProvideClock
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "slave-method"
+   -- Type: TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkSlaveMethod"})
+   -- 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' audioBaseSink #slaveMethod
+@
+-}
+getAudioBaseSinkSlaveMethod :: (MonadIO m, IsAudioBaseSink o) => o -> m GstAudio.Enums.AudioBaseSinkSlaveMethod
+getAudioBaseSinkSlaveMethod 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' audioBaseSink [ #slaveMethod 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBaseSinkSlaveMethod :: (MonadIO m, IsAudioBaseSink o) => o -> GstAudio.Enums.AudioBaseSinkSlaveMethod -> m ()
+setAudioBaseSinkSlaveMethod 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`.
+-}
+constructAudioBaseSinkSlaveMethod :: (IsAudioBaseSink o) => GstAudio.Enums.AudioBaseSinkSlaveMethod -> IO (GValueConstruct o)
+constructAudioBaseSinkSlaveMethod val = B.Properties.constructObjectPropertyEnum "slave-method" val
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSlaveMethodPropertyInfo
+instance AttrInfo AudioBaseSinkSlaveMethodPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkSlaveMethodPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkSlaveMethodPropertyInfo = (~) GstAudio.Enums.AudioBaseSinkSlaveMethod
+    type AttrBaseTypeConstraint AudioBaseSinkSlaveMethodPropertyInfo = IsAudioBaseSink
+    type AttrGetType AudioBaseSinkSlaveMethodPropertyInfo = GstAudio.Enums.AudioBaseSinkSlaveMethod
+    type AttrLabel AudioBaseSinkSlaveMethodPropertyInfo = "slave-method"
+    type AttrOrigin AudioBaseSinkSlaveMethodPropertyInfo = AudioBaseSink
+    attrGet _ = getAudioBaseSinkSlaveMethod
+    attrSet _ = setAudioBaseSinkSlaveMethod
+    attrConstruct _ = constructAudioBaseSinkSlaveMethod
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioBaseSink
+type instance O.AttributeList AudioBaseSink = AudioBaseSinkAttributeList
+type AudioBaseSinkAttributeList = ('[ '("alignmentThreshold", AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSink.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSink.BaseSinkBlocksizePropertyInfo), '("bufferTime", AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSink.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSink.BaseSinkLastSamplePropertyInfo), '("latencyTime", AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSink.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSink.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("processingDeadline", GstBase.BaseSink.BaseSinkProcessingDeadlinePropertyInfo), '("provideClock", AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSink.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSink.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", AudioBaseSinkSlaveMethodPropertyInfo), '("sync", GstBase.BaseSink.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSink.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSink.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioBaseSinkAlignmentThreshold :: AttrLabelProxy "alignmentThreshold"
+audioBaseSinkAlignmentThreshold = AttrLabelProxy
+
+audioBaseSinkBufferTime :: AttrLabelProxy "bufferTime"
+audioBaseSinkBufferTime = AttrLabelProxy
+
+audioBaseSinkCanActivatePull :: AttrLabelProxy "canActivatePull"
+audioBaseSinkCanActivatePull = AttrLabelProxy
+
+audioBaseSinkDiscontWait :: AttrLabelProxy "discontWait"
+audioBaseSinkDiscontWait = AttrLabelProxy
+
+audioBaseSinkDriftTolerance :: AttrLabelProxy "driftTolerance"
+audioBaseSinkDriftTolerance = AttrLabelProxy
+
+audioBaseSinkLatencyTime :: AttrLabelProxy "latencyTime"
+audioBaseSinkLatencyTime = AttrLabelProxy
+
+audioBaseSinkProvideClock :: AttrLabelProxy "provideClock"
+audioBaseSinkProvideClock = AttrLabelProxy
+
+audioBaseSinkSlaveMethod :: AttrLabelProxy "slaveMethod"
+audioBaseSinkSlaveMethod = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioBaseSink = AudioBaseSinkSignalList
+type AudioBaseSinkSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioBaseSink::create_ringbuffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink.", 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_sink_create_ringbuffer" gst_audio_base_sink_create_ringbuffer :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO (Ptr GstAudio.AudioRingBuffer.AudioRingBuffer)
+
+{- |
+Create and return the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' for /@sink@/. This function will
+call the ::create_ringbuffer vmethod and will set /@sink@/ as the parent of
+the returned buffer (see 'GI.Gst.Objects.Object.objectSetParent').
+-}
+audioBaseSinkCreateRingbuffer ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink'. -}
+    -> m GstAudio.AudioRingBuffer.AudioRingBuffer
+    {- ^ __Returns:__ The new ringbuffer of /@sink@/. -}
+audioBaseSinkCreateRingbuffer sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_create_ringbuffer sink'
+    checkUnexpectedReturnNULL "audioBaseSinkCreateRingbuffer" result
+    result' <- (newObject GstAudio.AudioRingBuffer.AudioRingBuffer) result
+    touchManagedPtr sink
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkCreateRingbufferMethodInfo
+instance (signature ~ (m GstAudio.AudioRingBuffer.AudioRingBuffer), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkCreateRingbufferMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkCreateRingbuffer
+
+#endif
+
+-- method AudioBaseSink::get_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_get_alignment_threshold" gst_audio_base_sink_get_alignment_threshold :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO Word64
+
+{- |
+Get the current alignment threshold, in nanoseconds, used by /@sink@/.
+-}
+audioBaseSinkGetAlignmentThreshold ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m Word64
+    {- ^ __Returns:__ The current alignment threshold used by /@sink@/. -}
+audioBaseSinkGetAlignmentThreshold sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_get_alignment_threshold sink'
+    touchManagedPtr sink
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetAlignmentThresholdMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkGetAlignmentThresholdMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetAlignmentThreshold
+
+#endif
+
+-- method AudioBaseSink::get_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_get_discont_wait" gst_audio_base_sink_get_discont_wait :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO Word64
+
+{- |
+Get the current discont wait, in nanoseconds, used by /@sink@/.
+-}
+audioBaseSinkGetDiscontWait ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m Word64
+    {- ^ __Returns:__ The current discont wait used by /@sink@/. -}
+audioBaseSinkGetDiscontWait sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_get_discont_wait sink'
+    touchManagedPtr sink
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetDiscontWaitMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkGetDiscontWaitMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetDiscontWait
+
+#endif
+
+-- method AudioBaseSink::get_drift_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_get_drift_tolerance" gst_audio_base_sink_get_drift_tolerance :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO Int64
+
+{- |
+Get the current drift tolerance, in microseconds, used by /@sink@/.
+-}
+audioBaseSinkGetDriftTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m Int64
+    {- ^ __Returns:__ The current drift tolerance used by /@sink@/. -}
+audioBaseSinkGetDriftTolerance sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_get_drift_tolerance sink'
+    touchManagedPtr sink
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetDriftToleranceMethodInfo
+instance (signature ~ (m Int64), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkGetDriftToleranceMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetDriftTolerance
+
+#endif
+
+-- method AudioBaseSink::get_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", 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_sink_get_provide_clock" gst_audio_base_sink_get_provide_clock :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO CInt
+
+{- |
+Queries whether /@sink@/ will provide a clock or not. See also
+gst_audio_base_sink_set_provide_clock.
+-}
+audioBaseSinkGetProvideClock ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if /@sink@/ will provide a clock. -}
+audioBaseSinkGetProvideClock sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_get_provide_clock sink'
+    let result' = (/= 0) result
+    touchManagedPtr sink
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetProvideClockMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkGetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetProvideClock
+
+#endif
+
+-- method AudioBaseSink::get_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkSlaveMethod"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_get_slave_method" gst_audio_base_sink_get_slave_method :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO CUInt
+
+{- |
+Get the current slave method used by /@sink@/.
+-}
+audioBaseSinkGetSlaveMethod ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m GstAudio.Enums.AudioBaseSinkSlaveMethod
+    {- ^ __Returns:__ The current slave method used by /@sink@/. -}
+audioBaseSinkGetSlaveMethod sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    result <- gst_audio_base_sink_get_slave_method sink'
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr sink
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetSlaveMethodMethodInfo
+instance (signature ~ (m GstAudio.Enums.AudioBaseSinkSlaveMethod), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkGetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetSlaveMethod
+
+#endif
+
+-- method AudioBaseSink::report_device_failure
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", 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_sink_report_device_failure" gst_audio_base_sink_report_device_failure :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    IO ()
+
+{- |
+Informs this base class that the audio output device has failed for
+some reason, causing a discontinuity (for example, because the device
+recovered from the error, but lost all contents of its ring buffer).
+This function is typically called by derived classes, and is useful
+for the custom slave method.
+
+/Since: 1.6/
+-}
+audioBaseSinkReportDeviceFailure ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> m ()
+audioBaseSinkReportDeviceFailure sink = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    gst_audio_base_sink_report_device_failure sink'
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkReportDeviceFailureMethodInfo
+instance (signature ~ (m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkReportDeviceFailureMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkReportDeviceFailure
+
+#endif
+
+-- method AudioBaseSink::set_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new alignment threshold in nanoseconds", 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_sink_set_alignment_threshold" gst_audio_base_sink_set_alignment_threshold :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    Word64 ->                               -- alignment_threshold : TBasicType TUInt64
+    IO ()
+
+{- |
+Controls the sink\'s alignment threshold.
+-}
+audioBaseSinkSetAlignmentThreshold ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Word64
+    {- ^ /@alignmentThreshold@/: the new alignment threshold in nanoseconds -}
+    -> m ()
+audioBaseSinkSetAlignmentThreshold sink alignmentThreshold = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    gst_audio_base_sink_set_alignment_threshold sink' alignmentThreshold
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetAlignmentThresholdMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetAlignmentThresholdMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetAlignmentThreshold
+
+#endif
+
+-- method AudioBaseSink::set_custom_slaving_callback
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkCustomSlavingCallback"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSinkCustomSlavingCallback", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "called when user_data becomes unused", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_custom_slaving_callback" gst_audio_base_sink_set_custom_slaving_callback :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    FunPtr GstAudio.Callbacks.C_AudioBaseSinkCustomSlavingCallback -> -- callback : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkCustomSlavingCallback"})
+    Ptr () ->                               -- user_data : TBasicType TPtr
+    FunPtr GLib.Callbacks.C_DestroyNotify -> -- notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
+    IO ()
+
+{- |
+Sets the custom slaving callback. This callback will
+be invoked if the slave-method property is set to
+GST_AUDIO_BASE_SINK_SLAVE_CUSTOM and the audio sink
+receives and plays samples.
+
+Setting the callback to NULL causes the sink to
+behave as if the GST_AUDIO_BASE_SINK_SLAVE_NONE
+method were used.
+
+/Since: 1.6/
+-}
+audioBaseSinkSetCustomSlavingCallback ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> GstAudio.Callbacks.AudioBaseSinkCustomSlavingCallback
+    {- ^ /@callback@/: a 'GI.GstAudio.Callbacks.AudioBaseSinkCustomSlavingCallback' -}
+    -> m ()
+audioBaseSinkSetCustomSlavingCallback sink callback = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    callback' <- GstAudio.Callbacks.mk_AudioBaseSinkCustomSlavingCallback (GstAudio.Callbacks.wrap_AudioBaseSinkCustomSlavingCallback Nothing (GstAudio.Callbacks.drop_closures_AudioBaseSinkCustomSlavingCallback callback))
+    let userData = castFunPtrToPtr callback'
+    let notify = safeFreeFunPtrPtr
+    gst_audio_base_sink_set_custom_slaving_callback sink' callback' userData notify
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+instance (signature ~ (GstAudio.Callbacks.AudioBaseSinkCustomSlavingCallback -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetCustomSlavingCallbackMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetCustomSlavingCallback
+
+#endif
+
+-- method AudioBaseSink::set_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new discont wait in nanoseconds", 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_sink_set_discont_wait" gst_audio_base_sink_set_discont_wait :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    Word64 ->                               -- discont_wait : TBasicType TUInt64
+    IO ()
+
+{- |
+Controls how long the sink will wait before creating a discontinuity.
+-}
+audioBaseSinkSetDiscontWait ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Word64
+    {- ^ /@discontWait@/: the new discont wait in nanoseconds -}
+    -> m ()
+audioBaseSinkSetDiscontWait sink discontWait = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    gst_audio_base_sink_set_discont_wait sink' discontWait
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetDiscontWaitMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetDiscontWaitMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetDiscontWait
+
+#endif
+
+-- method AudioBaseSink::set_drift_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "drift_tolerance", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new drift tolerance in microseconds", 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_sink_set_drift_tolerance" gst_audio_base_sink_set_drift_tolerance :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    Int64 ->                                -- drift_tolerance : TBasicType TInt64
+    IO ()
+
+{- |
+Controls the sink\'s drift tolerance.
+-}
+audioBaseSinkSetDriftTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Int64
+    {- ^ /@driftTolerance@/: the new drift tolerance in microseconds -}
+    -> m ()
+audioBaseSinkSetDriftTolerance sink driftTolerance = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    gst_audio_base_sink_set_drift_tolerance sink' driftTolerance
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetDriftToleranceMethodInfo
+instance (signature ~ (Int64 -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetDriftToleranceMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetDriftTolerance
+
+#endif
+
+-- method AudioBaseSink::set_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", 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_sink_set_provide_clock" gst_audio_base_sink_set_provide_clock :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    CInt ->                                 -- provide : TBasicType TBoolean
+    IO ()
+
+{- |
+Controls whether /@sink@/ will provide a clock or not. If /@provide@/ is 'True',
+'GI.Gst.Objects.Element.elementProvideClock' will return a clock that reflects the datarate
+of /@sink@/. If /@provide@/ is 'False', 'GI.Gst.Objects.Element.elementProvideClock' will return
+NULL.
+-}
+audioBaseSinkSetProvideClock ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> Bool
+    {- ^ /@provide@/: new state -}
+    -> m ()
+audioBaseSinkSetProvideClock sink provide = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    let provide' = (fromIntegral . fromEnum) provide
+    gst_audio_base_sink_set_provide_clock sink' provide'
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetProvideClockMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetProvideClock
+
+#endif
+
+-- method AudioBaseSink::set_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "sink", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioBaseSink", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "method", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkSlaveMethod"}), 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_sink_set_slave_method" gst_audio_base_sink_set_slave_method :: 
+    Ptr AudioBaseSink ->                    -- sink : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSink"})
+    CUInt ->                                -- method : TInterface (Name {namespace = "GstAudio", name = "AudioBaseSinkSlaveMethod"})
+    IO ()
+
+{- |
+Controls how clock slaving will be performed in /@sink@/.
+-}
+audioBaseSinkSetSlaveMethod ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioBaseSink a) =>
+    a
+    {- ^ /@sink@/: a 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' -}
+    -> GstAudio.Enums.AudioBaseSinkSlaveMethod
+    {- ^ /@method@/: the new slave method -}
+    -> m ()
+audioBaseSinkSetSlaveMethod sink method = liftIO $ do
+    sink' <- unsafeManagedPtrCastPtr sink
+    let method' = (fromIntegral . fromEnum) method
+    gst_audio_base_sink_set_slave_method sink' method'
+    touchManagedPtr sink
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetSlaveMethodMethodInfo
+instance (signature ~ (GstAudio.Enums.AudioBaseSinkSlaveMethod -> m ()), MonadIO m, IsAudioBaseSink a) => O.MethodInfo AudioBaseSinkSetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetSlaveMethod
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioBaseSink.hs-boot b/GI/GstAudio/Objects/AudioBaseSink.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioBaseSink.hs-boot
@@ -0,0 +1,92 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioBaseSink 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
+
+newtype AudioBaseSink = AudioBaseSink (ManagedPtr AudioBaseSink)
+instance GObject AudioBaseSink where
+class (GObject o, O.IsDescendantOf AudioBaseSink o) => IsAudioBaseSink o
+instance (GObject o, O.IsDescendantOf AudioBaseSink o) => IsAudioBaseSink o
+instance O.HasParentTypes AudioBaseSink
+#if ENABLE_OVERLOADING
+data AudioBaseSinkAlignmentThresholdPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkBufferTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkCanActivatePullPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkDiscontWaitPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkDriftTolerancePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkLatencyTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkProvideClockPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSlaveMethodPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkCreateRingbufferMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetAlignmentThresholdMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetDiscontWaitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetDriftToleranceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetProvideClockMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkGetSlaveMethodMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkReportDeviceFailureMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetAlignmentThresholdMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetDiscontWaitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetDriftToleranceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetProvideClockMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSinkSetSlaveMethodMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioBaseSrc.hs b/GI/GstAudio/Objects/AudioBaseSrc.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioBaseSrc.hs
@@ -0,0 +1,822 @@
+
+
+{- |
+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 "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
+
+
diff --git a/GI/GstAudio/Objects/AudioBaseSrc.hs-boot b/GI/GstAudio/Objects/AudioBaseSrc.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioBaseSrc.hs-boot
@@ -0,0 +1,62 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioBaseSrc 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
+
+newtype AudioBaseSrc = AudioBaseSrc (ManagedPtr AudioBaseSrc)
+instance GObject AudioBaseSrc where
+class (GObject o, O.IsDescendantOf AudioBaseSrc o) => IsAudioBaseSrc o
+instance (GObject o, O.IsDescendantOf AudioBaseSrc o) => IsAudioBaseSrc o
+instance O.HasParentTypes AudioBaseSrc
+#if ENABLE_OVERLOADING
+data AudioBaseSrcActualBufferTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcActualLatencyTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcBufferTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcLatencyTimePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcProvideClockPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcSlaveMethodPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcCreateRingbufferMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcGetProvideClockMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcGetSlaveMethodMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcSetProvideClockMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBaseSrcSetSlaveMethodMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioCdSrc.hs b/GI/GstAudio/Objects/AudioCdSrc.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioCdSrc.hs
@@ -0,0 +1,544 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Provides a base class for CD digital audio (CDDA) sources, which handles
+things like seeking, querying, discid calculation, tags, and buffer
+timestamping.
+
+== Using GstAudioCdSrc-based elements in applications
+
+GstAudioCdSrc registers two 'GI.Gst.Enums.Format'\<!-- -->s of its own, namely
+the \"track\" format and the \"sector\" format. Applications will usually
+only find the \"track\" format interesting. You can retrieve that 'GI.Gst.Enums.Format'
+for use in seek events or queries with gst_format_get_by_nick(\"track\").
+
+In order to query the number of tracks, for example, an application would
+set the CDDA source element to READY or PAUSED state and then query the
+the number of tracks via 'GI.Gst.Objects.Element.elementQueryDuration' using the track
+format acquired above. Applications can query the currently playing track
+in the same way.
+
+Alternatively, applications may retrieve the currently playing track and
+the total number of tracks from the taglist that will posted on the bus
+whenever the CD is opened or the currently playing track changes. The
+taglist will contain GST_TAG_TRACK_NUMBER and GST_TAG_TRACK_COUNT tags.
+
+Applications playing back CD audio using playbin and cdda:\/\/n URIs should
+issue a seek command in track format to change between tracks, rather than
+setting a new cdda:\/\/n+1 URI on playbin (as setting a new URI on playbin
+involves closing and re-opening the CD device, which is much much slower).
+
+== Tags and meta-information
+
+CDDA sources will automatically emit a number of tags, details about which
+can be found in the libgsttag documentation. Those tags are:
+'GI.GstTag.Constants.TAG_CDDA_CDDB_DISCID', 'GI.GstTag.Constants.TAG_CDDA_CDDB_DISCID_FULL',
+'GI.GstTag.Constants.TAG_CDDA_MUSICBRAINZ_DISCID', 'GI.GstTag.Constants.TAG_CDDA_MUSICBRAINZ_DISCID_FULL',
+among others.
+
+== Tracks and Table of Contents (TOC)
+
+Applications will be informed of the available tracks via a TOC message
+on the pipeline\'s 'GI.Gst.Objects.Bus.Bus'. The 'GI.Gst.Structs.Toc.Toc' will contain a 'GI.Gst.Structs.TocEntry.TocEntry' for
+each track, with information about each track. The duration for each
+track can be retrieved via the 'GI.Gst.Constants.TAG_DURATION' tag from each entry\'s
+tag list, or calculated via 'GI.Gst.Structs.TocEntry.tocEntryGetStartStopTimes'.
+The track entries in the TOC will be sorted by track number.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioCdSrc
+    ( 
+
+-- * Exported types
+    AudioCdSrc(..)                          ,
+    IsAudioCdSrc                            ,
+    toAudioCdSrc                            ,
+    noAudioCdSrc                            ,
+
+
+ -- * Methods
+-- ** addTrack #method:addTrack#
+
+#if ENABLE_OVERLOADING
+    AudioCdSrcAddTrackMethodInfo            ,
+#endif
+    audioCdSrcAddTrack                      ,
+
+
+
+
+ -- * Properties
+-- ** device #attr:device#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioCdSrcDevicePropertyInfo            ,
+#endif
+#if ENABLE_OVERLOADING
+    audioCdSrcDevice                        ,
+#endif
+    clearAudioCdSrcDevice                   ,
+    constructAudioCdSrcDevice               ,
+    getAudioCdSrcDevice                     ,
+    setAudioCdSrcDevice                     ,
+
+
+-- ** mode #attr:mode#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioCdSrcModePropertyInfo              ,
+#endif
+#if ENABLE_OVERLOADING
+    audioCdSrcMode                          ,
+#endif
+    constructAudioCdSrcMode                 ,
+    getAudioCdSrcMode                       ,
+    setAudioCdSrcMode                       ,
+
+
+-- ** track #attr:track#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioCdSrcTrackPropertyInfo             ,
+#endif
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack                         ,
+#endif
+    constructAudioCdSrcTrack                ,
+    getAudioCdSrcTrack                      ,
+    setAudioCdSrcTrack                      ,
+
+
+
+
+    ) 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.Interfaces.URIHandler as Gst.URIHandler
+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.Structs.AudioCdSrcTrack as GstAudio.AudioCdSrcTrack
+import qualified GI.GstBase.Objects.BaseSrc as GstBase.BaseSrc
+import qualified GI.GstBase.Objects.PushSrc as GstBase.PushSrc
+
+-- | Memory-managed wrapper type.
+newtype AudioCdSrc = AudioCdSrc (ManagedPtr AudioCdSrc)
+foreign import ccall "gst_audio_cd_src_get_type"
+    c_gst_audio_cd_src_get_type :: IO GType
+
+instance GObject AudioCdSrc where
+    gobjectType = c_gst_audio_cd_src_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioCdSrc`, for instance with `toAudioCdSrc`.
+class (GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o
+instance (GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o
+
+instance O.HasParentTypes AudioCdSrc
+type instance O.ParentTypes AudioCdSrc = '[GstBase.PushSrc.PushSrc, GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object, Gst.URIHandler.URIHandler]
+
+-- | Cast to `AudioCdSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioCdSrc :: (MonadIO m, IsAudioCdSrc o) => o -> m AudioCdSrc
+toAudioCdSrc = liftIO . unsafeCastTo AudioCdSrc
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioCdSrc`.
+noAudioCdSrc :: Maybe AudioCdSrc
+noAudioCdSrc = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioCdSrcMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioCdSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioCdSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioCdSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioCdSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioCdSrcMethod "addTrack" o = AudioCdSrcAddTrackMethodInfo
+    ResolveAudioCdSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioCdSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioCdSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioCdSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioCdSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioCdSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioCdSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioCdSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioCdSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioCdSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioCdSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioCdSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioCdSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioCdSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioCdSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioCdSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioCdSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioCdSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo
+    ResolveAudioCdSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioCdSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo
+    ResolveAudioCdSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioCdSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioCdSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioCdSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioCdSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioCdSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioCdSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioCdSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioCdSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioCdSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioCdSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo
+    ResolveAudioCdSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioCdSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioCdSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioCdSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioCdSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioCdSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioCdSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioCdSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioCdSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo
+    ResolveAudioCdSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioCdSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioCdSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioCdSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioCdSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioCdSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioCdSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioCdSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioCdSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioCdSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo
+    ResolveAudioCdSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo
+    ResolveAudioCdSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioCdSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioCdSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo
+    ResolveAudioCdSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioCdSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioCdSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioCdSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioCdSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioCdSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioCdSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioCdSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo
+    ResolveAudioCdSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioCdSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo
+    ResolveAudioCdSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioCdSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo
+    ResolveAudioCdSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo
+    ResolveAudioCdSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioCdSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioCdSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioCdSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioCdSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioCdSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioCdSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioCdSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioCdSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioCdSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo
+    ResolveAudioCdSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioCdSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioCdSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioCdSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioCdSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioCdSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioCdSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioCdSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioCdSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioCdSrcMethod "getProtocols" o = Gst.URIHandler.URIHandlerGetProtocolsMethodInfo
+    ResolveAudioCdSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioCdSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioCdSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioCdSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioCdSrcMethod "getUri" o = Gst.URIHandler.URIHandlerGetUriMethodInfo
+    ResolveAudioCdSrcMethod "getUriType" o = Gst.URIHandler.URIHandlerGetUriTypeMethodInfo
+    ResolveAudioCdSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioCdSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo
+    ResolveAudioCdSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo
+    ResolveAudioCdSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioCdSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo
+    ResolveAudioCdSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioCdSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo
+    ResolveAudioCdSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioCdSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioCdSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioCdSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioCdSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioCdSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioCdSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo
+    ResolveAudioCdSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo
+    ResolveAudioCdSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo
+    ResolveAudioCdSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo
+    ResolveAudioCdSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioCdSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioCdSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioCdSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioCdSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioCdSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioCdSrcMethod "setUri" o = Gst.URIHandler.URIHandlerSetUriMethodInfo
+    ResolveAudioCdSrcMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioCdSrcMethod t AudioCdSrc, O.MethodInfo info AudioCdSrc p) => OL.IsLabel t (AudioCdSrc -> 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 "device"
+   -- Type: TBasicType TUTF8
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@device@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrc #device
+@
+-}
+getAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> m (Maybe T.Text)
+getAudioCdSrcDevice obj = liftIO $ B.Properties.getObjectPropertyString obj "device"
+
+{- |
+Set the value of the “@device@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrc [ #device 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> T.Text -> m ()
+setAudioCdSrcDevice obj val = liftIO $ B.Properties.setObjectPropertyString obj "device" (Just val)
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@device@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioCdSrcDevice :: (IsAudioCdSrc o) => T.Text -> IO (GValueConstruct o)
+constructAudioCdSrcDevice val = B.Properties.constructObjectPropertyString "device" (Just val)
+
+{- |
+Set the value of the “@device@” property to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #device
+@
+-}
+clearAudioCdSrcDevice :: (MonadIO m, IsAudioCdSrc o) => o -> m ()
+clearAudioCdSrcDevice obj = liftIO $ B.Properties.setObjectPropertyString obj "device" (Nothing :: Maybe T.Text)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcDevicePropertyInfo
+instance AttrInfo AudioCdSrcDevicePropertyInfo where
+    type AttrAllowedOps AudioCdSrcDevicePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioCdSrcDevicePropertyInfo = (~) T.Text
+    type AttrBaseTypeConstraint AudioCdSrcDevicePropertyInfo = IsAudioCdSrc
+    type AttrGetType AudioCdSrcDevicePropertyInfo = (Maybe T.Text)
+    type AttrLabel AudioCdSrcDevicePropertyInfo = "device"
+    type AttrOrigin AudioCdSrcDevicePropertyInfo = AudioCdSrc
+    attrGet _ = getAudioCdSrcDevice
+    attrSet _ = setAudioCdSrcDevice
+    attrConstruct _ = constructAudioCdSrcDevice
+    attrClear _ = clearAudioCdSrcDevice
+#endif
+
+-- VVV Prop "mode"
+   -- Type: TInterface (Name {namespace = "GstAudio", name = "AudioCdSrcMode"})
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@mode@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrc #mode
+@
+-}
+getAudioCdSrcMode :: (MonadIO m, IsAudioCdSrc o) => o -> m GstAudio.Enums.AudioCdSrcMode
+getAudioCdSrcMode obj = liftIO $ B.Properties.getObjectPropertyEnum obj "mode"
+
+{- |
+Set the value of the “@mode@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrc [ #mode 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcMode :: (MonadIO m, IsAudioCdSrc o) => o -> GstAudio.Enums.AudioCdSrcMode -> m ()
+setAudioCdSrcMode obj val = liftIO $ B.Properties.setObjectPropertyEnum obj "mode" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@mode@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioCdSrcMode :: (IsAudioCdSrc o) => GstAudio.Enums.AudioCdSrcMode -> IO (GValueConstruct o)
+constructAudioCdSrcMode val = B.Properties.constructObjectPropertyEnum "mode" val
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcModePropertyInfo
+instance AttrInfo AudioCdSrcModePropertyInfo where
+    type AttrAllowedOps AudioCdSrcModePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcModePropertyInfo = (~) GstAudio.Enums.AudioCdSrcMode
+    type AttrBaseTypeConstraint AudioCdSrcModePropertyInfo = IsAudioCdSrc
+    type AttrGetType AudioCdSrcModePropertyInfo = GstAudio.Enums.AudioCdSrcMode
+    type AttrLabel AudioCdSrcModePropertyInfo = "mode"
+    type AttrOrigin AudioCdSrcModePropertyInfo = AudioCdSrc
+    attrGet _ = getAudioCdSrcMode
+    attrSet _ = setAudioCdSrcMode
+    attrConstruct _ = constructAudioCdSrcMode
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "track"
+   -- Type: TBasicType TUInt
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@track@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrc #track
+@
+-}
+getAudioCdSrcTrack :: (MonadIO m, IsAudioCdSrc o) => o -> m Word32
+getAudioCdSrcTrack obj = liftIO $ B.Properties.getObjectPropertyUInt32 obj "track"
+
+{- |
+Set the value of the “@track@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrc [ #track 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrack :: (MonadIO m, IsAudioCdSrc o) => o -> Word32 -> m ()
+setAudioCdSrcTrack obj val = liftIO $ B.Properties.setObjectPropertyUInt32 obj "track" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@track@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioCdSrcTrack :: (IsAudioCdSrc o) => Word32 -> IO (GValueConstruct o)
+constructAudioCdSrcTrack val = B.Properties.constructObjectPropertyUInt32 "track" val
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackPropertyInfo
+instance AttrInfo AudioCdSrcTrackPropertyInfo where
+    type AttrAllowedOps AudioCdSrcTrackPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackPropertyInfo = (~) Word32
+    type AttrBaseTypeConstraint AudioCdSrcTrackPropertyInfo = IsAudioCdSrc
+    type AttrGetType AudioCdSrcTrackPropertyInfo = Word32
+    type AttrLabel AudioCdSrcTrackPropertyInfo = "track"
+    type AttrOrigin AudioCdSrcTrackPropertyInfo = AudioCdSrc
+    attrGet _ = getAudioCdSrcTrack
+    attrSet _ = setAudioCdSrcTrack
+    attrConstruct _ = constructAudioCdSrcTrack
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioCdSrc
+type instance O.AttributeList AudioCdSrc = AudioCdSrcAttributeList
+type AudioCdSrcAttributeList = ('[ '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("device", AudioCdSrcDevicePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("mode", AudioCdSrcModePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("track", AudioCdSrcTrackPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioCdSrcDevice :: AttrLabelProxy "device"
+audioCdSrcDevice = AttrLabelProxy
+
+audioCdSrcMode :: AttrLabelProxy "mode"
+audioCdSrcMode = AttrLabelProxy
+
+audioCdSrcTrack :: AttrLabelProxy "track"
+audioCdSrcTrack = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioCdSrc = AudioCdSrcSignalList
+type AudioCdSrcSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioCdSrc::add_track
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "src", argType = TInterface (Name {namespace = "GstAudio", name = "AudioCdSrc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioCdSrc", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "track", argType = TInterface (Name {namespace = "GstAudio", name = "AudioCdSrcTrack"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of #GstAudioCdSrcTrack to add", 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_cd_src_add_track" gst_audio_cd_src_add_track :: 
+    Ptr AudioCdSrc ->                       -- src : TInterface (Name {namespace = "GstAudio", name = "AudioCdSrc"})
+    Ptr GstAudio.AudioCdSrcTrack.AudioCdSrcTrack -> -- track : TInterface (Name {namespace = "GstAudio", name = "AudioCdSrcTrack"})
+    IO CInt
+
+{- |
+CDDA sources use this function from their start vfunc to announce the
+available data and audio tracks to the base source class. The caller
+should allocate /@track@/ on the stack, the base source will do a shallow
+copy of the structure (and take ownership of the taglist if there is one).
+-}
+audioCdSrcAddTrack ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioCdSrc a) =>
+    a
+    {- ^ /@src@/: a 'GI.GstAudio.Objects.AudioCdSrc.AudioCdSrc' -}
+    -> GstAudio.AudioCdSrcTrack.AudioCdSrcTrack
+    {- ^ /@track@/: address of 'GI.GstAudio.Structs.AudioCdSrcTrack.AudioCdSrcTrack' to add -}
+    -> m Bool
+    {- ^ __Returns:__ FALSE on error, otherwise TRUE. -}
+audioCdSrcAddTrack src track = liftIO $ do
+    src' <- unsafeManagedPtrCastPtr src
+    track' <- unsafeManagedPtrGetPtr track
+    result <- gst_audio_cd_src_add_track src' track'
+    let result' = (/= 0) result
+    touchManagedPtr src
+    touchManagedPtr track
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcAddTrackMethodInfo
+instance (signature ~ (GstAudio.AudioCdSrcTrack.AudioCdSrcTrack -> m Bool), MonadIO m, IsAudioCdSrc a) => O.MethodInfo AudioCdSrcAddTrackMethodInfo a signature where
+    overloadedMethod _ = audioCdSrcAddTrack
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioCdSrc.hs-boot b/GI/GstAudio/Objects/AudioCdSrc.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioCdSrc.hs-boot
@@ -0,0 +1,41 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioCdSrc 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
+
+newtype AudioCdSrc = AudioCdSrc (ManagedPtr AudioCdSrc)
+instance GObject AudioCdSrc where
+class (GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o
+instance (GObject o, O.IsDescendantOf AudioCdSrc o) => IsAudioCdSrc o
+instance O.HasParentTypes AudioCdSrc
+#if ENABLE_OVERLOADING
+data AudioCdSrcDevicePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioCdSrcModePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioCdSrcAddTrackMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioClock.hs b/GI/GstAudio/Objects/AudioClock.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioClock.hs
@@ -0,0 +1,408 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+'GI.GstAudio.Objects.AudioClock.AudioClock' makes it easy for elements to implement a 'GI.Gst.Objects.Clock.Clock', they
+simply need to provide a function that returns the current clock time.
+
+This object is internally used to implement the clock in 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink'.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioClock
+    ( 
+
+-- * Exported types
+    AudioClock(..)                          ,
+    IsAudioClock                            ,
+    toAudioClock                            ,
+    noAudioClock                            ,
+
+
+ -- * Methods
+-- ** adjust #method:adjust#
+
+#if ENABLE_OVERLOADING
+    AudioClockAdjustMethodInfo              ,
+#endif
+    audioClockAdjust                        ,
+
+
+-- ** getTime #method:getTime#
+
+#if ENABLE_OVERLOADING
+    AudioClockGetTimeMethodInfo             ,
+#endif
+    audioClockGetTime                       ,
+
+
+-- ** invalidate #method:invalidate#
+
+#if ENABLE_OVERLOADING
+    AudioClockInvalidateMethodInfo          ,
+#endif
+    audioClockInvalidate                    ,
+
+
+-- ** new #method:new#
+
+    audioClockNew                           ,
+
+
+-- ** reset #method:reset#
+
+#if ENABLE_OVERLOADING
+    AudioClockResetMethodInfo               ,
+#endif
+    audioClockReset                         ,
+
+
+
+
+    ) 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.GLib.Callbacks as GLib.Callbacks
+import qualified GI.GObject.Objects.Object as GObject.Object
+import qualified GI.Gst.Objects.Clock as Gst.Clock
+import qualified GI.Gst.Objects.Object as Gst.Object
+import qualified GI.Gst.Objects.SystemClock as Gst.SystemClock
+import qualified GI.GstAudio.Callbacks as GstAudio.Callbacks
+
+-- | Memory-managed wrapper type.
+newtype AudioClock = AudioClock (ManagedPtr AudioClock)
+foreign import ccall "gst_audio_clock_get_type"
+    c_gst_audio_clock_get_type :: IO GType
+
+instance GObject AudioClock where
+    gobjectType = c_gst_audio_clock_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioClock`, for instance with `toAudioClock`.
+class (GObject o, O.IsDescendantOf AudioClock o) => IsAudioClock o
+instance (GObject o, O.IsDescendantOf AudioClock o) => IsAudioClock o
+
+instance O.HasParentTypes AudioClock
+type instance O.ParentTypes AudioClock = '[Gst.SystemClock.SystemClock, Gst.Clock.Clock, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioClock`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioClock :: (MonadIO m, IsAudioClock o) => o -> m AudioClock
+toAudioClock = liftIO . unsafeCastTo AudioClock
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioClock`.
+noAudioClock :: Maybe AudioClock
+noAudioClock = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioClockMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioClockMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioClockMethod "addObservation" o = Gst.Clock.ClockAddObservationMethodInfo
+    ResolveAudioClockMethod "addObservationUnapplied" o = Gst.Clock.ClockAddObservationUnappliedMethodInfo
+    ResolveAudioClockMethod "adjust" o = AudioClockAdjustMethodInfo
+    ResolveAudioClockMethod "adjustUnlocked" o = Gst.Clock.ClockAdjustUnlockedMethodInfo
+    ResolveAudioClockMethod "adjustWithCalibration" o = Gst.Clock.ClockAdjustWithCalibrationMethodInfo
+    ResolveAudioClockMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioClockMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioClockMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioClockMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioClockMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioClockMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioClockMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioClockMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioClockMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioClockMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioClockMethod "invalidate" o = AudioClockInvalidateMethodInfo
+    ResolveAudioClockMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioClockMethod "isSynced" o = Gst.Clock.ClockIsSyncedMethodInfo
+    ResolveAudioClockMethod "newPeriodicId" o = Gst.Clock.ClockNewPeriodicIdMethodInfo
+    ResolveAudioClockMethod "newSingleShotId" o = Gst.Clock.ClockNewSingleShotIdMethodInfo
+    ResolveAudioClockMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioClockMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioClockMethod "periodicIdReinit" o = Gst.Clock.ClockPeriodicIdReinitMethodInfo
+    ResolveAudioClockMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioClockMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioClockMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioClockMethod "reset" o = AudioClockResetMethodInfo
+    ResolveAudioClockMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioClockMethod "singleShotIdReinit" o = Gst.Clock.ClockSingleShotIdReinitMethodInfo
+    ResolveAudioClockMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioClockMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioClockMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioClockMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioClockMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioClockMethod "unadjustUnlocked" o = Gst.Clock.ClockUnadjustUnlockedMethodInfo
+    ResolveAudioClockMethod "unadjustWithCalibration" o = Gst.Clock.ClockUnadjustWithCalibrationMethodInfo
+    ResolveAudioClockMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioClockMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioClockMethod "waitForSync" o = Gst.Clock.ClockWaitForSyncMethodInfo
+    ResolveAudioClockMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioClockMethod "getCalibration" o = Gst.Clock.ClockGetCalibrationMethodInfo
+    ResolveAudioClockMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioClockMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioClockMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioClockMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioClockMethod "getInternalTime" o = Gst.Clock.ClockGetInternalTimeMethodInfo
+    ResolveAudioClockMethod "getMaster" o = Gst.Clock.ClockGetMasterMethodInfo
+    ResolveAudioClockMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioClockMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioClockMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioClockMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioClockMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioClockMethod "getResolution" o = Gst.Clock.ClockGetResolutionMethodInfo
+    ResolveAudioClockMethod "getTime" o = AudioClockGetTimeMethodInfo
+    ResolveAudioClockMethod "getTimeout" o = Gst.Clock.ClockGetTimeoutMethodInfo
+    ResolveAudioClockMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioClockMethod "setCalibration" o = Gst.Clock.ClockSetCalibrationMethodInfo
+    ResolveAudioClockMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioClockMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioClockMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioClockMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioClockMethod "setMaster" o = Gst.Clock.ClockSetMasterMethodInfo
+    ResolveAudioClockMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioClockMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioClockMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioClockMethod "setResolution" o = Gst.Clock.ClockSetResolutionMethodInfo
+    ResolveAudioClockMethod "setSynced" o = Gst.Clock.ClockSetSyncedMethodInfo
+    ResolveAudioClockMethod "setTimeout" o = Gst.Clock.ClockSetTimeoutMethodInfo
+    ResolveAudioClockMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioClockMethod t AudioClock, O.MethodInfo info AudioClock p) => OL.IsLabel t (AudioClock -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioClock
+type instance O.AttributeList AudioClock = AudioClockAttributeList
+type AudioClockAttributeList = ('[ '("clockType", Gst.SystemClock.SystemClockClockTypePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("timeout", Gst.Clock.ClockTimeoutPropertyInfo), '("windowSize", Gst.Clock.ClockWindowSizePropertyInfo), '("windowThreshold", Gst.Clock.ClockWindowThresholdPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioClock = AudioClockSignalList
+type AudioClockSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("synced", Gst.Clock.ClockSyncedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioClock::new
+-- method type : Constructor
+-- Args : [Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the name of the clock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface (Name {namespace = "GstAudio", name = "AudioClockGetTimeFunc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a function", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GDestroyNotify for @user_data", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioClock"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_new" gst_audio_clock_new :: 
+    CString ->                              -- name : TBasicType TUTF8
+    FunPtr GstAudio.Callbacks.C_AudioClockGetTimeFunc -> -- func : TInterface (Name {namespace = "GstAudio", name = "AudioClockGetTimeFunc"})
+    Ptr () ->                               -- user_data : TBasicType TPtr
+    FunPtr GLib.Callbacks.C_DestroyNotify -> -- destroy_notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
+    IO (Ptr AudioClock)
+
+{- |
+Create a new 'GI.GstAudio.Objects.AudioClock.AudioClock' instance. Whenever the clock time should be
+calculated it will call /@func@/ with /@userData@/. When /@func@/ returns
+'GI.Gst.Constants.CLOCK_TIME_NONE', the clock will return the last reported time.
+-}
+audioClockNew ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    T.Text
+    {- ^ /@name@/: the name of the clock -}
+    -> GstAudio.Callbacks.AudioClockGetTimeFunc
+    {- ^ /@func@/: a function -}
+    -> m AudioClock
+    {- ^ __Returns:__ a new 'GI.GstAudio.Objects.AudioClock.AudioClock' casted to a 'GI.Gst.Objects.Clock.Clock'. -}
+audioClockNew name func = liftIO $ do
+    name' <- textToCString name
+    func' <- GstAudio.Callbacks.mk_AudioClockGetTimeFunc (GstAudio.Callbacks.wrap_AudioClockGetTimeFunc Nothing (GstAudio.Callbacks.drop_closures_AudioClockGetTimeFunc func))
+    let userData = castFunPtrToPtr func'
+    let destroyNotify = safeFreeFunPtrPtr
+    result <- gst_audio_clock_new name' func' userData destroyNotify
+    checkUnexpectedReturnNULL "audioClockNew" result
+    result' <- (wrapObject AudioClock) result
+    freeMem name'
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioClock::adjust
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "clock", argType = TInterface (Name {namespace = "GstAudio", name = "AudioClock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioClock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstClockTime", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_adjust" gst_audio_clock_adjust :: 
+    Ptr AudioClock ->                       -- clock : TInterface (Name {namespace = "GstAudio", name = "AudioClock"})
+    Word64 ->                               -- time : TBasicType TUInt64
+    IO Word64
+
+{- |
+Adjust /@time@/ with the internal offset of the audio clock.
+-}
+audioClockAdjust ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioClock a) =>
+    a
+    {- ^ /@clock@/: a 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> Word64
+    {- ^ /@time@/: a @/GstClockTime/@ -}
+    -> m Word64
+    {- ^ __Returns:__ /@time@/ adjusted with the internal offset. -}
+audioClockAdjust clock time = liftIO $ do
+    clock' <- unsafeManagedPtrCastPtr clock
+    result <- gst_audio_clock_adjust clock' time
+    touchManagedPtr clock
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioClockAdjustMethodInfo
+instance (signature ~ (Word64 -> m Word64), MonadIO m, IsAudioClock a) => O.MethodInfo AudioClockAdjustMethodInfo a signature where
+    overloadedMethod _ = audioClockAdjust
+
+#endif
+
+-- method AudioClock::get_time
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "clock", argType = TInterface (Name {namespace = "GstAudio", name = "AudioClock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioClock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_get_time" gst_audio_clock_get_time :: 
+    Ptr AudioClock ->                       -- clock : TInterface (Name {namespace = "GstAudio", name = "AudioClock"})
+    IO Word64
+
+{- |
+Report the time as returned by the 'GI.GstAudio.Callbacks.AudioClockGetTimeFunc' without applying
+any offsets.
+-}
+audioClockGetTime ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioClock a) =>
+    a
+    {- ^ /@clock@/: a 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> m Word64
+    {- ^ __Returns:__ the time as reported by the time function of the audio clock -}
+audioClockGetTime clock = liftIO $ do
+    clock' <- unsafeManagedPtrCastPtr clock
+    result <- gst_audio_clock_get_time clock'
+    touchManagedPtr clock
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioClockGetTimeMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioClock a) => O.MethodInfo AudioClockGetTimeMethodInfo a signature where
+    overloadedMethod _ = audioClockGetTime
+
+#endif
+
+-- method AudioClock::invalidate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "clock", argType = TInterface (Name {namespace = "GstAudio", name = "AudioClock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioClock", 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_clock_invalidate" gst_audio_clock_invalidate :: 
+    Ptr AudioClock ->                       -- clock : TInterface (Name {namespace = "GstAudio", name = "AudioClock"})
+    IO ()
+
+{- |
+Invalidate the clock function. Call this function when the provided
+'GI.GstAudio.Callbacks.AudioClockGetTimeFunc' cannot be called anymore, for example, when the
+user_data becomes invalid.
+
+After calling this function, /@clock@/ will return the last returned time for
+the rest of its lifetime.
+-}
+audioClockInvalidate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioClock a) =>
+    a
+    {- ^ /@clock@/: a 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> m ()
+audioClockInvalidate clock = liftIO $ do
+    clock' <- unsafeManagedPtrCastPtr clock
+    gst_audio_clock_invalidate clock'
+    touchManagedPtr clock
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioClockInvalidateMethodInfo
+instance (signature ~ (m ()), MonadIO m, IsAudioClock a) => O.MethodInfo AudioClockInvalidateMethodInfo a signature where
+    overloadedMethod _ = audioClockInvalidate
+
+#endif
+
+-- method AudioClock::reset
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "clock", argType = TInterface (Name {namespace = "GstAudio", name = "AudioClock"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioClock", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstClockTime", 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_clock_reset" gst_audio_clock_reset :: 
+    Ptr AudioClock ->                       -- clock : TInterface (Name {namespace = "GstAudio", name = "AudioClock"})
+    Word64 ->                               -- time : TBasicType TUInt64
+    IO ()
+
+{- |
+Inform /@clock@/ that future calls to 'GI.GstAudio.Callbacks.AudioClockGetTimeFunc' will return values
+starting from /@time@/. The clock will update an internal offset to make sure that
+future calls to internal_time will return an increasing result as required by
+the 'GI.Gst.Objects.Clock.Clock' object.
+-}
+audioClockReset ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioClock a) =>
+    a
+    {- ^ /@clock@/: a 'GI.GstAudio.Objects.AudioClock.AudioClock' -}
+    -> Word64
+    {- ^ /@time@/: a @/GstClockTime/@ -}
+    -> m ()
+audioClockReset clock time = liftIO $ do
+    clock' <- unsafeManagedPtrCastPtr clock
+    gst_audio_clock_reset clock' time
+    touchManagedPtr clock
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioClockResetMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioClock a) => O.MethodInfo AudioClockResetMethodInfo a signature where
+    overloadedMethod _ = audioClockReset
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioClock.hs-boot b/GI/GstAudio/Objects/AudioClock.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioClock.hs-boot
@@ -0,0 +1,41 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioClock 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
+
+newtype AudioClock = AudioClock (ManagedPtr AudioClock)
+instance GObject AudioClock where
+class (GObject o, O.IsDescendantOf AudioClock o) => IsAudioClock o
+instance (GObject o, O.IsDescendantOf AudioClock o) => IsAudioClock o
+instance O.HasParentTypes AudioClock
+#if ENABLE_OVERLOADING
+data AudioClockAdjustMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioClockGetTimeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioClockInvalidateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioClockResetMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioDecoder.hs b/GI/GstAudio/Objects/AudioDecoder.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioDecoder.hs
@@ -0,0 +1,2098 @@
+
+
+{- |
+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 base class is for audio decoders turning encoded data into
+raw audio samples.
+
+GstAudioDecoder and subclass should cooperate as follows.
+
+== Configuration
+
+  * Initially, GstAudioDecoder calls /@start@/ when the decoder element
+    is activated, which allows subclass to perform any global setup.
+    Base class (context) parameters can already be set according to subclass
+    capabilities (or possibly upon receive more information in subsequent
+    /@setFormat@/).
+  * GstAudioDecoder calls /@setFormat@/ to inform subclass of the format
+    of input audio data that it is about to receive.
+    While unlikely, it might be called more than once, if changing input
+    parameters require reconfiguration.
+  * GstAudioDecoder calls /@stop@/ at end of all processing.
+
+As of configuration stage, and throughout processing, GstAudioDecoder
+provides various (context) parameters, e.g. describing the format of
+output audio data (valid when output caps have been set) or current parsing state.
+Conversely, subclass can and should configure context to inform
+base class of its expectation w.r.t. buffer handling.
+
+== Data processing
+    * Base class gathers input data, and optionally allows subclass
+      to parse this into subsequently manageable (as defined by subclass)
+      chunks.  Such chunks are subsequently referred to as \'frames\',
+      though they may or may not correspond to 1 (or more) audio format frame.
+    * Input frame is provided to subclass\' /@handleFrame@/.
+    * If codec processing results in decoded data, subclass should call
+      /@gstAudioDecoderFinishFrame@/ to have decoded data pushed
+      downstream.
+    * Just prior to actually pushing a buffer downstream,
+      it is passed to /@prePush@/.  Subclass should either use this callback
+      to arrange for additional downstream pushing or otherwise ensure such
+      custom pushing occurs after at least a method call has finished since
+      setting src pad caps.
+    * During the parsing process GstAudioDecoderClass will handle both
+      srcpad and sinkpad events. Sink events will be passed to subclass
+      if /@event@/ callback has been provided.
+
+== Shutdown phase
+
+  * GstAudioDecoder class calls /@stop@/ to inform the subclass that data
+    parsing will be stopped.
+
+Subclass is responsible for providing pad template caps for
+source and sink pads. The pads need to be named \"sink\" and \"src\". It also
+needs to set the fixed caps on srcpad, when the format is ensured.  This
+is typically when base class calls subclass\' /@setFormat@/ function, though
+it might be delayed until calling /@gstAudioDecoderFinishFrame@/.
+
+In summary, above process should have subclass concentrating on
+codec data processing while leaving other matters to base class,
+such as most notably timestamp handling.  While it may exert more control
+in this area (see e.g. /@prePush@/), it is very much not recommended.
+
+In particular, base class will try to arrange for perfect output timestamps
+as much as possible while tracking upstream timestamps.
+To this end, if deviation between the next ideal expected perfect timestamp
+and upstream exceeds 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder':@/tolerance/@, then resync to upstream
+occurs (which would happen always if the tolerance mechanism is disabled).
+
+In non-live pipelines, baseclass can also (configurably) arrange for
+output buffer aggregation which may help to redue large(r) numbers of
+small(er) buffers being pushed and processed downstream. Note that this
+feature is only available if the buffer layout is interleaved. For planar
+buffers, the decoder implementation is fully responsible for the output
+buffer size.
+
+On the other hand, it should be noted that baseclass only provides limited
+seeking support (upon explicit subclass request), as full-fledged support
+should rather be left to upstream demuxer, parser or alike.  This simple
+approach caters for seeking and duration reporting using estimated input
+bitrates.
+
+Things that subclass need to take care of:
+
+  * Provide pad templates
+  * Set source pad caps when appropriate
+  * Set user-configurable properties to sane defaults for format and
+     implementing codec at hand, and convey some subclass capabilities and
+     expectations in context.
+
+  * Accept data in /@handleFrame@/ and provide encoded results to
+     /@gstAudioDecoderFinishFrame@/.  If it is prepared to perform
+     PLC, it should also accept NULL data in /@handleFrame@/ and provide for
+     data for indicated duration.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioDecoder
+    ( 
+
+-- * Exported types
+    AudioDecoder(..)                        ,
+    IsAudioDecoder                          ,
+    toAudioDecoder                          ,
+    noAudioDecoder                          ,
+
+
+ -- * Methods
+-- ** allocateOutputBuffer #method:allocateOutputBuffer#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderAllocateOutputBufferMethodInfo,
+#endif
+    audioDecoderAllocateOutputBuffer        ,
+
+
+-- ** finishFrame #method:finishFrame#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderFinishFrameMethodInfo       ,
+#endif
+    audioDecoderFinishFrame                 ,
+
+
+-- ** finishSubframe #method:finishSubframe#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderFinishSubframeMethodInfo    ,
+#endif
+    audioDecoderFinishSubframe              ,
+
+
+-- ** getAllocator #method:getAllocator#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetAllocatorMethodInfo      ,
+#endif
+    audioDecoderGetAllocator                ,
+
+
+-- ** getAudioInfo #method:getAudioInfo#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetAudioInfoMethodInfo      ,
+#endif
+    audioDecoderGetAudioInfo                ,
+
+
+-- ** getDelay #method:getDelay#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetDelayMethodInfo          ,
+#endif
+    audioDecoderGetDelay                    ,
+
+
+-- ** getDrainable #method:getDrainable#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetDrainableMethodInfo      ,
+#endif
+    audioDecoderGetDrainable                ,
+
+
+-- ** getEstimateRate #method:getEstimateRate#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetEstimateRateMethodInfo   ,
+#endif
+    audioDecoderGetEstimateRate             ,
+
+
+-- ** getLatency #method:getLatency#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetLatencyMethodInfo        ,
+#endif
+    audioDecoderGetLatency                  ,
+
+
+-- ** getMaxErrors #method:getMaxErrors#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetMaxErrorsMethodInfo      ,
+#endif
+    audioDecoderGetMaxErrors                ,
+
+
+-- ** getMinLatency #method:getMinLatency#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetMinLatencyMethodInfo     ,
+#endif
+    audioDecoderGetMinLatency               ,
+
+
+-- ** getNeedsFormat #method:getNeedsFormat#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetNeedsFormatMethodInfo    ,
+#endif
+    audioDecoderGetNeedsFormat              ,
+
+
+-- ** getParseState #method:getParseState#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetParseStateMethodInfo     ,
+#endif
+    audioDecoderGetParseState               ,
+
+
+-- ** getPlc #method:getPlc#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetPlcMethodInfo            ,
+#endif
+    audioDecoderGetPlc                      ,
+
+
+-- ** getPlcAware #method:getPlcAware#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetPlcAwareMethodInfo       ,
+#endif
+    audioDecoderGetPlcAware                 ,
+
+
+-- ** getTolerance #method:getTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderGetToleranceMethodInfo      ,
+#endif
+    audioDecoderGetTolerance                ,
+
+
+-- ** mergeTags #method:mergeTags#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderMergeTagsMethodInfo         ,
+#endif
+    audioDecoderMergeTags                   ,
+
+
+-- ** negotiate #method:negotiate#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderNegotiateMethodInfo         ,
+#endif
+    audioDecoderNegotiate                   ,
+
+
+-- ** proxyGetcaps #method:proxyGetcaps#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderProxyGetcapsMethodInfo      ,
+#endif
+    audioDecoderProxyGetcaps                ,
+
+
+-- ** setAllocationCaps #method:setAllocationCaps#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetAllocationCapsMethodInfo ,
+#endif
+    audioDecoderSetAllocationCaps           ,
+
+
+-- ** setDrainable #method:setDrainable#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetDrainableMethodInfo      ,
+#endif
+    audioDecoderSetDrainable                ,
+
+
+-- ** setEstimateRate #method:setEstimateRate#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetEstimateRateMethodInfo   ,
+#endif
+    audioDecoderSetEstimateRate             ,
+
+
+-- ** setLatency #method:setLatency#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetLatencyMethodInfo        ,
+#endif
+    audioDecoderSetLatency                  ,
+
+
+-- ** setMaxErrors #method:setMaxErrors#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetMaxErrorsMethodInfo      ,
+#endif
+    audioDecoderSetMaxErrors                ,
+
+
+-- ** setMinLatency #method:setMinLatency#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetMinLatencyMethodInfo     ,
+#endif
+    audioDecoderSetMinLatency               ,
+
+
+-- ** setNeedsFormat #method:setNeedsFormat#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetNeedsFormatMethodInfo    ,
+#endif
+    audioDecoderSetNeedsFormat              ,
+
+
+-- ** setOutputCaps #method:setOutputCaps#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetOutputCapsMethodInfo     ,
+#endif
+    audioDecoderSetOutputCaps               ,
+
+
+-- ** setOutputFormat #method:setOutputFormat#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetOutputFormatMethodInfo   ,
+#endif
+    audioDecoderSetOutputFormat             ,
+
+
+-- ** setPlc #method:setPlc#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetPlcMethodInfo            ,
+#endif
+    audioDecoderSetPlc                      ,
+
+
+-- ** setPlcAware #method:setPlcAware#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetPlcAwareMethodInfo       ,
+#endif
+    audioDecoderSetPlcAware                 ,
+
+
+-- ** setTolerance #method:setTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetToleranceMethodInfo      ,
+#endif
+    audioDecoderSetTolerance                ,
+
+
+-- ** setUseDefaultPadAcceptcaps #method:setUseDefaultPadAcceptcaps#
+
+#if ENABLE_OVERLOADING
+    AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo,
+#endif
+    audioDecoderSetUseDefaultPadAcceptcaps  ,
+
+
+
+
+ -- * Properties
+-- ** minLatency #attr:minLatency#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioDecoderMinLatencyPropertyInfo      ,
+#endif
+#if ENABLE_OVERLOADING
+    audioDecoderMinLatency                  ,
+#endif
+    constructAudioDecoderMinLatency         ,
+    getAudioDecoderMinLatency               ,
+    setAudioDecoderMinLatency               ,
+
+
+-- ** plc #attr:plc#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioDecoderPlcPropertyInfo             ,
+#endif
+#if ENABLE_OVERLOADING
+    audioDecoderPlc                         ,
+#endif
+    constructAudioDecoderPlc                ,
+    getAudioDecoderPlc                      ,
+    setAudioDecoderPlc                      ,
+
+
+-- ** tolerance #attr:tolerance#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioDecoderTolerancePropertyInfo       ,
+#endif
+#if ENABLE_OVERLOADING
+    audioDecoderTolerance                   ,
+#endif
+    constructAudioDecoderTolerance          ,
+    getAudioDecoderTolerance                ,
+    setAudioDecoderTolerance                ,
+
+
+
+
+    ) 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.Enums as Gst.Enums
+import qualified GI.Gst.Objects.Allocator as Gst.Allocator
+import qualified GI.Gst.Objects.Element as Gst.Element
+import qualified GI.Gst.Objects.Object as Gst.Object
+import qualified GI.Gst.Structs.AllocationParams as Gst.AllocationParams
+import qualified GI.Gst.Structs.Buffer as Gst.Buffer
+import qualified GI.Gst.Structs.Caps as Gst.Caps
+import qualified GI.Gst.Structs.TagList as Gst.TagList
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioDecoder = AudioDecoder (ManagedPtr AudioDecoder)
+foreign import ccall "gst_audio_decoder_get_type"
+    c_gst_audio_decoder_get_type :: IO GType
+
+instance GObject AudioDecoder where
+    gobjectType = c_gst_audio_decoder_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioDecoder`, for instance with `toAudioDecoder`.
+class (GObject o, O.IsDescendantOf AudioDecoder o) => IsAudioDecoder o
+instance (GObject o, O.IsDescendantOf AudioDecoder o) => IsAudioDecoder o
+
+instance O.HasParentTypes AudioDecoder
+type instance O.ParentTypes AudioDecoder = '[Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioDecoder`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioDecoder :: (MonadIO m, IsAudioDecoder o) => o -> m AudioDecoder
+toAudioDecoder = liftIO . unsafeCastTo AudioDecoder
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioDecoder`.
+noAudioDecoder :: Maybe AudioDecoder
+noAudioDecoder = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioDecoderMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioDecoderMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioDecoderMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioDecoderMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioDecoderMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioDecoderMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioDecoderMethod "allocateOutputBuffer" o = AudioDecoderAllocateOutputBufferMethodInfo
+    ResolveAudioDecoderMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioDecoderMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioDecoderMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioDecoderMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioDecoderMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioDecoderMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioDecoderMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioDecoderMethod "finishFrame" o = AudioDecoderFinishFrameMethodInfo
+    ResolveAudioDecoderMethod "finishSubframe" o = AudioDecoderFinishSubframeMethodInfo
+    ResolveAudioDecoderMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioDecoderMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioDecoderMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioDecoderMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioDecoderMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioDecoderMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioDecoderMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioDecoderMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioDecoderMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioDecoderMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioDecoderMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioDecoderMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioDecoderMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioDecoderMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioDecoderMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioDecoderMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioDecoderMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioDecoderMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioDecoderMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioDecoderMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioDecoderMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioDecoderMethod "mergeTags" o = AudioDecoderMergeTagsMethodInfo
+    ResolveAudioDecoderMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioDecoderMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioDecoderMethod "negotiate" o = AudioDecoderNegotiateMethodInfo
+    ResolveAudioDecoderMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioDecoderMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioDecoderMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioDecoderMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioDecoderMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioDecoderMethod "proxyGetcaps" o = AudioDecoderProxyGetcapsMethodInfo
+    ResolveAudioDecoderMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioDecoderMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioDecoderMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioDecoderMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioDecoderMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioDecoderMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioDecoderMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioDecoderMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioDecoderMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioDecoderMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioDecoderMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioDecoderMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioDecoderMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioDecoderMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioDecoderMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioDecoderMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioDecoderMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioDecoderMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioDecoderMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioDecoderMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioDecoderMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioDecoderMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioDecoderMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioDecoderMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioDecoderMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioDecoderMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioDecoderMethod "getAllocator" o = AudioDecoderGetAllocatorMethodInfo
+    ResolveAudioDecoderMethod "getAudioInfo" o = AudioDecoderGetAudioInfoMethodInfo
+    ResolveAudioDecoderMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioDecoderMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioDecoderMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioDecoderMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioDecoderMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioDecoderMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioDecoderMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioDecoderMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioDecoderMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioDecoderMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioDecoderMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioDecoderMethod "getDelay" o = AudioDecoderGetDelayMethodInfo
+    ResolveAudioDecoderMethod "getDrainable" o = AudioDecoderGetDrainableMethodInfo
+    ResolveAudioDecoderMethod "getEstimateRate" o = AudioDecoderGetEstimateRateMethodInfo
+    ResolveAudioDecoderMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioDecoderMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioDecoderMethod "getLatency" o = AudioDecoderGetLatencyMethodInfo
+    ResolveAudioDecoderMethod "getMaxErrors" o = AudioDecoderGetMaxErrorsMethodInfo
+    ResolveAudioDecoderMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioDecoderMethod "getMinLatency" o = AudioDecoderGetMinLatencyMethodInfo
+    ResolveAudioDecoderMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioDecoderMethod "getNeedsFormat" o = AudioDecoderGetNeedsFormatMethodInfo
+    ResolveAudioDecoderMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioDecoderMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioDecoderMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioDecoderMethod "getParseState" o = AudioDecoderGetParseStateMethodInfo
+    ResolveAudioDecoderMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioDecoderMethod "getPlc" o = AudioDecoderGetPlcMethodInfo
+    ResolveAudioDecoderMethod "getPlcAware" o = AudioDecoderGetPlcAwareMethodInfo
+    ResolveAudioDecoderMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioDecoderMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioDecoderMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioDecoderMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioDecoderMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioDecoderMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioDecoderMethod "getTolerance" o = AudioDecoderGetToleranceMethodInfo
+    ResolveAudioDecoderMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioDecoderMethod "setAllocationCaps" o = AudioDecoderSetAllocationCapsMethodInfo
+    ResolveAudioDecoderMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioDecoderMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioDecoderMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioDecoderMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioDecoderMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioDecoderMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioDecoderMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioDecoderMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioDecoderMethod "setDrainable" o = AudioDecoderSetDrainableMethodInfo
+    ResolveAudioDecoderMethod "setEstimateRate" o = AudioDecoderSetEstimateRateMethodInfo
+    ResolveAudioDecoderMethod "setLatency" o = AudioDecoderSetLatencyMethodInfo
+    ResolveAudioDecoderMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioDecoderMethod "setMaxErrors" o = AudioDecoderSetMaxErrorsMethodInfo
+    ResolveAudioDecoderMethod "setMinLatency" o = AudioDecoderSetMinLatencyMethodInfo
+    ResolveAudioDecoderMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioDecoderMethod "setNeedsFormat" o = AudioDecoderSetNeedsFormatMethodInfo
+    ResolveAudioDecoderMethod "setOutputCaps" o = AudioDecoderSetOutputCapsMethodInfo
+    ResolveAudioDecoderMethod "setOutputFormat" o = AudioDecoderSetOutputFormatMethodInfo
+    ResolveAudioDecoderMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioDecoderMethod "setPlc" o = AudioDecoderSetPlcMethodInfo
+    ResolveAudioDecoderMethod "setPlcAware" o = AudioDecoderSetPlcAwareMethodInfo
+    ResolveAudioDecoderMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioDecoderMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioDecoderMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioDecoderMethod "setTolerance" o = AudioDecoderSetToleranceMethodInfo
+    ResolveAudioDecoderMethod "setUseDefaultPadAcceptcaps" o = AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
+    ResolveAudioDecoderMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioDecoderMethod t AudioDecoder, O.MethodInfo info AudioDecoder p) => OL.IsLabel t (AudioDecoder -> 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 "min-latency"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@min-latency@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDecoder #minLatency
+@
+-}
+getAudioDecoderMinLatency :: (MonadIO m, IsAudioDecoder o) => o -> m Int64
+getAudioDecoderMinLatency obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "min-latency"
+
+{- |
+Set the value of the “@min-latency@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDecoder [ #minLatency 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDecoderMinLatency :: (MonadIO m, IsAudioDecoder o) => o -> Int64 -> m ()
+setAudioDecoderMinLatency obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "min-latency" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@min-latency@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioDecoderMinLatency :: (IsAudioDecoder o) => Int64 -> IO (GValueConstruct o)
+constructAudioDecoderMinLatency val = B.Properties.constructObjectPropertyInt64 "min-latency" val
+
+#if ENABLE_OVERLOADING
+data AudioDecoderMinLatencyPropertyInfo
+instance AttrInfo AudioDecoderMinLatencyPropertyInfo where
+    type AttrAllowedOps AudioDecoderMinLatencyPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderMinLatencyPropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioDecoderMinLatencyPropertyInfo = IsAudioDecoder
+    type AttrGetType AudioDecoderMinLatencyPropertyInfo = Int64
+    type AttrLabel AudioDecoderMinLatencyPropertyInfo = "min-latency"
+    type AttrOrigin AudioDecoderMinLatencyPropertyInfo = AudioDecoder
+    attrGet _ = getAudioDecoderMinLatency
+    attrSet _ = setAudioDecoderMinLatency
+    attrConstruct _ = constructAudioDecoderMinLatency
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "plc"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@plc@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDecoder #plc
+@
+-}
+getAudioDecoderPlc :: (MonadIO m, IsAudioDecoder o) => o -> m Bool
+getAudioDecoderPlc obj = liftIO $ B.Properties.getObjectPropertyBool obj "plc"
+
+{- |
+Set the value of the “@plc@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDecoder [ #plc 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDecoderPlc :: (MonadIO m, IsAudioDecoder o) => o -> Bool -> m ()
+setAudioDecoderPlc obj val = liftIO $ B.Properties.setObjectPropertyBool obj "plc" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@plc@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioDecoderPlc :: (IsAudioDecoder o) => Bool -> IO (GValueConstruct o)
+constructAudioDecoderPlc val = B.Properties.constructObjectPropertyBool "plc" val
+
+#if ENABLE_OVERLOADING
+data AudioDecoderPlcPropertyInfo
+instance AttrInfo AudioDecoderPlcPropertyInfo where
+    type AttrAllowedOps AudioDecoderPlcPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderPlcPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioDecoderPlcPropertyInfo = IsAudioDecoder
+    type AttrGetType AudioDecoderPlcPropertyInfo = Bool
+    type AttrLabel AudioDecoderPlcPropertyInfo = "plc"
+    type AttrOrigin AudioDecoderPlcPropertyInfo = AudioDecoder
+    attrGet _ = getAudioDecoderPlc
+    attrSet _ = setAudioDecoderPlc
+    attrConstruct _ = constructAudioDecoderPlc
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDecoder #tolerance
+@
+-}
+getAudioDecoderTolerance :: (MonadIO m, IsAudioDecoder o) => o -> m Int64
+getAudioDecoderTolerance obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "tolerance"
+
+{- |
+Set the value of the “@tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDecoder [ #tolerance 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDecoderTolerance :: (MonadIO m, IsAudioDecoder o) => o -> Int64 -> m ()
+setAudioDecoderTolerance obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "tolerance" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@tolerance@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioDecoderTolerance :: (IsAudioDecoder o) => Int64 -> IO (GValueConstruct o)
+constructAudioDecoderTolerance val = B.Properties.constructObjectPropertyInt64 "tolerance" val
+
+#if ENABLE_OVERLOADING
+data AudioDecoderTolerancePropertyInfo
+instance AttrInfo AudioDecoderTolerancePropertyInfo where
+    type AttrAllowedOps AudioDecoderTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioDecoderTolerancePropertyInfo = IsAudioDecoder
+    type AttrGetType AudioDecoderTolerancePropertyInfo = Int64
+    type AttrLabel AudioDecoderTolerancePropertyInfo = "tolerance"
+    type AttrOrigin AudioDecoderTolerancePropertyInfo = AudioDecoder
+    attrGet _ = getAudioDecoderTolerance
+    attrSet _ = setAudioDecoderTolerance
+    attrConstruct _ = constructAudioDecoderTolerance
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioDecoder
+type instance O.AttributeList AudioDecoder = AudioDecoderAttributeList
+type AudioDecoderAttributeList = ('[ '("minLatency", AudioDecoderMinLatencyPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("plc", AudioDecoderPlcPropertyInfo), '("tolerance", AudioDecoderTolerancePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioDecoderMinLatency :: AttrLabelProxy "minLatency"
+audioDecoderMinLatency = AttrLabelProxy
+
+audioDecoderPlc :: AttrLabelProxy "plc"
+audioDecoderPlc = AttrLabelProxy
+
+audioDecoderTolerance :: AttrLabelProxy "tolerance"
+audioDecoderTolerance = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioDecoder = AudioDecoderSignalList
+type AudioDecoderSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioDecoder::allocate_output_buffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_allocate_output_buffer" gst_audio_decoder_allocate_output_buffer :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Word64 ->                               -- size : TBasicType TUInt64
+    IO (Ptr Gst.Buffer.Buffer)
+
+{- |
+Helper function that allocates a buffer to hold an audio frame
+for /@dec@/\'s current output format.
+-}
+audioDecoderAllocateOutputBuffer ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Word64
+    {- ^ /@size@/: size of the buffer -}
+    -> m Gst.Buffer.Buffer
+    {- ^ __Returns:__ allocated buffer -}
+audioDecoderAllocateOutputBuffer dec size = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_allocate_output_buffer dec' size
+    checkUnexpectedReturnNULL "audioDecoderAllocateOutputBuffer" result
+    result' <- (wrapBoxed Gst.Buffer.Buffer) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderAllocateOutputBufferMethodInfo
+instance (signature ~ (Word64 -> m Gst.Buffer.Buffer), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderAllocateOutputBufferMethodInfo a signature where
+    overloadedMethod _ = audioDecoderAllocateOutputBuffer
+
+#endif
+
+-- method AudioDecoder::finish_frame
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buf", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "decoded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "frames", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of decoded frames represented by decoded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "FlowReturn"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_finish_frame" gst_audio_decoder_finish_frame :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.Buffer.Buffer ->                -- buf : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Int32 ->                                -- frames : TBasicType TInt
+    IO CInt
+
+{- |
+Collects decoded data and pushes it downstream.
+
+/@buf@/ may be NULL in which case the indicated number of frames
+are discarded and considered to have produced no output
+(e.g. lead-in or setup frames).
+Otherwise, source pad caps must be set when it is called with valid
+data in /@buf@/.
+
+Note that a frame received in 'GI.GstAudio.Structs.AudioDecoderClass.AudioDecoderClass'.@/handle_frame/@() may be
+invalidated by a call to this function.
+-}
+audioDecoderFinishFrame ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Gst.Buffer.Buffer
+    {- ^ /@buf@/: decoded data -}
+    -> Int32
+    {- ^ /@frames@/: number of decoded frames represented by decoded data -}
+    -> m Gst.Enums.FlowReturn
+    {- ^ __Returns:__ a 'GI.Gst.Enums.FlowReturn' that should be escalated to caller (of caller) -}
+audioDecoderFinishFrame dec buf frames = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    buf' <- unsafeManagedPtrGetPtr buf
+    result <- gst_audio_decoder_finish_frame dec' buf' frames
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr dec
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderFinishFrameMethodInfo
+instance (signature ~ (Gst.Buffer.Buffer -> Int32 -> m Gst.Enums.FlowReturn), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderFinishFrameMethodInfo a signature where
+    overloadedMethod _ = audioDecoderFinishFrame
+
+#endif
+
+-- method AudioDecoder::finish_subframe
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buf", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "decoded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "FlowReturn"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_finish_subframe" gst_audio_decoder_finish_subframe :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.Buffer.Buffer ->                -- buf : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    IO CInt
+
+{- |
+Collects decoded data and pushes it downstream. This function may be called
+multiple times for a given input frame.
+
+/@buf@/ may be NULL in which case it is assumed that the current input frame is
+finished. This is equivalent to calling 'GI.GstAudio.Objects.AudioDecoder.audioDecoderFinishSubframe'
+with a NULL buffer and frames=1 after having pushed out all decoded audio
+subframes using this function.
+
+When called with valid data in /@buf@/ the source pad caps must have been set
+already.
+
+Note that a frame received in 'GI.GstAudio.Structs.AudioDecoderClass.AudioDecoderClass'.@/handle_frame/@() may be
+invalidated by a call to this function.
+
+/Since: 1.16/
+-}
+audioDecoderFinishSubframe ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Gst.Buffer.Buffer
+    {- ^ /@buf@/: decoded data -}
+    -> m Gst.Enums.FlowReturn
+    {- ^ __Returns:__ a 'GI.Gst.Enums.FlowReturn' that should be escalated to caller (of caller) -}
+audioDecoderFinishSubframe dec buf = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    buf' <- unsafeManagedPtrGetPtr buf
+    result <- gst_audio_decoder_finish_subframe dec' buf'
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr dec
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderFinishSubframeMethodInfo
+instance (signature ~ (Gst.Buffer.Buffer -> m Gst.Enums.FlowReturn), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderFinishSubframeMethodInfo a signature where
+    overloadedMethod _ = audioDecoderFinishSubframe
+
+#endif
+
+-- method AudioDecoder::get_allocator
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocator", argType = TInterface (Name {namespace = "Gst", name = "Allocator"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAllocator\nused", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "params", argType = TInterface (Name {namespace = "Gst", name = "AllocationParams"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the\n#GstAllocationParams of @allocator", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_allocator" gst_audio_decoder_get_allocator :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr (Ptr Gst.Allocator.Allocator) ->    -- allocator : TInterface (Name {namespace = "Gst", name = "Allocator"})
+    Ptr Gst.AllocationParams.AllocationParams -> -- params : TInterface (Name {namespace = "Gst", name = "AllocationParams"})
+    IO ()
+
+{- |
+Lets 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' sub-classes to know the memory /@allocator@/
+used by the base class and its /@params@/.
+
+Unref the /@allocator@/ after use it.
+-}
+audioDecoderGetAllocator ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m ((Gst.Allocator.Allocator, Gst.AllocationParams.AllocationParams))
+audioDecoderGetAllocator dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    allocator <- allocMem :: IO (Ptr (Ptr Gst.Allocator.Allocator))
+    params <- callocBoxedBytes 64 :: IO (Ptr Gst.AllocationParams.AllocationParams)
+    gst_audio_decoder_get_allocator dec' allocator params
+    allocator' <- peek allocator
+    allocator'' <- (wrapObject Gst.Allocator.Allocator) allocator'
+    params' <- (wrapBoxed Gst.AllocationParams.AllocationParams) params
+    touchManagedPtr dec
+    freeMem allocator
+    return (allocator'', params')
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetAllocatorMethodInfo
+instance (signature ~ (m ((Gst.Allocator.Allocator, Gst.AllocationParams.AllocationParams))), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetAllocatorMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetAllocator
+
+#endif
+
+-- method AudioDecoder::get_audio_info
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_audio_info" gst_audio_decoder_get_audio_info :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO (Ptr GstAudio.AudioInfo.AudioInfo)
+
+{- |
+/No description available in the introspection data./
+-}
+audioDecoderGetAudioInfo ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m GstAudio.AudioInfo.AudioInfo
+    {- ^ __Returns:__ a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' describing the input audio format -}
+audioDecoderGetAudioInfo dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_audio_info dec'
+    checkUnexpectedReturnNULL "audioDecoderGetAudioInfo" result
+    result' <- (wrapBoxed GstAudio.AudioInfo.AudioInfo) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetAudioInfoMethodInfo
+instance (signature ~ (m GstAudio.AudioInfo.AudioInfo), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetAudioInfoMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetAudioInfo
+
+#endif
+
+-- method AudioDecoder::get_delay
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_delay" gst_audio_decoder_get_delay :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioDecoderGetDelay ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured decoder delay -}
+audioDecoderGetDelay dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_delay dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetDelayMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetDelayMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetDelay
+
+#endif
+
+-- method AudioDecoder::get_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", 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_decoder_get_drainable" gst_audio_decoder_get_drainable :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO CInt
+
+{- |
+Queries decoder drain handling.
+-}
+audioDecoderGetDrainable ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if drainable handling is enabled.
+
+MT safe. -}
+audioDecoderGetDrainable dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_drainable dec'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetDrainableMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetDrainable
+
+#endif
+
+-- method AudioDecoder::get_estimate_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_estimate_rate" gst_audio_decoder_get_estimate_rate :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioDecoderGetEstimateRate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured byte to time conversion setting -}
+audioDecoderGetEstimateRate dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_estimate_rate dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetEstimateRateMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetEstimateRateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetEstimateRate
+
+#endif
+
+-- method AudioDecoder::get_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to storage to hold minimum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to storage to hold maximum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_latency" gst_audio_decoder_get_latency :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Word64 ->                           -- min : TBasicType TUInt64
+    Ptr Word64 ->                           -- max : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets the variables pointed to by /@min@/ and /@max@/ to the currently configured
+latency.
+-}
+audioDecoderGetLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m ((Word64, Word64))
+audioDecoderGetLatency dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    min <- allocMem :: IO (Ptr Word64)
+    max <- allocMem :: IO (Ptr Word64)
+    gst_audio_decoder_get_latency dec' min max
+    min' <- peek min
+    max' <- peek max
+    touchManagedPtr dec
+    freeMem min
+    freeMem max
+    return (min', max')
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetLatencyMethodInfo
+instance (signature ~ (m ((Word64, Word64))), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetLatency
+
+#endif
+
+-- method AudioDecoder::get_max_errors
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_max_errors" gst_audio_decoder_get_max_errors :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioDecoderGetMaxErrors ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured decoder tolerated error count. -}
+audioDecoderGetMaxErrors dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_max_errors dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetMaxErrorsMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetMaxErrorsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetMaxErrors
+
+#endif
+
+-- method AudioDecoder::get_min_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_min_latency" gst_audio_decoder_get_min_latency :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Word64
+
+{- |
+Queries decoder\'s latency aggregation.
+-}
+audioDecoderGetMinLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Word64
+    {- ^ __Returns:__ aggregation latency.
+
+MT safe. -}
+audioDecoderGetMinLatency dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_min_latency dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetMinLatencyMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetMinLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetMinLatency
+
+#endif
+
+-- method AudioDecoder::get_needs_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", 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_decoder_get_needs_format" gst_audio_decoder_get_needs_format :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO CInt
+
+{- |
+Queries decoder required format handling.
+-}
+audioDecoderGetNeedsFormat ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if required format handling is enabled.
+
+MT safe. -}
+audioDecoderGetNeedsFormat dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_needs_format dec'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetNeedsFormatMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetNeedsFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetNeedsFormat
+
+#endif
+
+-- method AudioDecoder::get_parse_state
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sync", argType = TBasicType TBoolean, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to a variable to hold the current sync state", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "eos", argType = TBasicType TBoolean, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to a variable to hold the current eos state", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_parse_state" gst_audio_decoder_get_parse_state :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr CInt ->                             -- sync : TBasicType TBoolean
+    Ptr CInt ->                             -- eos : TBasicType TBoolean
+    IO ()
+
+{- |
+Return current parsing (sync and eos) state.
+-}
+audioDecoderGetParseState ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m ((Bool, Bool))
+audioDecoderGetParseState dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    sync <- allocMem :: IO (Ptr CInt)
+    eos <- allocMem :: IO (Ptr CInt)
+    gst_audio_decoder_get_parse_state dec' sync eos
+    sync' <- peek sync
+    let sync'' = (/= 0) sync'
+    eos' <- peek eos
+    let eos'' = (/= 0) eos'
+    touchManagedPtr dec
+    freeMem sync
+    freeMem eos
+    return (sync'', eos'')
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetParseStateMethodInfo
+instance (signature ~ (m ((Bool, Bool))), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetParseStateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetParseState
+
+#endif
+
+-- method AudioDecoder::get_plc
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", 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_decoder_get_plc" gst_audio_decoder_get_plc :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO CInt
+
+{- |
+Queries decoder packet loss concealment handling.
+-}
+audioDecoderGetPlc ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if packet loss concealment is enabled.
+
+MT safe. -}
+audioDecoderGetPlc dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_plc dec'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetPlcMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetPlcMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetPlc
+
+#endif
+
+-- method AudioDecoder::get_plc_aware
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_plc_aware" gst_audio_decoder_get_plc_aware :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioDecoderGetPlcAware ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured plc handling -}
+audioDecoderGetPlcAware dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_plc_aware dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetPlcAwareMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetPlcAwareMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetPlcAware
+
+#endif
+
+-- method AudioDecoder::get_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_tolerance" gst_audio_decoder_get_tolerance :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO Word64
+
+{- |
+Queries current audio jitter tolerance threshold.
+-}
+audioDecoderGetTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Word64
+    {- ^ __Returns:__ decoder audio jitter tolerance threshold.
+
+MT safe. -}
+audioDecoderGetTolerance dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_get_tolerance dec'
+    touchManagedPtr dec
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioDecoderGetToleranceMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderGetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetTolerance
+
+#endif
+
+-- method AudioDecoder::merge_tags
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tags", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstTagList to merge, or NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface (Name {namespace = "Gst", name = "TagMergeMode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE", 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_decoder_merge_tags" gst_audio_decoder_merge_tags :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.TagList.TagList ->              -- tags : TInterface (Name {namespace = "Gst", name = "TagList"})
+    CUInt ->                                -- mode : TInterface (Name {namespace = "Gst", name = "TagMergeMode"})
+    IO ()
+
+{- |
+Sets the audio decoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with 'GI.GstAudio.Objects.AudioDecoder.audioDecoderMergeTags'.
+
+Note that this is provided for convenience, and the subclass is
+not required to use this and can still do tag handling on its own.
+-}
+audioDecoderMergeTags ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Maybe (Gst.TagList.TagList)
+    {- ^ /@tags@/: a 'GI.Gst.Structs.TagList.TagList' to merge, or NULL -}
+    -> Gst.Enums.TagMergeMode
+    {- ^ /@mode@/: the 'GI.Gst.Enums.TagMergeMode' to use, usually @/GST_TAG_MERGE_REPLACE/@ -}
+    -> m ()
+audioDecoderMergeTags dec tags mode = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    maybeTags <- case tags of
+        Nothing -> return nullPtr
+        Just jTags -> do
+            jTags' <- unsafeManagedPtrGetPtr jTags
+            return jTags'
+    let mode' = (fromIntegral . fromEnum) mode
+    gst_audio_decoder_merge_tags dec' maybeTags mode'
+    touchManagedPtr dec
+    whenJust tags touchManagedPtr
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderMergeTagsMethodInfo
+instance (signature ~ (Maybe (Gst.TagList.TagList) -> Gst.Enums.TagMergeMode -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderMergeTagsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderMergeTags
+
+#endif
+
+-- method AudioDecoder::negotiate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", 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_decoder_negotiate" gst_audio_decoder_negotiate :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    IO CInt
+
+{- |
+Negotiate with downstream elements to currently configured 'GI.GstAudio.Structs.AudioInfo.AudioInfo'.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
+-}
+audioDecoderNegotiate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the negotiation succeeded, else 'False'. -}
+audioDecoderNegotiate dec = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    result <- gst_audio_decoder_negotiate dec'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderNegotiateMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderNegotiateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderNegotiate
+
+#endif
+
+-- method AudioDecoder::proxy_getcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "decoder", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "initial caps", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "filter", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "filter caps", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Caps"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_proxy_getcaps" gst_audio_decoder_proxy_getcaps :: 
+    Ptr AudioDecoder ->                     -- decoder : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    Ptr Gst.Caps.Caps ->                    -- filter : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO (Ptr Gst.Caps.Caps)
+
+{- |
+Returns caps that express /@caps@/ (or sink template caps if /@caps@/ == NULL)
+restricted to rate\/channels\/... combinations supported by downstream
+elements.
+
+/Since: 1.6/
+-}
+audioDecoderProxyGetcaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@decoder@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@caps@/: initial caps -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@filter@/: filter caps -}
+    -> m Gst.Caps.Caps
+    {- ^ __Returns:__ a 'GI.Gst.Structs.Caps.Caps' owned by caller -}
+audioDecoderProxyGetcaps decoder caps filter = liftIO $ do
+    decoder' <- unsafeManagedPtrCastPtr decoder
+    maybeCaps <- case caps of
+        Nothing -> return nullPtr
+        Just jCaps -> do
+            jCaps' <- unsafeManagedPtrGetPtr jCaps
+            return jCaps'
+    maybeFilter <- case filter of
+        Nothing -> return nullPtr
+        Just jFilter -> do
+            jFilter' <- unsafeManagedPtrGetPtr jFilter
+            return jFilter'
+    result <- gst_audio_decoder_proxy_getcaps decoder' maybeCaps maybeFilter
+    checkUnexpectedReturnNULL "audioDecoderProxyGetcaps" result
+    result' <- (wrapBoxed Gst.Caps.Caps) result
+    touchManagedPtr decoder
+    whenJust caps touchManagedPtr
+    whenJust filter touchManagedPtr
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderProxyGetcapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps.Caps) -> Maybe (Gst.Caps.Caps) -> m Gst.Caps.Caps), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderProxyGetcapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderProxyGetcaps
+
+#endif
+
+-- method AudioDecoder::set_allocation_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocation_caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstCaps or %NULL", 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_decoder_set_allocation_caps" gst_audio_decoder_set_allocation_caps :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.Caps.Caps ->                    -- allocation_caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO ()
+
+{- |
+Sets a caps in allocation query which are different from the set
+pad\'s caps. Use this function before calling
+'GI.GstAudio.Objects.AudioDecoder.audioDecoderNegotiate'. Setting to 'Nothing' the allocation
+query will use the caps from the pad.
+
+/Since: 1.10/
+-}
+audioDecoderSetAllocationCaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@allocationCaps@/: a 'GI.Gst.Structs.Caps.Caps' or 'Nothing' -}
+    -> m ()
+audioDecoderSetAllocationCaps dec allocationCaps = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    maybeAllocationCaps <- case allocationCaps of
+        Nothing -> return nullPtr
+        Just jAllocationCaps -> do
+            jAllocationCaps' <- unsafeManagedPtrGetPtr jAllocationCaps
+            return jAllocationCaps'
+    gst_audio_decoder_set_allocation_caps dec' maybeAllocationCaps
+    touchManagedPtr dec
+    whenJust allocationCaps touchManagedPtr
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetAllocationCapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps.Caps) -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetAllocationCapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetAllocationCaps
+
+#endif
+
+-- method AudioDecoder::set_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_decoder_set_drainable" gst_audio_decoder_set_drainable :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Configures decoder drain handling.  If drainable, subclass might
+be handed a NULL buffer to have it return any leftover decoded data.
+Otherwise, it is not considered so capable and will only ever be passed
+real data.
+
+MT safe.
+-}
+audioDecoderSetDrainable ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioDecoderSetDrainable dec enabled = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_drainable dec' enabled'
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetDrainableMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetDrainable
+
+#endif
+
+-- method AudioDecoder::set_estimate_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "whether to enable byte to time conversion", 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_decoder_set_estimate_rate" gst_audio_decoder_set_estimate_rate :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Allows baseclass to perform byte to time estimated conversion.
+-}
+audioDecoderSetEstimateRate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@enabled@/: whether to enable byte to time conversion -}
+    -> m ()
+audioDecoderSetEstimateRate dec enabled = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_estimate_rate dec' enabled'
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetEstimateRateMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetEstimateRateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetEstimateRate
+
+#endif
+
+-- method AudioDecoder::set_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "minimum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "maximum latency", 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_decoder_set_latency" gst_audio_decoder_set_latency :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Word64 ->                               -- min : TBasicType TUInt64
+    Word64 ->                               -- max : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets decoder latency.
+-}
+audioDecoderSetLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Word64
+    {- ^ /@min@/: minimum latency -}
+    -> Word64
+    {- ^ /@max@/: maximum latency -}
+    -> m ()
+audioDecoderSetLatency dec min max = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    gst_audio_decoder_set_latency dec' min max
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetLatencyMethodInfo
+instance (signature ~ (Word64 -> Word64 -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetLatency
+
+#endif
+
+-- method AudioDecoder::set_max_errors
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "max tolerated errors", 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_decoder_set_max_errors" gst_audio_decoder_set_max_errors :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Int32 ->                                -- num : TBasicType TInt
+    IO ()
+
+{- |
+Sets numbers of tolerated decoder errors, where a tolerated one is then only
+warned about, but more than tolerated will lead to fatal error. You can set
+-1 for never returning fatal errors. Default is set to
+GST_AUDIO_DECODER_MAX_ERRORS.
+-}
+audioDecoderSetMaxErrors ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Int32
+    {- ^ /@num@/: max tolerated errors -}
+    -> m ()
+audioDecoderSetMaxErrors dec num = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    gst_audio_decoder_set_max_errors dec' num
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetMaxErrorsMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetMaxErrorsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetMaxErrors
+
+#endif
+
+-- method AudioDecoder::set_min_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new minimum latency", 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_decoder_set_min_latency" gst_audio_decoder_set_min_latency :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Word64 ->                               -- num : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets decoder minimum aggregation latency.
+
+MT safe.
+-}
+audioDecoderSetMinLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Word64
+    {- ^ /@num@/: new minimum latency -}
+    -> m ()
+audioDecoderSetMinLatency dec num = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    gst_audio_decoder_set_min_latency dec' num
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetMinLatencyMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetMinLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetMinLatency
+
+#endif
+
+-- method AudioDecoder::set_needs_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_decoder_set_needs_format" gst_audio_decoder_set_needs_format :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Configures decoder format needs.  If enabled, subclass needs to be
+negotiated with format caps before it can process any data.  It will then
+never be handed any data before it has been configured.
+Otherwise, it might be handed data without having been configured and
+is then expected being able to do so either by default
+or based on the input data.
+
+MT safe.
+-}
+audioDecoderSetNeedsFormat ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioDecoderSetNeedsFormat dec enabled = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_needs_format dec' enabled'
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetNeedsFormatMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetNeedsFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetNeedsFormat
+
+#endif
+
+-- method AudioDecoder::set_output_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "(fixed) #GstCaps", 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_decoder_set_output_caps" gst_audio_decoder_set_output_caps :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO CInt
+
+{- |
+Configure output caps on the srcpad of /@dec@/. Similar to
+'GI.GstAudio.Objects.AudioDecoder.audioDecoderSetOutputFormat', but allows subclasses to specify
+output caps that can\'t be expressed via 'GI.GstAudio.Structs.AudioInfo.AudioInfo' e.g. caps that have
+caps features.
+
+/Since: 1.16/
+-}
+audioDecoderSetOutputCaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Gst.Caps.Caps
+    {- ^ /@caps@/: (fixed) 'GI.Gst.Structs.Caps.Caps' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' on success. -}
+audioDecoderSetOutputCaps dec caps = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    caps' <- unsafeManagedPtrGetPtr caps
+    result <- gst_audio_decoder_set_output_caps dec' caps'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    touchManagedPtr caps
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetOutputCapsMethodInfo
+instance (signature ~ (Gst.Caps.Caps -> m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetOutputCapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetOutputCaps
+
+#endif
+
+-- method AudioDecoder::set_output_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioInfo", 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_decoder_set_output_format" gst_audio_decoder_set_output_format :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Ptr GstAudio.AudioInfo.AudioInfo ->     -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO CInt
+
+{- |
+Configure output info on the srcpad of /@dec@/.
+-}
+audioDecoderSetOutputFormat ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> GstAudio.AudioInfo.AudioInfo
+    {- ^ /@info@/: 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' on success. -}
+audioDecoderSetOutputFormat dec info = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    info' <- unsafeManagedPtrGetPtr info
+    result <- gst_audio_decoder_set_output_format dec' info'
+    let result' = (/= 0) result
+    touchManagedPtr dec
+    touchManagedPtr info
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetOutputFormatMethodInfo
+instance (signature ~ (GstAudio.AudioInfo.AudioInfo -> m Bool), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetOutputFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetOutputFormat
+
+#endif
+
+-- method AudioDecoder::set_plc
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_decoder_set_plc" gst_audio_decoder_set_plc :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Enable or disable decoder packet loss concealment, provided subclass
+and codec are capable and allow handling plc.
+
+MT safe.
+-}
+audioDecoderSetPlc ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioDecoderSetPlc dec enabled = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_plc dec' enabled'
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetPlcMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetPlcMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetPlc
+
+#endif
+
+-- method AudioDecoder::set_plc_aware
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "plc", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new plc 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_decoder_set_plc_aware" gst_audio_decoder_set_plc_aware :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- plc : TBasicType TBoolean
+    IO ()
+
+{- |
+Indicates whether or not subclass handles packet loss concealment (plc).
+-}
+audioDecoderSetPlcAware ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@plc@/: new plc state -}
+    -> m ()
+audioDecoderSetPlcAware dec plc = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    let plc' = (fromIntegral . fromEnum) plc
+    gst_audio_decoder_set_plc_aware dec' plc'
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetPlcAwareMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetPlcAwareMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetPlcAware
+
+#endif
+
+-- method AudioDecoder::set_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "dec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tolerance", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new tolerance", 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_decoder_set_tolerance" gst_audio_decoder_set_tolerance :: 
+    Ptr AudioDecoder ->                     -- dec : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    Word64 ->                               -- tolerance : TBasicType TUInt64
+    IO ()
+
+{- |
+Configures decoder audio jitter tolerance threshold.
+
+MT safe.
+-}
+audioDecoderSetTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@dec@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Word64
+    {- ^ /@tolerance@/: new tolerance -}
+    -> m ()
+audioDecoderSetTolerance dec tolerance = liftIO $ do
+    dec' <- unsafeManagedPtrCastPtr dec
+    gst_audio_decoder_set_tolerance dec' tolerance
+    touchManagedPtr dec
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetToleranceMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetTolerance
+
+#endif
+
+-- method AudioDecoder::set_use_default_pad_acceptcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "decoder", argType = TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioDecoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "use", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "if the default pad accept-caps query handling should be used", 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_decoder_set_use_default_pad_acceptcaps" gst_audio_decoder_set_use_default_pad_acceptcaps :: 
+    Ptr AudioDecoder ->                     -- decoder : TInterface (Name {namespace = "GstAudio", name = "AudioDecoder"})
+    CInt ->                                 -- use : TBasicType TBoolean
+    IO ()
+
+{- |
+Lets 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' sub-classes decide if they want the sink pad
+to use the default pad query handler to reply to accept-caps queries.
+
+By setting this to true it is possible to further customize the default
+handler with @/GST_PAD_SET_ACCEPT_INTERSECT/@ and
+@/GST_PAD_SET_ACCEPT_TEMPLATE/@
+
+/Since: 1.6/
+-}
+audioDecoderSetUseDefaultPadAcceptcaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioDecoder a) =>
+    a
+    {- ^ /@decoder@/: a 'GI.GstAudio.Objects.AudioDecoder.AudioDecoder' -}
+    -> Bool
+    {- ^ /@use@/: if the default pad accept-caps query handling should be used -}
+    -> m ()
+audioDecoderSetUseDefaultPadAcceptcaps decoder use = liftIO $ do
+    decoder' <- unsafeManagedPtrCastPtr decoder
+    let use' = (fromIntegral . fromEnum) use
+    gst_audio_decoder_set_use_default_pad_acceptcaps decoder' use'
+    touchManagedPtr decoder
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioDecoder a) => O.MethodInfo AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetUseDefaultPadAcceptcaps
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioDecoder.hs-boot b/GI/GstAudio/Objects/AudioDecoder.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioDecoder.hs-boot
@@ -0,0 +1,134 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioDecoder 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
+
+newtype AudioDecoder = AudioDecoder (ManagedPtr AudioDecoder)
+instance GObject AudioDecoder where
+class (GObject o, O.IsDescendantOf AudioDecoder o) => IsAudioDecoder o
+instance (GObject o, O.IsDescendantOf AudioDecoder o) => IsAudioDecoder o
+instance O.HasParentTypes AudioDecoder
+#if ENABLE_OVERLOADING
+data AudioDecoderMinLatencyPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderPlcPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderTolerancePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderAllocateOutputBufferMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderFinishFrameMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderFinishSubframeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetAllocatorMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetAudioInfoMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetDelayMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetDrainableMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetEstimateRateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetMaxErrorsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetMinLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetNeedsFormatMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetParseStateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetPlcMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetPlcAwareMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderGetToleranceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderMergeTagsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderNegotiateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderProxyGetcapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetAllocationCapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetDrainableMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetEstimateRateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetMaxErrorsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetMinLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetNeedsFormatMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetOutputCapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetOutputFormatMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetPlcMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetPlcAwareMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetToleranceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioEncoder.hs b/GI/GstAudio/Objects/AudioEncoder.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioEncoder.hs
@@ -0,0 +1,2131 @@
+
+
+{- |
+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 base class is for audio encoders turning raw audio samples into
+encoded audio data.
+
+GstAudioEncoder and subclass should cooperate as follows.
+
+== Configuration
+
+  * Initially, GstAudioEncoder calls /@start@/ when the encoder element
+    is activated, which allows subclass to perform any global setup.
+
+  * GstAudioEncoder calls /@setFormat@/ to inform subclass of the format
+    of input audio data that it is about to receive.  Subclass should
+    setup for encoding and configure various base class parameters
+    appropriately, notably those directing desired input data handling.
+    While unlikely, it might be called more than once, if changing input
+    parameters require reconfiguration.
+
+  * GstAudioEncoder calls /@stop@/ at end of all processing.
+
+As of configuration stage, and throughout processing, GstAudioEncoder
+maintains various parameters that provide required context,
+e.g. describing the format of input audio data.
+Conversely, subclass can and should configure these context parameters
+to inform base class of its expectation w.r.t. buffer handling.
+
+== Data processing
+
+    * Base class gathers input sample data (as directed by the context\'s
+      frame_samples and frame_max) and provides this to subclass\' /@handleFrame@/.
+    * If codec processing results in encoded data, subclass should call
+      'GI.GstAudio.Objects.AudioEncoder.audioEncoderFinishFrame' to have encoded data pushed
+      downstream. Alternatively, it might also call
+      'GI.GstAudio.Objects.AudioEncoder.audioEncoderFinishFrame' (with a NULL buffer and some number of
+      dropped samples) to indicate dropped (non-encoded) samples.
+    * Just prior to actually pushing a buffer downstream,
+      it is passed to /@prePush@/.
+    * During the parsing process GstAudioEncoderClass will handle both
+      srcpad and sinkpad events. Sink events will be passed to subclass
+      if /@event@/ callback has been provided.
+
+== Shutdown phase
+
+  * GstAudioEncoder class calls /@stop@/ to inform the subclass that data
+    parsing will be stopped.
+
+Subclass is responsible for providing pad template caps for
+source and sink pads. The pads need to be named \"sink\" and \"src\". It also
+needs to set the fixed caps on srcpad, when the format is ensured.  This
+is typically when base class calls subclass\' /@setFormat@/ function, though
+it might be delayed until calling /@gstAudioEncoderFinishFrame@/.
+
+In summary, above process should have subclass concentrating on
+codec data processing while leaving other matters to base class,
+such as most notably timestamp handling.  While it may exert more control
+in this area (see e.g. /@prePush@/), it is very much not recommended.
+
+In particular, base class will either favor tracking upstream timestamps
+(at the possible expense of jitter) or aim to arrange for a perfect stream of
+output timestamps, depending on 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder':@/perfect-timestamp/@.
+However, in the latter case, the input may not be so perfect or ideal, which
+is handled as follows.  An input timestamp is compared with the expected
+timestamp as dictated by input sample stream and if the deviation is less
+than 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder':@/tolerance/@, the deviation is discarded.
+Otherwise, it is considered a discontuinity and subsequent output timestamp
+is resynced to the new position after performing configured discontinuity
+processing.  In the non-perfect-timestamp case, an upstream variation
+exceeding tolerance only leads to marking DISCONT on subsequent outgoing
+(while timestamps are adjusted to upstream regardless of variation).
+While DISCONT is also marked in the perfect-timestamp case, this one
+optionally (see 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder':@/hard-resync/@)
+performs some additional steps, such as clipping of (early) input samples
+or draining all currently remaining input data, depending on the direction
+of the discontuinity.
+
+If perfect timestamps are arranged, it is also possible to request baseclass
+(usually set by subclass) to provide additional buffer metadata (in OFFSET
+and OFFSET_END) fields according to granule defined semantics currently
+needed by oggmux.  Specifically, OFFSET is set to granulepos (= sample count
+including buffer) and OFFSET_END to corresponding timestamp (as determined
+by same sample count and sample rate).
+
+Things that subclass need to take care of:
+
+  * Provide pad templates
+  * Set source pad caps when appropriate
+  * Inform base class of buffer processing needs using context\'s
+     frame_samples and frame_bytes.
+  * Set user-configurable properties to sane defaults for format and
+     implementing codec at hand, e.g. those controlling timestamp behaviour
+     and discontinuity processing.
+  * Accept data in /@handleFrame@/ and provide encoded results to
+     'GI.GstAudio.Objects.AudioEncoder.audioEncoderFinishFrame'.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioEncoder
+    ( 
+
+-- * Exported types
+    AudioEncoder(..)                        ,
+    IsAudioEncoder                          ,
+    toAudioEncoder                          ,
+    noAudioEncoder                          ,
+
+
+ -- * Methods
+-- ** allocateOutputBuffer #method:allocateOutputBuffer#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderAllocateOutputBufferMethodInfo,
+#endif
+    audioEncoderAllocateOutputBuffer        ,
+
+
+-- ** finishFrame #method:finishFrame#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderFinishFrameMethodInfo       ,
+#endif
+    audioEncoderFinishFrame                 ,
+
+
+-- ** getAllocator #method:getAllocator#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetAllocatorMethodInfo      ,
+#endif
+    audioEncoderGetAllocator                ,
+
+
+-- ** getAudioInfo #method:getAudioInfo#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetAudioInfoMethodInfo      ,
+#endif
+    audioEncoderGetAudioInfo                ,
+
+
+-- ** getDrainable #method:getDrainable#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetDrainableMethodInfo      ,
+#endif
+    audioEncoderGetDrainable                ,
+
+
+-- ** getFrameMax #method:getFrameMax#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetFrameMaxMethodInfo       ,
+#endif
+    audioEncoderGetFrameMax                 ,
+
+
+-- ** getFrameSamplesMax #method:getFrameSamplesMax#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetFrameSamplesMaxMethodInfo,
+#endif
+    audioEncoderGetFrameSamplesMax          ,
+
+
+-- ** getFrameSamplesMin #method:getFrameSamplesMin#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetFrameSamplesMinMethodInfo,
+#endif
+    audioEncoderGetFrameSamplesMin          ,
+
+
+-- ** getHardMin #method:getHardMin#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetHardMinMethodInfo        ,
+#endif
+    audioEncoderGetHardMin                  ,
+
+
+-- ** getHardResync #method:getHardResync#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetHardResyncMethodInfo     ,
+#endif
+    audioEncoderGetHardResync               ,
+
+
+-- ** getLatency #method:getLatency#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetLatencyMethodInfo        ,
+#endif
+    audioEncoderGetLatency                  ,
+
+
+-- ** getLookahead #method:getLookahead#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetLookaheadMethodInfo      ,
+#endif
+    audioEncoderGetLookahead                ,
+
+
+-- ** getMarkGranule #method:getMarkGranule#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetMarkGranuleMethodInfo    ,
+#endif
+    audioEncoderGetMarkGranule              ,
+
+
+-- ** getPerfectTimestamp #method:getPerfectTimestamp#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetPerfectTimestampMethodInfo,
+#endif
+    audioEncoderGetPerfectTimestamp         ,
+
+
+-- ** getTolerance #method:getTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderGetToleranceMethodInfo      ,
+#endif
+    audioEncoderGetTolerance                ,
+
+
+-- ** mergeTags #method:mergeTags#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderMergeTagsMethodInfo         ,
+#endif
+    audioEncoderMergeTags                   ,
+
+
+-- ** negotiate #method:negotiate#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderNegotiateMethodInfo         ,
+#endif
+    audioEncoderNegotiate                   ,
+
+
+-- ** proxyGetcaps #method:proxyGetcaps#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderProxyGetcapsMethodInfo      ,
+#endif
+    audioEncoderProxyGetcaps                ,
+
+
+-- ** setAllocationCaps #method:setAllocationCaps#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetAllocationCapsMethodInfo ,
+#endif
+    audioEncoderSetAllocationCaps           ,
+
+
+-- ** setDrainable #method:setDrainable#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetDrainableMethodInfo      ,
+#endif
+    audioEncoderSetDrainable                ,
+
+
+-- ** setFrameMax #method:setFrameMax#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetFrameMaxMethodInfo       ,
+#endif
+    audioEncoderSetFrameMax                 ,
+
+
+-- ** setFrameSamplesMax #method:setFrameSamplesMax#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetFrameSamplesMaxMethodInfo,
+#endif
+    audioEncoderSetFrameSamplesMax          ,
+
+
+-- ** setFrameSamplesMin #method:setFrameSamplesMin#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetFrameSamplesMinMethodInfo,
+#endif
+    audioEncoderSetFrameSamplesMin          ,
+
+
+-- ** setHardMin #method:setHardMin#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetHardMinMethodInfo        ,
+#endif
+    audioEncoderSetHardMin                  ,
+
+
+-- ** setHardResync #method:setHardResync#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetHardResyncMethodInfo     ,
+#endif
+    audioEncoderSetHardResync               ,
+
+
+-- ** setHeaders #method:setHeaders#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetHeadersMethodInfo        ,
+#endif
+    audioEncoderSetHeaders                  ,
+
+
+-- ** setLatency #method:setLatency#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetLatencyMethodInfo        ,
+#endif
+    audioEncoderSetLatency                  ,
+
+
+-- ** setLookahead #method:setLookahead#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetLookaheadMethodInfo      ,
+#endif
+    audioEncoderSetLookahead                ,
+
+
+-- ** setMarkGranule #method:setMarkGranule#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetMarkGranuleMethodInfo    ,
+#endif
+    audioEncoderSetMarkGranule              ,
+
+
+-- ** setOutputFormat #method:setOutputFormat#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetOutputFormatMethodInfo   ,
+#endif
+    audioEncoderSetOutputFormat             ,
+
+
+-- ** setPerfectTimestamp #method:setPerfectTimestamp#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetPerfectTimestampMethodInfo,
+#endif
+    audioEncoderSetPerfectTimestamp         ,
+
+
+-- ** setTolerance #method:setTolerance#
+
+#if ENABLE_OVERLOADING
+    AudioEncoderSetToleranceMethodInfo      ,
+#endif
+    audioEncoderSetTolerance                ,
+
+
+
+
+ -- * Properties
+-- ** hardResync #attr:hardResync#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioEncoderHardResyncPropertyInfo      ,
+#endif
+#if ENABLE_OVERLOADING
+    audioEncoderHardResync                  ,
+#endif
+    constructAudioEncoderHardResync         ,
+    getAudioEncoderHardResync               ,
+    setAudioEncoderHardResync               ,
+
+
+-- ** markGranule #attr:markGranule#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioEncoderMarkGranulePropertyInfo     ,
+#endif
+#if ENABLE_OVERLOADING
+    audioEncoderMarkGranule                 ,
+#endif
+    getAudioEncoderMarkGranule              ,
+
+
+-- ** perfectTimestamp #attr:perfectTimestamp#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioEncoderPerfectTimestampPropertyInfo,
+#endif
+#if ENABLE_OVERLOADING
+    audioEncoderPerfectTimestamp            ,
+#endif
+    constructAudioEncoderPerfectTimestamp   ,
+    getAudioEncoderPerfectTimestamp         ,
+    setAudioEncoderPerfectTimestamp         ,
+
+
+-- ** tolerance #attr:tolerance#
+{- | /No description available in the introspection data./
+-}
+#if ENABLE_OVERLOADING
+    AudioEncoderTolerancePropertyInfo       ,
+#endif
+#if ENABLE_OVERLOADING
+    audioEncoderTolerance                   ,
+#endif
+    constructAudioEncoderTolerance          ,
+    getAudioEncoderTolerance                ,
+    setAudioEncoderTolerance                ,
+
+
+
+
+    ) 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.Enums as Gst.Enums
+import qualified GI.Gst.Interfaces.Preset as Gst.Preset
+import qualified GI.Gst.Objects.Allocator as Gst.Allocator
+import qualified GI.Gst.Objects.Element as Gst.Element
+import qualified GI.Gst.Objects.Object as Gst.Object
+import qualified GI.Gst.Structs.AllocationParams as Gst.AllocationParams
+import qualified GI.Gst.Structs.Buffer as Gst.Buffer
+import qualified GI.Gst.Structs.Caps as Gst.Caps
+import qualified GI.Gst.Structs.TagList as Gst.TagList
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioEncoder = AudioEncoder (ManagedPtr AudioEncoder)
+foreign import ccall "gst_audio_encoder_get_type"
+    c_gst_audio_encoder_get_type :: IO GType
+
+instance GObject AudioEncoder where
+    gobjectType = c_gst_audio_encoder_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioEncoder`, for instance with `toAudioEncoder`.
+class (GObject o, O.IsDescendantOf AudioEncoder o) => IsAudioEncoder o
+instance (GObject o, O.IsDescendantOf AudioEncoder o) => IsAudioEncoder o
+
+instance O.HasParentTypes AudioEncoder
+type instance O.ParentTypes AudioEncoder = '[Gst.Element.Element, Gst.Object.Object, GObject.Object.Object, Gst.Preset.Preset]
+
+-- | Cast to `AudioEncoder`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioEncoder :: (MonadIO m, IsAudioEncoder o) => o -> m AudioEncoder
+toAudioEncoder = liftIO . unsafeCastTo AudioEncoder
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioEncoder`.
+noAudioEncoder :: Maybe AudioEncoder
+noAudioEncoder = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioEncoderMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioEncoderMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioEncoderMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioEncoderMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioEncoderMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioEncoderMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioEncoderMethod "allocateOutputBuffer" o = AudioEncoderAllocateOutputBufferMethodInfo
+    ResolveAudioEncoderMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioEncoderMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioEncoderMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioEncoderMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioEncoderMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioEncoderMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioEncoderMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioEncoderMethod "deletePreset" o = Gst.Preset.PresetDeletePresetMethodInfo
+    ResolveAudioEncoderMethod "finishFrame" o = AudioEncoderFinishFrameMethodInfo
+    ResolveAudioEncoderMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioEncoderMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioEncoderMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioEncoderMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioEncoderMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioEncoderMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioEncoderMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioEncoderMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioEncoderMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioEncoderMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioEncoderMethod "isEditable" o = Gst.Preset.PresetIsEditableMethodInfo
+    ResolveAudioEncoderMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioEncoderMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioEncoderMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioEncoderMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioEncoderMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioEncoderMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioEncoderMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioEncoderMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioEncoderMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioEncoderMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioEncoderMethod "loadPreset" o = Gst.Preset.PresetLoadPresetMethodInfo
+    ResolveAudioEncoderMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioEncoderMethod "mergeTags" o = AudioEncoderMergeTagsMethodInfo
+    ResolveAudioEncoderMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioEncoderMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioEncoderMethod "negotiate" o = AudioEncoderNegotiateMethodInfo
+    ResolveAudioEncoderMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioEncoderMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioEncoderMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioEncoderMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioEncoderMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioEncoderMethod "proxyGetcaps" o = AudioEncoderProxyGetcapsMethodInfo
+    ResolveAudioEncoderMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioEncoderMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioEncoderMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioEncoderMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioEncoderMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioEncoderMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioEncoderMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioEncoderMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioEncoderMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioEncoderMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioEncoderMethod "renamePreset" o = Gst.Preset.PresetRenamePresetMethodInfo
+    ResolveAudioEncoderMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioEncoderMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioEncoderMethod "savePreset" o = Gst.Preset.PresetSavePresetMethodInfo
+    ResolveAudioEncoderMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioEncoderMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioEncoderMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioEncoderMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioEncoderMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioEncoderMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioEncoderMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioEncoderMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioEncoderMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioEncoderMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioEncoderMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioEncoderMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioEncoderMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioEncoderMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioEncoderMethod "getAllocator" o = AudioEncoderGetAllocatorMethodInfo
+    ResolveAudioEncoderMethod "getAudioInfo" o = AudioEncoderGetAudioInfoMethodInfo
+    ResolveAudioEncoderMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioEncoderMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioEncoderMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioEncoderMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioEncoderMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioEncoderMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioEncoderMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioEncoderMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioEncoderMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioEncoderMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioEncoderMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioEncoderMethod "getDrainable" o = AudioEncoderGetDrainableMethodInfo
+    ResolveAudioEncoderMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioEncoderMethod "getFrameMax" o = AudioEncoderGetFrameMaxMethodInfo
+    ResolveAudioEncoderMethod "getFrameSamplesMax" o = AudioEncoderGetFrameSamplesMaxMethodInfo
+    ResolveAudioEncoderMethod "getFrameSamplesMin" o = AudioEncoderGetFrameSamplesMinMethodInfo
+    ResolveAudioEncoderMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioEncoderMethod "getHardMin" o = AudioEncoderGetHardMinMethodInfo
+    ResolveAudioEncoderMethod "getHardResync" o = AudioEncoderGetHardResyncMethodInfo
+    ResolveAudioEncoderMethod "getLatency" o = AudioEncoderGetLatencyMethodInfo
+    ResolveAudioEncoderMethod "getLookahead" o = AudioEncoderGetLookaheadMethodInfo
+    ResolveAudioEncoderMethod "getMarkGranule" o = AudioEncoderGetMarkGranuleMethodInfo
+    ResolveAudioEncoderMethod "getMeta" o = Gst.Preset.PresetGetMetaMethodInfo
+    ResolveAudioEncoderMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioEncoderMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioEncoderMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioEncoderMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioEncoderMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioEncoderMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioEncoderMethod "getPerfectTimestamp" o = AudioEncoderGetPerfectTimestampMethodInfo
+    ResolveAudioEncoderMethod "getPresetNames" o = Gst.Preset.PresetGetPresetNamesMethodInfo
+    ResolveAudioEncoderMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioEncoderMethod "getPropertyNames" o = Gst.Preset.PresetGetPropertyNamesMethodInfo
+    ResolveAudioEncoderMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioEncoderMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioEncoderMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioEncoderMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioEncoderMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioEncoderMethod "getTolerance" o = AudioEncoderGetToleranceMethodInfo
+    ResolveAudioEncoderMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioEncoderMethod "setAllocationCaps" o = AudioEncoderSetAllocationCapsMethodInfo
+    ResolveAudioEncoderMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioEncoderMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioEncoderMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioEncoderMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioEncoderMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioEncoderMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioEncoderMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioEncoderMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioEncoderMethod "setDrainable" o = AudioEncoderSetDrainableMethodInfo
+    ResolveAudioEncoderMethod "setFrameMax" o = AudioEncoderSetFrameMaxMethodInfo
+    ResolveAudioEncoderMethod "setFrameSamplesMax" o = AudioEncoderSetFrameSamplesMaxMethodInfo
+    ResolveAudioEncoderMethod "setFrameSamplesMin" o = AudioEncoderSetFrameSamplesMinMethodInfo
+    ResolveAudioEncoderMethod "setHardMin" o = AudioEncoderSetHardMinMethodInfo
+    ResolveAudioEncoderMethod "setHardResync" o = AudioEncoderSetHardResyncMethodInfo
+    ResolveAudioEncoderMethod "setHeaders" o = AudioEncoderSetHeadersMethodInfo
+    ResolveAudioEncoderMethod "setLatency" o = AudioEncoderSetLatencyMethodInfo
+    ResolveAudioEncoderMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioEncoderMethod "setLookahead" o = AudioEncoderSetLookaheadMethodInfo
+    ResolveAudioEncoderMethod "setMarkGranule" o = AudioEncoderSetMarkGranuleMethodInfo
+    ResolveAudioEncoderMethod "setMeta" o = Gst.Preset.PresetSetMetaMethodInfo
+    ResolveAudioEncoderMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioEncoderMethod "setOutputFormat" o = AudioEncoderSetOutputFormatMethodInfo
+    ResolveAudioEncoderMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioEncoderMethod "setPerfectTimestamp" o = AudioEncoderSetPerfectTimestampMethodInfo
+    ResolveAudioEncoderMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioEncoderMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioEncoderMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioEncoderMethod "setTolerance" o = AudioEncoderSetToleranceMethodInfo
+    ResolveAudioEncoderMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioEncoderMethod t AudioEncoder, O.MethodInfo info AudioEncoder p) => OL.IsLabel t (AudioEncoder -> 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 "hard-resync"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@hard-resync@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioEncoder #hardResync
+@
+-}
+getAudioEncoderHardResync :: (MonadIO m, IsAudioEncoder o) => o -> m Bool
+getAudioEncoderHardResync obj = liftIO $ B.Properties.getObjectPropertyBool obj "hard-resync"
+
+{- |
+Set the value of the “@hard-resync@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioEncoder [ #hardResync 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioEncoderHardResync :: (MonadIO m, IsAudioEncoder o) => o -> Bool -> m ()
+setAudioEncoderHardResync obj val = liftIO $ B.Properties.setObjectPropertyBool obj "hard-resync" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@hard-resync@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioEncoderHardResync :: (IsAudioEncoder o) => Bool -> IO (GValueConstruct o)
+constructAudioEncoderHardResync val = B.Properties.constructObjectPropertyBool "hard-resync" val
+
+#if ENABLE_OVERLOADING
+data AudioEncoderHardResyncPropertyInfo
+instance AttrInfo AudioEncoderHardResyncPropertyInfo where
+    type AttrAllowedOps AudioEncoderHardResyncPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderHardResyncPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioEncoderHardResyncPropertyInfo = IsAudioEncoder
+    type AttrGetType AudioEncoderHardResyncPropertyInfo = Bool
+    type AttrLabel AudioEncoderHardResyncPropertyInfo = "hard-resync"
+    type AttrOrigin AudioEncoderHardResyncPropertyInfo = AudioEncoder
+    attrGet _ = getAudioEncoderHardResync
+    attrSet _ = setAudioEncoderHardResync
+    attrConstruct _ = constructAudioEncoderHardResync
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "mark-granule"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@mark-granule@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioEncoder #markGranule
+@
+-}
+getAudioEncoderMarkGranule :: (MonadIO m, IsAudioEncoder o) => o -> m Bool
+getAudioEncoderMarkGranule obj = liftIO $ B.Properties.getObjectPropertyBool obj "mark-granule"
+
+#if ENABLE_OVERLOADING
+data AudioEncoderMarkGranulePropertyInfo
+instance AttrInfo AudioEncoderMarkGranulePropertyInfo where
+    type AttrAllowedOps AudioEncoderMarkGranulePropertyInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderMarkGranulePropertyInfo = (~) ()
+    type AttrBaseTypeConstraint AudioEncoderMarkGranulePropertyInfo = IsAudioEncoder
+    type AttrGetType AudioEncoderMarkGranulePropertyInfo = Bool
+    type AttrLabel AudioEncoderMarkGranulePropertyInfo = "mark-granule"
+    type AttrOrigin AudioEncoderMarkGranulePropertyInfo = AudioEncoder
+    attrGet _ = getAudioEncoderMarkGranule
+    attrSet _ = undefined
+    attrConstruct _ = undefined
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "perfect-timestamp"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Just False,Just False)
+
+{- |
+Get the value of the “@perfect-timestamp@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioEncoder #perfectTimestamp
+@
+-}
+getAudioEncoderPerfectTimestamp :: (MonadIO m, IsAudioEncoder o) => o -> m Bool
+getAudioEncoderPerfectTimestamp obj = liftIO $ B.Properties.getObjectPropertyBool obj "perfect-timestamp"
+
+{- |
+Set the value of the “@perfect-timestamp@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioEncoder [ #perfectTimestamp 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioEncoderPerfectTimestamp :: (MonadIO m, IsAudioEncoder o) => o -> Bool -> m ()
+setAudioEncoderPerfectTimestamp obj val = liftIO $ B.Properties.setObjectPropertyBool obj "perfect-timestamp" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@perfect-timestamp@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioEncoderPerfectTimestamp :: (IsAudioEncoder o) => Bool -> IO (GValueConstruct o)
+constructAudioEncoderPerfectTimestamp val = B.Properties.constructObjectPropertyBool "perfect-timestamp" val
+
+#if ENABLE_OVERLOADING
+data AudioEncoderPerfectTimestampPropertyInfo
+instance AttrInfo AudioEncoderPerfectTimestampPropertyInfo where
+    type AttrAllowedOps AudioEncoderPerfectTimestampPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderPerfectTimestampPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioEncoderPerfectTimestampPropertyInfo = IsAudioEncoder
+    type AttrGetType AudioEncoderPerfectTimestampPropertyInfo = Bool
+    type AttrLabel AudioEncoderPerfectTimestampPropertyInfo = "perfect-timestamp"
+    type AttrOrigin AudioEncoderPerfectTimestampPropertyInfo = AudioEncoder
+    attrGet _ = getAudioEncoderPerfectTimestamp
+    attrSet _ = setAudioEncoderPerfectTimestamp
+    attrConstruct _ = constructAudioEncoderPerfectTimestamp
+    attrClear _ = undefined
+#endif
+
+-- VVV Prop "tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+   -- Nullable: (Nothing,Nothing)
+
+{- |
+Get the value of the “@tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioEncoder #tolerance
+@
+-}
+getAudioEncoderTolerance :: (MonadIO m, IsAudioEncoder o) => o -> m Int64
+getAudioEncoderTolerance obj = liftIO $ B.Properties.getObjectPropertyInt64 obj "tolerance"
+
+{- |
+Set the value of the “@tolerance@” property.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioEncoder [ #tolerance 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioEncoderTolerance :: (MonadIO m, IsAudioEncoder o) => o -> Int64 -> m ()
+setAudioEncoderTolerance obj val = liftIO $ B.Properties.setObjectPropertyInt64 obj "tolerance" val
+
+{- |
+Construct a `GValueConstruct` with valid value for the “@tolerance@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
+-}
+constructAudioEncoderTolerance :: (IsAudioEncoder o) => Int64 -> IO (GValueConstruct o)
+constructAudioEncoderTolerance val = B.Properties.constructObjectPropertyInt64 "tolerance" val
+
+#if ENABLE_OVERLOADING
+data AudioEncoderTolerancePropertyInfo
+instance AttrInfo AudioEncoderTolerancePropertyInfo where
+    type AttrAllowedOps AudioEncoderTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioEncoderTolerancePropertyInfo = IsAudioEncoder
+    type AttrGetType AudioEncoderTolerancePropertyInfo = Int64
+    type AttrLabel AudioEncoderTolerancePropertyInfo = "tolerance"
+    type AttrOrigin AudioEncoderTolerancePropertyInfo = AudioEncoder
+    attrGet _ = getAudioEncoderTolerance
+    attrSet _ = setAudioEncoderTolerance
+    attrConstruct _ = constructAudioEncoderTolerance
+    attrClear _ = undefined
+#endif
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioEncoder
+type instance O.AttributeList AudioEncoder = AudioEncoderAttributeList
+type AudioEncoderAttributeList = ('[ '("hardResync", AudioEncoderHardResyncPropertyInfo), '("markGranule", AudioEncoderMarkGranulePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("perfectTimestamp", AudioEncoderPerfectTimestampPropertyInfo), '("tolerance", AudioEncoderTolerancePropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+audioEncoderHardResync :: AttrLabelProxy "hardResync"
+audioEncoderHardResync = AttrLabelProxy
+
+audioEncoderMarkGranule :: AttrLabelProxy "markGranule"
+audioEncoderMarkGranule = AttrLabelProxy
+
+audioEncoderPerfectTimestamp :: AttrLabelProxy "perfectTimestamp"
+audioEncoderPerfectTimestamp = AttrLabelProxy
+
+audioEncoderTolerance :: AttrLabelProxy "tolerance"
+audioEncoderTolerance = AttrLabelProxy
+
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioEncoder = AudioEncoderSignalList
+type AudioEncoderSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioEncoder::allocate_output_buffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_allocate_output_buffer" gst_audio_encoder_allocate_output_buffer :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Word64 ->                               -- size : TBasicType TUInt64
+    IO (Ptr Gst.Buffer.Buffer)
+
+{- |
+Helper function that allocates a buffer to hold an encoded audio frame
+for /@enc@/\'s current output format.
+-}
+audioEncoderAllocateOutputBuffer ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Word64
+    {- ^ /@size@/: size of the buffer -}
+    -> m Gst.Buffer.Buffer
+    {- ^ __Returns:__ allocated buffer -}
+audioEncoderAllocateOutputBuffer enc size = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_allocate_output_buffer enc' size
+    checkUnexpectedReturnNULL "audioEncoderAllocateOutputBuffer" result
+    result' <- (wrapBoxed Gst.Buffer.Buffer) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderAllocateOutputBufferMethodInfo
+instance (signature ~ (Word64 -> m Gst.Buffer.Buffer), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderAllocateOutputBufferMethodInfo a signature where
+    overloadedMethod _ = audioEncoderAllocateOutputBuffer
+
+#endif
+
+-- method AudioEncoder::finish_frame
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "encoded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples (per channel) represented by encoded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "FlowReturn"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_finish_frame" gst_audio_encoder_finish_frame :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Int32 ->                                -- samples : TBasicType TInt
+    IO CInt
+
+{- |
+Collects encoded data and pushes encoded data downstream.
+Source pad caps must be set when this is called.
+
+If /@samples@/ \< 0, then best estimate is all samples provided to encoder
+(subclass) so far.  /@buf@/ may be NULL, in which case next number of /@samples@/
+are considered discarded, e.g. as a result of discontinuous transmission,
+and a discontinuity is marked.
+
+Note that samples received in 'GI.GstAudio.Structs.AudioEncoderClass.AudioEncoderClass'.@/handle_frame/@()
+may be invalidated by a call to this function.
+-}
+audioEncoderFinishFrame ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Gst.Buffer.Buffer
+    {- ^ /@buffer@/: encoded data -}
+    -> Int32
+    {- ^ /@samples@/: number of samples (per channel) represented by encoded data -}
+    -> m Gst.Enums.FlowReturn
+    {- ^ __Returns:__ a 'GI.Gst.Enums.FlowReturn' that should be escalated to caller (of caller) -}
+audioEncoderFinishFrame enc buffer samples = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    result <- gst_audio_encoder_finish_frame enc' buffer' samples
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr enc
+    touchManagedPtr buffer
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderFinishFrameMethodInfo
+instance (signature ~ (Gst.Buffer.Buffer -> Int32 -> m Gst.Enums.FlowReturn), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderFinishFrameMethodInfo a signature where
+    overloadedMethod _ = audioEncoderFinishFrame
+
+#endif
+
+-- method AudioEncoder::get_allocator
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocator", argType = TInterface (Name {namespace = "Gst", name = "Allocator"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAllocator\nused", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "params", argType = TInterface (Name {namespace = "Gst", name = "AllocationParams"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the\n#GstAllocationParams of @allocator", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_allocator" gst_audio_encoder_get_allocator :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr (Ptr Gst.Allocator.Allocator) ->    -- allocator : TInterface (Name {namespace = "Gst", name = "Allocator"})
+    Ptr Gst.AllocationParams.AllocationParams -> -- params : TInterface (Name {namespace = "Gst", name = "AllocationParams"})
+    IO ()
+
+{- |
+Lets 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' sub-classes to know the memory /@allocator@/
+used by the base class and its /@params@/.
+
+Unref the /@allocator@/ after use it.
+-}
+audioEncoderGetAllocator ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m ((Gst.Allocator.Allocator, Gst.AllocationParams.AllocationParams))
+audioEncoderGetAllocator enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    allocator <- allocMem :: IO (Ptr (Ptr Gst.Allocator.Allocator))
+    params <- callocBoxedBytes 64 :: IO (Ptr Gst.AllocationParams.AllocationParams)
+    gst_audio_encoder_get_allocator enc' allocator params
+    allocator' <- peek allocator
+    allocator'' <- (wrapObject Gst.Allocator.Allocator) allocator'
+    params' <- (wrapBoxed Gst.AllocationParams.AllocationParams) params
+    touchManagedPtr enc
+    freeMem allocator
+    return (allocator'', params')
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetAllocatorMethodInfo
+instance (signature ~ (m ((Gst.Allocator.Allocator, Gst.AllocationParams.AllocationParams))), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetAllocatorMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetAllocator
+
+#endif
+
+-- method AudioEncoder::get_audio_info
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_audio_info" gst_audio_encoder_get_audio_info :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO (Ptr GstAudio.AudioInfo.AudioInfo)
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetAudioInfo ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m GstAudio.AudioInfo.AudioInfo
+    {- ^ __Returns:__ a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' describing the input audio format -}
+audioEncoderGetAudioInfo enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_audio_info enc'
+    checkUnexpectedReturnNULL "audioEncoderGetAudioInfo" result
+    result' <- (wrapBoxed GstAudio.AudioInfo.AudioInfo) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetAudioInfoMethodInfo
+instance (signature ~ (m GstAudio.AudioInfo.AudioInfo), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetAudioInfoMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetAudioInfo
+
+#endif
+
+-- method AudioEncoder::get_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", 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_encoder_get_drainable" gst_audio_encoder_get_drainable :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+Queries encoder drain handling.
+-}
+audioEncoderGetDrainable ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if drainable handling is enabled.
+
+MT safe. -}
+audioEncoderGetDrainable enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_drainable enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetDrainableMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetDrainable
+
+#endif
+
+-- method AudioEncoder::get_frame_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_max" gst_audio_encoder_get_frame_max :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetFrameMax ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured maximum handled frames -}
+audioEncoderGetFrameMax enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_frame_max enc'
+    touchManagedPtr enc
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameMaxMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetFrameMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameMax
+
+#endif
+
+-- method AudioEncoder::get_frame_samples_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_samples_max" gst_audio_encoder_get_frame_samples_max :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetFrameSamplesMax ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently maximum requested samples per frame -}
+audioEncoderGetFrameSamplesMax enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_frame_samples_max enc'
+    touchManagedPtr enc
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameSamplesMaxMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetFrameSamplesMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameSamplesMax
+
+#endif
+
+-- method AudioEncoder::get_frame_samples_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_samples_min" gst_audio_encoder_get_frame_samples_min :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetFrameSamplesMin ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently minimum requested samples per frame -}
+audioEncoderGetFrameSamplesMin enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_frame_samples_min enc'
+    touchManagedPtr enc
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameSamplesMinMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetFrameSamplesMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameSamplesMin
+
+#endif
+
+-- method AudioEncoder::get_hard_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", 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_encoder_get_hard_min" gst_audio_encoder_get_hard_min :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+Queries encoder hard minimum handling.
+-}
+audioEncoderGetHardMin ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if hard minimum handling is enabled.
+
+MT safe. -}
+audioEncoderGetHardMin enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_hard_min enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetHardMinMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetHardMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetHardMin
+
+#endif
+
+-- method AudioEncoder::get_hard_resync
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_encoder_get_hard_resync" gst_audio_encoder_get_hard_resync :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetHardResync ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    -> m Bool
+audioEncoderGetHardResync enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_hard_resync enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetHardResyncMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetHardResyncMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetHardResync
+
+#endif
+
+-- method AudioEncoder::get_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to storage to hold minimum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer to storage to hold maximum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_latency" gst_audio_encoder_get_latency :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Word64 ->                           -- min : TBasicType TUInt64
+    Ptr Word64 ->                           -- max : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets the variables pointed to by /@min@/ and /@max@/ to the currently configured
+latency.
+-}
+audioEncoderGetLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m ((Word64, Word64))
+audioEncoderGetLatency enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    min <- allocMem :: IO (Ptr Word64)
+    max <- allocMem :: IO (Ptr Word64)
+    gst_audio_encoder_get_latency enc' min max
+    min' <- peek min
+    max' <- peek max
+    touchManagedPtr enc
+    freeMem min
+    freeMem max
+    return (min', max')
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetLatencyMethodInfo
+instance (signature ~ (m ((Word64, Word64))), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetLatency
+
+#endif
+
+-- method AudioEncoder::get_lookahead
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_lookahead" gst_audio_encoder_get_lookahead :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO Int32
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderGetLookahead ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Int32
+    {- ^ __Returns:__ currently configured encoder lookahead -}
+audioEncoderGetLookahead enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_lookahead enc'
+    touchManagedPtr enc
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetLookaheadMethodInfo
+instance (signature ~ (m Int32), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetLookaheadMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetLookahead
+
+#endif
+
+-- method AudioEncoder::get_mark_granule
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", 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_encoder_get_mark_granule" gst_audio_encoder_get_mark_granule :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+Queries if the encoder will handle granule marking.
+-}
+audioEncoderGetMarkGranule ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if granule marking is enabled.
+
+MT safe. -}
+audioEncoderGetMarkGranule enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_mark_granule enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetMarkGranuleMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetMarkGranuleMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetMarkGranule
+
+#endif
+
+-- method AudioEncoder::get_perfect_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", 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_encoder_get_perfect_timestamp" gst_audio_encoder_get_perfect_timestamp :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+Queries encoder perfect timestamp behaviour.
+-}
+audioEncoderGetPerfectTimestamp ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if perfect timestamp setting enabled.
+
+MT safe. -}
+audioEncoderGetPerfectTimestamp enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_perfect_timestamp enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetPerfectTimestampMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetPerfectTimestampMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetPerfectTimestamp
+
+#endif
+
+-- method AudioEncoder::get_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_tolerance" gst_audio_encoder_get_tolerance :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO Word64
+
+{- |
+Queries current audio jitter tolerance threshold.
+-}
+audioEncoderGetTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Word64
+    {- ^ __Returns:__ encoder audio jitter tolerance threshold.
+
+MT safe. -}
+audioEncoderGetTolerance enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_get_tolerance enc'
+    touchManagedPtr enc
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioEncoderGetToleranceMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderGetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetTolerance
+
+#endif
+
+-- method AudioEncoder::merge_tags
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tags", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstTagList to merge, or NULL to unset\n    previously-set tags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface (Name {namespace = "Gst", name = "TagMergeMode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstTagMergeMode to use, usually #GST_TAG_MERGE_REPLACE", 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_encoder_merge_tags" gst_audio_encoder_merge_tags :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Gst.TagList.TagList ->              -- tags : TInterface (Name {namespace = "Gst", name = "TagList"})
+    CUInt ->                                -- mode : TInterface (Name {namespace = "Gst", name = "TagMergeMode"})
+    IO ()
+
+{- |
+Sets the audio encoder tags and how they should be merged with any
+upstream stream tags. This will override any tags previously-set
+with 'GI.GstAudio.Objects.AudioEncoder.audioEncoderMergeTags'.
+
+Note that this is provided for convenience, and the subclass is
+not required to use this and can still do tag handling on its own.
+
+MT safe.
+-}
+audioEncoderMergeTags ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Maybe (Gst.TagList.TagList)
+    {- ^ /@tags@/: a 'GI.Gst.Structs.TagList.TagList' to merge, or NULL to unset
+    previously-set tags -}
+    -> Gst.Enums.TagMergeMode
+    {- ^ /@mode@/: the 'GI.Gst.Enums.TagMergeMode' to use, usually @/GST_TAG_MERGE_REPLACE/@ -}
+    -> m ()
+audioEncoderMergeTags enc tags mode = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    maybeTags <- case tags of
+        Nothing -> return nullPtr
+        Just jTags -> do
+            jTags' <- unsafeManagedPtrGetPtr jTags
+            return jTags'
+    let mode' = (fromIntegral . fromEnum) mode
+    gst_audio_encoder_merge_tags enc' maybeTags mode'
+    touchManagedPtr enc
+    whenJust tags touchManagedPtr
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderMergeTagsMethodInfo
+instance (signature ~ (Maybe (Gst.TagList.TagList) -> Gst.Enums.TagMergeMode -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderMergeTagsMethodInfo a signature where
+    overloadedMethod _ = audioEncoderMergeTags
+
+#endif
+
+-- method AudioEncoder::negotiate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", 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_encoder_negotiate" gst_audio_encoder_negotiate :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    IO CInt
+
+{- |
+Negotiate with downstream elements to currently configured 'GI.Gst.Structs.Caps.Caps'.
+Unmark GST_PAD_FLAG_NEED_RECONFIGURE in any case. But mark it again if
+negotiate fails.
+-}
+audioEncoderNegotiate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the negotiation succeeded, else 'False'. -}
+audioEncoderNegotiate enc = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    result <- gst_audio_encoder_negotiate enc'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderNegotiateMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderNegotiateMethodInfo a signature where
+    overloadedMethod _ = audioEncoderNegotiate
+
+#endif
+
+-- method AudioEncoder::proxy_getcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "initial caps", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "filter", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "filter caps", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Caps"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_proxy_getcaps" gst_audio_encoder_proxy_getcaps :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    Ptr Gst.Caps.Caps ->                    -- filter : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO (Ptr Gst.Caps.Caps)
+
+{- |
+Returns caps that express /@caps@/ (or sink template caps if /@caps@/ == NULL)
+restricted to channel\/rate combinations supported by downstream elements
+(e.g. muxers).
+-}
+audioEncoderProxyGetcaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@caps@/: initial caps -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@filter@/: filter caps -}
+    -> m Gst.Caps.Caps
+    {- ^ __Returns:__ a 'GI.Gst.Structs.Caps.Caps' owned by caller -}
+audioEncoderProxyGetcaps enc caps filter = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    maybeCaps <- case caps of
+        Nothing -> return nullPtr
+        Just jCaps -> do
+            jCaps' <- unsafeManagedPtrGetPtr jCaps
+            return jCaps'
+    maybeFilter <- case filter of
+        Nothing -> return nullPtr
+        Just jFilter -> do
+            jFilter' <- unsafeManagedPtrGetPtr jFilter
+            return jFilter'
+    result <- gst_audio_encoder_proxy_getcaps enc' maybeCaps maybeFilter
+    checkUnexpectedReturnNULL "audioEncoderProxyGetcaps" result
+    result' <- (wrapBoxed Gst.Caps.Caps) result
+    touchManagedPtr enc
+    whenJust caps touchManagedPtr
+    whenJust filter touchManagedPtr
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderProxyGetcapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps.Caps) -> Maybe (Gst.Caps.Caps) -> m Gst.Caps.Caps), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderProxyGetcapsMethodInfo a signature where
+    overloadedMethod _ = audioEncoderProxyGetcaps
+
+#endif
+
+-- method AudioEncoder::set_allocation_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocation_caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstCaps or %NULL", 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_encoder_set_allocation_caps" gst_audio_encoder_set_allocation_caps :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Gst.Caps.Caps ->                    -- allocation_caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO ()
+
+{- |
+Sets a caps in allocation query which are different from the set
+pad\'s caps. Use this function before calling
+'GI.GstAudio.Objects.AudioEncoder.audioEncoderNegotiate'. Setting to 'Nothing' the allocation
+query will use the caps from the pad.
+
+/Since: 1.10/
+-}
+audioEncoderSetAllocationCaps ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Maybe (Gst.Caps.Caps)
+    {- ^ /@allocationCaps@/: a 'GI.Gst.Structs.Caps.Caps' or 'Nothing' -}
+    -> m ()
+audioEncoderSetAllocationCaps enc allocationCaps = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    maybeAllocationCaps <- case allocationCaps of
+        Nothing -> return nullPtr
+        Just jAllocationCaps -> do
+            jAllocationCaps' <- unsafeManagedPtrGetPtr jAllocationCaps
+            return jAllocationCaps'
+    gst_audio_encoder_set_allocation_caps enc' maybeAllocationCaps
+    touchManagedPtr enc
+    whenJust allocationCaps touchManagedPtr
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetAllocationCapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps.Caps) -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetAllocationCapsMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetAllocationCaps
+
+#endif
+
+-- method AudioEncoder::set_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_encoder_set_drainable" gst_audio_encoder_set_drainable :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Configures encoder drain handling.  If drainable, subclass might
+be handed a NULL buffer to have it return any leftover encoded data.
+Otherwise, it is not considered so capable and will only ever be passed
+real data.
+
+MT safe.
+-}
+audioEncoderSetDrainable ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioEncoderSetDrainable enc enabled = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_drainable enc' enabled'
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetDrainableMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetDrainable
+
+#endif
+
+-- method AudioEncoder::set_frame_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of frames", 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_encoder_set_frame_max" gst_audio_encoder_set_frame_max :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Int32 ->                                -- num : TBasicType TInt
+    IO ()
+
+{- |
+Sets max number of frames accepted at once (assumed minimally 1).
+Requires /@frameSamplesMin@/ and /@frameSamplesMax@/ to be the equal.
+
+Note: This value will be reset to 0 every time before
+'GI.GstAudio.Structs.AudioEncoderClass.AudioEncoderClass'.@/set_format/@() is called.
+-}
+audioEncoderSetFrameMax ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Int32
+    {- ^ /@num@/: number of frames -}
+    -> m ()
+audioEncoderSetFrameMax enc num = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_frame_max enc' num
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameMaxMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetFrameMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameMax
+
+#endif
+
+-- method AudioEncoder::set_frame_samples_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples per frame", 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_encoder_set_frame_samples_max" gst_audio_encoder_set_frame_samples_max :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Int32 ->                                -- num : TBasicType TInt
+    IO ()
+
+{- |
+Sets number of samples (per channel) subclass needs to be handed,
+at most or will be handed all available if 0.
+
+If an exact number of samples is required, 'GI.GstAudio.Objects.AudioEncoder.audioEncoderSetFrameSamplesMin'
+must be called with the same number.
+
+Note: This value will be reset to 0 every time before
+'GI.GstAudio.Structs.AudioEncoderClass.AudioEncoderClass'.@/set_format/@() is called.
+-}
+audioEncoderSetFrameSamplesMax ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Int32
+    {- ^ /@num@/: number of samples per frame -}
+    -> m ()
+audioEncoderSetFrameSamplesMax enc num = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_frame_samples_max enc' num
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameSamplesMaxMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetFrameSamplesMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameSamplesMax
+
+#endif
+
+-- method AudioEncoder::set_frame_samples_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples per frame", 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_encoder_set_frame_samples_min" gst_audio_encoder_set_frame_samples_min :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Int32 ->                                -- num : TBasicType TInt
+    IO ()
+
+{- |
+Sets number of samples (per channel) subclass needs to be handed,
+at least or will be handed all available if 0.
+
+If an exact number of samples is required, 'GI.GstAudio.Objects.AudioEncoder.audioEncoderSetFrameSamplesMax'
+must be called with the same number.
+
+Note: This value will be reset to 0 every time before
+'GI.GstAudio.Structs.AudioEncoderClass.AudioEncoderClass'.@/set_format/@() is called.
+-}
+audioEncoderSetFrameSamplesMin ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Int32
+    {- ^ /@num@/: number of samples per frame -}
+    -> m ()
+audioEncoderSetFrameSamplesMin enc num = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_frame_samples_min enc' num
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameSamplesMinMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetFrameSamplesMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameSamplesMin
+
+#endif
+
+-- method AudioEncoder::set_hard_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_encoder_set_hard_min" gst_audio_encoder_set_hard_min :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Configures encoder hard minimum handling.  If enabled, subclass
+will never be handed less samples than it configured, which otherwise
+might occur near end-of-data handling.  Instead, the leftover samples
+will simply be discarded.
+
+MT safe.
+-}
+audioEncoderSetHardMin ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioEncoderSetHardMin enc enabled = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_hard_min enc' enabled'
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHardMinMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetHardMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHardMin
+
+#endif
+
+-- method AudioEncoder::set_hard_resync
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_encoder_set_hard_resync" gst_audio_encoder_set_hard_resync :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+/No description available in the introspection data./
+-}
+audioEncoderSetHardResync ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    -> Bool
+    -> m ()
+audioEncoderSetHardResync enc enabled = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_hard_resync enc' enabled'
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHardResyncMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetHardResyncMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHardResync
+
+#endif
+
+-- method AudioEncoder::set_headers
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "headers", argType = TGList (TInterface (Name {namespace = "Gst", name = "Buffer"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a list of\n  #GstBuffer containing the codec header", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_headers" gst_audio_encoder_set_headers :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr (GList (Ptr Gst.Buffer.Buffer)) ->  -- headers : TGList (TInterface (Name {namespace = "Gst", name = "Buffer"}))
+    IO ()
+
+{- |
+Set the codec headers to be sent downstream whenever requested.
+-}
+audioEncoderSetHeaders ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> [Gst.Buffer.Buffer]
+    {- ^ /@headers@/: a list of
+  'GI.Gst.Structs.Buffer.Buffer' containing the codec header -}
+    -> m ()
+audioEncoderSetHeaders enc headers = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    headers' <- mapM B.ManagedPtr.disownBoxed headers
+    headers'' <- packGList headers'
+    gst_audio_encoder_set_headers enc' headers''
+    touchManagedPtr enc
+    mapM_ touchManagedPtr headers
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHeadersMethodInfo
+instance (signature ~ ([Gst.Buffer.Buffer] -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetHeadersMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHeaders
+
+#endif
+
+-- method AudioEncoder::set_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "minimum latency", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "maximum latency", 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_encoder_set_latency" gst_audio_encoder_set_latency :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Word64 ->                               -- min : TBasicType TUInt64
+    Word64 ->                               -- max : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets encoder latency.
+-}
+audioEncoderSetLatency ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Word64
+    {- ^ /@min@/: minimum latency -}
+    -> Word64
+    {- ^ /@max@/: maximum latency -}
+    -> m ()
+audioEncoderSetLatency enc min max = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_latency enc' min max
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetLatencyMethodInfo
+instance (signature ~ (Word64 -> Word64 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetLatency
+
+#endif
+
+-- method AudioEncoder::set_lookahead
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "lookahead", 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_encoder_set_lookahead" gst_audio_encoder_set_lookahead :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Int32 ->                                -- num : TBasicType TInt
+    IO ()
+
+{- |
+Sets encoder lookahead (in units of input rate samples)
+
+Note: This value will be reset to 0 every time before
+'GI.GstAudio.Structs.AudioEncoderClass.AudioEncoderClass'.@/set_format/@() is called.
+-}
+audioEncoderSetLookahead ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Int32
+    {- ^ /@num@/: lookahead -}
+    -> m ()
+audioEncoderSetLookahead enc num = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_lookahead enc' num
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetLookaheadMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetLookaheadMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetLookahead
+
+#endif
+
+-- method AudioEncoder::set_mark_granule
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_encoder_set_mark_granule" gst_audio_encoder_set_mark_granule :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Enable or disable encoder granule handling.
+
+MT safe.
+-}
+audioEncoderSetMarkGranule ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioEncoderSetMarkGranule enc enabled = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_mark_granule enc' enabled'
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetMarkGranuleMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetMarkGranuleMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetMarkGranule
+
+#endif
+
+-- method AudioEncoder::set_output_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstCaps", 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_encoder_set_output_format" gst_audio_encoder_set_output_format :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO CInt
+
+{- |
+Configure output caps on the srcpad of /@enc@/.
+-}
+audioEncoderSetOutputFormat ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Gst.Caps.Caps
+    {- ^ /@caps@/: 'GI.Gst.Structs.Caps.Caps' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' on success. -}
+audioEncoderSetOutputFormat enc caps = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    caps' <- unsafeManagedPtrGetPtr caps
+    result <- gst_audio_encoder_set_output_format enc' caps'
+    let result' = (/= 0) result
+    touchManagedPtr enc
+    touchManagedPtr caps
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetOutputFormatMethodInfo
+instance (signature ~ (Gst.Caps.Caps -> m Bool), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetOutputFormatMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetOutputFormat
+
+#endif
+
+-- method AudioEncoder::set_perfect_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", 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_encoder_set_perfect_timestamp" gst_audio_encoder_set_perfect_timestamp :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+{- |
+Enable or disable encoder perfect output timestamp preference.
+
+MT safe.
+-}
+audioEncoderSetPerfectTimestamp ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Bool
+    {- ^ /@enabled@/: new state -}
+    -> m ()
+audioEncoderSetPerfectTimestamp enc enabled = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_perfect_timestamp enc' enabled'
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetPerfectTimestampMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetPerfectTimestampMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetPerfectTimestamp
+
+#endif
+
+-- method AudioEncoder::set_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "enc", argType = TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioEncoder", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tolerance", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new tolerance", 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_encoder_set_tolerance" gst_audio_encoder_set_tolerance :: 
+    Ptr AudioEncoder ->                     -- enc : TInterface (Name {namespace = "GstAudio", name = "AudioEncoder"})
+    Word64 ->                               -- tolerance : TBasicType TUInt64
+    IO ()
+
+{- |
+Configures encoder audio jitter tolerance threshold.
+
+MT safe.
+-}
+audioEncoderSetTolerance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioEncoder a) =>
+    a
+    {- ^ /@enc@/: a 'GI.GstAudio.Objects.AudioEncoder.AudioEncoder' -}
+    -> Word64
+    {- ^ /@tolerance@/: new tolerance -}
+    -> m ()
+audioEncoderSetTolerance enc tolerance = liftIO $ do
+    enc' <- unsafeManagedPtrCastPtr enc
+    gst_audio_encoder_set_tolerance enc' tolerance
+    touchManagedPtr enc
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioEncoderSetToleranceMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioEncoder a) => O.MethodInfo AudioEncoderSetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetTolerance
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioEncoder.hs-boot b/GI/GstAudio/Objects/AudioEncoder.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioEncoder.hs-boot
@@ -0,0 +1,137 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioEncoder 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
+
+newtype AudioEncoder = AudioEncoder (ManagedPtr AudioEncoder)
+instance GObject AudioEncoder where
+class (GObject o, O.IsDescendantOf AudioEncoder o) => IsAudioEncoder o
+instance (GObject o, O.IsDescendantOf AudioEncoder o) => IsAudioEncoder o
+instance O.HasParentTypes AudioEncoder
+#if ENABLE_OVERLOADING
+data AudioEncoderHardResyncPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderMarkGranulePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderPerfectTimestampPropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderTolerancePropertyInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderAllocateOutputBufferMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderFinishFrameMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetAllocatorMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetAudioInfoMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetDrainableMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameMaxMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameSamplesMaxMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetFrameSamplesMinMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetHardMinMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetHardResyncMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetLookaheadMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetMarkGranuleMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetPerfectTimestampMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderGetToleranceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderMergeTagsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderNegotiateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderProxyGetcapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetAllocationCapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetDrainableMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameMaxMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameSamplesMaxMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetFrameSamplesMinMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHardMinMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHardResyncMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetHeadersMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetLookaheadMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetMarkGranuleMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetOutputFormatMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetPerfectTimestampMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioEncoderSetToleranceMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioFilter.hs b/GI/GstAudio/Objects/AudioFilter.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioFilter.hs
@@ -0,0 +1,235 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+'GI.GstAudio.Objects.AudioFilter.AudioFilter' is a 'GI.GstBase.Objects.BaseTransform.BaseTransform'\<!-- -->-derived base class for simple audio
+filters, ie. those that output the same format that they get as input.
+
+'GI.GstAudio.Objects.AudioFilter.AudioFilter' will parse the input format for you (with error checking)
+before calling your setup function. Also, elements deriving from
+'GI.GstAudio.Objects.AudioFilter.AudioFilter' may use 'GI.GstAudio.Structs.AudioFilterClass.audioFilterClassAddPadTemplates' from
+their class_init function to easily configure the set of caps\/formats that
+the element is able to handle.
+
+Derived classes should override the 'GI.GstAudio.Structs.AudioFilterClass.AudioFilterClass'.@/setup/@() and
+'GI.GstBase.Structs.BaseTransformClass.BaseTransformClass'.@/transform_ip/@() and\/or
+'GI.GstBase.Structs.BaseTransformClass.BaseTransformClass'.@/transform/@()
+virtual functions in their class_init function.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioFilter
+    ( 
+
+-- * Exported types
+    AudioFilter(..)                         ,
+    IsAudioFilter                           ,
+    toAudioFilter                           ,
+    noAudioFilter                           ,
+
+
+    ) 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 qualified GI.GstBase.Objects.BaseTransform as GstBase.BaseTransform
+
+-- | Memory-managed wrapper type.
+newtype AudioFilter = AudioFilter (ManagedPtr AudioFilter)
+foreign import ccall "gst_audio_filter_get_type"
+    c_gst_audio_filter_get_type :: IO GType
+
+instance GObject AudioFilter where
+    gobjectType = c_gst_audio_filter_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioFilter`, for instance with `toAudioFilter`.
+class (GObject o, O.IsDescendantOf AudioFilter o) => IsAudioFilter o
+instance (GObject o, O.IsDescendantOf AudioFilter o) => IsAudioFilter o
+
+instance O.HasParentTypes AudioFilter
+type instance O.ParentTypes AudioFilter = '[GstBase.BaseTransform.BaseTransform, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioFilter`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioFilter :: (MonadIO m, IsAudioFilter o) => o -> m AudioFilter
+toAudioFilter = liftIO . unsafeCastTo AudioFilter
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioFilter`.
+noAudioFilter :: Maybe AudioFilter
+noAudioFilter = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioFilterMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioFilterMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioFilterMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioFilterMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioFilterMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioFilterMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioFilterMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioFilterMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioFilterMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioFilterMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioFilterMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioFilterMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioFilterMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioFilterMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioFilterMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioFilterMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioFilterMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioFilterMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioFilterMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioFilterMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioFilterMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioFilterMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioFilterMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioFilterMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioFilterMethod "isInPlace" o = GstBase.BaseTransform.BaseTransformIsInPlaceMethodInfo
+    ResolveAudioFilterMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioFilterMethod "isPassthrough" o = GstBase.BaseTransform.BaseTransformIsPassthroughMethodInfo
+    ResolveAudioFilterMethod "isQosEnabled" o = GstBase.BaseTransform.BaseTransformIsQosEnabledMethodInfo
+    ResolveAudioFilterMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioFilterMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioFilterMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioFilterMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioFilterMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioFilterMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioFilterMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioFilterMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioFilterMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioFilterMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioFilterMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioFilterMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioFilterMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioFilterMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioFilterMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioFilterMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioFilterMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioFilterMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioFilterMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioFilterMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioFilterMethod "reconfigureSink" o = GstBase.BaseTransform.BaseTransformReconfigureSinkMethodInfo
+    ResolveAudioFilterMethod "reconfigureSrc" o = GstBase.BaseTransform.BaseTransformReconfigureSrcMethodInfo
+    ResolveAudioFilterMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioFilterMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioFilterMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioFilterMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioFilterMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioFilterMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioFilterMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioFilterMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioFilterMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioFilterMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioFilterMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioFilterMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioFilterMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioFilterMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioFilterMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioFilterMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioFilterMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioFilterMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioFilterMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioFilterMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioFilterMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioFilterMethod "updateQos" o = GstBase.BaseTransform.BaseTransformUpdateQosMethodInfo
+    ResolveAudioFilterMethod "updateSrcCaps" o = GstBase.BaseTransform.BaseTransformUpdateSrcCapsMethodInfo
+    ResolveAudioFilterMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioFilterMethod "getAllocator" o = GstBase.BaseTransform.BaseTransformGetAllocatorMethodInfo
+    ResolveAudioFilterMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioFilterMethod "getBufferPool" o = GstBase.BaseTransform.BaseTransformGetBufferPoolMethodInfo
+    ResolveAudioFilterMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioFilterMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioFilterMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioFilterMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioFilterMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioFilterMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioFilterMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioFilterMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioFilterMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioFilterMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioFilterMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioFilterMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioFilterMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioFilterMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioFilterMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioFilterMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioFilterMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioFilterMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioFilterMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioFilterMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioFilterMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioFilterMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioFilterMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioFilterMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioFilterMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioFilterMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioFilterMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioFilterMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioFilterMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioFilterMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioFilterMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioFilterMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioFilterMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioFilterMethod "setGapAware" o = GstBase.BaseTransform.BaseTransformSetGapAwareMethodInfo
+    ResolveAudioFilterMethod "setInPlace" o = GstBase.BaseTransform.BaseTransformSetInPlaceMethodInfo
+    ResolveAudioFilterMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioFilterMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioFilterMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioFilterMethod "setPassthrough" o = GstBase.BaseTransform.BaseTransformSetPassthroughMethodInfo
+    ResolveAudioFilterMethod "setPreferPassthrough" o = GstBase.BaseTransform.BaseTransformSetPreferPassthroughMethodInfo
+    ResolveAudioFilterMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioFilterMethod "setQosEnabled" o = GstBase.BaseTransform.BaseTransformSetQosEnabledMethodInfo
+    ResolveAudioFilterMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioFilterMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioFilterMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioFilterMethod t AudioFilter, O.MethodInfo info AudioFilter p) => OL.IsLabel t (AudioFilter -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioFilter
+type instance O.AttributeList AudioFilter = AudioFilterAttributeList
+type AudioFilterAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("qos", GstBase.BaseTransform.BaseTransformQosPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioFilter = AudioFilterSignalList
+type AudioFilterSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioFilter.hs-boot b/GI/GstAudio/Objects/AudioFilter.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioFilter.hs-boot
@@ -0,0 +1,29 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioFilter 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
+
+newtype AudioFilter = AudioFilter (ManagedPtr AudioFilter)
+instance GObject AudioFilter where
+class (GObject o, O.IsDescendantOf AudioFilter o) => IsAudioFilter o
+instance (GObject o, O.IsDescendantOf AudioFilter o) => IsAudioFilter o
+instance O.HasParentTypes AudioFilter
diff --git a/GI/GstAudio/Objects/AudioRingBuffer.hs b/GI/GstAudio/Objects/AudioRingBuffer.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioRingBuffer.hs
@@ -0,0 +1,1651 @@
+
+
+{- |
+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 object is the base class for audio ringbuffers used by the base
+audio source and sink classes.
+
+The ringbuffer abstracts a circular buffer of data. One reader and
+one writer can operate on the data from different threads in a lockfree
+manner. The base class is sufficiently flexible to be used as an
+abstraction for DMA based ringbuffers as well as a pure software
+implementations.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioRingBuffer
+    ( 
+
+-- * Exported types
+    AudioRingBuffer(..)                     ,
+    IsAudioRingBuffer                       ,
+    toAudioRingBuffer                       ,
+    noAudioRingBuffer                       ,
+
+
+ -- * Methods
+-- ** acquire #method:acquire#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferAcquireMethodInfo        ,
+#endif
+    audioRingBufferAcquire                  ,
+
+
+-- ** activate #method:activate#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferActivateMethodInfo       ,
+#endif
+    audioRingBufferActivate                 ,
+
+
+-- ** advance #method:advance#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferAdvanceMethodInfo        ,
+#endif
+    audioRingBufferAdvance                  ,
+
+
+-- ** clear #method:clear#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferClearMethodInfo          ,
+#endif
+    audioRingBufferClear                    ,
+
+
+-- ** clearAll #method:clearAll#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferClearAllMethodInfo       ,
+#endif
+    audioRingBufferClearAll                 ,
+
+
+-- ** closeDevice #method:closeDevice#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferCloseDeviceMethodInfo    ,
+#endif
+    audioRingBufferCloseDevice              ,
+
+
+-- ** commit #method:commit#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferCommitMethodInfo         ,
+#endif
+    audioRingBufferCommit                   ,
+
+
+-- ** convert #method:convert#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferConvertMethodInfo        ,
+#endif
+    audioRingBufferConvert                  ,
+
+
+-- ** debugSpecBuff #method:debugSpecBuff#
+
+    audioRingBufferDebugSpecBuff            ,
+
+
+-- ** debugSpecCaps #method:debugSpecCaps#
+
+    audioRingBufferDebugSpecCaps            ,
+
+
+-- ** delay #method:delay#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferDelayMethodInfo          ,
+#endif
+    audioRingBufferDelay                    ,
+
+
+-- ** deviceIsOpen #method:deviceIsOpen#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferDeviceIsOpenMethodInfo   ,
+#endif
+    audioRingBufferDeviceIsOpen             ,
+
+
+-- ** isAcquired #method:isAcquired#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferIsAcquiredMethodInfo     ,
+#endif
+    audioRingBufferIsAcquired               ,
+
+
+-- ** isActive #method:isActive#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferIsActiveMethodInfo       ,
+#endif
+    audioRingBufferIsActive                 ,
+
+
+-- ** isFlushing #method:isFlushing#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferIsFlushingMethodInfo     ,
+#endif
+    audioRingBufferIsFlushing               ,
+
+
+-- ** mayStart #method:mayStart#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferMayStartMethodInfo       ,
+#endif
+    audioRingBufferMayStart                 ,
+
+
+-- ** openDevice #method:openDevice#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferOpenDeviceMethodInfo     ,
+#endif
+    audioRingBufferOpenDevice               ,
+
+
+-- ** parseCaps #method:parseCaps#
+
+    audioRingBufferParseCaps                ,
+
+
+-- ** pause #method:pause#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferPauseMethodInfo          ,
+#endif
+    audioRingBufferPause                    ,
+
+
+-- ** prepareRead #method:prepareRead#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferPrepareReadMethodInfo    ,
+#endif
+    audioRingBufferPrepareRead              ,
+
+
+-- ** read #method:read#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferReadMethodInfo           ,
+#endif
+    audioRingBufferRead                     ,
+
+
+-- ** release #method:release#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferReleaseMethodInfo        ,
+#endif
+    audioRingBufferRelease                  ,
+
+
+-- ** samplesDone #method:samplesDone#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSamplesDoneMethodInfo    ,
+#endif
+    audioRingBufferSamplesDone              ,
+
+
+-- ** setCallback #method:setCallback#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSetCallbackMethodInfo    ,
+#endif
+    audioRingBufferSetCallback              ,
+
+
+-- ** setChannelPositions #method:setChannelPositions#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSetChannelPositionsMethodInfo,
+#endif
+    audioRingBufferSetChannelPositions      ,
+
+
+-- ** setFlushing #method:setFlushing#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSetFlushingMethodInfo    ,
+#endif
+    audioRingBufferSetFlushing              ,
+
+
+-- ** setSample #method:setSample#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSetSampleMethodInfo      ,
+#endif
+    audioRingBufferSetSample                ,
+
+
+-- ** setTimestamp #method:setTimestamp#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferSetTimestampMethodInfo   ,
+#endif
+    audioRingBufferSetTimestamp             ,
+
+
+-- ** start #method:start#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferStartMethodInfo          ,
+#endif
+    audioRingBufferStart                    ,
+
+
+-- ** stop #method:stop#
+
+#if ENABLE_OVERLOADING
+    AudioRingBufferStopMethodInfo           ,
+#endif
+    audioRingBufferStop                     ,
+
+
+
+
+    ) 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.GLib.Callbacks as GLib.Callbacks
+import qualified GI.GObject.Objects.Object as GObject.Object
+import qualified GI.Gst.Enums as Gst.Enums
+import qualified GI.Gst.Objects.Object as Gst.Object
+import qualified GI.Gst.Structs.Caps as Gst.Caps
+import qualified GI.GstAudio.Callbacks as GstAudio.Callbacks
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioRingBufferSpec as GstAudio.AudioRingBufferSpec
+
+-- | Memory-managed wrapper type.
+newtype AudioRingBuffer = AudioRingBuffer (ManagedPtr AudioRingBuffer)
+foreign import ccall "gst_audio_ring_buffer_get_type"
+    c_gst_audio_ring_buffer_get_type :: IO GType
+
+instance GObject AudioRingBuffer where
+    gobjectType = c_gst_audio_ring_buffer_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioRingBuffer`, for instance with `toAudioRingBuffer`.
+class (GObject o, O.IsDescendantOf AudioRingBuffer o) => IsAudioRingBuffer o
+instance (GObject o, O.IsDescendantOf AudioRingBuffer o) => IsAudioRingBuffer o
+
+instance O.HasParentTypes AudioRingBuffer
+type instance O.ParentTypes AudioRingBuffer = '[Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioRingBuffer`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioRingBuffer :: (MonadIO m, IsAudioRingBuffer o) => o -> m AudioRingBuffer
+toAudioRingBuffer = liftIO . unsafeCastTo AudioRingBuffer
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioRingBuffer`.
+noAudioRingBuffer :: Maybe AudioRingBuffer
+noAudioRingBuffer = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioRingBufferMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioRingBufferMethod "acquire" o = AudioRingBufferAcquireMethodInfo
+    ResolveAudioRingBufferMethod "activate" o = AudioRingBufferActivateMethodInfo
+    ResolveAudioRingBufferMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "advance" o = AudioRingBufferAdvanceMethodInfo
+    ResolveAudioRingBufferMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioRingBufferMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioRingBufferMethod "clear" o = AudioRingBufferClearMethodInfo
+    ResolveAudioRingBufferMethod "clearAll" o = AudioRingBufferClearAllMethodInfo
+    ResolveAudioRingBufferMethod "closeDevice" o = AudioRingBufferCloseDeviceMethodInfo
+    ResolveAudioRingBufferMethod "commit" o = AudioRingBufferCommitMethodInfo
+    ResolveAudioRingBufferMethod "convert" o = AudioRingBufferConvertMethodInfo
+    ResolveAudioRingBufferMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioRingBufferMethod "delay" o = AudioRingBufferDelayMethodInfo
+    ResolveAudioRingBufferMethod "deviceIsOpen" o = AudioRingBufferDeviceIsOpenMethodInfo
+    ResolveAudioRingBufferMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioRingBufferMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioRingBufferMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioRingBufferMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioRingBufferMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioRingBufferMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioRingBufferMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioRingBufferMethod "isAcquired" o = AudioRingBufferIsAcquiredMethodInfo
+    ResolveAudioRingBufferMethod "isActive" o = AudioRingBufferIsActiveMethodInfo
+    ResolveAudioRingBufferMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioRingBufferMethod "isFlushing" o = AudioRingBufferIsFlushingMethodInfo
+    ResolveAudioRingBufferMethod "mayStart" o = AudioRingBufferMayStartMethodInfo
+    ResolveAudioRingBufferMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioRingBufferMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioRingBufferMethod "openDevice" o = AudioRingBufferOpenDeviceMethodInfo
+    ResolveAudioRingBufferMethod "pause" o = AudioRingBufferPauseMethodInfo
+    ResolveAudioRingBufferMethod "prepareRead" o = AudioRingBufferPrepareReadMethodInfo
+    ResolveAudioRingBufferMethod "read" o = AudioRingBufferReadMethodInfo
+    ResolveAudioRingBufferMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioRingBufferMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioRingBufferMethod "release" o = AudioRingBufferReleaseMethodInfo
+    ResolveAudioRingBufferMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioRingBufferMethod "samplesDone" o = AudioRingBufferSamplesDoneMethodInfo
+    ResolveAudioRingBufferMethod "start" o = AudioRingBufferStartMethodInfo
+    ResolveAudioRingBufferMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioRingBufferMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioRingBufferMethod "stop" o = AudioRingBufferStopMethodInfo
+    ResolveAudioRingBufferMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioRingBufferMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioRingBufferMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioRingBufferMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioRingBufferMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioRingBufferMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioRingBufferMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioRingBufferMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioRingBufferMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioRingBufferMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioRingBufferMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioRingBufferMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioRingBufferMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioRingBufferMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioRingBufferMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioRingBufferMethod "setCallback" o = AudioRingBufferSetCallbackMethodInfo
+    ResolveAudioRingBufferMethod "setChannelPositions" o = AudioRingBufferSetChannelPositionsMethodInfo
+    ResolveAudioRingBufferMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioRingBufferMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioRingBufferMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioRingBufferMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioRingBufferMethod "setFlushing" o = AudioRingBufferSetFlushingMethodInfo
+    ResolveAudioRingBufferMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioRingBufferMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioRingBufferMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioRingBufferMethod "setSample" o = AudioRingBufferSetSampleMethodInfo
+    ResolveAudioRingBufferMethod "setTimestamp" o = AudioRingBufferSetTimestampMethodInfo
+    ResolveAudioRingBufferMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioRingBufferMethod t AudioRingBuffer, O.MethodInfo info AudioRingBuffer p) => OL.IsLabel t (AudioRingBuffer -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioRingBuffer
+type instance O.AttributeList AudioRingBuffer = AudioRingBufferAttributeList
+type AudioRingBufferAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioRingBuffer = AudioRingBufferSignalList
+type AudioRingBufferSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+-- method AudioRingBuffer::acquire
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to acquire", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the specs of the buffer", 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_ring_buffer_acquire" gst_audio_ring_buffer_acquire :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    IO CInt
+
+{- |
+Allocate the resources for the ringbuffer. This function fills
+in the data pointer of the ring buffer with a valid 'GI.Gst.Structs.Buffer.Buffer'
+to which samples can be written.
+-}
+audioRingBufferAcquire ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to acquire -}
+    -> GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: the specs of the buffer -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be acquired, FALSE on error.
+
+MT safe. -}
+audioRingBufferAcquire buf spec = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    spec' <- unsafeManagedPtrGetPtr spec
+    result <- gst_audio_ring_buffer_acquire buf' spec'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    touchManagedPtr spec
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferAcquireMethodInfo
+instance (signature ~ (GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferAcquireMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferAcquire
+
+#endif
+
+-- method AudioRingBuffer::activate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to activate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "active", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new mode", 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_ring_buffer_activate" gst_audio_ring_buffer_activate :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    CInt ->                                 -- active : TBasicType TBoolean
+    IO CInt
+
+{- |
+Activate /@buf@/ to start or stop pulling data.
+
+MT safe.
+-}
+audioRingBufferActivate ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to activate -}
+    -> Bool
+    {- ^ /@active@/: the new mode -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be activated in the requested mode,
+FALSE on error. -}
+audioRingBufferActivate buf active = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    let active' = (fromIntegral . fromEnum) active
+    result <- gst_audio_ring_buffer_activate buf' active'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferActivateMethodInfo
+instance (signature ~ (Bool -> m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferActivateMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferActivate
+
+#endif
+
+-- method AudioRingBuffer::advance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to advance", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "advance", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of segments written", 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_ring_buffer_advance" gst_audio_ring_buffer_advance :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Word32 ->                               -- advance : TBasicType TUInt
+    IO ()
+
+{- |
+Subclasses should call this function to notify the fact that
+/@advance@/ segments are now processed by the device.
+
+MT safe.
+-}
+audioRingBufferAdvance ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to advance -}
+    -> Word32
+    {- ^ /@advance@/: the number of segments written -}
+    -> m ()
+audioRingBufferAdvance buf advance = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    gst_audio_ring_buffer_advance buf' advance
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferAdvanceMethodInfo
+instance (signature ~ (Word32 -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferAdvanceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferAdvance
+
+#endif
+
+-- method AudioRingBuffer::clear
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to clear", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "segment", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the segment to clear", 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_ring_buffer_clear" gst_audio_ring_buffer_clear :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Int32 ->                                -- segment : TBasicType TInt
+    IO ()
+
+{- |
+Clear the given segment of the buffer with silence samples.
+This function is used by subclasses.
+
+MT safe.
+-}
+audioRingBufferClear ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to clear -}
+    -> Int32
+    {- ^ /@segment@/: the segment to clear -}
+    -> m ()
+audioRingBufferClear buf segment = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    gst_audio_ring_buffer_clear buf' segment
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferClearMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferClearMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferClear
+
+#endif
+
+-- method AudioRingBuffer::clear_all
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to clear", 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_ring_buffer_clear_all" gst_audio_ring_buffer_clear_all :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO ()
+
+{- |
+Fill the ringbuffer with silence.
+
+MT safe.
+-}
+audioRingBufferClearAll ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to clear -}
+    -> m ()
+audioRingBufferClearAll buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    gst_audio_ring_buffer_clear_all buf'
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferClearAllMethodInfo
+instance (signature ~ (m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferClearAllMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferClearAll
+
+#endif
+
+-- method AudioRingBuffer::close_device
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", 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_ring_buffer_close_device" gst_audio_ring_buffer_close_device :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Close the audio device associated with the ring buffer. The ring buffer
+should already have been released via 'GI.GstAudio.Objects.AudioRingBuffer.audioRingBufferRelease'.
+-}
+audioRingBufferCloseDevice ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be closed, FALSE on error.
+
+MT safe. -}
+audioRingBufferCloseDevice buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_close_device buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferCloseDeviceMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferCloseDeviceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferCloseDevice
+
+#endif
+
+-- method AudioRingBuffer::commit
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to commit", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the sample position of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the data to commit", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_samples", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples in the data to commit", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_samples", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples to write to the ringbuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "accum", argType = TBasicType TInt, direction = DirectionInout, mayBeNull = False, argDoc = Documentation {rawDocText = Just "accumulator for rate conversion.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : [Arg {argCName = "in_samples", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples in the data to commit", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TUInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_commit" gst_audio_ring_buffer_commit :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Word64 ->                               -- sample : TBasicType TUInt64
+    Ptr Word8 ->                            -- data : TCArray False (-1) 3 (TBasicType TUInt8)
+    Int32 ->                                -- in_samples : TBasicType TInt
+    Int32 ->                                -- out_samples : TBasicType TInt
+    Ptr Int32 ->                            -- accum : TBasicType TInt
+    IO Word32
+
+{- |
+Commit /@inSamples@/ samples pointed to by /@data@/ to the ringbuffer /@buf@/.
+
+/@inSamples@/ and /@outSamples@/ define the rate conversion to perform on the
+samples in /@data@/. For negative rates, /@outSamples@/ must be negative and
+/@inSamples@/ positive.
+
+When /@outSamples@/ is positive, the first sample will be written at position /@sample@/
+in the ringbuffer. When /@outSamples@/ is negative, the last sample will be written to
+/@sample@/ in reverse order.
+
+/@outSamples@/ does not need to be a multiple of the segment size of the ringbuffer
+although it is recommended for optimal performance.
+
+/@accum@/ will hold a temporary accumulator used in rate conversion and should be
+set to 0 when this function is first called. In case the commit operation is
+interrupted, one can resume the processing by passing the previously returned
+/@accum@/ value back to this function.
+
+MT safe.
+-}
+audioRingBufferCommit ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to commit -}
+    -> Word64
+    {- ^ /@sample@/: the sample position of the data -}
+    -> ByteString
+    {- ^ /@data@/: the data to commit -}
+    -> Int32
+    {- ^ /@outSamples@/: the number of samples to write to the ringbuffer -}
+    -> Int32
+    {- ^ /@accum@/: accumulator for rate conversion. -}
+    -> m ((Word32, Int32))
+    {- ^ __Returns:__ The number of samples written to the ringbuffer or -1 on error. The
+number of samples written can be less than /@outSamples@/ when /@buf@/ was interrupted
+with a flush or stop. -}
+audioRingBufferCommit buf sample data_ outSamples accum = liftIO $ do
+    let inSamples = fromIntegral $ B.length data_
+    buf' <- unsafeManagedPtrCastPtr buf
+    data_' <- packByteString data_
+    accum' <- allocMem :: IO (Ptr Int32)
+    poke accum' accum
+    result <- gst_audio_ring_buffer_commit buf' sample data_' inSamples outSamples accum'
+    accum'' <- peek accum'
+    touchManagedPtr buf
+    freeMem data_'
+    freeMem accum'
+    return (result, accum'')
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferCommitMethodInfo
+instance (signature ~ (Word64 -> ByteString -> Int32 -> Int32 -> m ((Word32, Int32))), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferCommitMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferCommit
+
+#endif
+
+-- method AudioRingBuffer::convert
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the source format", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the source value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the destination format", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a location to store the converted value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_convert" gst_audio_ring_buffer_convert :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    CUInt ->                                -- src_fmt : TInterface (Name {namespace = "Gst", name = "Format"})
+    Int64 ->                                -- src_val : TBasicType TInt64
+    CUInt ->                                -- dest_fmt : TInterface (Name {namespace = "Gst", name = "Format"})
+    Ptr Int64 ->                            -- dest_val : TBasicType TInt64
+    IO CInt
+
+{- |
+Convert /@srcVal@/ in /@srcFmt@/ to the equivalent value in /@destFmt@/. The result
+will be put in /@destVal@/.
+-}
+audioRingBufferConvert ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> Gst.Enums.Format
+    {- ^ /@srcFmt@/: the source format -}
+    -> Int64
+    {- ^ /@srcVal@/: the source value -}
+    -> Gst.Enums.Format
+    {- ^ /@destFmt@/: the destination format -}
+    -> m ((Bool, Int64))
+    {- ^ __Returns:__ TRUE if the conversion succeeded. -}
+audioRingBufferConvert buf srcFmt srcVal destFmt = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    let srcFmt' = (fromIntegral . fromEnum) srcFmt
+    let destFmt' = (fromIntegral . fromEnum) destFmt
+    destVal <- allocMem :: IO (Ptr Int64)
+    result <- gst_audio_ring_buffer_convert buf' srcFmt' srcVal destFmt' destVal
+    let result' = (/= 0) result
+    destVal' <- peek destVal
+    touchManagedPtr buf
+    freeMem destVal
+    return (result', destVal')
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferConvertMethodInfo
+instance (signature ~ (Gst.Enums.Format -> Int64 -> Gst.Enums.Format -> m ((Bool, Int64))), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferConvertMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferConvert
+
+#endif
+
+-- method AudioRingBuffer::delay
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_delay" gst_audio_ring_buffer_delay :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO Word32
+
+{- |
+Get the number of samples queued in the audio device. This is
+usually less than the segment size but can be bigger when the
+implementation uses another internal buffer between the audio
+device.
+
+For playback ringbuffers this is the amount of samples transfered from the
+ringbuffer to the device but still not played.
+
+For capture ringbuffers this is the amount of samples in the device that are
+not yet transfered to the ringbuffer.
+-}
+audioRingBufferDelay ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to query -}
+    -> m Word32
+    {- ^ __Returns:__ The number of samples queued in the audio device.
+
+MT safe. -}
+audioRingBufferDelay buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_delay buf'
+    touchManagedPtr buf
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferDelayMethodInfo
+instance (signature ~ (m Word32), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferDelayMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferDelay
+
+#endif
+
+-- method AudioRingBuffer::device_is_open
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", 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_ring_buffer_device_is_open" gst_audio_ring_buffer_device_is_open :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Checks the status of the device associated with the ring buffer.
+-}
+audioRingBufferDeviceIsOpen ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device was open, FALSE if it was closed.
+
+MT safe. -}
+audioRingBufferDeviceIsOpen buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_device_is_open buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferDeviceIsOpenMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferDeviceIsOpenMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferDeviceIsOpen
+
+#endif
+
+-- method AudioRingBuffer::is_acquired
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to check", 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_ring_buffer_is_acquired" gst_audio_ring_buffer_is_acquired :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Check if the ringbuffer is acquired and ready to use.
+-}
+audioRingBufferIsAcquired ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to check -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the ringbuffer is acquired, FALSE on error.
+
+MT safe. -}
+audioRingBufferIsAcquired buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_is_acquired buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsAcquiredMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferIsAcquiredMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsAcquired
+
+#endif
+
+-- method AudioRingBuffer::is_active
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", 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_ring_buffer_is_active" gst_audio_ring_buffer_is_active :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Check if /@buf@/ is activated.
+
+MT safe.
+-}
+audioRingBufferIsActive ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device is active. -}
+audioRingBufferIsActive buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_is_active buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsActiveMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferIsActiveMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsActive
+
+#endif
+
+-- method AudioRingBuffer::is_flushing
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", 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_ring_buffer_is_flushing" gst_audio_ring_buffer_is_flushing :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Check if /@buf@/ is flushing.
+
+MT safe.
+-}
+audioRingBufferIsFlushing ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device is flushing. -}
+audioRingBufferIsFlushing buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_is_flushing buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsFlushingMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferIsFlushingMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsFlushing
+
+#endif
+
+-- method AudioRingBuffer::may_start
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allowed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new value", 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_ring_buffer_may_start" gst_audio_ring_buffer_may_start :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    CInt ->                                 -- allowed : TBasicType TBoolean
+    IO ()
+
+{- |
+Tell the ringbuffer that it is allowed to start playback when
+the ringbuffer is filled with samples.
+
+MT safe.
+-}
+audioRingBufferMayStart ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> Bool
+    {- ^ /@allowed@/: the new value -}
+    -> m ()
+audioRingBufferMayStart buf allowed = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    let allowed' = (fromIntegral . fromEnum) allowed
+    gst_audio_ring_buffer_may_start buf' allowed'
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferMayStartMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferMayStartMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferMayStart
+
+#endif
+
+-- method AudioRingBuffer::open_device
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", 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_ring_buffer_open_device" gst_audio_ring_buffer_open_device :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Open the audio device associated with the ring buffer. Does not perform any
+setup on the device. You must open the device before acquiring the ring
+buffer.
+-}
+audioRingBufferOpenDevice ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be opened, FALSE on error.
+
+MT safe. -}
+audioRingBufferOpenDevice buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_open_device buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferOpenDeviceMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferOpenDeviceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferOpenDevice
+
+#endif
+
+-- method AudioRingBuffer::pause
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to pause", 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_ring_buffer_pause" gst_audio_ring_buffer_pause :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Pause processing samples from the ringbuffer.
+-}
+audioRingBufferPause ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to pause -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be paused, FALSE on error.
+
+MT safe. -}
+audioRingBufferPause buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_pause buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferPauseMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferPauseMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferPause
+
+#endif
+
+-- method AudioRingBuffer::prepare_read
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to read from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "segment", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the segment to read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "readptr", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "\n    the pointer to the memory where samples can be read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "len", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of bytes to read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : [Arg {argCName = "len", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of bytes to read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_prepare_read" gst_audio_ring_buffer_prepare_read :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Ptr Int32 ->                            -- segment : TBasicType TInt
+    Ptr (Ptr Word8) ->                      -- readptr : TCArray False (-1) 3 (TBasicType TUInt8)
+    Ptr Int32 ->                            -- len : TBasicType TInt
+    IO CInt
+
+{- |
+Returns a pointer to memory where the data from segment /@segment@/
+can be found. This function is mostly used by subclasses.
+-}
+audioRingBufferPrepareRead ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to read from -}
+    -> m ((Bool, Int32, ByteString))
+    {- ^ __Returns:__ FALSE if the buffer is not started.
+
+MT safe. -}
+audioRingBufferPrepareRead buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    segment <- allocMem :: IO (Ptr Int32)
+    readptr <- allocMem :: IO (Ptr (Ptr Word8))
+    len <- allocMem :: IO (Ptr Int32)
+    result <- gst_audio_ring_buffer_prepare_read buf' segment readptr len
+    len' <- peek len
+    let result' = (/= 0) result
+    segment' <- peek segment
+    readptr' <- peek readptr
+    readptr'' <- (unpackByteStringWithLength len') readptr'
+    freeMem readptr'
+    touchManagedPtr buf
+    freeMem segment
+    freeMem readptr
+    freeMem len
+    return (result', segment', readptr'')
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferPrepareReadMethodInfo
+instance (signature ~ (m ((Bool, Int32, ByteString))), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferPrepareReadMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferPrepareRead
+
+#endif
+
+-- method AudioRingBuffer::read
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to read from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the sample position of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "where the data should be read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples in data to read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "where the timestamp is returned", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : [Arg {argCName = "len", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples in data to read", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TUInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_read" gst_audio_ring_buffer_read :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Word64 ->                               -- sample : TBasicType TUInt64
+    Ptr Word8 ->                            -- data : TCArray False (-1) 3 (TBasicType TUInt8)
+    Word32 ->                               -- len : TBasicType TUInt
+    Ptr Word64 ->                           -- timestamp : TBasicType TUInt64
+    IO Word32
+
+{- |
+Read /@len@/ samples from the ringbuffer into the memory pointed
+to by /@data@/.
+The first sample should be read from position /@sample@/ in
+the ringbuffer.
+
+/@len@/ should not be a multiple of the segment size of the ringbuffer
+although it is recommended.
+
+/@timestamp@/ will return the timestamp associated with the data returned.
+-}
+audioRingBufferRead ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to read from -}
+    -> Word64
+    {- ^ /@sample@/: the sample position of the data -}
+    -> ByteString
+    {- ^ /@data@/: where the data should be read -}
+    -> m ((Word32, Word64))
+    {- ^ __Returns:__ The number of samples read from the ringbuffer or -1 on
+error.
+
+MT safe. -}
+audioRingBufferRead buf sample data_ = liftIO $ do
+    let len = fromIntegral $ B.length data_
+    buf' <- unsafeManagedPtrCastPtr buf
+    data_' <- packByteString data_
+    timestamp <- allocMem :: IO (Ptr Word64)
+    result <- gst_audio_ring_buffer_read buf' sample data_' len timestamp
+    timestamp' <- peek timestamp
+    touchManagedPtr buf
+    freeMem data_'
+    freeMem timestamp
+    return (result, timestamp')
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferReadMethodInfo
+instance (signature ~ (Word64 -> ByteString -> m ((Word32, Word64))), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferReadMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferRead
+
+#endif
+
+-- method AudioRingBuffer::release
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to release", 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_ring_buffer_release" gst_audio_ring_buffer_release :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Free the resources of the ringbuffer.
+-}
+audioRingBufferRelease ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to release -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be released, FALSE on error.
+
+MT safe. -}
+audioRingBufferRelease buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_release buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferReleaseMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferReleaseMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferRelease
+
+#endif
+
+-- method AudioRingBuffer::samples_done
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_samples_done" gst_audio_ring_buffer_samples_done :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO Word64
+
+{- |
+Get the number of samples that were processed by the ringbuffer
+since it was last started. This does not include the number of samples not
+yet processed (see 'GI.GstAudio.Objects.AudioRingBuffer.audioRingBufferDelay').
+-}
+audioRingBufferSamplesDone ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to query -}
+    -> m Word64
+    {- ^ __Returns:__ The number of samples processed by the ringbuffer.
+
+MT safe. -}
+audioRingBufferSamplesDone buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_samples_done buf'
+    touchManagedPtr buf
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSamplesDoneMethodInfo
+instance (signature ~ (m Word64), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSamplesDoneMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSamplesDone
+
+#endif
+
+-- method AudioRingBuffer::set_callback
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to set the callback on", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cb", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the callback to set", sinceVersion = Nothing}, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to the callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface (Name {namespace = "GLib", name = "DestroyNotify"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "function to be called when @user_data is no longer needed", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Nothing
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_callback_full" gst_audio_ring_buffer_set_callback_full :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    FunPtr GstAudio.Callbacks.C_AudioRingBufferCallback -> -- cb : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferCallback"})
+    Ptr () ->                               -- user_data : TBasicType TPtr
+    FunPtr GLib.Callbacks.C_DestroyNotify -> -- notify : TInterface (Name {namespace = "GLib", name = "DestroyNotify"})
+    IO ()
+
+{- |
+Sets the given callback function on the buffer. This function
+will be called every time a segment has been written to a device.
+
+MT safe.
+
+/Since: 1.12/
+-}
+audioRingBufferSetCallback ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to set the callback on -}
+    -> Maybe (GstAudio.Callbacks.AudioRingBufferCallback)
+    {- ^ /@cb@/: the callback to set -}
+    -> m ()
+audioRingBufferSetCallback buf cb = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    maybeCb <- case cb of
+        Nothing -> return (castPtrToFunPtr nullPtr)
+        Just jCb -> do
+            jCb' <- GstAudio.Callbacks.mk_AudioRingBufferCallback (GstAudio.Callbacks.wrap_AudioRingBufferCallback Nothing (GstAudio.Callbacks.drop_closures_AudioRingBufferCallback jCb))
+            return jCb'
+    let userData = castFunPtrToPtr maybeCb
+    let notify = safeFreeFunPtrPtr
+    gst_audio_ring_buffer_set_callback_full buf' maybeCb userData notify
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetCallbackMethodInfo
+instance (signature ~ (Maybe (GstAudio.Callbacks.AudioRingBufferCallback) -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSetCallbackMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetCallback
+
+#endif
+
+-- method AudioRingBuffer::set_channel_positions
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False (-1) (-1) (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the device channel positions", 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_ring_buffer_set_channel_positions" gst_audio_ring_buffer_set_channel_positions :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Ptr CInt ->                             -- position : TCArray False (-1) (-1) (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    IO ()
+
+{- |
+Tell the ringbuffer about the device\'s channel positions. This must
+be called in when the ringbuffer is acquired.
+-}
+audioRingBufferSetChannelPositions ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@position@/: the device channel positions -}
+    -> m ()
+audioRingBufferSetChannelPositions buf position = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    gst_audio_ring_buffer_set_channel_positions buf' position''
+    touchManagedPtr buf
+    freeMem position''
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetChannelPositionsMethodInfo
+instance (signature ~ ([GstAudio.Enums.AudioChannelPosition] -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSetChannelPositionsMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetChannelPositions
+
+#endif
+
+-- method AudioRingBuffer::set_flushing
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to flush", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flushing", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new mode", 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_ring_buffer_set_flushing" gst_audio_ring_buffer_set_flushing :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    CInt ->                                 -- flushing : TBasicType TBoolean
+    IO ()
+
+{- |
+Set the ringbuffer to flushing mode or normal mode.
+
+MT safe.
+-}
+audioRingBufferSetFlushing ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to flush -}
+    -> Bool
+    {- ^ /@flushing@/: the new mode -}
+    -> m ()
+audioRingBufferSetFlushing buf flushing = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    let flushing' = (fromIntegral . fromEnum) flushing
+    gst_audio_ring_buffer_set_flushing buf' flushing'
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetFlushingMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSetFlushingMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetFlushing
+
+#endif
+
+-- method AudioRingBuffer::set_sample
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to use", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the sample number to set", 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_ring_buffer_set_sample" gst_audio_ring_buffer_set_sample :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Word64 ->                               -- sample : TBasicType TUInt64
+    IO ()
+
+{- |
+Make sure that the next sample written to the device is
+accounted for as being the /@sample@/ sample written to the
+device. This value will be used in reporting the current
+sample position of the ringbuffer.
+
+This function will also clear the buffer with silence.
+
+MT safe.
+-}
+audioRingBufferSetSample ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to use -}
+    -> Word64
+    {- ^ /@sample@/: the sample number to set -}
+    -> m ()
+audioRingBufferSetSample buf sample = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    gst_audio_ring_buffer_set_sample buf' sample
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetSampleMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSetSampleMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetSample
+
+#endif
+
+-- method AudioRingBuffer::set_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "readseg", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_ring_buffer_set_timestamp" gst_audio_ring_buffer_set_timestamp :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    Int32 ->                                -- readseg : TBasicType TInt
+    Word64 ->                               -- timestamp : TBasicType TUInt64
+    IO ()
+
+{- |
+/No description available in the introspection data./
+-}
+audioRingBufferSetTimestamp ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    -> Int32
+    -> Word64
+    -> m ()
+audioRingBufferSetTimestamp buf readseg timestamp = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    gst_audio_ring_buffer_set_timestamp buf' readseg timestamp
+    touchManagedPtr buf
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetTimestampMethodInfo
+instance (signature ~ (Int32 -> Word64 -> m ()), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferSetTimestampMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetTimestamp
+
+#endif
+
+-- method AudioRingBuffer::start
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to start", 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_ring_buffer_start" gst_audio_ring_buffer_start :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Start processing samples from the ringbuffer.
+-}
+audioRingBufferStart ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to start -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be started, FALSE on error.
+
+MT safe. -}
+audioRingBufferStart buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_start buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferStartMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferStartMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferStart
+
+#endif
+
+-- method AudioRingBuffer::stop
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buf", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioRingBuffer to stop", 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_ring_buffer_stop" gst_audio_ring_buffer_stop :: 
+    Ptr AudioRingBuffer ->                  -- buf : TInterface (Name {namespace = "GstAudio", name = "AudioRingBuffer"})
+    IO CInt
+
+{- |
+Stop processing samples from the ringbuffer.
+-}
+audioRingBufferStop ::
+    (B.CallStack.HasCallStack, MonadIO m, IsAudioRingBuffer a) =>
+    a
+    {- ^ /@buf@/: the 'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' to stop -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the device could be stopped, FALSE on error.
+
+MT safe. -}
+audioRingBufferStop buf = liftIO $ do
+    buf' <- unsafeManagedPtrCastPtr buf
+    result <- gst_audio_ring_buffer_stop buf'
+    let result' = (/= 0) result
+    touchManagedPtr buf
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferStopMethodInfo
+instance (signature ~ (m Bool), MonadIO m, IsAudioRingBuffer a) => O.MethodInfo AudioRingBufferStopMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferStop
+
+#endif
+
+-- method AudioRingBuffer::debug_spec_buff
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the spec to debug", 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_ring_buffer_debug_spec_buff" gst_audio_ring_buffer_debug_spec_buff :: 
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    IO ()
+
+{- |
+Print debug info about the buffer sized in /@spec@/ to the debug log.
+-}
+audioRingBufferDebugSpecBuff ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: the spec to debug -}
+    -> m ()
+audioRingBufferDebugSpecBuff spec = liftIO $ do
+    spec' <- unsafeManagedPtrGetPtr spec
+    gst_audio_ring_buffer_debug_spec_buff spec'
+    touchManagedPtr spec
+    return ()
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioRingBuffer::debug_spec_caps
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the spec to debug", 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_ring_buffer_debug_spec_caps" gst_audio_ring_buffer_debug_spec_caps :: 
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    IO ()
+
+{- |
+Print debug info about the parsed caps in /@spec@/ to the debug log.
+-}
+audioRingBufferDebugSpecCaps ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: the spec to debug -}
+    -> m ()
+audioRingBufferDebugSpecCaps spec = liftIO $ do
+    spec' <- unsafeManagedPtrGetPtr spec
+    gst_audio_ring_buffer_debug_spec_caps spec'
+    touchManagedPtr spec
+    return ()
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioRingBuffer::parse_caps
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a spec", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstCaps", 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_ring_buffer_parse_caps" gst_audio_ring_buffer_parse_caps :: 
+    Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO CInt
+
+{- |
+Parse /@caps@/ into /@spec@/.
+-}
+audioRingBufferParseCaps ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.AudioRingBufferSpec.AudioRingBufferSpec
+    {- ^ /@spec@/: a spec -}
+    -> Gst.Caps.Caps
+    {- ^ /@caps@/: a 'GI.Gst.Structs.Caps.Caps' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if the caps could be parsed. -}
+audioRingBufferParseCaps spec caps = liftIO $ do
+    spec' <- unsafeManagedPtrGetPtr spec
+    caps' <- unsafeManagedPtrGetPtr caps
+    result <- gst_audio_ring_buffer_parse_caps spec' caps'
+    let result' = (/= 0) result
+    touchManagedPtr spec
+    touchManagedPtr caps
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioRingBuffer.hs-boot b/GI/GstAudio/Objects/AudioRingBuffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioRingBuffer.hs-boot
@@ -0,0 +1,110 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioRingBuffer 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
+
+newtype AudioRingBuffer = AudioRingBuffer (ManagedPtr AudioRingBuffer)
+instance GObject AudioRingBuffer where
+class (GObject o, O.IsDescendantOf AudioRingBuffer o) => IsAudioRingBuffer o
+instance (GObject o, O.IsDescendantOf AudioRingBuffer o) => IsAudioRingBuffer o
+instance O.HasParentTypes AudioRingBuffer
+#if ENABLE_OVERLOADING
+data AudioRingBufferAcquireMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferActivateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferAdvanceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferClearMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferClearAllMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferCloseDeviceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferCommitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferConvertMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferDelayMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferDeviceIsOpenMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsAcquiredMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsActiveMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferIsFlushingMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferMayStartMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferOpenDeviceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferPauseMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferPrepareReadMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferReadMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferReleaseMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSamplesDoneMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetCallbackMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetChannelPositionsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetFlushingMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetSampleMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferSetTimestampMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferStartMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioRingBufferStopMethodInfo
+#endif
diff --git a/GI/GstAudio/Objects/AudioSink.hs b/GI/GstAudio/Objects/AudioSink.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioSink.hs
@@ -0,0 +1,274 @@
+
+
+{- |
+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 most simple base class for audio sinks that only requires
+subclasses to implement a set of simple functions:
+
+* @open()@ :Open the device.
+
+* @prepare()@ :Configure the device with the specified format.
+
+* @write()@ :Write samples to the device.
+
+* @reset()@ :Unblock writes and flush the device.
+
+* @delay()@ :Get the number of samples written but not yet played
+by the device.
+
+* @unprepare()@ :Undo operations done by prepare.
+
+* @close()@ :Close the device.
+
+All scheduling of samples and timestamps is done in this base class
+together with 'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' using a default implementation of a
+'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' that uses threads.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioSink
+    ( 
+
+-- * Exported types
+    AudioSink(..)                           ,
+    IsAudioSink                             ,
+    toAudioSink                             ,
+    noAudioSink                             ,
+
+
+    ) 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.Objects.AudioBaseSink as GstAudio.AudioBaseSink
+import qualified GI.GstBase.Objects.BaseSink as GstBase.BaseSink
+
+-- | Memory-managed wrapper type.
+newtype AudioSink = AudioSink (ManagedPtr AudioSink)
+foreign import ccall "gst_audio_sink_get_type"
+    c_gst_audio_sink_get_type :: IO GType
+
+instance GObject AudioSink where
+    gobjectType = c_gst_audio_sink_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioSink`, for instance with `toAudioSink`.
+class (GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o
+instance (GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o
+
+instance O.HasParentTypes AudioSink
+type instance O.ParentTypes AudioSink = '[GstAudio.AudioBaseSink.AudioBaseSink, GstBase.BaseSink.BaseSink, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioSink`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioSink :: (MonadIO m, IsAudioSink o) => o -> m AudioSink
+toAudioSink = liftIO . unsafeCastTo AudioSink
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioSink`.
+noAudioSink :: Maybe AudioSink
+noAudioSink = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioSinkMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioSinkMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioSinkMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioSinkMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioSinkMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioSinkMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioSinkMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioSinkMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioSinkMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioSinkMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioSinkMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioSinkMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioSinkMethod "createRingbuffer" o = GstAudio.AudioBaseSink.AudioBaseSinkCreateRingbufferMethodInfo
+    ResolveAudioSinkMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioSinkMethod "doPreroll" o = GstBase.BaseSink.BaseSinkDoPrerollMethodInfo
+    ResolveAudioSinkMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioSinkMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioSinkMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioSinkMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioSinkMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioSinkMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioSinkMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioSinkMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioSinkMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioSinkMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioSinkMethod "isAsyncEnabled" o = GstBase.BaseSink.BaseSinkIsAsyncEnabledMethodInfo
+    ResolveAudioSinkMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioSinkMethod "isLastSampleEnabled" o = GstBase.BaseSink.BaseSinkIsLastSampleEnabledMethodInfo
+    ResolveAudioSinkMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioSinkMethod "isQosEnabled" o = GstBase.BaseSink.BaseSinkIsQosEnabledMethodInfo
+    ResolveAudioSinkMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioSinkMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioSinkMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioSinkMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioSinkMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioSinkMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioSinkMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioSinkMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioSinkMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioSinkMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioSinkMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioSinkMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioSinkMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioSinkMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioSinkMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioSinkMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioSinkMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioSinkMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioSinkMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioSinkMethod "queryLatency" o = GstBase.BaseSink.BaseSinkQueryLatencyMethodInfo
+    ResolveAudioSinkMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioSinkMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioSinkMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioSinkMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioSinkMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioSinkMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioSinkMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioSinkMethod "reportDeviceFailure" o = GstAudio.AudioBaseSink.AudioBaseSinkReportDeviceFailureMethodInfo
+    ResolveAudioSinkMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioSinkMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioSinkMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioSinkMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioSinkMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioSinkMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioSinkMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioSinkMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioSinkMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioSinkMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioSinkMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioSinkMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioSinkMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioSinkMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioSinkMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioSinkMethod "wait" o = GstBase.BaseSink.BaseSinkWaitMethodInfo
+    ResolveAudioSinkMethod "waitClock" o = GstBase.BaseSink.BaseSinkWaitClockMethodInfo
+    ResolveAudioSinkMethod "waitPreroll" o = GstBase.BaseSink.BaseSinkWaitPrerollMethodInfo
+    ResolveAudioSinkMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioSinkMethod "getAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkGetAlignmentThresholdMethodInfo
+    ResolveAudioSinkMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioSinkMethod "getBlocksize" o = GstBase.BaseSink.BaseSinkGetBlocksizeMethodInfo
+    ResolveAudioSinkMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioSinkMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioSinkMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioSinkMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioSinkMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioSinkMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioSinkMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioSinkMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioSinkMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioSinkMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioSinkMethod "getDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDiscontWaitMethodInfo
+    ResolveAudioSinkMethod "getDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDriftToleranceMethodInfo
+    ResolveAudioSinkMethod "getDropOutOfSegment" o = GstBase.BaseSink.BaseSinkGetDropOutOfSegmentMethodInfo
+    ResolveAudioSinkMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioSinkMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioSinkMethod "getLastSample" o = GstBase.BaseSink.BaseSinkGetLastSampleMethodInfo
+    ResolveAudioSinkMethod "getLatency" o = GstBase.BaseSink.BaseSinkGetLatencyMethodInfo
+    ResolveAudioSinkMethod "getMaxBitrate" o = GstBase.BaseSink.BaseSinkGetMaxBitrateMethodInfo
+    ResolveAudioSinkMethod "getMaxLateness" o = GstBase.BaseSink.BaseSinkGetMaxLatenessMethodInfo
+    ResolveAudioSinkMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioSinkMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioSinkMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioSinkMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioSinkMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioSinkMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioSinkMethod "getProcessingDeadline" o = GstBase.BaseSink.BaseSinkGetProcessingDeadlineMethodInfo
+    ResolveAudioSinkMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioSinkMethod "getProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkGetProvideClockMethodInfo
+    ResolveAudioSinkMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioSinkMethod "getRenderDelay" o = GstBase.BaseSink.BaseSinkGetRenderDelayMethodInfo
+    ResolveAudioSinkMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioSinkMethod "getSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkGetSlaveMethodMethodInfo
+    ResolveAudioSinkMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioSinkMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioSinkMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioSinkMethod "getSync" o = GstBase.BaseSink.BaseSinkGetSyncMethodInfo
+    ResolveAudioSinkMethod "getThrottleTime" o = GstBase.BaseSink.BaseSinkGetThrottleTimeMethodInfo
+    ResolveAudioSinkMethod "getTsOffset" o = GstBase.BaseSink.BaseSinkGetTsOffsetMethodInfo
+    ResolveAudioSinkMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioSinkMethod "setAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkSetAlignmentThresholdMethodInfo
+    ResolveAudioSinkMethod "setAsyncEnabled" o = GstBase.BaseSink.BaseSinkSetAsyncEnabledMethodInfo
+    ResolveAudioSinkMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioSinkMethod "setBlocksize" o = GstBase.BaseSink.BaseSinkSetBlocksizeMethodInfo
+    ResolveAudioSinkMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioSinkMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioSinkMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioSinkMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioSinkMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioSinkMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioSinkMethod "setCustomSlavingCallback" o = GstAudio.AudioBaseSink.AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+    ResolveAudioSinkMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioSinkMethod "setDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDiscontWaitMethodInfo
+    ResolveAudioSinkMethod "setDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDriftToleranceMethodInfo
+    ResolveAudioSinkMethod "setDropOutOfSegment" o = GstBase.BaseSink.BaseSinkSetDropOutOfSegmentMethodInfo
+    ResolveAudioSinkMethod "setLastSampleEnabled" o = GstBase.BaseSink.BaseSinkSetLastSampleEnabledMethodInfo
+    ResolveAudioSinkMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioSinkMethod "setMaxBitrate" o = GstBase.BaseSink.BaseSinkSetMaxBitrateMethodInfo
+    ResolveAudioSinkMethod "setMaxLateness" o = GstBase.BaseSink.BaseSinkSetMaxLatenessMethodInfo
+    ResolveAudioSinkMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioSinkMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioSinkMethod "setProcessingDeadline" o = GstBase.BaseSink.BaseSinkSetProcessingDeadlineMethodInfo
+    ResolveAudioSinkMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioSinkMethod "setProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkSetProvideClockMethodInfo
+    ResolveAudioSinkMethod "setQosEnabled" o = GstBase.BaseSink.BaseSinkSetQosEnabledMethodInfo
+    ResolveAudioSinkMethod "setRenderDelay" o = GstBase.BaseSink.BaseSinkSetRenderDelayMethodInfo
+    ResolveAudioSinkMethod "setSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkSetSlaveMethodMethodInfo
+    ResolveAudioSinkMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioSinkMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioSinkMethod "setSync" o = GstBase.BaseSink.BaseSinkSetSyncMethodInfo
+    ResolveAudioSinkMethod "setThrottleTime" o = GstBase.BaseSink.BaseSinkSetThrottleTimeMethodInfo
+    ResolveAudioSinkMethod "setTsOffset" o = GstBase.BaseSink.BaseSinkSetTsOffsetMethodInfo
+    ResolveAudioSinkMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioSinkMethod t AudioSink, O.MethodInfo info AudioSink p) => OL.IsLabel t (AudioSink -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioSink
+type instance O.AttributeList AudioSink = AudioSinkAttributeList
+type AudioSinkAttributeList = ('[ '("alignmentThreshold", GstAudio.AudioBaseSink.AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSink.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSink.BaseSinkBlocksizePropertyInfo), '("bufferTime", GstAudio.AudioBaseSink.AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", GstAudio.AudioBaseSink.AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", GstAudio.AudioBaseSink.AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", GstAudio.AudioBaseSink.AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSink.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSink.BaseSinkLastSamplePropertyInfo), '("latencyTime", GstAudio.AudioBaseSink.AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSink.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSink.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("processingDeadline", GstBase.BaseSink.BaseSinkProcessingDeadlinePropertyInfo), '("provideClock", GstAudio.AudioBaseSink.AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSink.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSink.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", GstAudio.AudioBaseSink.AudioBaseSinkSlaveMethodPropertyInfo), '("sync", GstBase.BaseSink.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSink.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSink.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioSink = AudioSinkSignalList
+type AudioSinkSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioSink.hs-boot b/GI/GstAudio/Objects/AudioSink.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioSink.hs-boot
@@ -0,0 +1,29 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioSink 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
+
+newtype AudioSink = AudioSink (ManagedPtr AudioSink)
+instance GObject AudioSink where
+class (GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o
+instance (GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o
+instance O.HasParentTypes AudioSink
diff --git a/GI/GstAudio/Objects/AudioSrc.hs b/GI/GstAudio/Objects/AudioSrc.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioSrc.hs
@@ -0,0 +1,249 @@
+
+
+{- |
+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 most simple base class for audio sources that only requires
+subclasses to implement a set of simple functions:
+
+* @open()@ :Open the device.
+* @prepare()@ :Configure the device with the specified format.
+* @read()@ :Read samples from the device.
+* @reset()@ :Unblock reads and flush the device.
+* @delay()@ :Get the number of samples in the device but not yet read.
+* @unprepare()@ :Undo operations done by prepare.
+* @close()@ :Close the device.
+
+All scheduling of samples and timestamps is done in this base class
+together with 'GI.GstAudio.Objects.AudioBaseSrc.AudioBaseSrc' using a default implementation of a
+'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' that uses threads.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Objects.AudioSrc
+    ( 
+
+-- * Exported types
+    AudioSrc(..)                            ,
+    IsAudioSrc                              ,
+    toAudioSrc                              ,
+    noAudioSrc                              ,
+
+
+    ) 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.Objects.AudioBaseSrc as GstAudio.AudioBaseSrc
+import qualified GI.GstBase.Objects.BaseSrc as GstBase.BaseSrc
+import qualified GI.GstBase.Objects.PushSrc as GstBase.PushSrc
+
+-- | Memory-managed wrapper type.
+newtype AudioSrc = AudioSrc (ManagedPtr AudioSrc)
+foreign import ccall "gst_audio_src_get_type"
+    c_gst_audio_src_get_type :: IO GType
+
+instance GObject AudioSrc where
+    gobjectType = c_gst_audio_src_get_type
+    
+
+-- | Type class for types which can be safely cast to `AudioSrc`, for instance with `toAudioSrc`.
+class (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o
+instance (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o
+
+instance O.HasParentTypes AudioSrc
+type instance O.ParentTypes AudioSrc = '[GstAudio.AudioBaseSrc.AudioBaseSrc, GstBase.PushSrc.PushSrc, GstBase.BaseSrc.BaseSrc, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]
+
+-- | Cast to `AudioSrc`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
+toAudioSrc :: (MonadIO m, IsAudioSrc o) => o -> m AudioSrc
+toAudioSrc = liftIO . unsafeCastTo AudioSrc
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioSrc`.
+noAudioSrc :: Maybe AudioSrc
+noAudioSrc = Nothing
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioSrcMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioSrcMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
+    ResolveAudioSrcMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
+    ResolveAudioSrcMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
+    ResolveAudioSrcMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
+    ResolveAudioSrcMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
+    ResolveAudioSrcMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
+    ResolveAudioSrcMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
+    ResolveAudioSrcMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
+    ResolveAudioSrcMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
+    ResolveAudioSrcMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
+    ResolveAudioSrcMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
+    ResolveAudioSrcMethod "createRingbuffer" o = GstAudio.AudioBaseSrc.AudioBaseSrcCreateRingbufferMethodInfo
+    ResolveAudioSrcMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
+    ResolveAudioSrcMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
+    ResolveAudioSrcMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
+    ResolveAudioSrcMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
+    ResolveAudioSrcMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
+    ResolveAudioSrcMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
+    ResolveAudioSrcMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
+    ResolveAudioSrcMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioSrcMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
+    ResolveAudioSrcMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
+    ResolveAudioSrcMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
+    ResolveAudioSrcMethod "isAsync" o = GstBase.BaseSrc.BaseSrcIsAsyncMethodInfo
+    ResolveAudioSrcMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
+    ResolveAudioSrcMethod "isLive" o = GstBase.BaseSrc.BaseSrcIsLiveMethodInfo
+    ResolveAudioSrcMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
+    ResolveAudioSrcMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
+    ResolveAudioSrcMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
+    ResolveAudioSrcMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
+    ResolveAudioSrcMethod "link" o = Gst.Element.ElementLinkMethodInfo
+    ResolveAudioSrcMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
+    ResolveAudioSrcMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
+    ResolveAudioSrcMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioSrcMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
+    ResolveAudioSrcMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
+    ResolveAudioSrcMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
+    ResolveAudioSrcMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
+    ResolveAudioSrcMethod "newSeamlessSegment" o = GstBase.BaseSrc.BaseSrcNewSeamlessSegmentMethodInfo
+    ResolveAudioSrcMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
+    ResolveAudioSrcMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
+    ResolveAudioSrcMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
+    ResolveAudioSrcMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
+    ResolveAudioSrcMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
+    ResolveAudioSrcMethod "query" o = Gst.Element.ElementQueryMethodInfo
+    ResolveAudioSrcMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
+    ResolveAudioSrcMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
+    ResolveAudioSrcMethod "queryLatency" o = GstBase.BaseSrc.BaseSrcQueryLatencyMethodInfo
+    ResolveAudioSrcMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
+    ResolveAudioSrcMethod "ref" o = Gst.Object.ObjectRefMethodInfo
+    ResolveAudioSrcMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
+    ResolveAudioSrcMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
+    ResolveAudioSrcMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioSrcMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
+    ResolveAudioSrcMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
+    ResolveAudioSrcMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
+    ResolveAudioSrcMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
+    ResolveAudioSrcMethod "seek" o = Gst.Element.ElementSeekMethodInfo
+    ResolveAudioSrcMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
+    ResolveAudioSrcMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
+    ResolveAudioSrcMethod "startComplete" o = GstBase.BaseSrc.BaseSrcStartCompleteMethodInfo
+    ResolveAudioSrcMethod "startWait" o = GstBase.BaseSrc.BaseSrcStartWaitMethodInfo
+    ResolveAudioSrcMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
+    ResolveAudioSrcMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
+    ResolveAudioSrcMethod "submitBufferList" o = GstBase.BaseSrc.BaseSrcSubmitBufferListMethodInfo
+    ResolveAudioSrcMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioSrcMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
+    ResolveAudioSrcMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
+    ResolveAudioSrcMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
+    ResolveAudioSrcMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
+    ResolveAudioSrcMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
+    ResolveAudioSrcMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
+    ResolveAudioSrcMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
+    ResolveAudioSrcMethod "waitPlaying" o = GstBase.BaseSrc.BaseSrcWaitPlayingMethodInfo
+    ResolveAudioSrcMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
+    ResolveAudioSrcMethod "getAllocator" o = GstBase.BaseSrc.BaseSrcGetAllocatorMethodInfo
+    ResolveAudioSrcMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
+    ResolveAudioSrcMethod "getBlocksize" o = GstBase.BaseSrc.BaseSrcGetBlocksizeMethodInfo
+    ResolveAudioSrcMethod "getBufferPool" o = GstBase.BaseSrc.BaseSrcGetBufferPoolMethodInfo
+    ResolveAudioSrcMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
+    ResolveAudioSrcMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
+    ResolveAudioSrcMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
+    ResolveAudioSrcMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioSrcMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
+    ResolveAudioSrcMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
+    ResolveAudioSrcMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
+    ResolveAudioSrcMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
+    ResolveAudioSrcMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
+    ResolveAudioSrcMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
+    ResolveAudioSrcMethod "getDoTimestamp" o = GstBase.BaseSrc.BaseSrcGetDoTimestampMethodInfo
+    ResolveAudioSrcMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
+    ResolveAudioSrcMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
+    ResolveAudioSrcMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
+    ResolveAudioSrcMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
+    ResolveAudioSrcMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
+    ResolveAudioSrcMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
+    ResolveAudioSrcMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
+    ResolveAudioSrcMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
+    ResolveAudioSrcMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
+    ResolveAudioSrcMethod "getProvideClock" o = GstAudio.AudioBaseSrc.AudioBaseSrcGetProvideClockMethodInfo
+    ResolveAudioSrcMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
+    ResolveAudioSrcMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
+    ResolveAudioSrcMethod "getSlaveMethod" o = GstAudio.AudioBaseSrc.AudioBaseSrcGetSlaveMethodMethodInfo
+    ResolveAudioSrcMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
+    ResolveAudioSrcMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
+    ResolveAudioSrcMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
+    ResolveAudioSrcMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
+    ResolveAudioSrcMethod "setAsync" o = GstBase.BaseSrc.BaseSrcSetAsyncMethodInfo
+    ResolveAudioSrcMethod "setAutomaticEos" o = GstBase.BaseSrc.BaseSrcSetAutomaticEosMethodInfo
+    ResolveAudioSrcMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
+    ResolveAudioSrcMethod "setBlocksize" o = GstBase.BaseSrc.BaseSrcSetBlocksizeMethodInfo
+    ResolveAudioSrcMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
+    ResolveAudioSrcMethod "setCaps" o = GstBase.BaseSrc.BaseSrcSetCapsMethodInfo
+    ResolveAudioSrcMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
+    ResolveAudioSrcMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
+    ResolveAudioSrcMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioSrcMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioSrcMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
+    ResolveAudioSrcMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
+    ResolveAudioSrcMethod "setDoTimestamp" o = GstBase.BaseSrc.BaseSrcSetDoTimestampMethodInfo
+    ResolveAudioSrcMethod "setDynamicSize" o = GstBase.BaseSrc.BaseSrcSetDynamicSizeMethodInfo
+    ResolveAudioSrcMethod "setFormat" o = GstBase.BaseSrc.BaseSrcSetFormatMethodInfo
+    ResolveAudioSrcMethod "setLive" o = GstBase.BaseSrc.BaseSrcSetLiveMethodInfo
+    ResolveAudioSrcMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
+    ResolveAudioSrcMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
+    ResolveAudioSrcMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
+    ResolveAudioSrcMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
+    ResolveAudioSrcMethod "setProvideClock" o = GstAudio.AudioBaseSrc.AudioBaseSrcSetProvideClockMethodInfo
+    ResolveAudioSrcMethod "setSlaveMethod" o = GstAudio.AudioBaseSrc.AudioBaseSrcSetSlaveMethodMethodInfo
+    ResolveAudioSrcMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
+    ResolveAudioSrcMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
+    ResolveAudioSrcMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioSrcMethod t AudioSrc, O.MethodInfo info AudioSrc p) => OL.IsLabel t (AudioSrc -> 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
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioSrc
+type instance O.AttributeList AudioSrc = AudioSrcAttributeList
+type AudioSrcAttributeList = ('[ '("actualBufferTime", GstAudio.AudioBaseSrc.AudioBaseSrcActualBufferTimePropertyInfo), '("actualLatencyTime", GstAudio.AudioBaseSrc.AudioBaseSrcActualLatencyTimePropertyInfo), '("blocksize", GstBase.BaseSrc.BaseSrcBlocksizePropertyInfo), '("bufferTime", GstAudio.AudioBaseSrc.AudioBaseSrcBufferTimePropertyInfo), '("doTimestamp", GstBase.BaseSrc.BaseSrcDoTimestampPropertyInfo), '("latencyTime", GstAudio.AudioBaseSrc.AudioBaseSrcLatencyTimePropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrc.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("provideClock", GstAudio.AudioBaseSrc.AudioBaseSrcProvideClockPropertyInfo), '("slaveMethod", GstAudio.AudioBaseSrc.AudioBaseSrcSlaveMethodPropertyInfo), '("typefind", GstBase.BaseSrc.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type instance O.SignalList AudioSrc = AudioSrcSignalList
+type AudioSrcSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+#endif
+
+
diff --git a/GI/GstAudio/Objects/AudioSrc.hs-boot b/GI/GstAudio/Objects/AudioSrc.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Objects/AudioSrc.hs-boot
@@ -0,0 +1,29 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Objects.AudioSrc 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
+
+newtype AudioSrc = AudioSrc (ManagedPtr AudioSrc)
+instance GObject AudioSrc where
+class (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o
+instance (GObject o, O.IsDescendantOf AudioSrc o) => IsAudioSrc o
+instance O.HasParentTypes AudioSrc
diff --git a/GI/GstAudio/Structs.hs b/GI/GstAudio/Structs.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs.hs
@@ -0,0 +1,65 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs
+    (     module GI.GstAudio.Structs.AudioBuffer  ,
+    module GI.GstAudio.Structs.AudioCdSrcTrack,
+    module GI.GstAudio.Structs.AudioChannelMixer,
+    module GI.GstAudio.Structs.AudioClippingMeta,
+    module GI.GstAudio.Structs.AudioConverter,
+    module GI.GstAudio.Structs.AudioDownmixMeta,
+    module GI.GstAudio.Structs.AudioFormatInfo,
+    module GI.GstAudio.Structs.AudioInfo    ,
+    module GI.GstAudio.Structs.AudioMeta    ,
+    module GI.GstAudio.Structs.AudioQuantize,
+    module GI.GstAudio.Structs.AudioResampler,
+    module GI.GstAudio.Structs.AudioRingBufferSpec,
+    module GI.GstAudio.Structs.AudioStreamAlign,
+
+
+    ) where
+
+import GI.GstAudio.Structs.AudioBuffer
+import GI.GstAudio.Structs.AudioCdSrcTrack
+import GI.GstAudio.Structs.AudioChannelMixer
+import GI.GstAudio.Structs.AudioClippingMeta
+import GI.GstAudio.Structs.AudioConverter
+import GI.GstAudio.Structs.AudioDownmixMeta
+import GI.GstAudio.Structs.AudioFormatInfo
+import GI.GstAudio.Structs.AudioInfo
+import GI.GstAudio.Structs.AudioMeta
+import GI.GstAudio.Structs.AudioQuantize
+import GI.GstAudio.Structs.AudioResampler
+import GI.GstAudio.Structs.AudioRingBufferSpec
+import GI.GstAudio.Structs.AudioStreamAlign
+
+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
+
+
+
diff --git a/GI/GstAudio/Structs/AudioBuffer.hs b/GI/GstAudio/Structs/AudioBuffer.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioBuffer.hs
@@ -0,0 +1,703 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+A structure containing the result of an audio buffer map operation,
+which is executed with 'GI.GstAudio.Structs.AudioBuffer.audioBufferMap'. For non-interleaved (planar)
+buffers, the beginning of each channel in the buffer has its own pointer in
+the /@planes@/ array. For interleaved buffers, the /@planes@/ array only contains
+one item, which is the pointer to the beginning of the buffer, and /@nPlanes@/
+equals 1.
+
+The different channels in /@planes@/ are always in the GStreamer channel order.
+
+/Since: 1.16/
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioBuffer
+    ( 
+
+-- * Exported types
+    AudioBuffer(..)                         ,
+    newZeroAudioBuffer                      ,
+    noAudioBuffer                           ,
+
+
+ -- * Methods
+-- ** clip #method:clip#
+
+    audioBufferClip                         ,
+
+
+-- ** map #method:map#
+
+#if ENABLE_OVERLOADING
+    AudioBufferMapMethodInfo                ,
+#endif
+    audioBufferMap                          ,
+
+
+-- ** reorderChannels #method:reorderChannels#
+
+    audioBufferReorderChannels              ,
+
+
+-- ** truncate #method:truncate#
+
+    audioBufferTruncate                     ,
+
+
+-- ** unmap #method:unmap#
+
+#if ENABLE_OVERLOADING
+    AudioBufferUnmapMethodInfo              ,
+#endif
+    audioBufferUnmap                        ,
+
+
+
+
+ -- * Properties
+-- ** buffer #attr:buffer#
+{- | the mapped buffer
+-}
+#if ENABLE_OVERLOADING
+    audioBuffer_buffer                      ,
+#endif
+    clearAudioBufferBuffer                  ,
+    getAudioBufferBuffer                    ,
+    setAudioBufferBuffer                    ,
+
+
+-- ** info #attr:info#
+{- | a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' describing the audio properties of this buffer
+-}
+#if ENABLE_OVERLOADING
+    audioBuffer_info                        ,
+#endif
+    getAudioBufferInfo                      ,
+
+
+-- ** nPlanes #attr:nPlanes#
+{- | the number of planes available
+-}
+#if ENABLE_OVERLOADING
+    audioBuffer_nPlanes                     ,
+#endif
+    getAudioBufferNPlanes                   ,
+    setAudioBufferNPlanes                   ,
+
+
+-- ** nSamples #attr:nSamples#
+{- | the size of the buffer in samples
+-}
+#if ENABLE_OVERLOADING
+    audioBuffer_nSamples                    ,
+#endif
+    getAudioBufferNSamples                  ,
+    setAudioBufferNSamples                  ,
+
+
+-- ** planes #attr:planes#
+{- | an array of /@nPlanes@/ pointers pointing to the start of each
+  plane in the mapped buffer
+-}
+#if ENABLE_OVERLOADING
+    audioBuffer_planes                      ,
+#endif
+    clearAudioBufferPlanes                  ,
+    getAudioBufferPlanes                    ,
+    setAudioBufferPlanes                    ,
+
+
+
+
+    ) 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.Gst.Flags as Gst.Flags
+import qualified GI.Gst.Structs.Buffer as Gst.Buffer
+import qualified GI.Gst.Structs.Segment as Gst.Segment
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioBuffer = AudioBuffer (ManagedPtr AudioBuffer)
+instance WrappedPtr AudioBuffer where
+    wrappedPtrCalloc = callocBytes 1288
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 1288 >=> wrapPtr AudioBuffer)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioBuffer` struct initialized to zero.
+newZeroAudioBuffer :: MonadIO m => m AudioBuffer
+newZeroAudioBuffer = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioBuffer
+
+instance tag ~ 'AttrSet => Constructible AudioBuffer tag where
+    new _ attrs = do
+        o <- newZeroAudioBuffer
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioBuffer`.
+noAudioBuffer :: Maybe AudioBuffer
+noAudioBuffer = Nothing
+
+{- |
+Get the value of the “@info@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBuffer #info
+@
+-}
+getAudioBufferInfo :: MonadIO m => AudioBuffer -> m GstAudio.AudioInfo.AudioInfo
+getAudioBufferInfo s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 0 :: (Ptr GstAudio.AudioInfo.AudioInfo)
+    val' <- (newBoxed GstAudio.AudioInfo.AudioInfo) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioBufferInfoFieldInfo
+instance AttrInfo AudioBufferInfoFieldInfo where
+    type AttrAllowedOps AudioBufferInfoFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioBufferInfoFieldInfo = (~) (Ptr GstAudio.AudioInfo.AudioInfo)
+    type AttrBaseTypeConstraint AudioBufferInfoFieldInfo = (~) AudioBuffer
+    type AttrGetType AudioBufferInfoFieldInfo = GstAudio.AudioInfo.AudioInfo
+    type AttrLabel AudioBufferInfoFieldInfo = "info"
+    type AttrOrigin AudioBufferInfoFieldInfo = AudioBuffer
+    attrGet _ = getAudioBufferInfo
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioBuffer_info :: AttrLabelProxy "info"
+audioBuffer_info = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@n_samples@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBuffer #nSamples
+@
+-}
+getAudioBufferNSamples :: MonadIO m => AudioBuffer -> m Word64
+getAudioBufferNSamples s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 320) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@n_samples@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBuffer [ #nSamples 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBufferNSamples :: MonadIO m => AudioBuffer -> Word64 -> m ()
+setAudioBufferNSamples s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 320) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioBufferNSamplesFieldInfo
+instance AttrInfo AudioBufferNSamplesFieldInfo where
+    type AttrAllowedOps AudioBufferNSamplesFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioBufferNSamplesFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioBufferNSamplesFieldInfo = (~) AudioBuffer
+    type AttrGetType AudioBufferNSamplesFieldInfo = Word64
+    type AttrLabel AudioBufferNSamplesFieldInfo = "n_samples"
+    type AttrOrigin AudioBufferNSamplesFieldInfo = AudioBuffer
+    attrGet _ = getAudioBufferNSamples
+    attrSet _ = setAudioBufferNSamples
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioBuffer_nSamples :: AttrLabelProxy "nSamples"
+audioBuffer_nSamples = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@n_planes@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBuffer #nPlanes
+@
+-}
+getAudioBufferNPlanes :: MonadIO m => AudioBuffer -> m Int32
+getAudioBufferNPlanes s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 328) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@n_planes@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBuffer [ #nPlanes 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBufferNPlanes :: MonadIO m => AudioBuffer -> Int32 -> m ()
+setAudioBufferNPlanes s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 328) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioBufferNPlanesFieldInfo
+instance AttrInfo AudioBufferNPlanesFieldInfo where
+    type AttrAllowedOps AudioBufferNPlanesFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioBufferNPlanesFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioBufferNPlanesFieldInfo = (~) AudioBuffer
+    type AttrGetType AudioBufferNPlanesFieldInfo = Int32
+    type AttrLabel AudioBufferNPlanesFieldInfo = "n_planes"
+    type AttrOrigin AudioBufferNPlanesFieldInfo = AudioBuffer
+    attrGet _ = getAudioBufferNPlanes
+    attrSet _ = setAudioBufferNPlanes
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioBuffer_nPlanes :: AttrLabelProxy "nPlanes"
+audioBuffer_nPlanes = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@planes@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBuffer #planes
+@
+-}
+getAudioBufferPlanes :: MonadIO m => AudioBuffer -> m (Ptr ())
+getAudioBufferPlanes s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 336) :: IO (Ptr ())
+    return val
+
+{- |
+Set the value of the “@planes@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBuffer [ #planes 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBufferPlanes :: MonadIO m => AudioBuffer -> Ptr () -> m ()
+setAudioBufferPlanes s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 336) (val :: Ptr ())
+
+{- |
+Set the value of the “@planes@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #planes
+@
+-}
+clearAudioBufferPlanes :: MonadIO m => AudioBuffer -> m ()
+clearAudioBufferPlanes s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 336) (FP.nullPtr :: Ptr ())
+
+#if ENABLE_OVERLOADING
+data AudioBufferPlanesFieldInfo
+instance AttrInfo AudioBufferPlanesFieldInfo where
+    type AttrAllowedOps AudioBufferPlanesFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioBufferPlanesFieldInfo = (~) (Ptr ())
+    type AttrBaseTypeConstraint AudioBufferPlanesFieldInfo = (~) AudioBuffer
+    type AttrGetType AudioBufferPlanesFieldInfo = Ptr ()
+    type AttrLabel AudioBufferPlanesFieldInfo = "planes"
+    type AttrOrigin AudioBufferPlanesFieldInfo = AudioBuffer
+    attrGet _ = getAudioBufferPlanes
+    attrSet _ = setAudioBufferPlanes
+    attrConstruct = undefined
+    attrClear _ = clearAudioBufferPlanes
+
+audioBuffer_planes :: AttrLabelProxy "planes"
+audioBuffer_planes = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@buffer@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioBuffer #buffer
+@
+-}
+getAudioBufferBuffer :: MonadIO m => AudioBuffer -> m (Maybe Gst.Buffer.Buffer)
+getAudioBufferBuffer s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 344) :: IO (Ptr Gst.Buffer.Buffer)
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- (newBoxed Gst.Buffer.Buffer) val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@buffer@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioBuffer [ #buffer 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioBufferBuffer :: MonadIO m => AudioBuffer -> Ptr Gst.Buffer.Buffer -> m ()
+setAudioBufferBuffer s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 344) (val :: Ptr Gst.Buffer.Buffer)
+
+{- |
+Set the value of the “@buffer@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #buffer
+@
+-}
+clearAudioBufferBuffer :: MonadIO m => AudioBuffer -> m ()
+clearAudioBufferBuffer s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 344) (FP.nullPtr :: Ptr Gst.Buffer.Buffer)
+
+#if ENABLE_OVERLOADING
+data AudioBufferBufferFieldInfo
+instance AttrInfo AudioBufferBufferFieldInfo where
+    type AttrAllowedOps AudioBufferBufferFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioBufferBufferFieldInfo = (~) (Ptr Gst.Buffer.Buffer)
+    type AttrBaseTypeConstraint AudioBufferBufferFieldInfo = (~) AudioBuffer
+    type AttrGetType AudioBufferBufferFieldInfo = Maybe Gst.Buffer.Buffer
+    type AttrLabel AudioBufferBufferFieldInfo = "buffer"
+    type AttrOrigin AudioBufferBufferFieldInfo = AudioBuffer
+    attrGet _ = getAudioBufferBuffer
+    attrSet _ = setAudioBufferBuffer
+    attrConstruct = undefined
+    attrClear _ = clearAudioBufferBuffer
+
+audioBuffer_buffer :: AttrLabelProxy "buffer"
+audioBuffer_buffer = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioBuffer
+type instance O.AttributeList AudioBuffer = AudioBufferAttributeList
+type AudioBufferAttributeList = ('[ '("info", AudioBufferInfoFieldInfo), '("nSamples", AudioBufferNSamplesFieldInfo), '("nPlanes", AudioBufferNPlanesFieldInfo), '("planes", AudioBufferPlanesFieldInfo), '("buffer", AudioBufferBufferFieldInfo)] :: [(Symbol, *)])
+#endif
+
+-- method AudioBuffer::map
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to a #GstAudioBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the audio properties of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "gstbuffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstBuffer to be mapped", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "Gst", name = "MapFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the access mode for the memory", 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_buffer_map" gst_audio_buffer_map :: 
+    Ptr AudioBuffer ->                      -- buffer : TInterface (Name {namespace = "GstAudio", name = "AudioBuffer"})
+    Ptr GstAudio.AudioInfo.AudioInfo ->     -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Ptr Gst.Buffer.Buffer ->                -- gstbuffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    CUInt ->                                -- flags : TInterface (Name {namespace = "Gst", name = "MapFlags"})
+    IO CInt
+
+{- |
+Maps an audio /@gstbuffer@/ so that it can be read or written and stores the
+result of the map operation in /@buffer@/.
+
+This is especially useful when the /@gstbuffer@/ is in non-interleaved (planar)
+layout, in which case this function will use the information in the
+/@gstbuffer@/\'s attached 'GI.GstAudio.Structs.AudioMeta.AudioMeta' in order to map each channel in a
+separate \"plane\" in 'GI.GstAudio.Structs.AudioBuffer.AudioBuffer'. If a 'GI.GstAudio.Structs.AudioMeta.AudioMeta' is not attached
+on the /@gstbuffer@/, then it must be in interleaved layout.
+
+If a 'GI.GstAudio.Structs.AudioMeta.AudioMeta' is attached, then the 'GI.GstAudio.Structs.AudioInfo.AudioInfo' on the meta is checked
+against /@info@/. Normally, they should be equal, but in case they are not,
+a g_critical will be printed and the 'GI.GstAudio.Structs.AudioInfo.AudioInfo' from the meta will be
+used.
+
+In non-interleaved buffers, it is possible to have each channel on a separate
+'GI.Gst.Structs.Memory.Memory'. In this case, each memory will be mapped separately to avoid
+copying their contents in a larger memory area. Do note though that it is
+not supported to have a single channel spanning over two or more different
+'GI.Gst.Structs.Memory.Memory' objects. Although the map operation will likely succeed in this
+case, it will be highly sub-optimal and it is recommended to merge all the
+memories in the buffer before calling this function.
+
+Note: The actual 'GI.Gst.Structs.Buffer.Buffer' is not ref\'ed, but it is required to stay valid
+as long as it\'s mapped.
+
+/Since: 1.16/
+-}
+audioBufferMap ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioBuffer
+    {- ^ /@buffer@/: pointer to a 'GI.GstAudio.Structs.AudioBuffer.AudioBuffer' -}
+    -> GstAudio.AudioInfo.AudioInfo
+    {- ^ /@info@/: the audio properties of the buffer -}
+    -> Gst.Buffer.Buffer
+    {- ^ /@gstbuffer@/: the 'GI.Gst.Structs.Buffer.Buffer' to be mapped -}
+    -> [Gst.Flags.MapFlags]
+    {- ^ /@flags@/: the access mode for the memory -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the map operation succeeded or 'False' on failure -}
+audioBufferMap buffer info gstbuffer flags = liftIO $ do
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    info' <- unsafeManagedPtrGetPtr info
+    gstbuffer' <- unsafeManagedPtrGetPtr gstbuffer
+    let flags' = gflagsToWord flags
+    result <- gst_audio_buffer_map buffer' info' gstbuffer' flags'
+    let result' = (/= 0) result
+    touchManagedPtr buffer
+    touchManagedPtr info
+    touchManagedPtr gstbuffer
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioBufferMapMethodInfo
+instance (signature ~ (GstAudio.AudioInfo.AudioInfo -> Gst.Buffer.Buffer -> [Gst.Flags.MapFlags] -> m Bool), MonadIO m) => O.MethodInfo AudioBufferMapMethodInfo AudioBuffer signature where
+    overloadedMethod _ = audioBufferMap
+
+#endif
+
+-- method AudioBuffer::unmap
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "GstAudio", name = "AudioBuffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioBuffer to unmap", 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_buffer_unmap" gst_audio_buffer_unmap :: 
+    Ptr AudioBuffer ->                      -- buffer : TInterface (Name {namespace = "GstAudio", name = "AudioBuffer"})
+    IO ()
+
+{- |
+Unmaps an audio buffer that was previously mapped with
+'GI.GstAudio.Structs.AudioBuffer.audioBufferMap'.
+
+/Since: 1.16/
+-}
+audioBufferUnmap ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioBuffer
+    {- ^ /@buffer@/: the 'GI.GstAudio.Structs.AudioBuffer.AudioBuffer' to unmap -}
+    -> m ()
+audioBufferUnmap buffer = liftIO $ do
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    gst_audio_buffer_unmap buffer'
+    touchManagedPtr buffer
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioBufferUnmapMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioBufferUnmapMethodInfo AudioBuffer signature where
+    overloadedMethod _ = audioBufferUnmap
+
+#endif
+
+-- method AudioBuffer::clip
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The buffer to clip.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "segment", argType = TInterface (Name {namespace = "Gst", name = "Segment"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Segment in %GST_FORMAT_TIME or %GST_FORMAT_DEFAULT to which\n          the buffer should be clipped.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "sample rate.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "bpf", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of one audio frame in bytes. This is the size of one sample *\nnumber of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_buffer_clip" gst_audio_buffer_clip :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Ptr Gst.Segment.Segment ->              -- segment : TInterface (Name {namespace = "Gst", name = "Segment"})
+    Int32 ->                                -- rate : TBasicType TInt
+    Int32 ->                                -- bpf : TBasicType TInt
+    IO (Ptr Gst.Buffer.Buffer)
+
+{- |
+Clip the buffer to the given @/GstSegment/@.
+
+After calling this function the caller does not own a reference to
+/@buffer@/ anymore.
+-}
+audioBufferClip ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: The buffer to clip. -}
+    -> Gst.Segment.Segment
+    {- ^ /@segment@/: Segment in 'GI.Gst.Enums.FormatTime' or 'GI.Gst.Enums.FormatDefault' to which
+          the buffer should be clipped. -}
+    -> Int32
+    {- ^ /@rate@/: sample rate. -}
+    -> Int32
+    {- ^ /@bpf@/: size of one audio frame in bytes. This is the size of one sample *
+number of channels. -}
+    -> m Gst.Buffer.Buffer
+    {- ^ __Returns:__ 'Nothing' if the buffer is completely outside the configured segment,
+otherwise the clipped buffer is returned.
+
+If the buffer has no timestamp, it is assumed to be inside the segment and
+is not clipped -}
+audioBufferClip buffer segment rate bpf = liftIO $ do
+    buffer' <- B.ManagedPtr.disownBoxed buffer
+    segment' <- unsafeManagedPtrGetPtr segment
+    result <- gst_audio_buffer_clip buffer' segment' rate bpf
+    checkUnexpectedReturnNULL "audioBufferClip" result
+    result' <- (wrapBoxed Gst.Buffer.Buffer) result
+    touchManagedPtr buffer
+    touchManagedPtr segment
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioBuffer::reorder_channels
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The buffer to reorder.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioFormat of the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions in the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to convert to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_buffer_reorder_channels" gst_audio_buffer_reorder_channels :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "AudioFormat"})
+    Int32 ->                                -- channels : TBasicType TInt
+    Ptr CInt ->                             -- from : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    Ptr CInt ->                             -- to : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    IO CInt
+
+{- |
+Reorders /@buffer@/ from the channel positions /@from@/ to the channel
+positions /@to@/. /@from@/ and /@to@/ must contain the same number of
+positions and the same positions, only in a different order.
+/@buffer@/ must be writable.
+-}
+audioBufferReorderChannels ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: The buffer to reorder. -}
+    -> GstAudio.Enums.AudioFormat
+    {- ^ /@format@/: The @/GstAudioFormat/@ of the buffer. -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@from@/: The channel positions in the buffer. -}
+    -> [GstAudio.Enums.AudioChannelPosition]
+    {- ^ /@to@/: The channel positions to convert to. -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the reordering was possible. -}
+audioBufferReorderChannels buffer format from to = liftIO $ do
+    let channels = fromIntegral $ length to
+    let from_expected_length_ = fromIntegral $ length from
+    when (from_expected_length_ /= channels) $
+        error "GstAudio.audioBufferReorderChannels : length of 'from' does not agree with that of 'to'."
+    buffer' <- unsafeManagedPtrGetPtr buffer
+    let format' = (fromIntegral . fromEnum) format
+    let from' = map (fromIntegral . fromEnum) from
+    from'' <- packStorableArray from'
+    let to' = map (fromIntegral . fromEnum) to
+    to'' <- packStorableArray to'
+    result <- gst_audio_buffer_reorder_channels buffer' format' channels from'' to''
+    let result' = (/= 0) result
+    touchManagedPtr buffer
+    freeMem from''
+    freeMem to''
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioBuffer::truncate
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The buffer to truncate.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "bpf", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of one audio frame in bytes. This is the size of one sample *\nnumber of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "trim", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of samples to remove from the beginning of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the final number of samples that should exist in this buffer or -1\nto use all the remaining samples if you are only removing samples from the\nbeginning.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_buffer_truncate" gst_audio_buffer_truncate :: 
+    Ptr Gst.Buffer.Buffer ->                -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"})
+    Int32 ->                                -- bpf : TBasicType TInt
+    Word64 ->                               -- trim : TBasicType TUInt64
+    Word64 ->                               -- samples : TBasicType TUInt64
+    IO (Ptr Gst.Buffer.Buffer)
+
+{- |
+Truncate the buffer to finally have /@samples@/ number of samples, removing
+the necessary amount of samples from the end and /@trim@/ number of samples
+from the beginning.
+
+After calling this function the caller does not own a reference to
+/@buffer@/ anymore.
+
+/Since: 1.16/
+-}
+audioBufferTruncate ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Gst.Buffer.Buffer
+    {- ^ /@buffer@/: The buffer to truncate. -}
+    -> Int32
+    {- ^ /@bpf@/: size of one audio frame in bytes. This is the size of one sample *
+number of channels. -}
+    -> Word64
+    {- ^ /@trim@/: the number of samples to remove from the beginning of the buffer -}
+    -> Word64
+    {- ^ /@samples@/: the final number of samples that should exist in this buffer or -1
+to use all the remaining samples if you are only removing samples from the
+beginning. -}
+    -> m Gst.Buffer.Buffer
+    {- ^ __Returns:__ the truncated buffer or 'Nothing' if the arguments
+  were invalid -}
+audioBufferTruncate buffer bpf trim samples = liftIO $ do
+    buffer' <- B.ManagedPtr.disownBoxed buffer
+    result <- gst_audio_buffer_truncate buffer' bpf trim samples
+    checkUnexpectedReturnNULL "audioBufferTruncate" result
+    result' <- (wrapBoxed Gst.Buffer.Buffer) result
+    touchManagedPtr buffer
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioBufferMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioBufferMethod "map" o = AudioBufferMapMethodInfo
+    ResolveAudioBufferMethod "unmap" o = AudioBufferUnmapMethodInfo
+    ResolveAudioBufferMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioBufferMethod t AudioBuffer, O.MethodInfo info AudioBuffer p) => OL.IsLabel t (AudioBuffer -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioBuffer.hs-boot b/GI/GstAudio/Structs/AudioBuffer.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioBuffer.hs-boot
@@ -0,0 +1,32 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioBuffer 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
+
+newtype AudioBuffer = AudioBuffer (ManagedPtr AudioBuffer)
+instance WrappedPtr AudioBuffer where
+#if ENABLE_OVERLOADING
+data AudioBufferMapMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioBufferUnmapMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioCdSrcTrack.hs b/GI/GstAudio/Structs/AudioCdSrcTrack.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioCdSrcTrack.hs
@@ -0,0 +1,391 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+CD track abstraction to communicate TOC entries to the base class.
+
+This structure is only for use by sub-classed in connection with
+'GI.GstAudio.Objects.AudioCdSrc.audioCdSrcAddTrack'.
+
+Applications will be informed of the available tracks via a TOC message
+on the pipeline\'s 'GI.Gst.Objects.Bus.Bus' instead.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioCdSrcTrack
+    ( 
+
+-- * Exported types
+    AudioCdSrcTrack(..)                     ,
+    newZeroAudioCdSrcTrack                  ,
+    noAudioCdSrcTrack                       ,
+
+
+ -- * Properties
+-- ** end #attr:end#
+{- | The last sector of this track (LBA)
+-}
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack_end                     ,
+#endif
+    getAudioCdSrcTrackEnd                   ,
+    setAudioCdSrcTrackEnd                   ,
+
+
+-- ** isAudio #attr:isAudio#
+{- | Whether this is an audio track
+-}
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack_isAudio                 ,
+#endif
+    getAudioCdSrcTrackIsAudio               ,
+    setAudioCdSrcTrackIsAudio               ,
+
+
+-- ** num #attr:num#
+{- | Track number in TOC (usually starts from 1, but not always)
+-}
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack_num                     ,
+#endif
+    getAudioCdSrcTrackNum                   ,
+    setAudioCdSrcTrackNum                   ,
+
+
+-- ** start #attr:start#
+{- | The first sector of this track (LBA)
+-}
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack_start                   ,
+#endif
+    getAudioCdSrcTrackStart                 ,
+    setAudioCdSrcTrackStart                 ,
+
+
+-- ** tags #attr:tags#
+{- | Track-specific tags (e.g. from cd-text information), or NULL
+-}
+#if ENABLE_OVERLOADING
+    audioCdSrcTrack_tags                    ,
+#endif
+    clearAudioCdSrcTrackTags                ,
+    getAudioCdSrcTrackTags                  ,
+    setAudioCdSrcTrackTags                  ,
+
+
+
+
+    ) 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.Gst.Structs.TagList as Gst.TagList
+
+-- | Memory-managed wrapper type.
+newtype AudioCdSrcTrack = AudioCdSrcTrack (ManagedPtr AudioCdSrcTrack)
+instance WrappedPtr AudioCdSrcTrack where
+    wrappedPtrCalloc = callocBytes 48
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 48 >=> wrapPtr AudioCdSrcTrack)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioCdSrcTrack` struct initialized to zero.
+newZeroAudioCdSrcTrack :: MonadIO m => m AudioCdSrcTrack
+newZeroAudioCdSrcTrack = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioCdSrcTrack
+
+instance tag ~ 'AttrSet => Constructible AudioCdSrcTrack tag where
+    new _ attrs = do
+        o <- newZeroAudioCdSrcTrack
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioCdSrcTrack`.
+noAudioCdSrcTrack :: Maybe AudioCdSrcTrack
+noAudioCdSrcTrack = Nothing
+
+{- |
+Get the value of the “@is_audio@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrcTrack #isAudio
+@
+-}
+getAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> m Bool
+getAudioCdSrcTrackIsAudio s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO CInt
+    let val' = (/= 0) val
+    return val'
+
+{- |
+Set the value of the “@is_audio@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #isAudio 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> Bool -> m ()
+setAudioCdSrcTrackIsAudio s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 0) (val' :: CInt)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackIsAudioFieldInfo
+instance AttrInfo AudioCdSrcTrackIsAudioFieldInfo where
+    type AttrAllowedOps AudioCdSrcTrackIsAudioFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) AudioCdSrcTrack
+    type AttrGetType AudioCdSrcTrackIsAudioFieldInfo = Bool
+    type AttrLabel AudioCdSrcTrackIsAudioFieldInfo = "is_audio"
+    type AttrOrigin AudioCdSrcTrackIsAudioFieldInfo = AudioCdSrcTrack
+    attrGet _ = getAudioCdSrcTrackIsAudio
+    attrSet _ = setAudioCdSrcTrackIsAudio
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioCdSrcTrack_isAudio :: AttrLabelProxy "isAudio"
+audioCdSrcTrack_isAudio = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@num@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrcTrack #num
+@
+-}
+getAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> m Word32
+getAudioCdSrcTrackNum s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 4) :: IO Word32
+    return val
+
+{- |
+Set the value of the “@num@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #num 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
+setAudioCdSrcTrackNum s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 4) (val :: Word32)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackNumFieldInfo
+instance AttrInfo AudioCdSrcTrackNumFieldInfo where
+    type AttrAllowedOps AudioCdSrcTrackNumFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) Word32
+    type AttrBaseTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) AudioCdSrcTrack
+    type AttrGetType AudioCdSrcTrackNumFieldInfo = Word32
+    type AttrLabel AudioCdSrcTrackNumFieldInfo = "num"
+    type AttrOrigin AudioCdSrcTrackNumFieldInfo = AudioCdSrcTrack
+    attrGet _ = getAudioCdSrcTrackNum
+    attrSet _ = setAudioCdSrcTrackNum
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioCdSrcTrack_num :: AttrLabelProxy "num"
+audioCdSrcTrack_num = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@start@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrcTrack #start
+@
+-}
+getAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> m Word32
+getAudioCdSrcTrackStart s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO Word32
+    return val
+
+{- |
+Set the value of the “@start@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #start 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
+setAudioCdSrcTrackStart s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 8) (val :: Word32)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackStartFieldInfo
+instance AttrInfo AudioCdSrcTrackStartFieldInfo where
+    type AttrAllowedOps AudioCdSrcTrackStartFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) Word32
+    type AttrBaseTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) AudioCdSrcTrack
+    type AttrGetType AudioCdSrcTrackStartFieldInfo = Word32
+    type AttrLabel AudioCdSrcTrackStartFieldInfo = "start"
+    type AttrOrigin AudioCdSrcTrackStartFieldInfo = AudioCdSrcTrack
+    attrGet _ = getAudioCdSrcTrackStart
+    attrSet _ = setAudioCdSrcTrackStart
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioCdSrcTrack_start :: AttrLabelProxy "start"
+audioCdSrcTrack_start = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@end@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrcTrack #end
+@
+-}
+getAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> m Word32
+getAudioCdSrcTrackEnd s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 12) :: IO Word32
+    return val
+
+{- |
+Set the value of the “@end@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #end 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
+setAudioCdSrcTrackEnd s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 12) (val :: Word32)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackEndFieldInfo
+instance AttrInfo AudioCdSrcTrackEndFieldInfo where
+    type AttrAllowedOps AudioCdSrcTrackEndFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) Word32
+    type AttrBaseTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) AudioCdSrcTrack
+    type AttrGetType AudioCdSrcTrackEndFieldInfo = Word32
+    type AttrLabel AudioCdSrcTrackEndFieldInfo = "end"
+    type AttrOrigin AudioCdSrcTrackEndFieldInfo = AudioCdSrcTrack
+    attrGet _ = getAudioCdSrcTrackEnd
+    attrSet _ = setAudioCdSrcTrackEnd
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioCdSrcTrack_end :: AttrLabelProxy "end"
+audioCdSrcTrack_end = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@tags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioCdSrcTrack #tags
+@
+-}
+getAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m (Maybe Gst.TagList.TagList)
+getAudioCdSrcTrackTags s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO (Ptr Gst.TagList.TagList)
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- (newBoxed Gst.TagList.TagList) val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@tags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #tags 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> Ptr Gst.TagList.TagList -> m ()
+setAudioCdSrcTrackTags s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 16) (val :: Ptr Gst.TagList.TagList)
+
+{- |
+Set the value of the “@tags@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #tags
+@
+-}
+clearAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m ()
+clearAudioCdSrcTrackTags s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 16) (FP.nullPtr :: Ptr Gst.TagList.TagList)
+
+#if ENABLE_OVERLOADING
+data AudioCdSrcTrackTagsFieldInfo
+instance AttrInfo AudioCdSrcTrackTagsFieldInfo where
+    type AttrAllowedOps AudioCdSrcTrackTagsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) (Ptr Gst.TagList.TagList)
+    type AttrBaseTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) AudioCdSrcTrack
+    type AttrGetType AudioCdSrcTrackTagsFieldInfo = Maybe Gst.TagList.TagList
+    type AttrLabel AudioCdSrcTrackTagsFieldInfo = "tags"
+    type AttrOrigin AudioCdSrcTrackTagsFieldInfo = AudioCdSrcTrack
+    attrGet _ = getAudioCdSrcTrackTags
+    attrSet _ = setAudioCdSrcTrackTags
+    attrConstruct = undefined
+    attrClear _ = clearAudioCdSrcTrackTags
+
+audioCdSrcTrack_tags :: AttrLabelProxy "tags"
+audioCdSrcTrack_tags = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioCdSrcTrack
+type instance O.AttributeList AudioCdSrcTrack = AudioCdSrcTrackAttributeList
+type AudioCdSrcTrackAttributeList = ('[ '("isAudio", AudioCdSrcTrackIsAudioFieldInfo), '("num", AudioCdSrcTrackNumFieldInfo), '("start", AudioCdSrcTrackStartFieldInfo), '("end", AudioCdSrcTrackEndFieldInfo), '("tags", AudioCdSrcTrackTagsFieldInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioCdSrcTrackMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioCdSrcTrackMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioCdSrcTrackMethod t AudioCdSrcTrack, O.MethodInfo info AudioCdSrcTrack p) => OL.IsLabel t (AudioCdSrcTrack -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioCdSrcTrack.hs-boot b/GI/GstAudio/Structs/AudioCdSrcTrack.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioCdSrcTrack.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioCdSrcTrack 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
+
+newtype AudioCdSrcTrack = AudioCdSrcTrack (ManagedPtr AudioCdSrcTrack)
+instance WrappedPtr AudioCdSrcTrack where
diff --git a/GI/GstAudio/Structs/AudioChannelMixer.hs b/GI/GstAudio/Structs/AudioChannelMixer.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioChannelMixer.hs
@@ -0,0 +1,234 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+/No description available in the introspection data./
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioChannelMixer
+    ( 
+
+-- * Exported types
+    AudioChannelMixer(..)                   ,
+    noAudioChannelMixer                     ,
+
+
+ -- * Methods
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioChannelMixerFreeMethodInfo         ,
+#endif
+    audioChannelMixerFree                   ,
+
+
+-- ** isPassthrough #method:isPassthrough#
+
+#if ENABLE_OVERLOADING
+    AudioChannelMixerIsPassthroughMethodInfo,
+#endif
+    audioChannelMixerIsPassthrough          ,
+
+
+-- ** samples #method:samples#
+
+#if ENABLE_OVERLOADING
+    AudioChannelMixerSamplesMethodInfo      ,
+#endif
+    audioChannelMixerSamples                ,
+
+
+
+
+    ) 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
+
+
+-- | Memory-managed wrapper type.
+newtype AudioChannelMixer = AudioChannelMixer (ManagedPtr AudioChannelMixer)
+-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
+instance WrappedPtr AudioChannelMixer where
+    wrappedPtrCalloc = return nullPtr
+    wrappedPtrCopy = return
+    wrappedPtrFree = Nothing
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioChannelMixer`.
+noAudioChannelMixer :: Maybe AudioChannelMixer
+noAudioChannelMixer = Nothing
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioChannelMixer
+type instance O.AttributeList AudioChannelMixer = AudioChannelMixerAttributeList
+type AudioChannelMixerAttributeList = ('[ ] :: [(Symbol, *)])
+#endif
+
+-- method AudioChannelMixer::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "mix", argType = TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioChannelMixer", 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_channel_mixer_free" gst_audio_channel_mixer_free :: 
+    Ptr AudioChannelMixer ->                -- mix : TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"})
+    IO ()
+
+{- |
+Free memory allocated by /@mix@/.
+-}
+audioChannelMixerFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioChannelMixer
+    {- ^ /@mix@/: a 'GI.GstAudio.Structs.AudioChannelMixer.AudioChannelMixer' -}
+    -> m ()
+audioChannelMixerFree mix = liftIO $ do
+    mix' <- unsafeManagedPtrGetPtr mix
+    gst_audio_channel_mixer_free mix'
+    touchManagedPtr mix
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioChannelMixerFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioChannelMixerFreeMethodInfo AudioChannelMixer signature where
+    overloadedMethod _ = audioChannelMixerFree
+
+#endif
+
+-- method AudioChannelMixer::is_passthrough
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "mix", argType = TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioChannelMixer", 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_channel_mixer_is_passthrough" gst_audio_channel_mixer_is_passthrough :: 
+    Ptr AudioChannelMixer ->                -- mix : TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"})
+    IO CInt
+
+{- |
+Check if /@mix@/ is in passthrough.
+
+Only N x N mix identity matrices are considered passthrough,
+this is determined by comparing the contents of the matrix
+with 0.0 and 1.0.
+
+As this is floating point comparisons, if the values have been
+generated, they should be rounded up or down by explicit
+assignment of 0.0 or 1.0 to values within a user-defined
+epsilon, this code doesn\'t make assumptions as to what may
+constitute an appropriate epsilon.
+-}
+audioChannelMixerIsPassthrough ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioChannelMixer
+    {- ^ /@mix@/: a 'GI.GstAudio.Structs.AudioChannelMixer.AudioChannelMixer' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' is /@mix@/ is passthrough. -}
+audioChannelMixerIsPassthrough mix = liftIO $ do
+    mix' <- unsafeManagedPtrGetPtr mix
+    result <- gst_audio_channel_mixer_is_passthrough mix'
+    let result' = (/= 0) result
+    touchManagedPtr mix
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioChannelMixerIsPassthroughMethodInfo
+instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo AudioChannelMixerIsPassthroughMethodInfo AudioChannelMixer signature where
+    overloadedMethod _ = audioChannelMixerIsPassthrough
+
+#endif
+
+-- method AudioChannelMixer::samples
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "mix", argType = TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioChannelMixer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "input samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "output samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples", 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_channel_mixer_samples" gst_audio_channel_mixer_samples :: 
+    Ptr AudioChannelMixer ->                -- mix : TInterface (Name {namespace = "GstAudio", name = "AudioChannelMixer"})
+    Ptr () ->                               -- in : TBasicType TPtr
+    Ptr () ->                               -- out : TBasicType TPtr
+    Int32 ->                                -- samples : TBasicType TInt
+    IO ()
+
+{- |
+In case the samples are interleaved, /@in@/ and /@out@/ must point to an
+array with a single element pointing to a block of interleaved samples.
+
+If non-interleaved samples are used, /@in@/ and /@out@/ must point to an
+array with pointers to memory blocks, one for each channel.
+
+Perform channel mixing on /@inData@/ and write the result to /@outData@/.
+/@inData@/ and /@outData@/ need to be in /@format@/ and /@layout@/.
+-}
+audioChannelMixerSamples ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioChannelMixer
+    {- ^ /@mix@/: a 'GI.GstAudio.Structs.AudioChannelMixer.AudioChannelMixer' -}
+    -> Ptr ()
+    {- ^ /@in@/: input samples -}
+    -> Ptr ()
+    {- ^ /@out@/: output samples -}
+    -> Int32
+    {- ^ /@samples@/: number of samples -}
+    -> m ()
+audioChannelMixerSamples mix in_ out samples = liftIO $ do
+    mix' <- unsafeManagedPtrGetPtr mix
+    gst_audio_channel_mixer_samples mix' in_ out samples
+    touchManagedPtr mix
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioChannelMixerSamplesMethodInfo
+instance (signature ~ (Ptr () -> Ptr () -> Int32 -> m ()), MonadIO m) => O.MethodInfo AudioChannelMixerSamplesMethodInfo AudioChannelMixer signature where
+    overloadedMethod _ = audioChannelMixerSamples
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioChannelMixerMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioChannelMixerMethod "free" o = AudioChannelMixerFreeMethodInfo
+    ResolveAudioChannelMixerMethod "isPassthrough" o = AudioChannelMixerIsPassthroughMethodInfo
+    ResolveAudioChannelMixerMethod "samples" o = AudioChannelMixerSamplesMethodInfo
+    ResolveAudioChannelMixerMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioChannelMixerMethod t AudioChannelMixer, O.MethodInfo info AudioChannelMixer p) => OL.IsLabel t (AudioChannelMixer -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioChannelMixer.hs-boot b/GI/GstAudio/Structs/AudioChannelMixer.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioChannelMixer.hs-boot
@@ -0,0 +1,35 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioChannelMixer 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
+
+newtype AudioChannelMixer = AudioChannelMixer (ManagedPtr AudioChannelMixer)
+instance WrappedPtr AudioChannelMixer where
+#if ENABLE_OVERLOADING
+data AudioChannelMixerFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioChannelMixerIsPassthroughMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioChannelMixerSamplesMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioClippingMeta.hs b/GI/GstAudio/Structs/AudioClippingMeta.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioClippingMeta.hs
@@ -0,0 +1,350 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Extra buffer metadata describing how much audio has to be clipped from
+the start or end of a buffer. This is used for compressed formats, where
+the first frame usually has some additional samples due to encoder and
+decoder delays, and the last frame usually has some additional samples to
+be able to fill the complete last frame.
+
+This is used to ensure that decoded data in the end has the same amount of
+samples, and multiply decoded streams can be gaplessly concatenated.
+
+Note: If clipping of the start is done by adjusting the segment, this meta
+has to be dropped from buffers as otherwise clipping could happen twice.
+
+/Since: 1.8/
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioClippingMeta
+    ( 
+
+-- * Exported types
+    AudioClippingMeta(..)                   ,
+    newZeroAudioClippingMeta                ,
+    noAudioClippingMeta                     ,
+
+
+ -- * Methods
+-- ** getInfo #method:getInfo#
+
+    audioClippingMetaGetInfo                ,
+
+
+
+
+ -- * Properties
+-- ** end #attr:end#
+{- | Amount of  to clip from end of buffer
+-}
+#if ENABLE_OVERLOADING
+    audioClippingMeta_end                   ,
+#endif
+    getAudioClippingMetaEnd                 ,
+    setAudioClippingMetaEnd                 ,
+
+
+-- ** format #attr:format#
+{- | GstFormat of /@start@/ and /@stop@/, GST_FORMAT_DEFAULT is samples
+-}
+#if ENABLE_OVERLOADING
+    audioClippingMeta_format                ,
+#endif
+    getAudioClippingMetaFormat              ,
+    setAudioClippingMetaFormat              ,
+
+
+-- ** meta #attr:meta#
+{- | parent 'GI.Gst.Structs.Meta.Meta'
+-}
+#if ENABLE_OVERLOADING
+    audioClippingMeta_meta                  ,
+#endif
+    getAudioClippingMetaMeta                ,
+
+
+-- ** start #attr:start#
+{- | Amount of audio to clip from start of buffer
+-}
+#if ENABLE_OVERLOADING
+    audioClippingMeta_start                 ,
+#endif
+    getAudioClippingMetaStart               ,
+    setAudioClippingMetaStart               ,
+
+
+
+
+    ) 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.Gst.Enums as Gst.Enums
+import qualified GI.Gst.Structs.Meta as Gst.Meta
+import qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioClippingMeta = AudioClippingMeta (ManagedPtr AudioClippingMeta)
+instance WrappedPtr AudioClippingMeta where
+    wrappedPtrCalloc = callocBytes 40
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 40 >=> wrapPtr AudioClippingMeta)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioClippingMeta` struct initialized to zero.
+newZeroAudioClippingMeta :: MonadIO m => m AudioClippingMeta
+newZeroAudioClippingMeta = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioClippingMeta
+
+instance tag ~ 'AttrSet => Constructible AudioClippingMeta tag where
+    new _ attrs = do
+        o <- newZeroAudioClippingMeta
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioClippingMeta`.
+noAudioClippingMeta :: Maybe AudioClippingMeta
+noAudioClippingMeta = Nothing
+
+{- |
+Get the value of the “@meta@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioClippingMeta #meta
+@
+-}
+getAudioClippingMetaMeta :: MonadIO m => AudioClippingMeta -> m Gst.Meta.Meta
+getAudioClippingMetaMeta s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 0 :: (Ptr Gst.Meta.Meta)
+    val' <- (newPtr Gst.Meta.Meta) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioClippingMetaMetaFieldInfo
+instance AttrInfo AudioClippingMetaMetaFieldInfo where
+    type AttrAllowedOps AudioClippingMetaMetaFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioClippingMetaMetaFieldInfo = (~) (Ptr Gst.Meta.Meta)
+    type AttrBaseTypeConstraint AudioClippingMetaMetaFieldInfo = (~) AudioClippingMeta
+    type AttrGetType AudioClippingMetaMetaFieldInfo = Gst.Meta.Meta
+    type AttrLabel AudioClippingMetaMetaFieldInfo = "meta"
+    type AttrOrigin AudioClippingMetaMetaFieldInfo = AudioClippingMeta
+    attrGet _ = getAudioClippingMetaMeta
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioClippingMeta_meta :: AttrLabelProxy "meta"
+audioClippingMeta_meta = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioClippingMeta #format
+@
+-}
+getAudioClippingMetaFormat :: MonadIO m => AudioClippingMeta -> m Gst.Enums.Format
+getAudioClippingMetaFormat s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioClippingMeta [ #format 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioClippingMetaFormat :: MonadIO m => AudioClippingMeta -> Gst.Enums.Format -> m ()
+setAudioClippingMetaFormat s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 16) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioClippingMetaFormatFieldInfo
+instance AttrInfo AudioClippingMetaFormatFieldInfo where
+    type AttrAllowedOps AudioClippingMetaFormatFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioClippingMetaFormatFieldInfo = (~) Gst.Enums.Format
+    type AttrBaseTypeConstraint AudioClippingMetaFormatFieldInfo = (~) AudioClippingMeta
+    type AttrGetType AudioClippingMetaFormatFieldInfo = Gst.Enums.Format
+    type AttrLabel AudioClippingMetaFormatFieldInfo = "format"
+    type AttrOrigin AudioClippingMetaFormatFieldInfo = AudioClippingMeta
+    attrGet _ = getAudioClippingMetaFormat
+    attrSet _ = setAudioClippingMetaFormat
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioClippingMeta_format :: AttrLabelProxy "format"
+audioClippingMeta_format = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@start@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioClippingMeta #start
+@
+-}
+getAudioClippingMetaStart :: MonadIO m => AudioClippingMeta -> m Word64
+getAudioClippingMetaStart s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@start@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioClippingMeta [ #start 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioClippingMetaStart :: MonadIO m => AudioClippingMeta -> Word64 -> m ()
+setAudioClippingMetaStart s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 24) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioClippingMetaStartFieldInfo
+instance AttrInfo AudioClippingMetaStartFieldInfo where
+    type AttrAllowedOps AudioClippingMetaStartFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioClippingMetaStartFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioClippingMetaStartFieldInfo = (~) AudioClippingMeta
+    type AttrGetType AudioClippingMetaStartFieldInfo = Word64
+    type AttrLabel AudioClippingMetaStartFieldInfo = "start"
+    type AttrOrigin AudioClippingMetaStartFieldInfo = AudioClippingMeta
+    attrGet _ = getAudioClippingMetaStart
+    attrSet _ = setAudioClippingMetaStart
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioClippingMeta_start :: AttrLabelProxy "start"
+audioClippingMeta_start = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@end@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioClippingMeta #end
+@
+-}
+getAudioClippingMetaEnd :: MonadIO m => AudioClippingMeta -> m Word64
+getAudioClippingMetaEnd s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 32) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@end@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioClippingMeta [ #end 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioClippingMetaEnd :: MonadIO m => AudioClippingMeta -> Word64 -> m ()
+setAudioClippingMetaEnd s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 32) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioClippingMetaEndFieldInfo
+instance AttrInfo AudioClippingMetaEndFieldInfo where
+    type AttrAllowedOps AudioClippingMetaEndFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioClippingMetaEndFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioClippingMetaEndFieldInfo = (~) AudioClippingMeta
+    type AttrGetType AudioClippingMetaEndFieldInfo = Word64
+    type AttrLabel AudioClippingMetaEndFieldInfo = "end"
+    type AttrOrigin AudioClippingMetaEndFieldInfo = AudioClippingMeta
+    attrGet _ = getAudioClippingMetaEnd
+    attrSet _ = setAudioClippingMetaEnd
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioClippingMeta_end :: AttrLabelProxy "end"
+audioClippingMeta_end = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioClippingMeta
+type instance O.AttributeList AudioClippingMeta = AudioClippingMetaAttributeList
+type AudioClippingMetaAttributeList = ('[ '("meta", AudioClippingMetaMetaFieldInfo), '("format", AudioClippingMetaFormatFieldInfo), '("start", AudioClippingMetaStartFieldInfo), '("end", AudioClippingMetaEndFieldInfo)] :: [(Symbol, *)])
+#endif
+
+-- method AudioClippingMeta::get_info
+-- method type : MemberFunction
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "MetaInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clipping_meta_get_info" gst_audio_clipping_meta_get_info :: 
+    IO (Ptr Gst.MetaInfo.MetaInfo)
+
+{- |
+/No description available in the introspection data./
+-}
+audioClippingMetaGetInfo ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m Gst.MetaInfo.MetaInfo
+audioClippingMetaGetInfo  = liftIO $ do
+    result <- gst_audio_clipping_meta_get_info
+    checkUnexpectedReturnNULL "audioClippingMetaGetInfo" result
+    result' <- (newPtr Gst.MetaInfo.MetaInfo) result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioClippingMetaMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioClippingMetaMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioClippingMetaMethod t AudioClippingMeta, O.MethodInfo info AudioClippingMeta p) => OL.IsLabel t (AudioClippingMeta -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioClippingMeta.hs-boot b/GI/GstAudio/Structs/AudioClippingMeta.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioClippingMeta.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioClippingMeta 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
+
+newtype AudioClippingMeta = AudioClippingMeta (ManagedPtr AudioClippingMeta)
+instance WrappedPtr AudioClippingMeta where
diff --git a/GI/GstAudio/Structs/AudioConverter.hs b/GI/GstAudio/Structs/AudioConverter.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioConverter.hs
@@ -0,0 +1,735 @@
+
+
+{- |
+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 object is used to convert audio samples from one format to another.
+The object can perform conversion of:
+
+ * audio format with optional dithering and noise shaping
+
+ * audio samplerate
+
+ * audio channels and channel layout
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioConverter
+    ( 
+
+-- * Exported types
+    AudioConverter(..)                      ,
+    noAudioConverter                        ,
+
+
+ -- * Methods
+-- ** convert #method:convert#
+
+#if ENABLE_OVERLOADING
+    AudioConverterConvertMethodInfo         ,
+#endif
+    audioConverterConvert                   ,
+
+
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioConverterFreeMethodInfo            ,
+#endif
+    audioConverterFree                      ,
+
+
+-- ** getConfig #method:getConfig#
+
+#if ENABLE_OVERLOADING
+    AudioConverterGetConfigMethodInfo       ,
+#endif
+    audioConverterGetConfig                 ,
+
+
+-- ** getInFrames #method:getInFrames#
+
+#if ENABLE_OVERLOADING
+    AudioConverterGetInFramesMethodInfo     ,
+#endif
+    audioConverterGetInFrames               ,
+
+
+-- ** getMaxLatency #method:getMaxLatency#
+
+#if ENABLE_OVERLOADING
+    AudioConverterGetMaxLatencyMethodInfo   ,
+#endif
+    audioConverterGetMaxLatency             ,
+
+
+-- ** getOutFrames #method:getOutFrames#
+
+#if ENABLE_OVERLOADING
+    AudioConverterGetOutFramesMethodInfo    ,
+#endif
+    audioConverterGetOutFrames              ,
+
+
+-- ** isPassthrough #method:isPassthrough#
+
+#if ENABLE_OVERLOADING
+    AudioConverterIsPassthroughMethodInfo   ,
+#endif
+    audioConverterIsPassthrough             ,
+
+
+-- ** new #method:new#
+
+    audioConverterNew                       ,
+
+
+-- ** reset #method:reset#
+
+#if ENABLE_OVERLOADING
+    AudioConverterResetMethodInfo           ,
+#endif
+    audioConverterReset                     ,
+
+
+-- ** samples #method:samples#
+
+#if ENABLE_OVERLOADING
+    AudioConverterSamplesMethodInfo         ,
+#endif
+    audioConverterSamples                   ,
+
+
+-- ** supportsInplace #method:supportsInplace#
+
+#if ENABLE_OVERLOADING
+    AudioConverterSupportsInplaceMethodInfo ,
+#endif
+    audioConverterSupportsInplace           ,
+
+
+-- ** updateConfig #method:updateConfig#
+
+#if ENABLE_OVERLOADING
+    AudioConverterUpdateConfigMethodInfo    ,
+#endif
+    audioConverterUpdateConfig              ,
+
+
+
+
+    ) 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.Gst.Structs.Structure as Gst.Structure
+import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioConverter = AudioConverter (ManagedPtr AudioConverter)
+foreign import ccall "gst_audio_converter_get_type" c_gst_audio_converter_get_type :: 
+    IO GType
+
+instance BoxedObject AudioConverter where
+    boxedType _ = c_gst_audio_converter_get_type
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioConverter`.
+noAudioConverter :: Maybe AudioConverter
+noAudioConverter = Nothing
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioConverter
+type instance O.AttributeList AudioConverter = AudioConverterAttributeList
+type AudioConverterAttributeList = ('[ ] :: [(Symbol, *)])
+#endif
+
+-- method AudioConverter::new
+-- method type : Constructor
+-- Args : [Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "extra #GstAudioConverterFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a source #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a destination #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "config", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstStructure with configuration options", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_new" gst_audio_converter_new :: 
+    CUInt ->                                -- flags : TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"})
+    Ptr GstAudio.AudioInfo.AudioInfo ->     -- in_info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Ptr GstAudio.AudioInfo.AudioInfo ->     -- out_info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Ptr Gst.Structure.Structure ->          -- config : TInterface (Name {namespace = "Gst", name = "Structure"})
+    IO (Ptr AudioConverter)
+
+{- |
+Create a new 'GI.GstAudio.Structs.AudioConverter.AudioConverter' that is able to convert between /@in@/ and /@out@/
+audio formats.
+
+/@config@/ contains extra configuration options, see @/GST_AUDIO_CONVERTER_OPT_/@*
+parameters for details about the options and values.
+-}
+audioConverterNew ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    [GstAudio.Flags.AudioConverterFlags]
+    {- ^ /@flags@/: extra 'GI.GstAudio.Flags.AudioConverterFlags' -}
+    -> GstAudio.AudioInfo.AudioInfo
+    {- ^ /@inInfo@/: a source 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> GstAudio.AudioInfo.AudioInfo
+    {- ^ /@outInfo@/: a destination 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> Maybe (Gst.Structure.Structure)
+    {- ^ /@config@/: a 'GI.Gst.Structs.Structure.Structure' with configuration options -}
+    -> m AudioConverter
+    {- ^ __Returns:__ a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' or 'Nothing' if conversion is not possible. -}
+audioConverterNew flags inInfo outInfo config = liftIO $ do
+    let flags' = gflagsToWord flags
+    inInfo' <- unsafeManagedPtrGetPtr inInfo
+    outInfo' <- unsafeManagedPtrGetPtr outInfo
+    maybeConfig <- case config of
+        Nothing -> return nullPtr
+        Just jConfig -> do
+            jConfig' <- B.ManagedPtr.disownBoxed jConfig
+            return jConfig'
+    result <- gst_audio_converter_new flags' inInfo' outInfo' maybeConfig
+    checkUnexpectedReturnNULL "audioConverterNew" result
+    result' <- (wrapBoxed AudioConverter) result
+    touchManagedPtr inInfo
+    touchManagedPtr outInfo
+    whenJust config touchManagedPtr
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioConverter::convert
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "extra #GstAudioConverterFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "input data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @in", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out", argType = TCArray False (-1) 5 (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer where\n the output data will be written", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_size", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer where the size of @out will be written", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : [Arg {argCName = "out_size", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a pointer where the size of @out will be written", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "in_size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @in", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_convert" gst_audio_converter_convert :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    CUInt ->                                -- flags : TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"})
+    Ptr Word8 ->                            -- in : TCArray False (-1) 3 (TBasicType TUInt8)
+    Word64 ->                               -- in_size : TBasicType TUInt64
+    Ptr (Ptr Word8) ->                      -- out : TCArray False (-1) 5 (TBasicType TUInt8)
+    Ptr Word64 ->                           -- out_size : TBasicType TUInt64
+    IO CInt
+
+{- |
+Convenience wrapper around 'GI.GstAudio.Structs.AudioConverter.audioConverterSamples', which will
+perform allocation of the output buffer based on the result from
+'GI.GstAudio.Structs.AudioConverter.audioConverterGetOutFrames'.
+
+/Since: 1.14/
+-}
+audioConverterConvert ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> [GstAudio.Flags.AudioConverterFlags]
+    {- ^ /@flags@/: extra 'GI.GstAudio.Flags.AudioConverterFlags' -}
+    -> ByteString
+    {- ^ /@in@/: input data -}
+    -> m ((Bool, ByteString))
+    {- ^ __Returns:__ 'True' is the conversion could be performed. -}
+audioConverterConvert convert flags in_ = liftIO $ do
+    let inSize = fromIntegral $ B.length in_
+    convert' <- unsafeManagedPtrGetPtr convert
+    let flags' = gflagsToWord flags
+    in_' <- packByteString in_
+    out <- allocMem :: IO (Ptr (Ptr Word8))
+    outSize <- allocMem :: IO (Ptr Word64)
+    result <- gst_audio_converter_convert convert' flags' in_' inSize out outSize
+    outSize' <- peek outSize
+    let result' = (/= 0) result
+    out' <- peek out
+    out'' <- (unpackByteStringWithLength outSize') out'
+    freeMem out'
+    touchManagedPtr convert
+    freeMem in_'
+    freeMem out
+    freeMem outSize
+    return (result', out'')
+
+#if ENABLE_OVERLOADING
+data AudioConverterConvertMethodInfo
+instance (signature ~ ([GstAudio.Flags.AudioConverterFlags] -> ByteString -> m ((Bool, ByteString))), MonadIO m) => O.MethodInfo AudioConverterConvertMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterConvert
+
+#endif
+
+-- method AudioConverter::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", 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_converter_free" gst_audio_converter_free :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    IO ()
+
+{- |
+Free a previously allocated /@convert@/ instance.
+-}
+audioConverterFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> m ()
+audioConverterFree convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    gst_audio_converter_free convert'
+    touchManagedPtr convert
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioConverterFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioConverterFreeMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterFree
+
+#endif
+
+-- method AudioConverter::get_config
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_rate", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "result input rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_rate", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "result output rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Structure"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_get_config" gst_audio_converter_get_config :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    Ptr Int32 ->                            -- in_rate : TBasicType TInt
+    Ptr Int32 ->                            -- out_rate : TBasicType TInt
+    IO (Ptr Gst.Structure.Structure)
+
+{- |
+Get the current configuration of /@convert@/.
+-}
+audioConverterGetConfig ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> m ((Gst.Structure.Structure, Int32, Int32))
+    {- ^ __Returns:__ 
+  a 'GI.Gst.Structs.Structure.Structure' that remains valid for as long as /@convert@/ is valid
+  or until 'GI.GstAudio.Structs.AudioConverter.audioConverterUpdateConfig' is called. -}
+audioConverterGetConfig convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    inRate <- allocMem :: IO (Ptr Int32)
+    outRate <- allocMem :: IO (Ptr Int32)
+    result <- gst_audio_converter_get_config convert' inRate outRate
+    checkUnexpectedReturnNULL "audioConverterGetConfig" result
+    result' <- (newBoxed Gst.Structure.Structure) result
+    inRate' <- peek inRate
+    outRate' <- peek outRate
+    touchManagedPtr convert
+    freeMem inRate
+    freeMem outRate
+    return (result', inRate', outRate')
+
+#if ENABLE_OVERLOADING
+data AudioConverterGetConfigMethodInfo
+instance (signature ~ (m ((Gst.Structure.Structure, Int32, Int32))), MonadIO m) => O.MethodInfo AudioConverterGetConfigMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterGetConfig
+
+#endif
+
+-- method AudioConverter::get_in_frames
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of output frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_get_in_frames" gst_audio_converter_get_in_frames :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    Word64 ->                               -- out_frames : TBasicType TUInt64
+    IO Word64
+
+{- |
+Calculate how many input frames are currently needed by /@convert@/ to produce
+/@outFrames@/ of output frames.
+-}
+audioConverterGetInFrames ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> Word64
+    {- ^ /@outFrames@/: number of output frames -}
+    -> m Word64
+    {- ^ __Returns:__ the number of input frames -}
+audioConverterGetInFrames convert outFrames = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    result <- gst_audio_converter_get_in_frames convert' outFrames
+    touchManagedPtr convert
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioConverterGetInFramesMethodInfo
+instance (signature ~ (Word64 -> m Word64), MonadIO m) => O.MethodInfo AudioConverterGetInFramesMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterGetInFrames
+
+#endif
+
+-- method AudioConverter::get_max_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_get_max_latency" gst_audio_converter_get_max_latency :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    IO Word64
+
+{- |
+Get the maximum number of input frames that the converter would
+need before producing output.
+-}
+audioConverterGetMaxLatency ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> m Word64
+    {- ^ __Returns:__ the latency of /@convert@/ as expressed in the number of
+frames. -}
+audioConverterGetMaxLatency convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    result <- gst_audio_converter_get_max_latency convert'
+    touchManagedPtr convert
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioConverterGetMaxLatencyMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioConverterGetMaxLatencyMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterGetMaxLatency
+
+#endif
+
+-- method AudioConverter::get_out_frames
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_get_out_frames" gst_audio_converter_get_out_frames :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    Word64 ->                               -- in_frames : TBasicType TUInt64
+    IO Word64
+
+{- |
+Calculate how many output frames can be produced when /@inFrames@/ input
+frames are given to /@convert@/.
+-}
+audioConverterGetOutFrames ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> Word64
+    {- ^ /@inFrames@/: number of input frames -}
+    -> m Word64
+    {- ^ __Returns:__ the number of output frames -}
+audioConverterGetOutFrames convert inFrames = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    result <- gst_audio_converter_get_out_frames convert' inFrames
+    touchManagedPtr convert
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioConverterGetOutFramesMethodInfo
+instance (signature ~ (Word64 -> m Word64), MonadIO m) => O.MethodInfo AudioConverterGetOutFramesMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterGetOutFrames
+
+#endif
+
+-- method AudioConverter::is_passthrough
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, 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_converter_is_passthrough" gst_audio_converter_is_passthrough :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    IO CInt
+
+{- |
+Returns whether the audio converter will operate in passthrough mode.
+The return value would be typically input to 'GI.GstBase.Objects.BaseTransform.baseTransformSetPassthrough'
+
+/Since: 1.16/
+-}
+audioConverterIsPassthrough ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    -> m Bool
+    {- ^ __Returns:__ 'True' when no conversion will actually occur. -}
+audioConverterIsPassthrough convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    result <- gst_audio_converter_is_passthrough convert'
+    let result' = (/= 0) result
+    touchManagedPtr convert
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioConverterIsPassthroughMethodInfo
+instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo AudioConverterIsPassthroughMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterIsPassthrough
+
+#endif
+
+-- method AudioConverter::reset
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", 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_converter_reset" gst_audio_converter_reset :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    IO ()
+
+{- |
+Reset /@convert@/ to the state it was when it was first created, clearing
+any history it might currently have.
+-}
+audioConverterReset ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> m ()
+audioConverterReset convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    gst_audio_converter_reset convert'
+    touchManagedPtr convert
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioConverterResetMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioConverterResetMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterReset
+
+#endif
+
+-- method AudioConverter::samples
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "extra #GstAudioConverterFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "output frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of output frames", 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_converter_samples" gst_audio_converter_samples :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    CUInt ->                                -- flags : TInterface (Name {namespace = "GstAudio", name = "AudioConverterFlags"})
+    Ptr () ->                               -- in : TBasicType TPtr
+    Word64 ->                               -- in_frames : TBasicType TUInt64
+    Ptr () ->                               -- out : TBasicType TPtr
+    Word64 ->                               -- out_frames : TBasicType TUInt64
+    IO CInt
+
+{- |
+Perform the conversion with /@inFrames@/ in /@in@/ to /@outFrames@/ in /@out@/
+using /@convert@/.
+
+In case the samples are interleaved, /@in@/ and /@out@/ must point to an
+array with a single element pointing to a block of interleaved samples.
+
+If non-interleaved samples are used, /@in@/ and /@out@/ must point to an
+array with pointers to memory blocks, one for each channel.
+
+/@in@/ may be 'Nothing', in which case /@inFrames@/ of silence samples are processed
+by the converter.
+
+This function always produces /@outFrames@/ of output and consumes /@inFrames@/ of
+input. Use 'GI.GstAudio.Structs.AudioConverter.audioConverterGetOutFrames' and
+'GI.GstAudio.Structs.AudioConverter.audioConverterGetInFrames' to make sure /@inFrames@/ and /@outFrames@/
+are matching and /@in@/ and /@out@/ point to enough memory.
+-}
+audioConverterSamples ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> [GstAudio.Flags.AudioConverterFlags]
+    {- ^ /@flags@/: extra 'GI.GstAudio.Flags.AudioConverterFlags' -}
+    -> Ptr ()
+    {- ^ /@in@/: input frames -}
+    -> Word64
+    {- ^ /@inFrames@/: number of input frames -}
+    -> Ptr ()
+    {- ^ /@out@/: output frames -}
+    -> Word64
+    {- ^ /@outFrames@/: number of output frames -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' is the conversion could be performed. -}
+audioConverterSamples convert flags in_ inFrames out outFrames = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    let flags' = gflagsToWord flags
+    result <- gst_audio_converter_samples convert' flags' in_ inFrames out outFrames
+    let result' = (/= 0) result
+    touchManagedPtr convert
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioConverterSamplesMethodInfo
+instance (signature ~ ([GstAudio.Flags.AudioConverterFlags] -> Ptr () -> Word64 -> Ptr () -> Word64 -> m Bool), MonadIO m) => O.MethodInfo AudioConverterSamplesMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterSamples
+
+#endif
+
+-- method AudioConverter::supports_inplace
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", 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_converter_supports_inplace" gst_audio_converter_supports_inplace :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    IO CInt
+
+{- |
+Returns whether the audio converter can perform the conversion in-place.
+The return value would be typically input to 'GI.GstBase.Objects.BaseTransform.baseTransformSetInPlace'
+-}
+audioConverterSupportsInplace ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' when the conversion can be done in place. -}
+audioConverterSupportsInplace convert = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    result <- gst_audio_converter_supports_inplace convert'
+    let result' = (/= 0) result
+    touchManagedPtr convert
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioConverterSupportsInplaceMethodInfo
+instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo AudioConverterSupportsInplaceMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterSupportsInplace
+
+#endif
+
+-- method AudioConverter::update_config
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "convert", argType = TInterface (Name {namespace = "GstAudio", name = "AudioConverter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioConverter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "input rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "config", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #GstStructure or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_converter_update_config" gst_audio_converter_update_config :: 
+    Ptr AudioConverter ->                   -- convert : TInterface (Name {namespace = "GstAudio", name = "AudioConverter"})
+    Int32 ->                                -- in_rate : TBasicType TInt
+    Int32 ->                                -- out_rate : TBasicType TInt
+    Ptr Gst.Structure.Structure ->          -- config : TInterface (Name {namespace = "Gst", name = "Structure"})
+    IO CInt
+
+{- |
+Set /@inRate@/, /@outRate@/ and /@config@/ as extra configuration for /@convert@/.
+
+/@inRate@/ and /@outRate@/ specify the new sample rates of input and output
+formats. A value of 0 leaves the sample rate unchanged.
+
+/@config@/ can be 'Nothing', in which case, the current configuration is not
+changed.
+
+If the parameters in /@config@/ can not be set exactly, this function returns
+'False' and will try to update as much state as possible. The new state can
+then be retrieved and refined with 'GI.GstAudio.Structs.AudioConverter.audioConverterGetConfig'.
+
+Look at the @/GST_AUDIO_CONVERTER_OPT_/@* fields to check valid configuration
+option and values.
+-}
+audioConverterUpdateConfig ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioConverter
+    {- ^ /@convert@/: a 'GI.GstAudio.Structs.AudioConverter.AudioConverter' -}
+    -> Int32
+    {- ^ /@inRate@/: input rate -}
+    -> Int32
+    {- ^ /@outRate@/: output rate -}
+    -> Maybe (Gst.Structure.Structure)
+    {- ^ /@config@/: a 'GI.Gst.Structs.Structure.Structure' or 'Nothing' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' when the new parameters could be set -}
+audioConverterUpdateConfig convert inRate outRate config = liftIO $ do
+    convert' <- unsafeManagedPtrGetPtr convert
+    maybeConfig <- case config of
+        Nothing -> return nullPtr
+        Just jConfig -> do
+            jConfig' <- B.ManagedPtr.disownBoxed jConfig
+            return jConfig'
+    result <- gst_audio_converter_update_config convert' inRate outRate maybeConfig
+    let result' = (/= 0) result
+    touchManagedPtr convert
+    whenJust config touchManagedPtr
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioConverterUpdateConfigMethodInfo
+instance (signature ~ (Int32 -> Int32 -> Maybe (Gst.Structure.Structure) -> m Bool), MonadIO m) => O.MethodInfo AudioConverterUpdateConfigMethodInfo AudioConverter signature where
+    overloadedMethod _ = audioConverterUpdateConfig
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioConverterMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioConverterMethod "convert" o = AudioConverterConvertMethodInfo
+    ResolveAudioConverterMethod "free" o = AudioConverterFreeMethodInfo
+    ResolveAudioConverterMethod "isPassthrough" o = AudioConverterIsPassthroughMethodInfo
+    ResolveAudioConverterMethod "reset" o = AudioConverterResetMethodInfo
+    ResolveAudioConverterMethod "samples" o = AudioConverterSamplesMethodInfo
+    ResolveAudioConverterMethod "supportsInplace" o = AudioConverterSupportsInplaceMethodInfo
+    ResolveAudioConverterMethod "updateConfig" o = AudioConverterUpdateConfigMethodInfo
+    ResolveAudioConverterMethod "getConfig" o = AudioConverterGetConfigMethodInfo
+    ResolveAudioConverterMethod "getInFrames" o = AudioConverterGetInFramesMethodInfo
+    ResolveAudioConverterMethod "getMaxLatency" o = AudioConverterGetMaxLatencyMethodInfo
+    ResolveAudioConverterMethod "getOutFrames" o = AudioConverterGetOutFramesMethodInfo
+    ResolveAudioConverterMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioConverterMethod t AudioConverter, O.MethodInfo info AudioConverter p) => OL.IsLabel t (AudioConverter -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioConverter.hs-boot b/GI/GstAudio/Structs/AudioConverter.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioConverter.hs-boot
@@ -0,0 +1,59 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioConverter 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
+
+newtype AudioConverter = AudioConverter (ManagedPtr AudioConverter)
+instance BoxedObject AudioConverter where
+#if ENABLE_OVERLOADING
+data AudioConverterConvertMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterGetConfigMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterGetInFramesMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterGetMaxLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterGetOutFramesMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterIsPassthroughMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterResetMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterSamplesMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterSupportsInplaceMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioConverterUpdateConfigMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioDownmixMeta.hs b/GI/GstAudio/Structs/AudioDownmixMeta.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioDownmixMeta.hs
@@ -0,0 +1,459 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Extra buffer metadata describing audio downmixing matrix. This metadata is
+attached to audio buffers and contains a matrix to downmix the buffer number
+of channels to /@channels@/.
+
+/@matrix@/ is an two-dimensional array of /@toChannels@/ times /@fromChannels@/
+coefficients, i.e. the i-th output channels is constructed by multiplicating
+the input channels with the coefficients in /@matrix@/[i] and taking the sum
+of the results.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioDownmixMeta
+    ( 
+
+-- * Exported types
+    AudioDownmixMeta(..)                    ,
+    newZeroAudioDownmixMeta                 ,
+    noAudioDownmixMeta                      ,
+
+
+ -- * Methods
+-- ** getInfo #method:getInfo#
+
+    audioDownmixMetaGetInfo                 ,
+
+
+
+
+ -- * Properties
+-- ** fromChannels #attr:fromChannels#
+{- | the number of channels of the source
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_fromChannels           ,
+#endif
+    getAudioDownmixMetaFromChannels         ,
+    setAudioDownmixMetaFromChannels         ,
+
+
+-- ** fromPosition #attr:fromPosition#
+{- | the channel positions of the source
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_fromPosition           ,
+#endif
+    getAudioDownmixMetaFromPosition         ,
+    setAudioDownmixMetaFromPosition         ,
+
+
+-- ** matrix #attr:matrix#
+{- | the matrix coefficients.
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_matrix                 ,
+#endif
+    getAudioDownmixMetaMatrix               ,
+    setAudioDownmixMetaMatrix               ,
+
+
+-- ** meta #attr:meta#
+{- | parent 'GI.Gst.Structs.Meta.Meta'
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_meta                   ,
+#endif
+    getAudioDownmixMetaMeta                 ,
+
+
+-- ** toChannels #attr:toChannels#
+{- | the number of channels of the destination
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_toChannels             ,
+#endif
+    getAudioDownmixMetaToChannels           ,
+    setAudioDownmixMetaToChannels           ,
+
+
+-- ** toPosition #attr:toPosition#
+{- | the channel positions of the destination
+-}
+#if ENABLE_OVERLOADING
+    audioDownmixMeta_toPosition             ,
+#endif
+    getAudioDownmixMetaToPosition           ,
+    setAudioDownmixMetaToPosition           ,
+
+
+
+
+    ) 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.Gst.Structs.Meta as Gst.Meta
+import qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+
+-- | Memory-managed wrapper type.
+newtype AudioDownmixMeta = AudioDownmixMeta (ManagedPtr AudioDownmixMeta)
+instance WrappedPtr AudioDownmixMeta where
+    wrappedPtrCalloc = callocBytes 48
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 48 >=> wrapPtr AudioDownmixMeta)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioDownmixMeta` struct initialized to zero.
+newZeroAudioDownmixMeta :: MonadIO m => m AudioDownmixMeta
+newZeroAudioDownmixMeta = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioDownmixMeta
+
+instance tag ~ 'AttrSet => Constructible AudioDownmixMeta tag where
+    new _ attrs = do
+        o <- newZeroAudioDownmixMeta
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioDownmixMeta`.
+noAudioDownmixMeta :: Maybe AudioDownmixMeta
+noAudioDownmixMeta = Nothing
+
+{- |
+Get the value of the “@meta@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #meta
+@
+-}
+getAudioDownmixMetaMeta :: MonadIO m => AudioDownmixMeta -> m Gst.Meta.Meta
+getAudioDownmixMetaMeta s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 0 :: (Ptr Gst.Meta.Meta)
+    val' <- (newPtr Gst.Meta.Meta) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaMetaFieldInfo
+instance AttrInfo AudioDownmixMetaMetaFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaMetaFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaMetaFieldInfo = (~) (Ptr Gst.Meta.Meta)
+    type AttrBaseTypeConstraint AudioDownmixMetaMetaFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaMetaFieldInfo = Gst.Meta.Meta
+    type AttrLabel AudioDownmixMetaMetaFieldInfo = "meta"
+    type AttrOrigin AudioDownmixMetaMetaFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaMeta
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_meta :: AttrLabelProxy "meta"
+audioDownmixMeta_meta = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@from_position@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #fromPosition
+@
+-}
+getAudioDownmixMetaFromPosition :: MonadIO m => AudioDownmixMeta -> m GstAudio.Enums.AudioChannelPosition
+getAudioDownmixMetaFromPosition s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO CInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@from_position@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDownmixMeta [ #fromPosition 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDownmixMetaFromPosition :: MonadIO m => AudioDownmixMeta -> GstAudio.Enums.AudioChannelPosition -> m ()
+setAudioDownmixMetaFromPosition s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 16) (val' :: CInt)
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaFromPositionFieldInfo
+instance AttrInfo AudioDownmixMetaFromPositionFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaFromPositionFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaFromPositionFieldInfo = (~) GstAudio.Enums.AudioChannelPosition
+    type AttrBaseTypeConstraint AudioDownmixMetaFromPositionFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaFromPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
+    type AttrLabel AudioDownmixMetaFromPositionFieldInfo = "from_position"
+    type AttrOrigin AudioDownmixMetaFromPositionFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaFromPosition
+    attrSet _ = setAudioDownmixMetaFromPosition
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_fromPosition :: AttrLabelProxy "fromPosition"
+audioDownmixMeta_fromPosition = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@to_position@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #toPosition
+@
+-}
+getAudioDownmixMetaToPosition :: MonadIO m => AudioDownmixMeta -> m GstAudio.Enums.AudioChannelPosition
+getAudioDownmixMetaToPosition s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO CInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@to_position@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDownmixMeta [ #toPosition 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDownmixMetaToPosition :: MonadIO m => AudioDownmixMeta -> GstAudio.Enums.AudioChannelPosition -> m ()
+setAudioDownmixMetaToPosition s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 24) (val' :: CInt)
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaToPositionFieldInfo
+instance AttrInfo AudioDownmixMetaToPositionFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaToPositionFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaToPositionFieldInfo = (~) GstAudio.Enums.AudioChannelPosition
+    type AttrBaseTypeConstraint AudioDownmixMetaToPositionFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaToPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
+    type AttrLabel AudioDownmixMetaToPositionFieldInfo = "to_position"
+    type AttrOrigin AudioDownmixMetaToPositionFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaToPosition
+    attrSet _ = setAudioDownmixMetaToPosition
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_toPosition :: AttrLabelProxy "toPosition"
+audioDownmixMeta_toPosition = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@from_channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #fromChannels
+@
+-}
+getAudioDownmixMetaFromChannels :: MonadIO m => AudioDownmixMeta -> m Int32
+getAudioDownmixMetaFromChannels s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 32) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@from_channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDownmixMeta [ #fromChannels 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDownmixMetaFromChannels :: MonadIO m => AudioDownmixMeta -> Int32 -> m ()
+setAudioDownmixMetaFromChannels s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 32) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaFromChannelsFieldInfo
+instance AttrInfo AudioDownmixMetaFromChannelsFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaFromChannelsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaFromChannelsFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioDownmixMetaFromChannelsFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaFromChannelsFieldInfo = Int32
+    type AttrLabel AudioDownmixMetaFromChannelsFieldInfo = "from_channels"
+    type AttrOrigin AudioDownmixMetaFromChannelsFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaFromChannels
+    attrSet _ = setAudioDownmixMetaFromChannels
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_fromChannels :: AttrLabelProxy "fromChannels"
+audioDownmixMeta_fromChannels = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@to_channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #toChannels
+@
+-}
+getAudioDownmixMetaToChannels :: MonadIO m => AudioDownmixMeta -> m Int32
+getAudioDownmixMetaToChannels s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 36) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@to_channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDownmixMeta [ #toChannels 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDownmixMetaToChannels :: MonadIO m => AudioDownmixMeta -> Int32 -> m ()
+setAudioDownmixMetaToChannels s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 36) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaToChannelsFieldInfo
+instance AttrInfo AudioDownmixMetaToChannelsFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaToChannelsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaToChannelsFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioDownmixMetaToChannelsFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaToChannelsFieldInfo = Int32
+    type AttrLabel AudioDownmixMetaToChannelsFieldInfo = "to_channels"
+    type AttrOrigin AudioDownmixMetaToChannelsFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaToChannels
+    attrSet _ = setAudioDownmixMetaToChannels
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_toChannels :: AttrLabelProxy "toChannels"
+audioDownmixMeta_toChannels = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@matrix@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioDownmixMeta #matrix
+@
+-}
+getAudioDownmixMetaMatrix :: MonadIO m => AudioDownmixMeta -> m Float
+getAudioDownmixMetaMatrix s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 40) :: IO CFloat
+    let val' = realToFrac val
+    return val'
+
+{- |
+Set the value of the “@matrix@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioDownmixMeta [ #matrix 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioDownmixMetaMatrix :: MonadIO m => AudioDownmixMeta -> Float -> m ()
+setAudioDownmixMetaMatrix s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = realToFrac val
+    poke (ptr `plusPtr` 40) (val' :: CFloat)
+
+#if ENABLE_OVERLOADING
+data AudioDownmixMetaMatrixFieldInfo
+instance AttrInfo AudioDownmixMetaMatrixFieldInfo where
+    type AttrAllowedOps AudioDownmixMetaMatrixFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioDownmixMetaMatrixFieldInfo = (~) Float
+    type AttrBaseTypeConstraint AudioDownmixMetaMatrixFieldInfo = (~) AudioDownmixMeta
+    type AttrGetType AudioDownmixMetaMatrixFieldInfo = Float
+    type AttrLabel AudioDownmixMetaMatrixFieldInfo = "matrix"
+    type AttrOrigin AudioDownmixMetaMatrixFieldInfo = AudioDownmixMeta
+    attrGet _ = getAudioDownmixMetaMatrix
+    attrSet _ = setAudioDownmixMetaMatrix
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioDownmixMeta_matrix :: AttrLabelProxy "matrix"
+audioDownmixMeta_matrix = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioDownmixMeta
+type instance O.AttributeList AudioDownmixMeta = AudioDownmixMetaAttributeList
+type AudioDownmixMetaAttributeList = ('[ '("meta", AudioDownmixMetaMetaFieldInfo), '("fromPosition", AudioDownmixMetaFromPositionFieldInfo), '("toPosition", AudioDownmixMetaToPositionFieldInfo), '("fromChannels", AudioDownmixMetaFromChannelsFieldInfo), '("toChannels", AudioDownmixMetaToChannelsFieldInfo), '("matrix", AudioDownmixMetaMatrixFieldInfo)] :: [(Symbol, *)])
+#endif
+
+-- method AudioDownmixMeta::get_info
+-- method type : MemberFunction
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "MetaInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_downmix_meta_get_info" gst_audio_downmix_meta_get_info :: 
+    IO (Ptr Gst.MetaInfo.MetaInfo)
+
+{- |
+/No description available in the introspection data./
+-}
+audioDownmixMetaGetInfo ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m Gst.MetaInfo.MetaInfo
+audioDownmixMetaGetInfo  = liftIO $ do
+    result <- gst_audio_downmix_meta_get_info
+    checkUnexpectedReturnNULL "audioDownmixMetaGetInfo" result
+    result' <- (newPtr Gst.MetaInfo.MetaInfo) result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioDownmixMetaMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioDownmixMetaMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, O.MethodInfo info AudioDownmixMeta p) => OL.IsLabel t (AudioDownmixMeta -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioDownmixMeta.hs-boot b/GI/GstAudio/Structs/AudioDownmixMeta.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioDownmixMeta.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioDownmixMeta 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
+
+newtype AudioDownmixMeta = AudioDownmixMeta (ManagedPtr AudioDownmixMeta)
+instance WrappedPtr AudioDownmixMeta where
diff --git a/GI/GstAudio/Structs/AudioFormatInfo.hs b/GI/GstAudio/Structs/AudioFormatInfo.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioFormatInfo.hs
@@ -0,0 +1,715 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Information for an audio format.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioFormatInfo
+    ( 
+
+-- * Exported types
+    AudioFormatInfo(..)                     ,
+    newZeroAudioFormatInfo                  ,
+    noAudioFormatInfo                       ,
+
+
+ -- * Properties
+-- ** depth #attr:depth#
+{- | amount of valid bits in /@width@/
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_depth                   ,
+#endif
+    getAudioFormatInfoDepth                 ,
+    setAudioFormatInfoDepth                 ,
+
+
+-- ** description #attr:description#
+{- | user readable description of the format
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_description             ,
+#endif
+    clearAudioFormatInfoDescription         ,
+    getAudioFormatInfoDescription           ,
+    setAudioFormatInfoDescription           ,
+
+
+-- ** endianness #attr:endianness#
+{- | the endianness
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_endianness              ,
+#endif
+    getAudioFormatInfoEndianness            ,
+    setAudioFormatInfoEndianness            ,
+
+
+-- ** flags #attr:flags#
+{- | 'GI.GstAudio.Flags.AudioFormatFlags'
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_flags                   ,
+#endif
+    getAudioFormatInfoFlags                 ,
+    setAudioFormatInfoFlags                 ,
+
+
+-- ** format #attr:format#
+{- | 'GI.GstAudio.Enums.AudioFormat'
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_format                  ,
+#endif
+    getAudioFormatInfoFormat                ,
+    setAudioFormatInfoFormat                ,
+
+
+-- ** name #attr:name#
+{- | string representation of the format
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_name                    ,
+#endif
+    clearAudioFormatInfoName                ,
+    getAudioFormatInfoName                  ,
+    setAudioFormatInfoName                  ,
+
+
+-- ** packFunc #attr:packFunc#
+{- | function to pack samples
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_packFunc                ,
+#endif
+    clearAudioFormatInfoPackFunc            ,
+    getAudioFormatInfoPackFunc              ,
+    setAudioFormatInfoPackFunc              ,
+
+
+-- ** unpackFormat #attr:unpackFormat#
+{- | the format of the unpacked samples
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_unpackFormat            ,
+#endif
+    getAudioFormatInfoUnpackFormat          ,
+    setAudioFormatInfoUnpackFormat          ,
+
+
+-- ** unpackFunc #attr:unpackFunc#
+{- | function to unpack samples
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_unpackFunc              ,
+#endif
+    clearAudioFormatInfoUnpackFunc          ,
+    getAudioFormatInfoUnpackFunc            ,
+    setAudioFormatInfoUnpackFunc            ,
+
+
+-- ** width #attr:width#
+{- | amount of bits used for one sample
+-}
+#if ENABLE_OVERLOADING
+    audioFormatInfo_width                   ,
+#endif
+    getAudioFormatInfoWidth                 ,
+    setAudioFormatInfoWidth                 ,
+
+
+
+
+    ) 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.GstAudio.Callbacks as GstAudio.Callbacks
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags
+
+-- | Memory-managed wrapper type.
+newtype AudioFormatInfo = AudioFormatInfo (ManagedPtr AudioFormatInfo)
+instance WrappedPtr AudioFormatInfo where
+    wrappedPtrCalloc = callocBytes 104
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 104 >=> wrapPtr AudioFormatInfo)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioFormatInfo` struct initialized to zero.
+newZeroAudioFormatInfo :: MonadIO m => m AudioFormatInfo
+newZeroAudioFormatInfo = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioFormatInfo
+
+instance tag ~ 'AttrSet => Constructible AudioFormatInfo tag where
+    new _ attrs = do
+        o <- newZeroAudioFormatInfo
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioFormatInfo`.
+noAudioFormatInfo :: Maybe AudioFormatInfo
+noAudioFormatInfo = Nothing
+
+{- |
+Get the value of the “@format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #format
+@
+-}
+getAudioFormatInfoFormat :: MonadIO m => AudioFormatInfo -> m GstAudio.Enums.AudioFormat
+getAudioFormatInfoFormat s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #format 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoFormat :: MonadIO m => AudioFormatInfo -> GstAudio.Enums.AudioFormat -> m ()
+setAudioFormatInfoFormat s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 0) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoFormatFieldInfo
+instance AttrInfo AudioFormatInfoFormatFieldInfo where
+    type AttrAllowedOps AudioFormatInfoFormatFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoFormatFieldInfo = (~) GstAudio.Enums.AudioFormat
+    type AttrBaseTypeConstraint AudioFormatInfoFormatFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoFormatFieldInfo = GstAudio.Enums.AudioFormat
+    type AttrLabel AudioFormatInfoFormatFieldInfo = "format"
+    type AttrOrigin AudioFormatInfoFormatFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoFormat
+    attrSet _ = setAudioFormatInfoFormat
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_format :: AttrLabelProxy "format"
+audioFormatInfo_format = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@name@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #name
+@
+-}
+getAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> m (Maybe T.Text)
+getAudioFormatInfoName s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CString
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- cstringToText val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@name@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #name 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> CString -> m ()
+setAudioFormatInfoName s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 8) (val :: CString)
+
+{- |
+Set the value of the “@name@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #name
+@
+-}
+clearAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> m ()
+clearAudioFormatInfoName s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 8) (FP.nullPtr :: CString)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoNameFieldInfo
+instance AttrInfo AudioFormatInfoNameFieldInfo where
+    type AttrAllowedOps AudioFormatInfoNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioFormatInfoNameFieldInfo = (~) CString
+    type AttrBaseTypeConstraint AudioFormatInfoNameFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoNameFieldInfo = Maybe T.Text
+    type AttrLabel AudioFormatInfoNameFieldInfo = "name"
+    type AttrOrigin AudioFormatInfoNameFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoName
+    attrSet _ = setAudioFormatInfoName
+    attrConstruct = undefined
+    attrClear _ = clearAudioFormatInfoName
+
+audioFormatInfo_name :: AttrLabelProxy "name"
+audioFormatInfo_name = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@description@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #description
+@
+-}
+getAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> m (Maybe T.Text)
+getAudioFormatInfoDescription s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO CString
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- cstringToText val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@description@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #description 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> CString -> m ()
+setAudioFormatInfoDescription s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 16) (val :: CString)
+
+{- |
+Set the value of the “@description@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #description
+@
+-}
+clearAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> m ()
+clearAudioFormatInfoDescription s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 16) (FP.nullPtr :: CString)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoDescriptionFieldInfo
+instance AttrInfo AudioFormatInfoDescriptionFieldInfo where
+    type AttrAllowedOps AudioFormatInfoDescriptionFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioFormatInfoDescriptionFieldInfo = (~) CString
+    type AttrBaseTypeConstraint AudioFormatInfoDescriptionFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoDescriptionFieldInfo = Maybe T.Text
+    type AttrLabel AudioFormatInfoDescriptionFieldInfo = "description"
+    type AttrOrigin AudioFormatInfoDescriptionFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoDescription
+    attrSet _ = setAudioFormatInfoDescription
+    attrConstruct = undefined
+    attrClear _ = clearAudioFormatInfoDescription
+
+audioFormatInfo_description :: AttrLabelProxy "description"
+audioFormatInfo_description = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@flags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #flags
+@
+-}
+getAudioFormatInfoFlags :: MonadIO m => AudioFormatInfo -> m [GstAudio.Flags.AudioFormatFlags]
+getAudioFormatInfoFlags s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO CUInt
+    let val' = wordToGFlags val
+    return val'
+
+{- |
+Set the value of the “@flags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #flags 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoFlags :: MonadIO m => AudioFormatInfo -> [GstAudio.Flags.AudioFormatFlags] -> m ()
+setAudioFormatInfoFlags s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = gflagsToWord val
+    poke (ptr `plusPtr` 24) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoFlagsFieldInfo
+instance AttrInfo AudioFormatInfoFlagsFieldInfo where
+    type AttrAllowedOps AudioFormatInfoFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoFlagsFieldInfo = (~) [GstAudio.Flags.AudioFormatFlags]
+    type AttrBaseTypeConstraint AudioFormatInfoFlagsFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoFlagsFieldInfo = [GstAudio.Flags.AudioFormatFlags]
+    type AttrLabel AudioFormatInfoFlagsFieldInfo = "flags"
+    type AttrOrigin AudioFormatInfoFlagsFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoFlags
+    attrSet _ = setAudioFormatInfoFlags
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_flags :: AttrLabelProxy "flags"
+audioFormatInfo_flags = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@endianness@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #endianness
+@
+-}
+getAudioFormatInfoEndianness :: MonadIO m => AudioFormatInfo -> m Int32
+getAudioFormatInfoEndianness s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 28) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@endianness@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #endianness 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoEndianness :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
+setAudioFormatInfoEndianness s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 28) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoEndiannessFieldInfo
+instance AttrInfo AudioFormatInfoEndiannessFieldInfo where
+    type AttrAllowedOps AudioFormatInfoEndiannessFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoEndiannessFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioFormatInfoEndiannessFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoEndiannessFieldInfo = Int32
+    type AttrLabel AudioFormatInfoEndiannessFieldInfo = "endianness"
+    type AttrOrigin AudioFormatInfoEndiannessFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoEndianness
+    attrSet _ = setAudioFormatInfoEndianness
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_endianness :: AttrLabelProxy "endianness"
+audioFormatInfo_endianness = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@width@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #width
+@
+-}
+getAudioFormatInfoWidth :: MonadIO m => AudioFormatInfo -> m Int32
+getAudioFormatInfoWidth s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 32) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@width@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #width 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoWidth :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
+setAudioFormatInfoWidth s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 32) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoWidthFieldInfo
+instance AttrInfo AudioFormatInfoWidthFieldInfo where
+    type AttrAllowedOps AudioFormatInfoWidthFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoWidthFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioFormatInfoWidthFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoWidthFieldInfo = Int32
+    type AttrLabel AudioFormatInfoWidthFieldInfo = "width"
+    type AttrOrigin AudioFormatInfoWidthFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoWidth
+    attrSet _ = setAudioFormatInfoWidth
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_width :: AttrLabelProxy "width"
+audioFormatInfo_width = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@depth@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #depth
+@
+-}
+getAudioFormatInfoDepth :: MonadIO m => AudioFormatInfo -> m Int32
+getAudioFormatInfoDepth s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 36) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@depth@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #depth 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoDepth :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
+setAudioFormatInfoDepth s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 36) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoDepthFieldInfo
+instance AttrInfo AudioFormatInfoDepthFieldInfo where
+    type AttrAllowedOps AudioFormatInfoDepthFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoDepthFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioFormatInfoDepthFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoDepthFieldInfo = Int32
+    type AttrLabel AudioFormatInfoDepthFieldInfo = "depth"
+    type AttrOrigin AudioFormatInfoDepthFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoDepth
+    attrSet _ = setAudioFormatInfoDepth
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_depth :: AttrLabelProxy "depth"
+audioFormatInfo_depth = AttrLabelProxy
+
+#endif
+
+
+-- XXX Skipped attribute for "AudioFormatInfo:silence" :: Not implemented: "Don't know how to unpack C array of type TCArray False 8 (-1) (TBasicType TUInt8)"
+{- |
+Get the value of the “@unpack_format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #unpackFormat
+@
+-}
+getAudioFormatInfoUnpackFormat :: MonadIO m => AudioFormatInfo -> m GstAudio.Enums.AudioFormat
+getAudioFormatInfoUnpackFormat s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 48) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@unpack_format@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #unpackFormat 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoUnpackFormat :: MonadIO m => AudioFormatInfo -> GstAudio.Enums.AudioFormat -> m ()
+setAudioFormatInfoUnpackFormat s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 48) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoUnpackFormatFieldInfo
+instance AttrInfo AudioFormatInfoUnpackFormatFieldInfo where
+    type AttrAllowedOps AudioFormatInfoUnpackFormatFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioFormatInfoUnpackFormatFieldInfo = (~) GstAudio.Enums.AudioFormat
+    type AttrBaseTypeConstraint AudioFormatInfoUnpackFormatFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoUnpackFormatFieldInfo = GstAudio.Enums.AudioFormat
+    type AttrLabel AudioFormatInfoUnpackFormatFieldInfo = "unpack_format"
+    type AttrOrigin AudioFormatInfoUnpackFormatFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoUnpackFormat
+    attrSet _ = setAudioFormatInfoUnpackFormat
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioFormatInfo_unpackFormat :: AttrLabelProxy "unpackFormat"
+audioFormatInfo_unpackFormat = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@unpack_func@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #unpackFunc
+@
+-}
+getAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> m (Maybe GstAudio.Callbacks.AudioFormatUnpack)
+getAudioFormatInfoUnpackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 56) :: IO (FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
+    result <- SP.convertFunPtrIfNonNull val $ \val' -> do
+        let val'' = GstAudio.Callbacks.dynamic_AudioFormatUnpack val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@unpack_func@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #unpackFunc 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> FunPtr GstAudio.Callbacks.C_AudioFormatUnpack -> m ()
+setAudioFormatInfoUnpackFunc s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 56) (val :: FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
+
+{- |
+Set the value of the “@unpack_func@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #unpackFunc
+@
+-}
+clearAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> m ()
+clearAudioFormatInfoUnpackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 56) (FP.nullFunPtr :: FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoUnpackFuncFieldInfo
+instance AttrInfo AudioFormatInfoUnpackFuncFieldInfo where
+    type AttrAllowedOps AudioFormatInfoUnpackFuncFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioFormatInfoUnpackFuncFieldInfo = (~) (FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
+    type AttrBaseTypeConstraint AudioFormatInfoUnpackFuncFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoUnpackFuncFieldInfo = Maybe GstAudio.Callbacks.AudioFormatUnpack
+    type AttrLabel AudioFormatInfoUnpackFuncFieldInfo = "unpack_func"
+    type AttrOrigin AudioFormatInfoUnpackFuncFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoUnpackFunc
+    attrSet _ = setAudioFormatInfoUnpackFunc
+    attrConstruct = undefined
+    attrClear _ = clearAudioFormatInfoUnpackFunc
+
+audioFormatInfo_unpackFunc :: AttrLabelProxy "unpackFunc"
+audioFormatInfo_unpackFunc = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@pack_func@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioFormatInfo #packFunc
+@
+-}
+getAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> m (Maybe GstAudio.Callbacks.AudioFormatPack)
+getAudioFormatInfoPackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 64) :: IO (FunPtr GstAudio.Callbacks.C_AudioFormatPack)
+    result <- SP.convertFunPtrIfNonNull val $ \val' -> do
+        let val'' = GstAudio.Callbacks.dynamic_AudioFormatPack val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@pack_func@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioFormatInfo [ #packFunc 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> FunPtr GstAudio.Callbacks.C_AudioFormatPack -> m ()
+setAudioFormatInfoPackFunc s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 64) (val :: FunPtr GstAudio.Callbacks.C_AudioFormatPack)
+
+{- |
+Set the value of the “@pack_func@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #packFunc
+@
+-}
+clearAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> m ()
+clearAudioFormatInfoPackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 64) (FP.nullFunPtr :: FunPtr GstAudio.Callbacks.C_AudioFormatPack)
+
+#if ENABLE_OVERLOADING
+data AudioFormatInfoPackFuncFieldInfo
+instance AttrInfo AudioFormatInfoPackFuncFieldInfo where
+    type AttrAllowedOps AudioFormatInfoPackFuncFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioFormatInfoPackFuncFieldInfo = (~) (FunPtr GstAudio.Callbacks.C_AudioFormatPack)
+    type AttrBaseTypeConstraint AudioFormatInfoPackFuncFieldInfo = (~) AudioFormatInfo
+    type AttrGetType AudioFormatInfoPackFuncFieldInfo = Maybe GstAudio.Callbacks.AudioFormatPack
+    type AttrLabel AudioFormatInfoPackFuncFieldInfo = "pack_func"
+    type AttrOrigin AudioFormatInfoPackFuncFieldInfo = AudioFormatInfo
+    attrGet _ = getAudioFormatInfoPackFunc
+    attrSet _ = setAudioFormatInfoPackFunc
+    attrConstruct = undefined
+    attrClear _ = clearAudioFormatInfoPackFunc
+
+audioFormatInfo_packFunc :: AttrLabelProxy "packFunc"
+audioFormatInfo_packFunc = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioFormatInfo
+type instance O.AttributeList AudioFormatInfo = AudioFormatInfoAttributeList
+type AudioFormatInfoAttributeList = ('[ '("format", AudioFormatInfoFormatFieldInfo), '("name", AudioFormatInfoNameFieldInfo), '("description", AudioFormatInfoDescriptionFieldInfo), '("flags", AudioFormatInfoFlagsFieldInfo), '("endianness", AudioFormatInfoEndiannessFieldInfo), '("width", AudioFormatInfoWidthFieldInfo), '("depth", AudioFormatInfoDepthFieldInfo), '("unpackFormat", AudioFormatInfoUnpackFormatFieldInfo), '("unpackFunc", AudioFormatInfoUnpackFuncFieldInfo), '("packFunc", AudioFormatInfoPackFuncFieldInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioFormatInfoMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioFormatInfoMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioFormatInfoMethod t AudioFormatInfo, O.MethodInfo info AudioFormatInfo p) => OL.IsLabel t (AudioFormatInfo -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioFormatInfo.hs-boot b/GI/GstAudio/Structs/AudioFormatInfo.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioFormatInfo.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioFormatInfo 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
+
+newtype AudioFormatInfo = AudioFormatInfo (ManagedPtr AudioFormatInfo)
+instance WrappedPtr AudioFormatInfo where
diff --git a/GI/GstAudio/Structs/AudioInfo.hs b/GI/GstAudio/Structs/AudioInfo.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioInfo.hs
@@ -0,0 +1,890 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+Information describing audio properties. This information can be filled
+in from GstCaps with 'GI.GstAudio.Structs.AudioInfo.audioInfoFromCaps'.
+
+Use the provided macros to access the info in this structure.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioInfo
+    ( 
+
+-- * Exported types
+    AudioInfo(..)                           ,
+    newZeroAudioInfo                        ,
+    noAudioInfo                             ,
+
+
+ -- * Methods
+-- ** convert #method:convert#
+
+#if ENABLE_OVERLOADING
+    AudioInfoConvertMethodInfo              ,
+#endif
+    audioInfoConvert                        ,
+
+
+-- ** copy #method:copy#
+
+#if ENABLE_OVERLOADING
+    AudioInfoCopyMethodInfo                 ,
+#endif
+    audioInfoCopy                           ,
+
+
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioInfoFreeMethodInfo                 ,
+#endif
+    audioInfoFree                           ,
+
+
+-- ** fromCaps #method:fromCaps#
+
+#if ENABLE_OVERLOADING
+    AudioInfoFromCapsMethodInfo             ,
+#endif
+    audioInfoFromCaps                       ,
+
+
+-- ** init #method:init#
+
+#if ENABLE_OVERLOADING
+    AudioInfoInitMethodInfo                 ,
+#endif
+    audioInfoInit                           ,
+
+
+-- ** isEqual #method:isEqual#
+
+#if ENABLE_OVERLOADING
+    AudioInfoIsEqualMethodInfo              ,
+#endif
+    audioInfoIsEqual                        ,
+
+
+-- ** new #method:new#
+
+    audioInfoNew                            ,
+
+
+-- ** setFormat #method:setFormat#
+
+#if ENABLE_OVERLOADING
+    AudioInfoSetFormatMethodInfo            ,
+#endif
+    audioInfoSetFormat                      ,
+
+
+-- ** toCaps #method:toCaps#
+
+#if ENABLE_OVERLOADING
+    AudioInfoToCapsMethodInfo               ,
+#endif
+    audioInfoToCaps                         ,
+
+
+
+
+ -- * Properties
+-- ** bpf #attr:bpf#
+{- | the number of bytes for one frame, this is the size of one
+        sample * /@channels@/
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_bpf                           ,
+#endif
+    getAudioInfoBpf                         ,
+    setAudioInfoBpf                         ,
+
+
+-- ** channels #attr:channels#
+{- | the number of channels
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_channels                      ,
+#endif
+    getAudioInfoChannels                    ,
+    setAudioInfoChannels                    ,
+
+
+-- ** finfo #attr:finfo#
+{- | the format info of the audio
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_finfo                         ,
+#endif
+    clearAudioInfoFinfo                     ,
+    getAudioInfoFinfo                       ,
+    setAudioInfoFinfo                       ,
+
+
+-- ** flags #attr:flags#
+{- | additional audio flags
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_flags                         ,
+#endif
+    getAudioInfoFlags                       ,
+    setAudioInfoFlags                       ,
+
+
+-- ** layout #attr:layout#
+{- | audio layout
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_layout                        ,
+#endif
+    getAudioInfoLayout                      ,
+    setAudioInfoLayout                      ,
+
+
+-- ** rate #attr:rate#
+{- | the audio sample rate
+-}
+#if ENABLE_OVERLOADING
+    audioInfo_rate                          ,
+#endif
+    getAudioInfoRate                        ,
+    setAudioInfoRate                        ,
+
+
+
+
+    ) 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.Gst.Enums as Gst.Enums
+import qualified GI.Gst.Structs.Caps as Gst.Caps
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioFormatInfo as GstAudio.AudioFormatInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioInfo = AudioInfo (ManagedPtr AudioInfo)
+foreign import ccall "gst_audio_info_get_type" c_gst_audio_info_get_type :: 
+    IO GType
+
+instance BoxedObject AudioInfo where
+    boxedType _ = c_gst_audio_info_get_type
+
+-- | Construct a `AudioInfo` struct initialized to zero.
+newZeroAudioInfo :: MonadIO m => m AudioInfo
+newZeroAudioInfo = liftIO $ callocBoxedBytes 320 >>= wrapBoxed AudioInfo
+
+instance tag ~ 'AttrSet => Constructible AudioInfo tag where
+    new _ attrs = do
+        o <- newZeroAudioInfo
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioInfo`.
+noAudioInfo :: Maybe AudioInfo
+noAudioInfo = Nothing
+
+{- |
+Get the value of the “@finfo@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #finfo
+@
+-}
+getAudioInfoFinfo :: MonadIO m => AudioInfo -> m (Maybe GstAudio.AudioFormatInfo.AudioFormatInfo)
+getAudioInfoFinfo s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO (Ptr GstAudio.AudioFormatInfo.AudioFormatInfo)
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- (newPtr GstAudio.AudioFormatInfo.AudioFormatInfo) val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@finfo@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #finfo 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoFinfo :: MonadIO m => AudioInfo -> Ptr GstAudio.AudioFormatInfo.AudioFormatInfo -> m ()
+setAudioInfoFinfo s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 0) (val :: Ptr GstAudio.AudioFormatInfo.AudioFormatInfo)
+
+{- |
+Set the value of the “@finfo@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #finfo
+@
+-}
+clearAudioInfoFinfo :: MonadIO m => AudioInfo -> m ()
+clearAudioInfoFinfo s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr GstAudio.AudioFormatInfo.AudioFormatInfo)
+
+#if ENABLE_OVERLOADING
+data AudioInfoFinfoFieldInfo
+instance AttrInfo AudioInfoFinfoFieldInfo where
+    type AttrAllowedOps AudioInfoFinfoFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioInfoFinfoFieldInfo = (~) (Ptr GstAudio.AudioFormatInfo.AudioFormatInfo)
+    type AttrBaseTypeConstraint AudioInfoFinfoFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoFinfoFieldInfo = Maybe GstAudio.AudioFormatInfo.AudioFormatInfo
+    type AttrLabel AudioInfoFinfoFieldInfo = "finfo"
+    type AttrOrigin AudioInfoFinfoFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoFinfo
+    attrSet _ = setAudioInfoFinfo
+    attrConstruct = undefined
+    attrClear _ = clearAudioInfoFinfo
+
+audioInfo_finfo :: AttrLabelProxy "finfo"
+audioInfo_finfo = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@flags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #flags
+@
+-}
+getAudioInfoFlags :: MonadIO m => AudioInfo -> m [GstAudio.Flags.AudioFlags]
+getAudioInfoFlags s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CUInt
+    let val' = wordToGFlags val
+    return val'
+
+{- |
+Set the value of the “@flags@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #flags 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoFlags :: MonadIO m => AudioInfo -> [GstAudio.Flags.AudioFlags] -> m ()
+setAudioInfoFlags s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = gflagsToWord val
+    poke (ptr `plusPtr` 8) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioInfoFlagsFieldInfo
+instance AttrInfo AudioInfoFlagsFieldInfo where
+    type AttrAllowedOps AudioInfoFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioInfoFlagsFieldInfo = (~) [GstAudio.Flags.AudioFlags]
+    type AttrBaseTypeConstraint AudioInfoFlagsFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoFlagsFieldInfo = [GstAudio.Flags.AudioFlags]
+    type AttrLabel AudioInfoFlagsFieldInfo = "flags"
+    type AttrOrigin AudioInfoFlagsFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoFlags
+    attrSet _ = setAudioInfoFlags
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioInfo_flags :: AttrLabelProxy "flags"
+audioInfo_flags = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@layout@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #layout
+@
+-}
+getAudioInfoLayout :: MonadIO m => AudioInfo -> m GstAudio.Enums.AudioLayout
+getAudioInfoLayout s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 12) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@layout@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #layout 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoLayout :: MonadIO m => AudioInfo -> GstAudio.Enums.AudioLayout -> m ()
+setAudioInfoLayout s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 12) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioInfoLayoutFieldInfo
+instance AttrInfo AudioInfoLayoutFieldInfo where
+    type AttrAllowedOps AudioInfoLayoutFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioInfoLayoutFieldInfo = (~) GstAudio.Enums.AudioLayout
+    type AttrBaseTypeConstraint AudioInfoLayoutFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoLayoutFieldInfo = GstAudio.Enums.AudioLayout
+    type AttrLabel AudioInfoLayoutFieldInfo = "layout"
+    type AttrOrigin AudioInfoLayoutFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoLayout
+    attrSet _ = setAudioInfoLayout
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioInfo_layout :: AttrLabelProxy "layout"
+audioInfo_layout = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@rate@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #rate
+@
+-}
+getAudioInfoRate :: MonadIO m => AudioInfo -> m Int32
+getAudioInfoRate s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@rate@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #rate 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoRate :: MonadIO m => AudioInfo -> Int32 -> m ()
+setAudioInfoRate s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 16) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioInfoRateFieldInfo
+instance AttrInfo AudioInfoRateFieldInfo where
+    type AttrAllowedOps AudioInfoRateFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioInfoRateFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioInfoRateFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoRateFieldInfo = Int32
+    type AttrLabel AudioInfoRateFieldInfo = "rate"
+    type AttrOrigin AudioInfoRateFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoRate
+    attrSet _ = setAudioInfoRate
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioInfo_rate :: AttrLabelProxy "rate"
+audioInfo_rate = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #channels
+@
+-}
+getAudioInfoChannels :: MonadIO m => AudioInfo -> m Int32
+getAudioInfoChannels s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 20) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@channels@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #channels 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoChannels :: MonadIO m => AudioInfo -> Int32 -> m ()
+setAudioInfoChannels s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 20) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioInfoChannelsFieldInfo
+instance AttrInfo AudioInfoChannelsFieldInfo where
+    type AttrAllowedOps AudioInfoChannelsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioInfoChannelsFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioInfoChannelsFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoChannelsFieldInfo = Int32
+    type AttrLabel AudioInfoChannelsFieldInfo = "channels"
+    type AttrOrigin AudioInfoChannelsFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoChannels
+    attrSet _ = setAudioInfoChannels
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioInfo_channels :: AttrLabelProxy "channels"
+audioInfo_channels = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@bpf@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioInfo #bpf
+@
+-}
+getAudioInfoBpf :: MonadIO m => AudioInfo -> m Int32
+getAudioInfoBpf s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@bpf@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioInfo [ #bpf 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioInfoBpf :: MonadIO m => AudioInfo -> Int32 -> m ()
+setAudioInfoBpf s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 24) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioInfoBpfFieldInfo
+instance AttrInfo AudioInfoBpfFieldInfo where
+    type AttrAllowedOps AudioInfoBpfFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioInfoBpfFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioInfoBpfFieldInfo = (~) AudioInfo
+    type AttrGetType AudioInfoBpfFieldInfo = Int32
+    type AttrLabel AudioInfoBpfFieldInfo = "bpf"
+    type AttrOrigin AudioInfoBpfFieldInfo = AudioInfo
+    attrGet _ = getAudioInfoBpf
+    attrSet _ = setAudioInfoBpf
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioInfo_bpf :: AttrLabelProxy "bpf"
+audioInfo_bpf = AttrLabelProxy
+
+#endif
+
+
+-- XXX Skipped attribute for "AudioInfo:position" :: Not implemented: "Don't know how to unpack C array of type TCArray False 64 (-1) (TInterface (Name {namespace = \"GstAudio\", name = \"AudioChannelPosition\"}))"
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioInfo
+type instance O.AttributeList AudioInfo = AudioInfoAttributeList
+type AudioInfoAttributeList = ('[ '("finfo", AudioInfoFinfoFieldInfo), '("flags", AudioInfoFlagsFieldInfo), '("layout", AudioInfoLayoutFieldInfo), '("rate", AudioInfoRateFieldInfo), '("channels", AudioInfoChannelsFieldInfo), '("bpf", AudioInfoBpfFieldInfo)] :: [(Symbol, *)])
+#endif
+
+-- method AudioInfo::new
+-- method type : Constructor
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_new" gst_audio_info_new :: 
+    IO (Ptr AudioInfo)
+
+{- |
+Allocate a new 'GI.GstAudio.Structs.AudioInfo.AudioInfo' that is also initialized with
+'GI.GstAudio.Structs.AudioInfo.audioInfoInit'.
+-}
+audioInfoNew ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m AudioInfo
+    {- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioInfo.AudioInfo'. free with 'GI.GstAudio.Structs.AudioInfo.audioInfoFree'. -}
+audioInfoNew  = liftIO $ do
+    result <- gst_audio_info_new
+    checkUnexpectedReturnNULL "audioInfoNew" result
+    result' <- (wrapBoxed AudioInfo) result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioInfo::convert
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstFormat of the @src_val", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "value to convert", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstFormat of the @dest_val", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "pointer to destination value", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_convert" gst_audio_info_convert :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    CUInt ->                                -- src_fmt : TInterface (Name {namespace = "Gst", name = "Format"})
+    Int64 ->                                -- src_val : TBasicType TInt64
+    CUInt ->                                -- dest_fmt : TInterface (Name {namespace = "Gst", name = "Format"})
+    Ptr Int64 ->                            -- dest_val : TBasicType TInt64
+    IO CInt
+
+{- |
+Converts among various 'GI.Gst.Enums.Format' types.  This function handles
+GST_FORMAT_BYTES, GST_FORMAT_TIME, and GST_FORMAT_DEFAULT.  For
+raw audio, GST_FORMAT_DEFAULT corresponds to audio frames.  This
+function can be used to handle pad queries of the type GST_QUERY_CONVERT.
+-}
+audioInfoConvert ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> Gst.Enums.Format
+    {- ^ /@srcFmt@/: 'GI.Gst.Enums.Format' of the /@srcVal@/ -}
+    -> Int64
+    {- ^ /@srcVal@/: value to convert -}
+    -> Gst.Enums.Format
+    {- ^ /@destFmt@/: 'GI.Gst.Enums.Format' of the /@destVal@/ -}
+    -> m ((Bool, Int64))
+    {- ^ __Returns:__ TRUE if the conversion was successful. -}
+audioInfoConvert info srcFmt srcVal destFmt = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    let srcFmt' = (fromIntegral . fromEnum) srcFmt
+    let destFmt' = (fromIntegral . fromEnum) destFmt
+    destVal <- allocMem :: IO (Ptr Int64)
+    result <- gst_audio_info_convert info' srcFmt' srcVal destFmt' destVal
+    let result' = (/= 0) result
+    destVal' <- peek destVal
+    touchManagedPtr info
+    freeMem destVal
+    return (result', destVal')
+
+#if ENABLE_OVERLOADING
+data AudioInfoConvertMethodInfo
+instance (signature ~ (Gst.Enums.Format -> Int64 -> Gst.Enums.Format -> m ((Bool, Int64))), MonadIO m) => O.MethodInfo AudioInfoConvertMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoConvert
+
+#endif
+
+-- method AudioInfo::copy
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_copy" gst_audio_info_copy :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO (Ptr AudioInfo)
+
+{- |
+Copy a GstAudioInfo structure.
+-}
+audioInfoCopy ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m AudioInfo
+    {- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioInfo.AudioInfo'. free with gst_audio_info_free. -}
+audioInfoCopy info = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    result <- gst_audio_info_copy info'
+    checkUnexpectedReturnNULL "audioInfoCopy" result
+    result' <- (wrapBoxed AudioInfo) result
+    touchManagedPtr info
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioInfoCopyMethodInfo
+instance (signature ~ (m AudioInfo), MonadIO m) => O.MethodInfo AudioInfoCopyMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoCopy
+
+#endif
+
+-- method AudioInfo::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", 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_info_free" gst_audio_info_free :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO ()
+
+{- |
+Free a GstAudioInfo structure previously allocated with 'GI.GstAudio.Structs.AudioInfo.audioInfoNew'
+or 'GI.GstAudio.Structs.AudioInfo.audioInfoCopy'.
+-}
+audioInfoFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m ()
+audioInfoFree info = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    gst_audio_info_free info'
+    touchManagedPtr info
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioInfoFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioInfoFreeMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoFree
+
+#endif
+
+-- method AudioInfo::from_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface (Name {namespace = "Gst", name = "Caps"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstCaps", 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_info_from_caps" gst_audio_info_from_caps :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Ptr Gst.Caps.Caps ->                    -- caps : TInterface (Name {namespace = "Gst", name = "Caps"})
+    IO CInt
+
+{- |
+Parse /@caps@/ and update /@info@/.
+-}
+audioInfoFromCaps ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> Gst.Caps.Caps
+    {- ^ /@caps@/: a 'GI.Gst.Structs.Caps.Caps' -}
+    -> m Bool
+    {- ^ __Returns:__ TRUE if /@caps@/ could be parsed -}
+audioInfoFromCaps info caps = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    caps' <- unsafeManagedPtrGetPtr caps
+    result <- gst_audio_info_from_caps info' caps'
+    let result' = (/= 0) result
+    touchManagedPtr info
+    touchManagedPtr caps
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioInfoFromCapsMethodInfo
+instance (signature ~ (Gst.Caps.Caps -> m Bool), MonadIO m) => O.MethodInfo AudioInfoFromCapsMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoFromCaps
+
+#endif
+
+-- method AudioInfo::init
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", 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_info_init" gst_audio_info_init :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO ()
+
+{- |
+Initialize /@info@/ with default values.
+-}
+audioInfoInit ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m ()
+audioInfoInit info = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    gst_audio_info_init info'
+    touchManagedPtr info
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioInfoInitMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioInfoInitMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoInit
+
+#endif
+
+-- method AudioInfo::is_equal
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", 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_info_is_equal" gst_audio_info_is_equal :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    Ptr AudioInfo ->                        -- other : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO CInt
+
+{- |
+Compares two 'GI.GstAudio.Structs.AudioInfo.AudioInfo' and returns whether they are equal or not
+
+/Since: 1.2/
+-}
+audioInfoIsEqual ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> AudioInfo
+    {- ^ /@other@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if /@info@/ and /@other@/ are equal, else 'False'. -}
+audioInfoIsEqual info other = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    other' <- unsafeManagedPtrGetPtr other
+    result <- gst_audio_info_is_equal info' other'
+    let result' = (/= 0) result
+    touchManagedPtr info
+    touchManagedPtr other
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioInfoIsEqualMethodInfo
+instance (signature ~ (AudioInfo -> m Bool), MonadIO m) => O.MethodInfo AudioInfoIsEqualMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoIsEqual
+
+#endif
+
+-- method AudioInfo::set_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the format", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the samplerate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False 64 (-1) (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the channel positions", 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_info_set_format" gst_audio_info_set_format :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "AudioFormat"})
+    Int32 ->                                -- rate : TBasicType TInt
+    Int32 ->                                -- channels : TBasicType TInt
+    Ptr CInt ->                             -- position : TCArray False 64 (-1) (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"}))
+    IO ()
+
+{- |
+Set the default info for the audio info of /@format@/ and /@rate@/ and /@channels@/.
+
+Note: This initializes /@info@/ first, no values are preserved.
+-}
+audioInfoSetFormat ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> GstAudio.Enums.AudioFormat
+    {- ^ /@format@/: the format -}
+    -> Int32
+    {- ^ /@rate@/: the samplerate -}
+    -> Int32
+    {- ^ /@channels@/: the number of channels -}
+    -> Maybe ([GstAudio.Enums.AudioChannelPosition])
+    {- ^ /@position@/: the channel positions -}
+    -> m ()
+audioInfoSetFormat info format rate channels position = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    let format' = (fromIntegral . fromEnum) format
+    maybePosition <- case position of
+        Nothing -> return nullPtr
+        Just jPosition -> do
+            let jPosition' = map (fromIntegral . fromEnum) jPosition
+            jPosition'' <- packStorableArray jPosition'
+            return jPosition''
+    gst_audio_info_set_format info' format' rate channels maybePosition
+    touchManagedPtr info
+    freeMem maybePosition
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioInfoSetFormatMethodInfo
+instance (signature ~ (GstAudio.Enums.AudioFormat -> Int32 -> Int32 -> Maybe ([GstAudio.Enums.AudioChannelPosition]) -> m ()), MonadIO m) => O.MethodInfo AudioInfoSetFormatMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoSetFormat
+
+#endif
+
+-- method AudioInfo::to_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Caps"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_to_caps" gst_audio_info_to_caps :: 
+    Ptr AudioInfo ->                        -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"})
+    IO (Ptr Gst.Caps.Caps)
+
+{- |
+Convert the values of /@info@/ into a 'GI.Gst.Structs.Caps.Caps'.
+-}
+audioInfoToCaps ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioInfo
+    {- ^ /@info@/: a 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -}
+    -> m Gst.Caps.Caps
+    {- ^ __Returns:__ the new 'GI.Gst.Structs.Caps.Caps' containing the
+         info of /@info@/. -}
+audioInfoToCaps info = liftIO $ do
+    info' <- unsafeManagedPtrGetPtr info
+    result <- gst_audio_info_to_caps info'
+    checkUnexpectedReturnNULL "audioInfoToCaps" result
+    result' <- (wrapBoxed Gst.Caps.Caps) result
+    touchManagedPtr info
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioInfoToCapsMethodInfo
+instance (signature ~ (m Gst.Caps.Caps), MonadIO m) => O.MethodInfo AudioInfoToCapsMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoToCaps
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioInfoMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioInfoMethod "convert" o = AudioInfoConvertMethodInfo
+    ResolveAudioInfoMethod "copy" o = AudioInfoCopyMethodInfo
+    ResolveAudioInfoMethod "free" o = AudioInfoFreeMethodInfo
+    ResolveAudioInfoMethod "fromCaps" o = AudioInfoFromCapsMethodInfo
+    ResolveAudioInfoMethod "init" o = AudioInfoInitMethodInfo
+    ResolveAudioInfoMethod "isEqual" o = AudioInfoIsEqualMethodInfo
+    ResolveAudioInfoMethod "toCaps" o = AudioInfoToCapsMethodInfo
+    ResolveAudioInfoMethod "setFormat" o = AudioInfoSetFormatMethodInfo
+    ResolveAudioInfoMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioInfoMethod t AudioInfo, O.MethodInfo info AudioInfo p) => OL.IsLabel t (AudioInfo -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioInfo.hs-boot b/GI/GstAudio/Structs/AudioInfo.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioInfo.hs-boot
@@ -0,0 +1,50 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioInfo 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
+
+newtype AudioInfo = AudioInfo (ManagedPtr AudioInfo)
+instance BoxedObject AudioInfo where
+#if ENABLE_OVERLOADING
+data AudioInfoConvertMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoCopyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoFromCapsMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoInitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoIsEqualMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoSetFormatMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioInfoToCapsMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioMeta.hs b/GI/GstAudio/Structs/AudioMeta.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioMeta.hs
@@ -0,0 +1,330 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' defines an audio downmix matrix to be send along with
+audio buffers. These functions in this module help to create and attach the
+meta as well as extracting it.
+
+/Since: 1.16/
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioMeta
+    ( 
+
+-- * Exported types
+    AudioMeta(..)                           ,
+    newZeroAudioMeta                        ,
+    noAudioMeta                             ,
+
+
+ -- * Methods
+-- ** getInfo #method:getInfo#
+
+    audioMetaGetInfo                        ,
+
+
+
+
+ -- * Properties
+-- ** info #attr:info#
+{- | the audio properties of the buffer
+-}
+#if ENABLE_OVERLOADING
+    audioMeta_info                          ,
+#endif
+    getAudioMetaInfo                        ,
+
+
+-- ** meta #attr:meta#
+{- | parent 'GI.Gst.Structs.Meta.Meta'
+-}
+#if ENABLE_OVERLOADING
+    audioMeta_meta                          ,
+#endif
+    getAudioMetaMeta                        ,
+
+
+-- ** offsets #attr:offsets#
+{- | the offsets (in bytes) where each channel plane starts in the
+  buffer or 'Nothing' if the buffer has interleaved layout; if not 'Nothing', this
+  is guaranteed to be an array of /@info@/.channels elements
+-}
+#if ENABLE_OVERLOADING
+    audioMeta_offsets                       ,
+#endif
+    getAudioMetaOffsets                     ,
+    setAudioMetaOffsets                     ,
+
+
+-- ** samples #attr:samples#
+{- | the number of valid samples in the buffer
+-}
+#if ENABLE_OVERLOADING
+    audioMeta_samples                       ,
+#endif
+    getAudioMetaSamples                     ,
+    setAudioMetaSamples                     ,
+
+
+
+
+    ) 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.Gst.Structs.Meta as Gst.Meta
+import qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioMeta = AudioMeta (ManagedPtr AudioMeta)
+instance WrappedPtr AudioMeta where
+    wrappedPtrCalloc = callocBytes 448
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 448 >=> wrapPtr AudioMeta)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioMeta` struct initialized to zero.
+newZeroAudioMeta :: MonadIO m => m AudioMeta
+newZeroAudioMeta = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioMeta
+
+instance tag ~ 'AttrSet => Constructible AudioMeta tag where
+    new _ attrs = do
+        o <- newZeroAudioMeta
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioMeta`.
+noAudioMeta :: Maybe AudioMeta
+noAudioMeta = Nothing
+
+{- |
+Get the value of the “@meta@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioMeta #meta
+@
+-}
+getAudioMetaMeta :: MonadIO m => AudioMeta -> m Gst.Meta.Meta
+getAudioMetaMeta s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 0 :: (Ptr Gst.Meta.Meta)
+    val' <- (newPtr Gst.Meta.Meta) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioMetaMetaFieldInfo
+instance AttrInfo AudioMetaMetaFieldInfo where
+    type AttrAllowedOps AudioMetaMetaFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioMetaMetaFieldInfo = (~) (Ptr Gst.Meta.Meta)
+    type AttrBaseTypeConstraint AudioMetaMetaFieldInfo = (~) AudioMeta
+    type AttrGetType AudioMetaMetaFieldInfo = Gst.Meta.Meta
+    type AttrLabel AudioMetaMetaFieldInfo = "meta"
+    type AttrOrigin AudioMetaMetaFieldInfo = AudioMeta
+    attrGet _ = getAudioMetaMeta
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioMeta_meta :: AttrLabelProxy "meta"
+audioMeta_meta = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@info@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioMeta #info
+@
+-}
+getAudioMetaInfo :: MonadIO m => AudioMeta -> m GstAudio.AudioInfo.AudioInfo
+getAudioMetaInfo s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 16 :: (Ptr GstAudio.AudioInfo.AudioInfo)
+    val' <- (newBoxed GstAudio.AudioInfo.AudioInfo) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioMetaInfoFieldInfo
+instance AttrInfo AudioMetaInfoFieldInfo where
+    type AttrAllowedOps AudioMetaInfoFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioMetaInfoFieldInfo = (~) (Ptr GstAudio.AudioInfo.AudioInfo)
+    type AttrBaseTypeConstraint AudioMetaInfoFieldInfo = (~) AudioMeta
+    type AttrGetType AudioMetaInfoFieldInfo = GstAudio.AudioInfo.AudioInfo
+    type AttrLabel AudioMetaInfoFieldInfo = "info"
+    type AttrOrigin AudioMetaInfoFieldInfo = AudioMeta
+    attrGet _ = getAudioMetaInfo
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioMeta_info :: AttrLabelProxy "info"
+audioMeta_info = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@samples@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioMeta #samples
+@
+-}
+getAudioMetaSamples :: MonadIO m => AudioMeta -> m Word64
+getAudioMetaSamples s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 336) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@samples@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioMeta [ #samples 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioMetaSamples :: MonadIO m => AudioMeta -> Word64 -> m ()
+setAudioMetaSamples s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 336) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioMetaSamplesFieldInfo
+instance AttrInfo AudioMetaSamplesFieldInfo where
+    type AttrAllowedOps AudioMetaSamplesFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioMetaSamplesFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioMetaSamplesFieldInfo = (~) AudioMeta
+    type AttrGetType AudioMetaSamplesFieldInfo = Word64
+    type AttrLabel AudioMetaSamplesFieldInfo = "samples"
+    type AttrOrigin AudioMetaSamplesFieldInfo = AudioMeta
+    attrGet _ = getAudioMetaSamples
+    attrSet _ = setAudioMetaSamples
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioMeta_samples :: AttrLabelProxy "samples"
+audioMeta_samples = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@offsets@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioMeta #offsets
+@
+-}
+getAudioMetaOffsets :: MonadIO m => AudioMeta -> m Word64
+getAudioMetaOffsets s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 344) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@offsets@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioMeta [ #offsets 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioMetaOffsets :: MonadIO m => AudioMeta -> Word64 -> m ()
+setAudioMetaOffsets s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 344) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioMetaOffsetsFieldInfo
+instance AttrInfo AudioMetaOffsetsFieldInfo where
+    type AttrAllowedOps AudioMetaOffsetsFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioMetaOffsetsFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioMetaOffsetsFieldInfo = (~) AudioMeta
+    type AttrGetType AudioMetaOffsetsFieldInfo = Word64
+    type AttrLabel AudioMetaOffsetsFieldInfo = "offsets"
+    type AttrOrigin AudioMetaOffsetsFieldInfo = AudioMeta
+    attrGet _ = getAudioMetaOffsets
+    attrSet _ = setAudioMetaOffsets
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioMeta_offsets :: AttrLabelProxy "offsets"
+audioMeta_offsets = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioMeta
+type instance O.AttributeList AudioMeta = AudioMetaAttributeList
+type AudioMetaAttributeList = ('[ '("meta", AudioMetaMetaFieldInfo), '("info", AudioMetaInfoFieldInfo), '("samples", AudioMetaSamplesFieldInfo), '("offsets", AudioMetaOffsetsFieldInfo)] :: [(Symbol, *)])
+#endif
+
+-- method AudioMeta::get_info
+-- method type : MemberFunction
+-- Args : []
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "Gst", name = "MetaInfo"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_meta_get_info" gst_audio_meta_get_info :: 
+    IO (Ptr Gst.MetaInfo.MetaInfo)
+
+{- |
+/No description available in the introspection data./
+-}
+audioMetaGetInfo ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    m Gst.MetaInfo.MetaInfo
+audioMetaGetInfo  = liftIO $ do
+    result <- gst_audio_meta_get_info
+    checkUnexpectedReturnNULL "audioMetaGetInfo" result
+    result' <- (newPtr Gst.MetaInfo.MetaInfo) result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioMetaMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioMetaMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioMetaMethod t AudioMeta, O.MethodInfo info AudioMeta p) => OL.IsLabel t (AudioMeta -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioMeta.hs-boot b/GI/GstAudio/Structs/AudioMeta.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioMeta.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioMeta 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
+
+newtype AudioMeta = AudioMeta (ManagedPtr AudioMeta)
+instance WrappedPtr AudioMeta where
diff --git a/GI/GstAudio/Structs/AudioQuantize.hs b/GI/GstAudio/Structs/AudioQuantize.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioQuantize.hs
@@ -0,0 +1,225 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+/No description available in the introspection data./
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioQuantize
+    ( 
+
+-- * Exported types
+    AudioQuantize(..)                       ,
+    noAudioQuantize                         ,
+
+
+ -- * Methods
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioQuantizeFreeMethodInfo             ,
+#endif
+    audioQuantizeFree                       ,
+
+
+-- ** reset #method:reset#
+
+#if ENABLE_OVERLOADING
+    AudioQuantizeResetMethodInfo            ,
+#endif
+    audioQuantizeReset                      ,
+
+
+-- ** samples #method:samples#
+
+#if ENABLE_OVERLOADING
+    AudioQuantizeSamplesMethodInfo          ,
+#endif
+    audioQuantizeSamples                    ,
+
+
+
+
+    ) 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
+
+
+-- | Memory-managed wrapper type.
+newtype AudioQuantize = AudioQuantize (ManagedPtr AudioQuantize)
+-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
+instance WrappedPtr AudioQuantize where
+    wrappedPtrCalloc = return nullPtr
+    wrappedPtrCopy = return
+    wrappedPtrFree = Nothing
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioQuantize`.
+noAudioQuantize :: Maybe AudioQuantize
+noAudioQuantize = Nothing
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioQuantize
+type instance O.AttributeList AudioQuantize = AudioQuantizeAttributeList
+type AudioQuantizeAttributeList = ('[ ] :: [(Symbol, *)])
+#endif
+
+-- method AudioQuantize::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "quant", argType = TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioQuantize", 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_quantize_free" gst_audio_quantize_free :: 
+    Ptr AudioQuantize ->                    -- quant : TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"})
+    IO ()
+
+{- |
+Free a 'GI.GstAudio.Structs.AudioQuantize.AudioQuantize'.
+-}
+audioQuantizeFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioQuantize
+    {- ^ /@quant@/: a 'GI.GstAudio.Structs.AudioQuantize.AudioQuantize' -}
+    -> m ()
+audioQuantizeFree quant = liftIO $ do
+    quant' <- unsafeManagedPtrGetPtr quant
+    gst_audio_quantize_free quant'
+    touchManagedPtr quant
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioQuantizeFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioQuantizeFreeMethodInfo AudioQuantize signature where
+    overloadedMethod _ = audioQuantizeFree
+
+#endif
+
+-- method AudioQuantize::reset
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "quant", argType = TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioQuantize", 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_quantize_reset" gst_audio_quantize_reset :: 
+    Ptr AudioQuantize ->                    -- quant : TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"})
+    IO ()
+
+{- |
+Reset /@quant@/ to the state is was when created, clearing any
+history it might have.
+-}
+audioQuantizeReset ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioQuantize
+    {- ^ /@quant@/: a 'GI.GstAudio.Structs.AudioQuantize.AudioQuantize' -}
+    -> m ()
+audioQuantizeReset quant = liftIO $ do
+    quant' <- unsafeManagedPtrGetPtr quant
+    gst_audio_quantize_reset quant'
+    touchManagedPtr quant
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioQuantizeResetMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioQuantizeResetMethodInfo AudioQuantize signature where
+    overloadedMethod _ = audioQuantizeReset
+
+#endif
+
+-- method AudioQuantize::samples
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "quant", argType = TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioQuantize", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "input samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "output samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples", 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_quantize_samples" gst_audio_quantize_samples :: 
+    Ptr AudioQuantize ->                    -- quant : TInterface (Name {namespace = "GstAudio", name = "AudioQuantize"})
+    Ptr () ->                               -- in : TBasicType TPtr
+    Ptr () ->                               -- out : TBasicType TPtr
+    Word32 ->                               -- samples : TBasicType TUInt
+    IO ()
+
+{- |
+Perform quantization on /@samples@/ in /@in@/ and write the result to /@out@/.
+
+In case the samples are interleaved, /@in@/ and /@out@/ must point to an
+array with a single element pointing to a block of interleaved samples.
+
+If non-interleaved samples are used, /@in@/ and /@out@/ must point to an
+array with pointers to memory blocks, one for each channel.
+
+/@in@/ and /@out@/ may point to the same memory location, in which case samples will be
+modified in-place.
+-}
+audioQuantizeSamples ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioQuantize
+    {- ^ /@quant@/: a 'GI.GstAudio.Structs.AudioQuantize.AudioQuantize' -}
+    -> Ptr ()
+    {- ^ /@in@/: input samples -}
+    -> Ptr ()
+    {- ^ /@out@/: output samples -}
+    -> Word32
+    {- ^ /@samples@/: number of samples -}
+    -> m ()
+audioQuantizeSamples quant in_ out samples = liftIO $ do
+    quant' <- unsafeManagedPtrGetPtr quant
+    gst_audio_quantize_samples quant' in_ out samples
+    touchManagedPtr quant
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioQuantizeSamplesMethodInfo
+instance (signature ~ (Ptr () -> Ptr () -> Word32 -> m ()), MonadIO m) => O.MethodInfo AudioQuantizeSamplesMethodInfo AudioQuantize signature where
+    overloadedMethod _ = audioQuantizeSamples
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioQuantizeMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioQuantizeMethod "free" o = AudioQuantizeFreeMethodInfo
+    ResolveAudioQuantizeMethod "reset" o = AudioQuantizeResetMethodInfo
+    ResolveAudioQuantizeMethod "samples" o = AudioQuantizeSamplesMethodInfo
+    ResolveAudioQuantizeMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioQuantizeMethod t AudioQuantize, O.MethodInfo info AudioQuantize p) => OL.IsLabel t (AudioQuantize -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioQuantize.hs-boot b/GI/GstAudio/Structs/AudioQuantize.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioQuantize.hs-boot
@@ -0,0 +1,35 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioQuantize 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
+
+newtype AudioQuantize = AudioQuantize (ManagedPtr AudioQuantize)
+instance WrappedPtr AudioQuantize where
+#if ENABLE_OVERLOADING
+data AudioQuantizeFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioQuantizeResetMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioQuantizeSamplesMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioResampler.hs b/GI/GstAudio/Structs/AudioResampler.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioResampler.hs
@@ -0,0 +1,545 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+'GI.GstAudio.Structs.AudioResampler.AudioResampler' is a structure which holds the information
+required to perform various kinds of resampling filtering.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioResampler
+    ( 
+
+-- * Exported types
+    AudioResampler(..)                      ,
+    noAudioResampler                        ,
+
+
+ -- * Methods
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerFreeMethodInfo            ,
+#endif
+    audioResamplerFree                      ,
+
+
+-- ** getInFrames #method:getInFrames#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerGetInFramesMethodInfo     ,
+#endif
+    audioResamplerGetInFrames               ,
+
+
+-- ** getMaxLatency #method:getMaxLatency#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerGetMaxLatencyMethodInfo   ,
+#endif
+    audioResamplerGetMaxLatency             ,
+
+
+-- ** getOutFrames #method:getOutFrames#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerGetOutFramesMethodInfo    ,
+#endif
+    audioResamplerGetOutFrames              ,
+
+
+-- ** new #method:new#
+
+    audioResamplerNew                       ,
+
+
+-- ** optionsSetQuality #method:optionsSetQuality#
+
+    audioResamplerOptionsSetQuality         ,
+
+
+-- ** resample #method:resample#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerResampleMethodInfo        ,
+#endif
+    audioResamplerResample                  ,
+
+
+-- ** reset #method:reset#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerResetMethodInfo           ,
+#endif
+    audioResamplerReset                     ,
+
+
+-- ** update #method:update#
+
+#if ENABLE_OVERLOADING
+    AudioResamplerUpdateMethodInfo          ,
+#endif
+    audioResamplerUpdate                    ,
+
+
+
+
+    ) 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.Gst.Structs.Structure as Gst.Structure
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags
+
+-- | Memory-managed wrapper type.
+newtype AudioResampler = AudioResampler (ManagedPtr AudioResampler)
+-- XXX Wrapping a foreign struct/union with no known destructor or size, leak?
+instance WrappedPtr AudioResampler where
+    wrappedPtrCalloc = return nullPtr
+    wrappedPtrCopy = return
+    wrappedPtrFree = Nothing
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioResampler`.
+noAudioResampler :: Maybe AudioResampler
+noAudioResampler = Nothing
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioResampler
+type instance O.AttributeList AudioResampler = AudioResamplerAttributeList
+type AudioResamplerAttributeList = ('[ ] :: [(Symbol, *)])
+#endif
+
+-- method AudioResampler::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", 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_resampler_free" gst_audio_resampler_free :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    IO ()
+
+{- |
+Free a previously allocated 'GI.GstAudio.Structs.AudioResampler.AudioResampler' /@resampler@/.
+
+/Since: 1.6/
+-}
+audioResamplerFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> m ()
+audioResamplerFree resampler = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    gst_audio_resampler_free resampler'
+    touchManagedPtr resampler
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioResamplerFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioResamplerFreeMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerFree
+
+#endif
+
+-- method AudioResampler::get_in_frames
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_resampler_get_in_frames" gst_audio_resampler_get_in_frames :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    Word64 ->                               -- out_frames : TBasicType TUInt64
+    IO Word64
+
+{- |
+Get the number of input frames that would currently be needed
+to produce /@outFrames@/ from /@resampler@/.
+-}
+audioResamplerGetInFrames ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> Word64
+    {- ^ /@outFrames@/: number of input frames -}
+    -> m Word64
+    {- ^ __Returns:__ The number of input frames needed for producing
+/@outFrames@/ of data from /@resampler@/. -}
+audioResamplerGetInFrames resampler outFrames = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    result <- gst_audio_resampler_get_in_frames resampler' outFrames
+    touchManagedPtr resampler
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioResamplerGetInFramesMethodInfo
+instance (signature ~ (Word64 -> m Word64), MonadIO m) => O.MethodInfo AudioResamplerGetInFramesMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerGetInFrames
+
+#endif
+
+-- method AudioResampler::get_max_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_resampler_get_max_latency" gst_audio_resampler_get_max_latency :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    IO Word64
+
+{- |
+Get the maximum number of input samples that the resampler would
+need before producing output.
+-}
+audioResamplerGetMaxLatency ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> m Word64
+    {- ^ __Returns:__ the latency of /@resampler@/ as expressed in the number of
+frames. -}
+audioResamplerGetMaxLatency resampler = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    result <- gst_audio_resampler_get_max_latency resampler'
+    touchManagedPtr resampler
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioResamplerGetMaxLatencyMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioResamplerGetMaxLatencyMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerGetMaxLatency
+
+#endif
+
+-- method AudioResampler::get_out_frames
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_resampler_get_out_frames" gst_audio_resampler_get_out_frames :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    Word64 ->                               -- in_frames : TBasicType TUInt64
+    IO Word64
+
+{- |
+Get the number of output frames that would be currently available when
+/@inFrames@/ are given to /@resampler@/.
+-}
+audioResamplerGetOutFrames ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> Word64
+    {- ^ /@inFrames@/: number of input frames -}
+    -> m Word64
+    {- ^ __Returns:__ The number of frames that would be availabe after giving
+/@inFrames@/ as input to /@resampler@/. -}
+audioResamplerGetOutFrames resampler inFrames = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    result <- gst_audio_resampler_get_out_frames resampler' inFrames
+    touchManagedPtr resampler
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioResamplerGetOutFramesMethodInfo
+instance (signature ~ (Word64 -> m Word64), MonadIO m) => O.MethodInfo AudioResamplerGetOutFramesMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerGetOutFrames
+
+#endif
+
+-- method AudioResampler::resample
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "input samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of input frames", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "output samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_frames", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of output frames", 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_resampler_resample" gst_audio_resampler_resample :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    Ptr () ->                               -- in : TBasicType TPtr
+    Word64 ->                               -- in_frames : TBasicType TUInt64
+    Ptr () ->                               -- out : TBasicType TPtr
+    Word64 ->                               -- out_frames : TBasicType TUInt64
+    IO ()
+
+{- |
+Perform resampling on /@inFrames@/ frames in /@in@/ and write /@outFrames@/ to /@out@/.
+
+In case the samples are interleaved, /@in@/ and /@out@/ must point to an
+array with a single element pointing to a block of interleaved samples.
+
+If non-interleaved samples are used, /@in@/ and /@out@/ must point to an
+array with pointers to memory blocks, one for each channel.
+
+/@in@/ may be 'Nothing', in which case /@inFrames@/ of silence samples are pushed
+into the resampler.
+
+This function always produces /@outFrames@/ of output and consumes /@inFrames@/ of
+input. Use 'GI.GstAudio.Structs.AudioResampler.audioResamplerGetOutFrames' and
+'GI.GstAudio.Structs.AudioResampler.audioResamplerGetInFrames' to make sure /@inFrames@/ and /@outFrames@/
+are matching and /@in@/ and /@out@/ point to enough memory.
+-}
+audioResamplerResample ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> Ptr ()
+    {- ^ /@in@/: input samples -}
+    -> Word64
+    {- ^ /@inFrames@/: number of input frames -}
+    -> Ptr ()
+    {- ^ /@out@/: output samples -}
+    -> Word64
+    {- ^ /@outFrames@/: number of output frames -}
+    -> m ()
+audioResamplerResample resampler in_ inFrames out outFrames = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    gst_audio_resampler_resample resampler' in_ inFrames out outFrames
+    touchManagedPtr resampler
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioResamplerResampleMethodInfo
+instance (signature ~ (Ptr () -> Word64 -> Ptr () -> Word64 -> m ()), MonadIO m) => O.MethodInfo AudioResamplerResampleMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerResample
+
+#endif
+
+-- method AudioResampler::reset
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", 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_resampler_reset" gst_audio_resampler_reset :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    IO ()
+
+{- |
+Reset /@resampler@/ to the state it was when it was first created, discarding
+all sample history.
+-}
+audioResamplerReset ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> m ()
+audioResamplerReset resampler = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    gst_audio_resampler_reset resampler'
+    touchManagedPtr resampler
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioResamplerResetMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioResamplerResetMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerReset
+
+#endif
+
+-- method AudioResampler::update
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "resampler", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResampler", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new input rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new output rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "options", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new options or %NULL", 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_resampler_update" gst_audio_resampler_update :: 
+    Ptr AudioResampler ->                   -- resampler : TInterface (Name {namespace = "GstAudio", name = "AudioResampler"})
+    Int32 ->                                -- in_rate : TBasicType TInt
+    Int32 ->                                -- out_rate : TBasicType TInt
+    Ptr Gst.Structure.Structure ->          -- options : TInterface (Name {namespace = "Gst", name = "Structure"})
+    IO CInt
+
+{- |
+Update the resampler parameters for /@resampler@/. This function should
+not be called concurrently with any other function on /@resampler@/.
+
+When /@inRate@/ or /@outRate@/ is 0, its value is unchanged.
+
+When /@options@/ is 'Nothing', the previously configured options are reused.
+-}
+audioResamplerUpdate ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioResampler
+    {- ^ /@resampler@/: a 'GI.GstAudio.Structs.AudioResampler.AudioResampler' -}
+    -> Int32
+    {- ^ /@inRate@/: new input rate -}
+    -> Int32
+    {- ^ /@outRate@/: new output rate -}
+    -> Gst.Structure.Structure
+    {- ^ /@options@/: new options or 'Nothing' -}
+    -> m Bool
+    {- ^ __Returns:__ 'True' if the new parameters could be set -}
+audioResamplerUpdate resampler inRate outRate options = liftIO $ do
+    resampler' <- unsafeManagedPtrGetPtr resampler
+    options' <- unsafeManagedPtrGetPtr options
+    result <- gst_audio_resampler_update resampler' inRate outRate options'
+    let result' = (/= 0) result
+    touchManagedPtr resampler
+    touchManagedPtr options
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioResamplerUpdateMethodInfo
+instance (signature ~ (Int32 -> Int32 -> Gst.Structure.Structure -> m Bool), MonadIO m) => O.MethodInfo AudioResamplerUpdateMethodInfo AudioResampler signature where
+    overloadedMethod _ = audioResamplerUpdate
+
+#endif
+
+-- method AudioResampler::new
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "method", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResamplerMethod"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResamplerMethod", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResamplerFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GstAudioResamplerFlags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #GstAudioFormat", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "input rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "options", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "extra options", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioResampler"}))
+-- throws : False
+-- Skip return : True
+-- XXX return value ignored, but it is not a boolean.
+--     This may be a memory leak?
+
+foreign import ccall "gst_audio_resampler_new" gst_audio_resampler_new :: 
+    CUInt ->                                -- method : TInterface (Name {namespace = "GstAudio", name = "AudioResamplerMethod"})
+    CUInt ->                                -- flags : TInterface (Name {namespace = "GstAudio", name = "AudioResamplerFlags"})
+    CUInt ->                                -- format : TInterface (Name {namespace = "GstAudio", name = "AudioFormat"})
+    Int32 ->                                -- channels : TBasicType TInt
+    Int32 ->                                -- in_rate : TBasicType TInt
+    Int32 ->                                -- out_rate : TBasicType TInt
+    Ptr Gst.Structure.Structure ->          -- options : TInterface (Name {namespace = "Gst", name = "Structure"})
+    IO (Ptr AudioResampler)
+
+{- |
+Make a new resampler.
+-}
+audioResamplerNew ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.Enums.AudioResamplerMethod
+    {- ^ /@method@/: a 'GI.GstAudio.Enums.AudioResamplerMethod' -}
+    -> [GstAudio.Flags.AudioResamplerFlags]
+    {- ^ /@flags@/: 'GI.GstAudio.Flags.AudioResamplerFlags' -}
+    -> GstAudio.Enums.AudioFormat
+    {- ^ /@format@/: the 'GI.GstAudio.Enums.AudioFormat' -}
+    -> Int32
+    {- ^ /@channels@/: the number of channels -}
+    -> Int32
+    {- ^ /@inRate@/: input rate -}
+    -> Int32
+    {- ^ /@outRate@/: output rate -}
+    -> Gst.Structure.Structure
+    {- ^ /@options@/: extra options -}
+    -> m ()
+audioResamplerNew method flags format channels inRate outRate options = liftIO $ do
+    let method' = (fromIntegral . fromEnum) method
+    let flags' = gflagsToWord flags
+    let format' = (fromIntegral . fromEnum) format
+    options' <- unsafeManagedPtrGetPtr options
+    _ <- gst_audio_resampler_new method' flags' format' channels inRate outRate options'
+    touchManagedPtr options
+    return ()
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioResampler::options_set_quality
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "method", argType = TInterface (Name {namespace = "GstAudio", name = "AudioResamplerMethod"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioResamplerMethod", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "quality", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the quality", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the input rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the output rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "options", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstStructure", 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_resampler_options_set_quality" gst_audio_resampler_options_set_quality :: 
+    CUInt ->                                -- method : TInterface (Name {namespace = "GstAudio", name = "AudioResamplerMethod"})
+    Word32 ->                               -- quality : TBasicType TUInt
+    Int32 ->                                -- in_rate : TBasicType TInt
+    Int32 ->                                -- out_rate : TBasicType TInt
+    Ptr Gst.Structure.Structure ->          -- options : TInterface (Name {namespace = "Gst", name = "Structure"})
+    IO ()
+
+{- |
+Set the parameters for resampling from /@inRate@/ to /@outRate@/ using /@method@/
+for /@quality@/ in /@options@/.
+-}
+audioResamplerOptionsSetQuality ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    GstAudio.Enums.AudioResamplerMethod
+    {- ^ /@method@/: a 'GI.GstAudio.Enums.AudioResamplerMethod' -}
+    -> Word32
+    {- ^ /@quality@/: the quality -}
+    -> Int32
+    {- ^ /@inRate@/: the input rate -}
+    -> Int32
+    {- ^ /@outRate@/: the output rate -}
+    -> Gst.Structure.Structure
+    {- ^ /@options@/: a 'GI.Gst.Structs.Structure.Structure' -}
+    -> m ()
+audioResamplerOptionsSetQuality method quality inRate outRate options = liftIO $ do
+    let method' = (fromIntegral . fromEnum) method
+    options' <- unsafeManagedPtrGetPtr options
+    gst_audio_resampler_options_set_quality method' quality inRate outRate options'
+    touchManagedPtr options
+    return ()
+
+#if ENABLE_OVERLOADING
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioResamplerMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioResamplerMethod "free" o = AudioResamplerFreeMethodInfo
+    ResolveAudioResamplerMethod "resample" o = AudioResamplerResampleMethodInfo
+    ResolveAudioResamplerMethod "reset" o = AudioResamplerResetMethodInfo
+    ResolveAudioResamplerMethod "update" o = AudioResamplerUpdateMethodInfo
+    ResolveAudioResamplerMethod "getInFrames" o = AudioResamplerGetInFramesMethodInfo
+    ResolveAudioResamplerMethod "getMaxLatency" o = AudioResamplerGetMaxLatencyMethodInfo
+    ResolveAudioResamplerMethod "getOutFrames" o = AudioResamplerGetOutFramesMethodInfo
+    ResolveAudioResamplerMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioResamplerMethod t AudioResampler, O.MethodInfo info AudioResampler p) => OL.IsLabel t (AudioResampler -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioResampler.hs-boot b/GI/GstAudio/Structs/AudioResampler.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioResampler.hs-boot
@@ -0,0 +1,47 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioResampler 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
+
+newtype AudioResampler = AudioResampler (ManagedPtr AudioResampler)
+instance WrappedPtr AudioResampler where
+#if ENABLE_OVERLOADING
+data AudioResamplerFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerGetInFramesMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerGetMaxLatencyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerGetOutFramesMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerResampleMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerResetMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioResamplerUpdateMethodInfo
+#endif
diff --git a/GI/GstAudio/Structs/AudioRingBufferSpec.hs b/GI/GstAudio/Structs/AudioRingBufferSpec.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioRingBufferSpec.hs
@@ -0,0 +1,541 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+The structure containing the format specification of the ringbuffer.
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioRingBufferSpec
+    ( 
+
+-- * Exported types
+    AudioRingBufferSpec(..)                 ,
+    newZeroAudioRingBufferSpec              ,
+    noAudioRingBufferSpec                   ,
+
+
+ -- * Properties
+-- ** bufferTime #attr:bufferTime#
+{- | the total buffer size in microseconds
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_bufferTime          ,
+#endif
+    getAudioRingBufferSpecBufferTime        ,
+    setAudioRingBufferSpecBufferTime        ,
+
+
+-- ** caps #attr:caps#
+{- | The caps that generated the Spec.
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_caps                ,
+#endif
+    clearAudioRingBufferSpecCaps            ,
+    getAudioRingBufferSpecCaps              ,
+    setAudioRingBufferSpecCaps              ,
+
+
+-- ** info #attr:info#
+{- | the 'GI.GstAudio.Structs.AudioInfo.AudioInfo'
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_info                ,
+#endif
+    getAudioRingBufferSpecInfo              ,
+
+
+-- ** latencyTime #attr:latencyTime#
+{- | the latency in microseconds
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_latencyTime         ,
+#endif
+    getAudioRingBufferSpecLatencyTime       ,
+    setAudioRingBufferSpecLatencyTime       ,
+
+
+-- ** seglatency #attr:seglatency#
+{- | number of segments queued in the lower level device,
+ defaults to segtotal
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_seglatency          ,
+#endif
+    getAudioRingBufferSpecSeglatency        ,
+    setAudioRingBufferSpecSeglatency        ,
+
+
+-- ** segsize #attr:segsize#
+{- | the size of one segment in bytes
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_segsize             ,
+#endif
+    getAudioRingBufferSpecSegsize           ,
+    setAudioRingBufferSpecSegsize           ,
+
+
+-- ** segtotal #attr:segtotal#
+{- | the total number of segments
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_segtotal            ,
+#endif
+    getAudioRingBufferSpecSegtotal          ,
+    setAudioRingBufferSpecSegtotal          ,
+
+
+-- ** type #attr:type#
+{- | the sample type
+-}
+#if ENABLE_OVERLOADING
+    audioRingBufferSpec_type                ,
+#endif
+    getAudioRingBufferSpecType              ,
+    setAudioRingBufferSpecType              ,
+
+
+
+
+    ) 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.Gst.Structs.Caps as Gst.Caps
+import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
+import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo
+
+-- | Memory-managed wrapper type.
+newtype AudioRingBufferSpec = AudioRingBufferSpec (ManagedPtr AudioRingBufferSpec)
+instance WrappedPtr AudioRingBufferSpec where
+    wrappedPtrCalloc = callocBytes 400
+    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 400 >=> wrapPtr AudioRingBufferSpec)
+    wrappedPtrFree = Just ptr_to_g_free
+
+-- | Construct a `AudioRingBufferSpec` struct initialized to zero.
+newZeroAudioRingBufferSpec :: MonadIO m => m AudioRingBufferSpec
+newZeroAudioRingBufferSpec = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioRingBufferSpec
+
+instance tag ~ 'AttrSet => Constructible AudioRingBufferSpec tag where
+    new _ attrs = do
+        o <- newZeroAudioRingBufferSpec
+        GI.Attributes.set o attrs
+        return o
+
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioRingBufferSpec`.
+noAudioRingBufferSpec :: Maybe AudioRingBufferSpec
+noAudioRingBufferSpec = Nothing
+
+{- |
+Get the value of the “@caps@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #caps
+@
+-}
+getAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m (Maybe Gst.Caps.Caps)
+getAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Caps.Caps)
+    result <- SP.convertIfNonNull val $ \val' -> do
+        val'' <- (newBoxed Gst.Caps.Caps) val'
+        return val''
+    return result
+
+{- |
+Set the value of the “@caps@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #caps 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> Ptr Gst.Caps.Caps -> m ()
+setAudioRingBufferSpecCaps s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 0) (val :: Ptr Gst.Caps.Caps)
+
+{- |
+Set the value of the “@caps@” field to `Nothing`.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.clear' #caps
+@
+-}
+clearAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m ()
+clearAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr Gst.Caps.Caps)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecCapsFieldInfo
+instance AttrInfo AudioRingBufferSpecCapsFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecCapsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
+    type AttrSetTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) (Ptr Gst.Caps.Caps)
+    type AttrBaseTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecCapsFieldInfo = Maybe Gst.Caps.Caps
+    type AttrLabel AudioRingBufferSpecCapsFieldInfo = "caps"
+    type AttrOrigin AudioRingBufferSpecCapsFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecCaps
+    attrSet _ = setAudioRingBufferSpecCaps
+    attrConstruct = undefined
+    attrClear _ = clearAudioRingBufferSpecCaps
+
+audioRingBufferSpec_caps :: AttrLabelProxy "caps"
+audioRingBufferSpec_caps = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@type@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #type
+@
+-}
+getAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> m GstAudio.Enums.AudioRingBufferFormatType
+getAudioRingBufferSpecType s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+{- |
+Set the value of the “@type@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #type 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> GstAudio.Enums.AudioRingBufferFormatType -> m ()
+setAudioRingBufferSpecType s val = liftIO $ withManagedPtr s $ \ptr -> do
+    let val' = (fromIntegral . fromEnum) val
+    poke (ptr `plusPtr` 8) (val' :: CUInt)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecTypeFieldInfo
+instance AttrInfo AudioRingBufferSpecTypeFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) GstAudio.Enums.AudioRingBufferFormatType
+    type AttrBaseTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecTypeFieldInfo = GstAudio.Enums.AudioRingBufferFormatType
+    type AttrLabel AudioRingBufferSpecTypeFieldInfo = "type"
+    type AttrOrigin AudioRingBufferSpecTypeFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecType
+    attrSet _ = setAudioRingBufferSpecType
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_type :: AttrLabelProxy "type"
+audioRingBufferSpec_type = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@info@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #info
+@
+-}
+getAudioRingBufferSpecInfo :: MonadIO m => AudioRingBufferSpec -> m GstAudio.AudioInfo.AudioInfo
+getAudioRingBufferSpecInfo s = liftIO $ withManagedPtr s $ \ptr -> do
+    let val = ptr `plusPtr` 16 :: (Ptr GstAudio.AudioInfo.AudioInfo)
+    val' <- (newBoxed GstAudio.AudioInfo.AudioInfo) val
+    return val'
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecInfoFieldInfo
+instance AttrInfo AudioRingBufferSpecInfoFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecInfoFieldInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) (Ptr GstAudio.AudioInfo.AudioInfo)
+    type AttrBaseTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecInfoFieldInfo = GstAudio.AudioInfo.AudioInfo
+    type AttrLabel AudioRingBufferSpecInfoFieldInfo = "info"
+    type AttrOrigin AudioRingBufferSpecInfoFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecInfo
+    attrSet _ = undefined
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_info :: AttrLabelProxy "info"
+audioRingBufferSpec_info = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@latency_time@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #latencyTime
+@
+-}
+getAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> m Word64
+getAudioRingBufferSpecLatencyTime s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 336) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@latency_time@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #latencyTime 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m ()
+setAudioRingBufferSpecLatencyTime s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 336) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecLatencyTimeFieldInfo
+instance AttrInfo AudioRingBufferSpecLatencyTimeFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecLatencyTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecLatencyTimeFieldInfo = Word64
+    type AttrLabel AudioRingBufferSpecLatencyTimeFieldInfo = "latency_time"
+    type AttrOrigin AudioRingBufferSpecLatencyTimeFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecLatencyTime
+    attrSet _ = setAudioRingBufferSpecLatencyTime
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_latencyTime :: AttrLabelProxy "latencyTime"
+audioRingBufferSpec_latencyTime = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@buffer_time@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #bufferTime
+@
+-}
+getAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> m Word64
+getAudioRingBufferSpecBufferTime s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 344) :: IO Word64
+    return val
+
+{- |
+Set the value of the “@buffer_time@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #bufferTime 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m ()
+setAudioRingBufferSpecBufferTime s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 344) (val :: Word64)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecBufferTimeFieldInfo
+instance AttrInfo AudioRingBufferSpecBufferTimeFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecBufferTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecBufferTimeFieldInfo = Word64
+    type AttrLabel AudioRingBufferSpecBufferTimeFieldInfo = "buffer_time"
+    type AttrOrigin AudioRingBufferSpecBufferTimeFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecBufferTime
+    attrSet _ = setAudioRingBufferSpecBufferTime
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_bufferTime :: AttrLabelProxy "bufferTime"
+audioRingBufferSpec_bufferTime = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@segsize@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #segsize
+@
+-}
+getAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> m Int32
+getAudioRingBufferSpecSegsize s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 352) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@segsize@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segsize 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
+setAudioRingBufferSpecSegsize s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 352) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecSegsizeFieldInfo
+instance AttrInfo AudioRingBufferSpecSegsizeFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecSegsizeFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecSegsizeFieldInfo = Int32
+    type AttrLabel AudioRingBufferSpecSegsizeFieldInfo = "segsize"
+    type AttrOrigin AudioRingBufferSpecSegsizeFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecSegsize
+    attrSet _ = setAudioRingBufferSpecSegsize
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_segsize :: AttrLabelProxy "segsize"
+audioRingBufferSpec_segsize = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@segtotal@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #segtotal
+@
+-}
+getAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> m Int32
+getAudioRingBufferSpecSegtotal s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 356) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@segtotal@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segtotal 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
+setAudioRingBufferSpecSegtotal s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 356) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecSegtotalFieldInfo
+instance AttrInfo AudioRingBufferSpecSegtotalFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecSegtotalFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecSegtotalFieldInfo = Int32
+    type AttrLabel AudioRingBufferSpecSegtotalFieldInfo = "segtotal"
+    type AttrOrigin AudioRingBufferSpecSegtotalFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecSegtotal
+    attrSet _ = setAudioRingBufferSpecSegtotal
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_segtotal :: AttrLabelProxy "segtotal"
+audioRingBufferSpec_segtotal = AttrLabelProxy
+
+#endif
+
+
+{- |
+Get the value of the “@seglatency@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.get' audioRingBufferSpec #seglatency
+@
+-}
+getAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> m Int32
+getAudioRingBufferSpecSeglatency s = liftIO $ withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 360) :: IO Int32
+    return val
+
+{- |
+Set the value of the “@seglatency@” field.
+When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
+
+@
+'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #seglatency 'Data.GI.Base.Attributes.:=' value ]
+@
+-}
+setAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
+setAudioRingBufferSpecSeglatency s val = liftIO $ withManagedPtr s $ \ptr -> do
+    poke (ptr `plusPtr` 360) (val :: Int32)
+
+#if ENABLE_OVERLOADING
+data AudioRingBufferSpecSeglatencyFieldInfo
+instance AttrInfo AudioRingBufferSpecSeglatencyFieldInfo where
+    type AttrAllowedOps AudioRingBufferSpecSeglatencyFieldInfo = '[ 'AttrSet, 'AttrGet]
+    type AttrSetTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) Int32
+    type AttrBaseTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) AudioRingBufferSpec
+    type AttrGetType AudioRingBufferSpecSeglatencyFieldInfo = Int32
+    type AttrLabel AudioRingBufferSpecSeglatencyFieldInfo = "seglatency"
+    type AttrOrigin AudioRingBufferSpecSeglatencyFieldInfo = AudioRingBufferSpec
+    attrGet _ = getAudioRingBufferSpecSeglatency
+    attrSet _ = setAudioRingBufferSpecSeglatency
+    attrConstruct = undefined
+    attrClear _ = undefined
+
+audioRingBufferSpec_seglatency :: AttrLabelProxy "seglatency"
+audioRingBufferSpec_seglatency = AttrLabelProxy
+
+#endif
+
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioRingBufferSpec
+type instance O.AttributeList AudioRingBufferSpec = AudioRingBufferSpecAttributeList
+type AudioRingBufferSpecAttributeList = ('[ '("caps", AudioRingBufferSpecCapsFieldInfo), '("type", AudioRingBufferSpecTypeFieldInfo), '("info", AudioRingBufferSpecInfoFieldInfo), '("latencyTime", AudioRingBufferSpecLatencyTimeFieldInfo), '("bufferTime", AudioRingBufferSpecBufferTimeFieldInfo), '("segsize", AudioRingBufferSpecSegsizeFieldInfo), '("segtotal", AudioRingBufferSpecSegtotalFieldInfo), '("seglatency", AudioRingBufferSpecSeglatencyFieldInfo)] :: [(Symbol, *)])
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioRingBufferSpecMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioRingBufferSpecMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, O.MethodInfo info AudioRingBufferSpec p) => OL.IsLabel t (AudioRingBufferSpec -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioRingBufferSpec.hs-boot b/GI/GstAudio/Structs/AudioRingBufferSpec.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioRingBufferSpec.hs-boot
@@ -0,0 +1,26 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioRingBufferSpec 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
+
+newtype AudioRingBufferSpec = AudioRingBufferSpec (ManagedPtr AudioRingBufferSpec)
+instance WrappedPtr AudioRingBufferSpec where
diff --git a/GI/GstAudio/Structs/AudioStreamAlign.hs b/GI/GstAudio/Structs/AudioStreamAlign.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioStreamAlign.hs
@@ -0,0 +1,728 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
+
+'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' provides a helper object that helps tracking audio
+stream alignment and discontinuities, and detects discontinuities if
+possible.
+
+See 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignNew' for a description of its parameters and
+'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignProcess' for the details of the processing.
+
+/Since: 1.14/
+-}
+
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+
+module GI.GstAudio.Structs.AudioStreamAlign
+    ( 
+
+-- * Exported types
+    AudioStreamAlign(..)                    ,
+    noAudioStreamAlign                      ,
+
+
+ -- * Methods
+-- ** copy #method:copy#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignCopyMethodInfo          ,
+#endif
+    audioStreamAlignCopy                    ,
+
+
+-- ** free #method:free#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignFreeMethodInfo          ,
+#endif
+    audioStreamAlignFree                    ,
+
+
+-- ** getAlignmentThreshold #method:getAlignmentThreshold#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignGetAlignmentThresholdMethodInfo,
+#endif
+    audioStreamAlignGetAlignmentThreshold   ,
+
+
+-- ** getDiscontWait #method:getDiscontWait#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignGetDiscontWaitMethodInfo,
+#endif
+    audioStreamAlignGetDiscontWait          ,
+
+
+-- ** getRate #method:getRate#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignGetRateMethodInfo       ,
+#endif
+    audioStreamAlignGetRate                 ,
+
+
+-- ** getSamplesSinceDiscont #method:getSamplesSinceDiscont#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignGetSamplesSinceDiscontMethodInfo,
+#endif
+    audioStreamAlignGetSamplesSinceDiscont  ,
+
+
+-- ** getTimestampAtDiscont #method:getTimestampAtDiscont#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignGetTimestampAtDiscontMethodInfo,
+#endif
+    audioStreamAlignGetTimestampAtDiscont   ,
+
+
+-- ** markDiscont #method:markDiscont#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignMarkDiscontMethodInfo   ,
+#endif
+    audioStreamAlignMarkDiscont             ,
+
+
+-- ** new #method:new#
+
+    audioStreamAlignNew                     ,
+
+
+-- ** process #method:process#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignProcessMethodInfo       ,
+#endif
+    audioStreamAlignProcess                 ,
+
+
+-- ** setAlignmentThreshold #method:setAlignmentThreshold#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignSetAlignmentThresholdMethodInfo,
+#endif
+    audioStreamAlignSetAlignmentThreshold   ,
+
+
+-- ** setDiscontWait #method:setDiscontWait#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignSetDiscontWaitMethodInfo,
+#endif
+    audioStreamAlignSetDiscontWait          ,
+
+
+-- ** setRate #method:setRate#
+
+#if ENABLE_OVERLOADING
+    AudioStreamAlignSetRateMethodInfo       ,
+#endif
+    audioStreamAlignSetRate                 ,
+
+
+
+
+    ) 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
+
+
+-- | Memory-managed wrapper type.
+newtype AudioStreamAlign = AudioStreamAlign (ManagedPtr AudioStreamAlign)
+foreign import ccall "gst_audio_stream_align_get_type" c_gst_audio_stream_align_get_type :: 
+    IO GType
+
+instance BoxedObject AudioStreamAlign where
+    boxedType _ = c_gst_audio_stream_align_get_type
+
+-- | A convenience alias for `Nothing` :: `Maybe` `AudioStreamAlign`.
+noAudioStreamAlign :: Maybe AudioStreamAlign
+noAudioStreamAlign = Nothing
+
+
+#if ENABLE_OVERLOADING
+instance O.HasAttributeList AudioStreamAlign
+type instance O.AttributeList AudioStreamAlign = AudioStreamAlignAttributeList
+type AudioStreamAlignAttributeList = ('[ ] :: [(Symbol, *)])
+#endif
+
+-- method AudioStreamAlign::new
+-- method type : Constructor
+-- Args : [Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a sample rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a alignment threshold in nanoseconds", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "discont wait in nanoseconds", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_new" gst_audio_stream_align_new :: 
+    Int32 ->                                -- rate : TBasicType TInt
+    Word64 ->                               -- alignment_threshold : TBasicType TUInt64
+    Word64 ->                               -- discont_wait : TBasicType TUInt64
+    IO (Ptr AudioStreamAlign)
+
+{- |
+Allocate a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' with the given configuration. All
+processing happens according to sample rate /@rate@/, until
+'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetRate' is called with a new /@rate@/.
+A negative rate can be used for reverse playback.
+
+/@alignmentThreshold@/ gives the tolerance in nanoseconds after which a
+timestamp difference is considered a discontinuity. Once detected,
+/@discontWait@/ nanoseconds have to pass without going below the threshold
+again until the output buffer is marked as a discontinuity. These can later
+be re-configured with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetAlignmentThreshold' and
+'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetDiscontWait'.
+
+/Since: 1.14/
+-}
+audioStreamAlignNew ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    Int32
+    {- ^ /@rate@/: a sample rate -}
+    -> Word64
+    {- ^ /@alignmentThreshold@/: a alignment threshold in nanoseconds -}
+    -> Word64
+    {- ^ /@discontWait@/: discont wait in nanoseconds -}
+    -> m AudioStreamAlign
+    {- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign'. free with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignFree'. -}
+audioStreamAlignNew rate alignmentThreshold discontWait = liftIO $ do
+    result <- gst_audio_stream_align_new rate alignmentThreshold discontWait
+    checkUnexpectedReturnNULL "audioStreamAlignNew" result
+    result' <- (wrapBoxed AudioStreamAlign) result
+    return result'
+
+#if ENABLE_OVERLOADING
+#endif
+
+-- method AudioStreamAlign::copy
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}))
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_copy" gst_audio_stream_align_copy :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO (Ptr AudioStreamAlign)
+
+{- |
+Copy a GstAudioStreamAlign structure.
+
+/Since: 1.14/
+-}
+audioStreamAlignCopy ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m AudioStreamAlign
+    {- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign'. free with gst_audio_stream_align_free. -}
+audioStreamAlignCopy align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_copy align'
+    checkUnexpectedReturnNULL "audioStreamAlignCopy" result
+    result' <- (wrapBoxed AudioStreamAlign) result
+    touchManagedPtr align
+    return result'
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignCopyMethodInfo
+instance (signature ~ (m AudioStreamAlign), MonadIO m) => O.MethodInfo AudioStreamAlignCopyMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignCopy
+
+#endif
+
+-- method AudioStreamAlign::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_free" gst_audio_stream_align_free :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO ()
+
+{- |
+Free a GstAudioStreamAlign structure previously allocated with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignNew'
+or 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignCopy'.
+
+/Since: 1.14/
+-}
+audioStreamAlignFree ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m ()
+audioStreamAlignFree align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    gst_audio_stream_align_free align'
+    touchManagedPtr align
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioStreamAlignFreeMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignFree
+
+#endif
+
+-- method AudioStreamAlign::get_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_get_alignment_threshold" gst_audio_stream_align_get_alignment_threshold :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO Word64
+
+{- |
+Gets the currently configured alignment threshold.
+
+/Since: 1.14/
+-}
+audioStreamAlignGetAlignmentThreshold ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m Word64
+    {- ^ __Returns:__ The currently configured alignment threshold -}
+audioStreamAlignGetAlignmentThreshold align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_get_alignment_threshold align'
+    touchManagedPtr align
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetAlignmentThresholdMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetAlignmentThresholdMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignGetAlignmentThreshold
+
+#endif
+
+-- method AudioStreamAlign::get_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_get_discont_wait" gst_audio_stream_align_get_discont_wait :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO Word64
+
+{- |
+Gets the currently configured discont wait.
+
+/Since: 1.14/
+-}
+audioStreamAlignGetDiscontWait ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m Word64
+    {- ^ __Returns:__ The currently configured discont wait -}
+audioStreamAlignGetDiscontWait align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_get_discont_wait align'
+    touchManagedPtr align
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetDiscontWaitMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetDiscontWaitMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignGetDiscontWait
+
+#endif
+
+-- method AudioStreamAlign::get_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TInt)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_get_rate" gst_audio_stream_align_get_rate :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO Int32
+
+{- |
+Gets the currently configured sample rate.
+
+/Since: 1.14/
+-}
+audioStreamAlignGetRate ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m Int32
+    {- ^ __Returns:__ The currently configured sample rate -}
+audioStreamAlignGetRate align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_get_rate align'
+    touchManagedPtr align
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetRateMethodInfo
+instance (signature ~ (m Int32), MonadIO m) => O.MethodInfo AudioStreamAlignGetRateMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignGetRate
+
+#endif
+
+-- method AudioStreamAlign::get_samples_since_discont
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_get_samples_since_discont" gst_audio_stream_align_get_samples_since_discont :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO Word64
+
+{- |
+Returns the number of samples that were processed since the last
+discontinuity was detected.
+
+/Since: 1.14/
+-}
+audioStreamAlignGetSamplesSinceDiscont ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m Word64
+    {- ^ __Returns:__ The number of samples processed since the last discontinuity. -}
+audioStreamAlignGetSamplesSinceDiscont align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_get_samples_since_discont align'
+    touchManagedPtr align
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetSamplesSinceDiscontMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetSamplesSinceDiscontMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignGetSamplesSinceDiscont
+
+#endif
+
+-- method AudioStreamAlign::get_timestamp_at_discont
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : Just (TBasicType TUInt64)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_get_timestamp_at_discont" gst_audio_stream_align_get_timestamp_at_discont :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO Word64
+
+{- |
+Timestamp that was passed when a discontinuity was detected, i.e. the first
+timestamp after the discontinuity.
+
+/Since: 1.14/
+-}
+audioStreamAlignGetTimestampAtDiscont ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m Word64
+    {- ^ __Returns:__ The last timestamp at when a discontinuity was detected -}
+audioStreamAlignGetTimestampAtDiscont align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    result <- gst_audio_stream_align_get_timestamp_at_discont align'
+    touchManagedPtr align
+    return result
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetTimestampAtDiscontMethodInfo
+instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetTimestampAtDiscontMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignGetTimestampAtDiscont
+
+#endif
+
+-- method AudioStreamAlign::mark_discont
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_mark_discont" gst_audio_stream_align_mark_discont :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    IO ()
+
+{- |
+Marks the next buffer as discontinuous and resets timestamp tracking.
+
+/Since: 1.14/
+-}
+audioStreamAlignMarkDiscont ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> m ()
+audioStreamAlignMarkDiscont align = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    gst_audio_stream_align_mark_discont align'
+    touchManagedPtr align
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignMarkDiscontMethodInfo
+instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioStreamAlignMarkDiscontMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignMarkDiscont
+
+#endif
+
+-- method AudioStreamAlign::process
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "if this data is considered to be discontinuous", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstClockTime of the start of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_samples", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples to process", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_timestamp", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output timestamp of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_duration", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output duration of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_sample_position", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output sample position of the start of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : Just (TBasicType TBoolean)
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_stream_align_process" gst_audio_stream_align_process :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    CInt ->                                 -- discont : TBasicType TBoolean
+    Word64 ->                               -- timestamp : TBasicType TUInt64
+    Word32 ->                               -- n_samples : TBasicType TUInt
+    Ptr Word64 ->                           -- out_timestamp : TBasicType TUInt64
+    Ptr Word64 ->                           -- out_duration : TBasicType TUInt64
+    Ptr Word64 ->                           -- out_sample_position : TBasicType TUInt64
+    IO CInt
+
+{- |
+Processes data with /@timestamp@/ and /@nSamples@/, and returns the output
+timestamp, duration and sample position together with a boolean to signal
+whether a discontinuity was detected or not. All non-discontinuous data
+will have perfect timestamps and durations.
+
+A discontinuity is detected once the difference between the actual
+timestamp and the timestamp calculated from the sample count since the last
+discontinuity differs by more than the alignment threshold for a duration
+longer than discont wait.
+
+Note: In reverse playback, every buffer is considered discontinuous in the
+context of buffer flags because the last sample of the previous buffer is
+discontinuous with the first sample of the current one. However for this
+function they are only considered discontinuous in reverse playback if the
+first sample of the previous buffer is discontinuous with the last sample
+of the current one.
+
+/Since: 1.14/
+-}
+audioStreamAlignProcess ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> Bool
+    {- ^ /@discont@/: if this data is considered to be discontinuous -}
+    -> Word64
+    {- ^ /@timestamp@/: a @/GstClockTime/@ of the start of the data -}
+    -> Word32
+    {- ^ /@nSamples@/: number of samples to process -}
+    -> m ((Bool, Word64, Word64, Word64))
+    {- ^ __Returns:__ 'True' if a discontinuity was detected, 'False' otherwise. -}
+audioStreamAlignProcess align discont timestamp nSamples = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    let discont' = (fromIntegral . fromEnum) discont
+    outTimestamp <- allocMem :: IO (Ptr Word64)
+    outDuration <- allocMem :: IO (Ptr Word64)
+    outSamplePosition <- allocMem :: IO (Ptr Word64)
+    result <- gst_audio_stream_align_process align' discont' timestamp nSamples outTimestamp outDuration outSamplePosition
+    let result' = (/= 0) result
+    outTimestamp' <- peek outTimestamp
+    outDuration' <- peek outDuration
+    outSamplePosition' <- peek outSamplePosition
+    touchManagedPtr align
+    freeMem outTimestamp
+    freeMem outDuration
+    freeMem outSamplePosition
+    return (result', outTimestamp', outDuration', outSamplePosition')
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignProcessMethodInfo
+instance (signature ~ (Bool -> Word64 -> Word32 -> m ((Bool, Word64, Word64, Word64))), MonadIO m) => O.MethodInfo AudioStreamAlignProcessMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignProcess
+
+#endif
+
+-- method AudioStreamAlign::set_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new alignment threshold", 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_stream_align_set_alignment_threshold" gst_audio_stream_align_set_alignment_threshold :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    Word64 ->                               -- alignment_threshold : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets /@alignmentTreshold@/ as new alignment threshold for the following processing.
+
+/Since: 1.14/
+-}
+audioStreamAlignSetAlignmentThreshold ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> Word64
+    {- ^ /@alignmentThreshold@/: a new alignment threshold -}
+    -> m ()
+audioStreamAlignSetAlignmentThreshold align alignmentThreshold = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    gst_audio_stream_align_set_alignment_threshold align' alignmentThreshold
+    touchManagedPtr align
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetAlignmentThresholdMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetAlignmentThresholdMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignSetAlignmentThreshold
+
+#endif
+
+-- method AudioStreamAlign::set_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new discont wait", 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_stream_align_set_discont_wait" gst_audio_stream_align_set_discont_wait :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    Word64 ->                               -- discont_wait : TBasicType TUInt64
+    IO ()
+
+{- |
+Sets /@alignmentTreshold@/ as new discont wait for the following processing.
+
+/Since: 1.14/
+-}
+audioStreamAlignSetDiscontWait ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> Word64
+    {- ^ /@discontWait@/: a new discont wait -}
+    -> m ()
+audioStreamAlignSetDiscontWait align discontWait = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    gst_audio_stream_align_set_discont_wait align' discontWait
+    touchManagedPtr align
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetDiscontWaitMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetDiscontWaitMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignSetDiscontWait
+
+#endif
+
+-- method AudioStreamAlign::set_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new sample rate", 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_stream_align_set_rate" gst_audio_stream_align_set_rate :: 
+    Ptr AudioStreamAlign ->                 -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
+    Int32 ->                                -- rate : TBasicType TInt
+    IO ()
+
+{- |
+Sets /@rate@/ as new sample rate for the following processing. If the sample
+rate differs this implicitely marks the next data as discontinuous.
+
+/Since: 1.14/
+-}
+audioStreamAlignSetRate ::
+    (B.CallStack.HasCallStack, MonadIO m) =>
+    AudioStreamAlign
+    {- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
+    -> Int32
+    {- ^ /@rate@/: a new sample rate -}
+    -> m ()
+audioStreamAlignSetRate align rate = liftIO $ do
+    align' <- unsafeManagedPtrGetPtr align
+    gst_audio_stream_align_set_rate align' rate
+    touchManagedPtr align
+    return ()
+
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetRateMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetRateMethodInfo AudioStreamAlign signature where
+    overloadedMethod _ = audioStreamAlignSetRate
+
+#endif
+
+#if ENABLE_OVERLOADING
+type family ResolveAudioStreamAlignMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioStreamAlignMethod "copy" o = AudioStreamAlignCopyMethodInfo
+    ResolveAudioStreamAlignMethod "free" o = AudioStreamAlignFreeMethodInfo
+    ResolveAudioStreamAlignMethod "markDiscont" o = AudioStreamAlignMarkDiscontMethodInfo
+    ResolveAudioStreamAlignMethod "process" o = AudioStreamAlignProcessMethodInfo
+    ResolveAudioStreamAlignMethod "getAlignmentThreshold" o = AudioStreamAlignGetAlignmentThresholdMethodInfo
+    ResolveAudioStreamAlignMethod "getDiscontWait" o = AudioStreamAlignGetDiscontWaitMethodInfo
+    ResolveAudioStreamAlignMethod "getRate" o = AudioStreamAlignGetRateMethodInfo
+    ResolveAudioStreamAlignMethod "getSamplesSinceDiscont" o = AudioStreamAlignGetSamplesSinceDiscontMethodInfo
+    ResolveAudioStreamAlignMethod "getTimestampAtDiscont" o = AudioStreamAlignGetTimestampAtDiscontMethodInfo
+    ResolveAudioStreamAlignMethod "setAlignmentThreshold" o = AudioStreamAlignSetAlignmentThresholdMethodInfo
+    ResolveAudioStreamAlignMethod "setDiscontWait" o = AudioStreamAlignSetDiscontWaitMethodInfo
+    ResolveAudioStreamAlignMethod "setRate" o = AudioStreamAlignSetRateMethodInfo
+    ResolveAudioStreamAlignMethod l o = O.MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioStreamAlignMethod t AudioStreamAlign, O.MethodInfo info AudioStreamAlign p) => OL.IsLabel t (AudioStreamAlign -> 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
+
+
diff --git a/GI/GstAudio/Structs/AudioStreamAlign.hs-boot b/GI/GstAudio/Structs/AudioStreamAlign.hs-boot
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Structs/AudioStreamAlign.hs-boot
@@ -0,0 +1,62 @@
+#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
+       && !defined(__HADDOCK_VERSION__))
+module GI.GstAudio.Structs.AudioStreamAlign 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
+
+newtype AudioStreamAlign = AudioStreamAlign (ManagedPtr AudioStreamAlign)
+instance BoxedObject AudioStreamAlign where
+#if ENABLE_OVERLOADING
+data AudioStreamAlignCopyMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignFreeMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetAlignmentThresholdMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetDiscontWaitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetRateMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetSamplesSinceDiscontMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignGetTimestampAtDiscontMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignMarkDiscontMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignProcessMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetAlignmentThresholdMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetDiscontWaitMethodInfo
+#endif
+#if ENABLE_OVERLOADING
+data AudioStreamAlignSetRateMethodInfo
+#endif
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,17 @@
+The gi-gstaudio library and included works are provided under the terms of the
+GNU Library General Public License (LGPL) version 2.1 with the following
+exception:
+
+Static linking of applications or any other source to the gi-gstaudio library
+does not constitute a modified or derivative work and does not require
+the author(s) to provide source code for said work, to link against the
+shared gi-gstaudio libraries, or to link their applications against a
+user-supplied version of gi-gstaudio. If you link applications to a modified
+version of gi-gstaudio, then the changes to gi-gstaudio must be provided under the
+terms of the LGPL.
+
+----------------------------------------------------------------------------
+
                   GNU LESSER GENERAL PUBLIC LICENSE
                        Version 2.1, February 1999
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Documentation
 Autogenerated documentation for this package can be found at
 
-[https://hackage.haskell.org/package/gi-gstaudio-1.0.15/docs/GI-GstAudio.html](https://hackage.haskell.org/package/gi-gstaudio-1.0.15/docs/GI-GstAudio.html)
+[https://hackage.haskell.org/package/gi-gstaudio-1.0.17/docs/GI-GstAudio.html](https://hackage.haskell.org/package/gi-gstaudio-1.0.17/docs/GI-GstAudio.html)
 
 For general documentation on using [haskell-gi](https://github.com/haskell-gi/haskell-gi) based bindings, see [the project page](https://github.com/haskell-gi/haskell-gi) or [the Wiki](https://github.com/haskell-gi/haskell-gi/wiki).
diff --git a/gi-gstaudio.cabal b/gi-gstaudio.cabal
--- a/gi-gstaudio.cabal
+++ b/gi-gstaudio.cabal
@@ -1,33 +1,33 @@
 name:                 gi-gstaudio
-version:              1.0.15
+version:              1.0.17
 synopsis:             GStreamerAudio bindings
 description:          Bindings for GStreamerAudio, autogenerated by haskell-gi.
 homepage:             https://github.com/haskell-gi/haskell-gi
 license:              LGPL-2.1
 license-file:         LICENSE
 author:               Will Thompson, Iñaki García Etxebarria and Jonas Platte
-maintainer:           Iñaki García Etxebarria (garetxe@gmail.com)
+maintainer:           Iñaki García Etxebarria (inaki@blueleaf.cc)
 category:             Bindings
 build-type:           Custom
-cabal-version:        >= 1.24
+cabal-version:        1.24
 
 extra-source-files: README.md ChangeLog.md stack.yaml GstAudio.overrides
 
 custom-setup
-      setup-depends: base >= 4.7 && < 5,
+      setup-depends: base >= 4.9 && < 5,
                      Cabal >= 1.24,
-                     haskell-gi == 0.21.*
+                     haskell-gi >= 0.21.0 && < 0.23
 
 library
       default-language: Haskell2010
-      default-extensions: NoImplicitPrelude, ScopedTypeVariables, CPP, OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts
+      default-extensions: NoImplicitPrelude, ScopedTypeVariables, CPP, OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts, UndecidableSuperClasses
       other-extensions: PatternSynonyms, ViewPatterns
       ghc-options: -fno-warn-unused-imports -fno-warn-warnings-deprecations
 
       pkgconfig-depends: gstreamer-audio-1.0
       build-depends: base >= 4.8 && <5,
-                     haskell-gi-base == 0.21.*,
-                     haskell-gi == 0.21.*,
+                     haskell-gi-base >= 0.21.0 && < 0.23,
+                     haskell-gi >= 0.21.0 && < 0.23,
                      haskell-gi-overloading < 1.1,
                      gi-gstbase == 1.0.*,
                      gi-gst == 1.0.*,
@@ -42,3 +42,40 @@
       -- see https://ghc.haskell.org/trac/ghc/ticket/14382
       if impl(ghc == 8.2.*)
               build-depends: haskell-gi-overloading == 0.0
+
+      exposed-modules: GI.GstAudio,
+                       GI.GstAudio.Callbacks,
+                       GI.GstAudio.Constants,
+                       GI.GstAudio.Enums,
+                       GI.GstAudio.Flags,
+                       GI.GstAudio.Functions,
+                       GI.GstAudio.Interfaces,
+                       GI.GstAudio.Interfaces.StreamVolume,
+                       GI.GstAudio.Objects,
+                       GI.GstAudio.Objects.AudioAggregator,
+                       GI.GstAudio.Objects.AudioAggregatorConvertPad,
+                       GI.GstAudio.Objects.AudioAggregatorPad,
+                       GI.GstAudio.Objects.AudioBaseSink,
+                       GI.GstAudio.Objects.AudioBaseSrc,
+                       GI.GstAudio.Objects.AudioCdSrc,
+                       GI.GstAudio.Objects.AudioClock,
+                       GI.GstAudio.Objects.AudioDecoder,
+                       GI.GstAudio.Objects.AudioEncoder,
+                       GI.GstAudio.Objects.AudioFilter,
+                       GI.GstAudio.Objects.AudioRingBuffer,
+                       GI.GstAudio.Objects.AudioSink,
+                       GI.GstAudio.Objects.AudioSrc,
+                       GI.GstAudio.Structs,
+                       GI.GstAudio.Structs.AudioBuffer,
+                       GI.GstAudio.Structs.AudioCdSrcTrack,
+                       GI.GstAudio.Structs.AudioChannelMixer,
+                       GI.GstAudio.Structs.AudioClippingMeta,
+                       GI.GstAudio.Structs.AudioConverter,
+                       GI.GstAudio.Structs.AudioDownmixMeta,
+                       GI.GstAudio.Structs.AudioFormatInfo,
+                       GI.GstAudio.Structs.AudioInfo,
+                       GI.GstAudio.Structs.AudioMeta,
+                       GI.GstAudio.Structs.AudioQuantize,
+                       GI.GstAudio.Structs.AudioResampler,
+                       GI.GstAudio.Structs.AudioRingBufferSpec,
+                       GI.GstAudio.Structs.AudioStreamAlign
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,3 +1,3 @@
 packages:
 - '.'
-resolver: lts-9.21
+resolver: lts-13.7
