diff --git a/GI/GstAudio.hs b/GI/GstAudio.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio.hs
@@ -0,0 +1,46 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+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 Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+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,270 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Callbacks
+    ( 
+
+ -- * Signals
+-- ** AudioBaseSinkCustomSlavingCallback
+    AudioBaseSinkCustomSlavingCallback      ,
+    AudioBaseSinkCustomSlavingCallbackC     ,
+    audioBaseSinkCustomSlavingCallbackClosure,
+    audioBaseSinkCustomSlavingCallbackWrapper,
+    mkAudioBaseSinkCustomSlavingCallback    ,
+    noAudioBaseSinkCustomSlavingCallback    ,
+
+
+-- ** AudioClockGetTimeFunc
+    AudioClockGetTimeFunc                   ,
+    AudioClockGetTimeFuncC                  ,
+    audioClockGetTimeFuncClosure            ,
+    audioClockGetTimeFuncWrapper            ,
+    mkAudioClockGetTimeFunc                 ,
+    noAudioClockGetTimeFunc                 ,
+
+
+-- ** AudioFormatPack
+    AudioFormatPack                         ,
+    AudioFormatPackC                        ,
+    audioFormatPackClosure                  ,
+    audioFormatPackWrapper                  ,
+    mkAudioFormatPack                       ,
+    noAudioFormatPack                       ,
+
+
+-- ** AudioFormatUnpack
+    AudioFormatUnpack                       ,
+    AudioFormatUnpackC                      ,
+    audioFormatUnpackClosure                ,
+    audioFormatUnpackWrapper                ,
+    mkAudioFormatUnpack                     ,
+    noAudioFormatUnpack                     ,
+
+
+-- ** AudioRingBufferCallback
+    AudioRingBufferCallback                 ,
+    AudioRingBufferCallbackC                ,
+    audioRingBufferCallbackClosure          ,
+    audioRingBufferCallbackWrapper          ,
+    mkAudioRingBufferCallback               ,
+    noAudioRingBufferCallback               ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+
+import qualified GI.Gst as Gst
+
+-- callback AudioRingBufferCallback
+audioRingBufferCallbackClosure :: AudioRingBufferCallback -> IO Closure
+audioRingBufferCallbackClosure cb = newCClosure =<< mkAudioRingBufferCallback wrapped
+    where wrapped = audioRingBufferCallbackWrapper Nothing cb
+
+type AudioRingBufferCallbackC =
+    Ptr AudioRingBuffer ->
+    Ptr Word8 ->
+    Word32 ->
+    Ptr () ->
+    IO ()
+
+foreign import ccall "wrapper"
+    mkAudioRingBufferCallback :: AudioRingBufferCallbackC -> IO (FunPtr AudioRingBufferCallbackC)
+
+type AudioRingBufferCallback =
+    AudioRingBuffer ->
+    ByteString ->
+    IO ()
+
+noAudioRingBufferCallback :: Maybe AudioRingBufferCallback
+noAudioRingBufferCallback = Nothing
+
+audioRingBufferCallbackWrapper ::
+    Maybe (Ptr (FunPtr (AudioRingBufferCallbackC))) ->
+    AudioRingBufferCallback ->
+    Ptr AudioRingBuffer ->
+    Ptr Word8 ->
+    Word32 ->
+    Ptr () ->
+    IO ()
+audioRingBufferCallbackWrapper funptrptr _cb rbuf data_ len _ = do
+    rbuf' <- (newObject AudioRingBuffer) rbuf
+    data_' <- (unpackByteStringWithLength len) data_
+    _cb  rbuf' data_'
+    maybeReleaseFunPtr funptrptr
+
+-- callback AudioFormatUnpack
+audioFormatUnpackClosure :: AudioFormatUnpack -> IO Closure
+audioFormatUnpackClosure cb = newCClosure =<< mkAudioFormatUnpack wrapped
+    where wrapped = audioFormatUnpackWrapper Nothing cb
+
+type AudioFormatUnpackC =
+    Ptr AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+foreign import ccall "wrapper"
+    mkAudioFormatUnpack :: AudioFormatUnpackC -> IO (FunPtr AudioFormatUnpackC)
+
+type AudioFormatUnpack =
+    AudioFormatInfo ->
+    AudioPackFlags ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+noAudioFormatUnpack :: Maybe AudioFormatUnpack
+noAudioFormatUnpack = Nothing
+
+audioFormatUnpackWrapper ::
+    Maybe (Ptr (FunPtr (AudioFormatUnpackC))) ->
+    AudioFormatUnpack ->
+    Ptr AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+audioFormatUnpackWrapper funptrptr _cb info flags dest data_ length_ = do
+    info' <- (newPtr 104 AudioFormatInfo) info
+    let flags' = (toEnum . fromIntegral) flags
+    _cb  info' flags' dest data_ length_
+    maybeReleaseFunPtr funptrptr
+
+-- callback AudioFormatPack
+audioFormatPackClosure :: AudioFormatPack -> IO Closure
+audioFormatPackClosure cb = newCClosure =<< mkAudioFormatPack wrapped
+    where wrapped = audioFormatPackWrapper Nothing cb
+
+type AudioFormatPackC =
+    Ptr AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+foreign import ccall "wrapper"
+    mkAudioFormatPack :: AudioFormatPackC -> IO (FunPtr AudioFormatPackC)
+
+type AudioFormatPack =
+    AudioFormatInfo ->
+    AudioPackFlags ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+
+noAudioFormatPack :: Maybe AudioFormatPack
+noAudioFormatPack = Nothing
+
+audioFormatPackWrapper ::
+    Maybe (Ptr (FunPtr (AudioFormatPackC))) ->
+    AudioFormatPack ->
+    Ptr AudioFormatInfo ->
+    CUInt ->
+    Ptr Word8 ->
+    Ptr Word8 ->
+    Int32 ->
+    IO ()
+audioFormatPackWrapper funptrptr _cb info flags src data_ length_ = do
+    info' <- (newPtr 104 AudioFormatInfo) info
+    let flags' = (toEnum . fromIntegral) flags
+    _cb  info' flags' src data_ length_
+    maybeReleaseFunPtr funptrptr
+
+-- callback AudioClockGetTimeFunc
+audioClockGetTimeFuncClosure :: AudioClockGetTimeFunc -> IO Closure
+audioClockGetTimeFuncClosure cb = newCClosure =<< mkAudioClockGetTimeFunc wrapped
+    where wrapped = audioClockGetTimeFuncWrapper Nothing cb
+
+type AudioClockGetTimeFuncC =
+    Ptr Gst.Clock ->
+    Ptr () ->
+    IO Word64
+
+foreign import ccall "wrapper"
+    mkAudioClockGetTimeFunc :: AudioClockGetTimeFuncC -> IO (FunPtr AudioClockGetTimeFuncC)
+
+type AudioClockGetTimeFunc =
+    Gst.Clock ->
+    IO Word64
+
+noAudioClockGetTimeFunc :: Maybe AudioClockGetTimeFunc
+noAudioClockGetTimeFunc = Nothing
+
+audioClockGetTimeFuncWrapper ::
+    Maybe (Ptr (FunPtr (AudioClockGetTimeFuncC))) ->
+    AudioClockGetTimeFunc ->
+    Ptr Gst.Clock ->
+    Ptr () ->
+    IO Word64
+audioClockGetTimeFuncWrapper funptrptr _cb clock _ = do
+    clock' <- (newObject Gst.Clock) clock
+    result <- _cb  clock'
+    maybeReleaseFunPtr funptrptr
+    return result
+
+-- callback AudioBaseSinkCustomSlavingCallback
+audioBaseSinkCustomSlavingCallbackClosure :: AudioBaseSinkCustomSlavingCallback -> IO Closure
+audioBaseSinkCustomSlavingCallbackClosure cb = newCClosure =<< mkAudioBaseSinkCustomSlavingCallback wrapped
+    where wrapped = audioBaseSinkCustomSlavingCallbackWrapper Nothing cb
+
+type AudioBaseSinkCustomSlavingCallbackC =
+    Ptr AudioBaseSink ->
+    Word64 ->
+    Word64 ->
+    Int64 ->
+    CUInt ->
+    Ptr () ->
+    IO ()
+
+foreign import ccall "wrapper"
+    mkAudioBaseSinkCustomSlavingCallback :: AudioBaseSinkCustomSlavingCallbackC -> IO (FunPtr AudioBaseSinkCustomSlavingCallbackC)
+
+type AudioBaseSinkCustomSlavingCallback =
+    AudioBaseSink ->
+    Word64 ->
+    Word64 ->
+    Int64 ->
+    AudioBaseSinkDiscontReason ->
+    IO ()
+
+noAudioBaseSinkCustomSlavingCallback :: Maybe AudioBaseSinkCustomSlavingCallback
+noAudioBaseSinkCustomSlavingCallback = Nothing
+
+audioBaseSinkCustomSlavingCallbackWrapper ::
+    Maybe (Ptr (FunPtr (AudioBaseSinkCustomSlavingCallbackC))) ->
+    AudioBaseSinkCustomSlavingCallback ->
+    Ptr AudioBaseSink ->
+    Word64 ->
+    Word64 ->
+    Int64 ->
+    CUInt ->
+    Ptr () ->
+    IO ()
+audioBaseSinkCustomSlavingCallbackWrapper funptrptr _cb sink etime itime requestedSkew discontReason _ = do
+    sink' <- (newObject AudioBaseSink) sink
+    let discontReason' = (toEnum . fromIntegral) discontReason
+    _cb  sink' etime itime requestedSkew discontReason'
+    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,77 @@
+{-# 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 (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Constants
+    ( 
+    pattern META_TAG_AUDIO_STR              ,
+    pattern META_TAG_AUDIO_CHANNELS_STR     ,
+    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_CHANNELS_RANGE            ,
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+
+pattern META_TAG_AUDIO_STR = "audio" :: T.Text
+
+
+pattern META_TAG_AUDIO_CHANNELS_STR = "channels" :: T.Text
+
+
+pattern AUDIO_RATE_RANGE = "(int) [ 1, max ]" :: T.Text
+
+
+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
+
+
+pattern AUDIO_ENCODER_SRC_NAME = "src" :: T.Text
+
+
+pattern AUDIO_ENCODER_SINK_NAME = "sink" :: T.Text
+
+
+pattern AUDIO_DEF_RATE = 44100 :: Int32
+
+
+pattern AUDIO_DEF_FORMAT = "S16LE" :: T.Text
+
+
+pattern AUDIO_DEF_CHANNELS = 2 :: Int32
+
+
+pattern AUDIO_DECODER_SRC_NAME = "src" :: T.Text
+
+
+pattern AUDIO_DECODER_SINK_NAME = "sink" :: T.Text
+
+
+pattern AUDIO_DECODER_MAX_ERRORS = 10 :: Int32
+
+
+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,544 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Enums
+    ( 
+
+-- * Exported types
+    StreamVolumeFormat(..)                  ,
+    AudioRingBufferState(..)                ,
+    AudioRingBufferFormatType(..)           ,
+    AudioPackFlags(..)                      ,
+    AudioLayout(..)                         ,
+    AudioFormat(..)                         ,
+    AudioChannelPosition(..)                ,
+    AudioCdSrcMode(..)                      ,
+    AudioBaseSrcSlaveMethod(..)             ,
+    AudioBaseSinkSlaveMethod(..)            ,
+    AudioBaseSinkDiscontReason(..)          ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+
+
+
+-- Enum StreamVolumeFormat
+
+data StreamVolumeFormat = 
+      StreamVolumeFormatLinear
+    | StreamVolumeFormatCubic
+    | StreamVolumeFormatDb
+    | AnotherStreamVolumeFormat Int
+    deriving (Show, Eq)
+
+instance 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
+
+-- Enum AudioRingBufferState
+
+data AudioRingBufferState = 
+      AudioRingBufferStateStopped
+    | AudioRingBufferStatePaused
+    | AudioRingBufferStateStarted
+    | AudioRingBufferStateError
+    | AnotherAudioRingBufferState Int
+    deriving (Show, Eq)
+
+instance 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
+
+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
+
+data AudioRingBufferFormatType = 
+      AudioRingBufferFormatTypeRaw
+    | AudioRingBufferFormatTypeMuLaw
+    | AudioRingBufferFormatTypeALaw
+    | AudioRingBufferFormatTypeImaAdpcm
+    | AudioRingBufferFormatTypeMpeg
+    | AudioRingBufferFormatTypeGsm
+    | AudioRingBufferFormatTypeIec958
+    | AudioRingBufferFormatTypeAc3
+    | AudioRingBufferFormatTypeEac3
+    | AudioRingBufferFormatTypeDts
+    | AudioRingBufferFormatTypeMpeg2Aac
+    | AudioRingBufferFormatTypeMpeg4Aac
+    | AnotherAudioRingBufferFormatType Int
+    deriving (Show, Eq)
+
+instance 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 (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 k = AnotherAudioRingBufferFormatType k
+
+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 AudioPackFlags
+
+data AudioPackFlags = 
+      AudioPackFlagsNone
+    | AnotherAudioPackFlags Int
+    deriving (Show, Eq)
+
+instance Enum AudioPackFlags where
+    fromEnum AudioPackFlagsNone = 0
+    fromEnum (AnotherAudioPackFlags k) = k
+
+    toEnum 0 = AudioPackFlagsNone
+    toEnum k = AnotherAudioPackFlags k
+
+foreign import ccall "gst_audio_pack_flags_get_type" c_gst_audio_pack_flags_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioPackFlags where
+    boxedEnumType _ = c_gst_audio_pack_flags_get_type
+
+-- Enum AudioLayout
+
+data AudioLayout = 
+      AudioLayoutInterleaved
+    | AudioLayoutNonInterleaved
+    | AnotherAudioLayout Int
+    deriving (Show, Eq)
+
+instance Enum AudioLayout where
+    fromEnum AudioLayoutInterleaved = 0
+    fromEnum AudioLayoutNonInterleaved = 1
+    fromEnum (AnotherAudioLayout k) = k
+
+    toEnum 0 = AudioLayoutInterleaved
+    toEnum 1 = AudioLayoutNonInterleaved
+    toEnum k = AnotherAudioLayout k
+
+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
+
+data AudioFormat = 
+      AudioFormatUnknown
+    | AudioFormatEncoded
+    | AudioFormatS8
+    | AudioFormatU8
+    | AudioFormatS16le
+    | AudioFormatS16be
+    | AudioFormatU16le
+    | AudioFormatU16be
+    | AudioFormatS2432le
+    | AudioFormatS2432be
+    | AudioFormatU2432le
+    | AudioFormatU2432be
+    | AudioFormatS32le
+    | AudioFormatS32be
+    | AudioFormatU32le
+    | AudioFormatU32be
+    | AudioFormatS24le
+    | AudioFormatS24be
+    | AudioFormatU24le
+    | AudioFormatU24be
+    | AudioFormatS20le
+    | AudioFormatS20be
+    | AudioFormatU20le
+    | AudioFormatU20be
+    | AudioFormatS18le
+    | AudioFormatS18be
+    | AudioFormatU18le
+    | AudioFormatU18be
+    | AudioFormatF32le
+    | AudioFormatF32be
+    | AudioFormatF64le
+    | AudioFormatF64be
+    | AudioFormatS16
+    | AudioFormatU16
+    | AudioFormatS2432
+    | AudioFormatU2432
+    | AudioFormatS32
+    | AudioFormatU32
+    | AudioFormatS24
+    | AudioFormatU24
+    | AudioFormatS20
+    | AudioFormatU20
+    | AudioFormatS18
+    | AudioFormatU18
+    | AudioFormatF32
+    | AudioFormatF64
+    | AnotherAudioFormat Int
+    deriving (Show, Eq)
+
+instance 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 k = AnotherAudioFormat k
+
+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 AudioChannelPosition
+
+data AudioChannelPosition = 
+      AudioChannelPositionNone
+    | AudioChannelPositionMono
+    | AudioChannelPositionInvalid
+    | AudioChannelPositionFrontLeft
+    | AudioChannelPositionFrontRight
+    | AudioChannelPositionFrontCenter
+    | AudioChannelPositionLfe1
+    | AudioChannelPositionRearLeft
+    | AudioChannelPositionRearRight
+    | AudioChannelPositionFrontLeftOfCenter
+    | AudioChannelPositionFrontRightOfCenter
+    | AudioChannelPositionRearCenter
+    | AudioChannelPositionLfe2
+    | AudioChannelPositionSideLeft
+    | AudioChannelPositionSideRight
+    | AudioChannelPositionTopFrontLeft
+    | AudioChannelPositionTopFrontRight
+    | AudioChannelPositionTopFrontCenter
+    | AudioChannelPositionTopCenter
+    | AudioChannelPositionTopRearLeft
+    | AudioChannelPositionTopRearRight
+    | AudioChannelPositionTopSideLeft
+    | AudioChannelPositionTopSideRight
+    | AudioChannelPositionTopRearCenter
+    | AudioChannelPositionBottomFrontCenter
+    | AudioChannelPositionBottomFrontLeft
+    | AudioChannelPositionBottomFrontRight
+    | AudioChannelPositionWideLeft
+    | AudioChannelPositionWideRight
+    | AudioChannelPositionSurroundLeft
+    | AudioChannelPositionSurroundRight
+    | AnotherAudioChannelPosition Int
+    deriving (Show, Eq)
+
+instance 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
+
+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
+
+data AudioCdSrcMode = 
+      AudioCdSrcModeNormal
+    | AudioCdSrcModeContinuous
+    | AnotherAudioCdSrcMode Int
+    deriving (Show, Eq)
+
+instance Enum AudioCdSrcMode where
+    fromEnum AudioCdSrcModeNormal = 0
+    fromEnum AudioCdSrcModeContinuous = 1
+    fromEnum (AnotherAudioCdSrcMode k) = k
+
+    toEnum 0 = AudioCdSrcModeNormal
+    toEnum 1 = AudioCdSrcModeContinuous
+    toEnum k = AnotherAudioCdSrcMode k
+
+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
+
+data AudioBaseSrcSlaveMethod = 
+      AudioBaseSrcSlaveMethodResample
+    | AudioBaseSrcSlaveMethodReTimestamp
+    | AudioBaseSrcSlaveMethodSkew
+    | AudioBaseSrcSlaveMethodNone
+    | AnotherAudioBaseSrcSlaveMethod Int
+    deriving (Show, Eq)
+
+instance 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
+
+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
+
+data AudioBaseSinkSlaveMethod = 
+      AudioBaseSinkSlaveMethodResample
+    | AudioBaseSinkSlaveMethodSkew
+    | AudioBaseSinkSlaveMethodNone
+    | AudioBaseSinkSlaveMethodCustom
+    | AnotherAudioBaseSinkSlaveMethod Int
+    deriving (Show, Eq)
+
+instance 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
+
+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
+
+data AudioBaseSinkDiscontReason = 
+      AudioBaseSinkDiscontReasonNoDiscont
+    | AudioBaseSinkDiscontReasonNewCaps
+    | AudioBaseSinkDiscontReasonFlush
+    | AudioBaseSinkDiscontReasonSyncLatency
+    | AudioBaseSinkDiscontReasonAlignment
+    | AudioBaseSinkDiscontReasonDeviceFailure
+    | AnotherAudioBaseSinkDiscontReason Int
+    deriving (Show, Eq)
+
+instance 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
+
+
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,88 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Flags
+    ( 
+
+-- * Exported types
+    AudioFormatFlags(..)                    ,
+    AudioFlags(..)                          ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+
+
+
+-- Flags AudioFormatFlags
+
+data AudioFormatFlags = 
+      AudioFormatFlagsInteger
+    | AudioFormatFlagsFloat
+    | AudioFormatFlagsSigned
+    | AudioFormatFlagsComplex
+    | AudioFormatFlagsUnpack
+    | AnotherAudioFormatFlags Int
+    deriving (Show, Eq)
+
+instance 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
+
+foreign import ccall "gst_audio_format_flags_get_type" c_gst_audio_format_flags_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioFormatFlags where
+    boxedEnumType _ = c_gst_audio_format_flags_get_type
+
+instance IsGFlag AudioFormatFlags
+
+-- Flags AudioFlags
+
+data AudioFlags = 
+      AudioFlagsNone
+    | AudioFlagsUnpositioned
+    | AnotherAudioFlags Int
+    deriving (Show, Eq)
+
+instance Enum AudioFlags where
+    fromEnum AudioFlagsNone = 0
+    fromEnum AudioFlagsUnpositioned = 1
+    fromEnum (AnotherAudioFlags k) = k
+
+    toEnum 0 = AudioFlagsNone
+    toEnum 1 = AudioFlagsUnpositioned
+    toEnum k = AnotherAudioFlags k
+
+foreign import ccall "gst_audio_flags_get_type" c_gst_audio_flags_get_type :: 
+    IO GType
+
+instance BoxedEnum AudioFlags where
+    boxedEnumType _ = c_gst_audio_flags_get_type
+
+instance IsGFlag AudioFlags
+
+
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,506 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Functions
+    ( 
+
+ -- * Methods
+-- ** audioBufferClip
+    audioBufferClip                         ,
+
+
+-- ** audioBufferReorderChannels
+    audioBufferReorderChannels              ,
+
+
+-- ** audioChannelPositionsFromMask
+    audioChannelPositionsFromMask           ,
+
+
+-- ** audioChannelPositionsToMask
+    audioChannelPositionsToMask             ,
+
+
+-- ** audioChannelPositionsToValidOrder
+    audioChannelPositionsToValidOrder       ,
+
+
+-- ** audioCheckValidChannelPositions
+    audioCheckValidChannelPositions         ,
+
+
+-- ** audioDownmixMetaApiGetType
+    audioDownmixMetaApiGetType              ,
+
+
+-- ** audioFormatInfoGetType
+    audioFormatInfoGetType                  ,
+
+
+-- ** audioGetChannelReorderMap
+    audioGetChannelReorderMap               ,
+
+
+-- ** audioIec61937FrameSize
+    audioIec61937FrameSize                  ,
+
+
+-- ** audioIec61937Payload
+    audioIec61937Payload                    ,
+
+
+-- ** audioReorderChannels
+    audioReorderChannels                    ,
+
+
+-- ** bufferAddAudioDownmixMeta
+    bufferAddAudioDownmixMeta               ,
+
+
+-- ** bufferGetAudioDownmixMetaForChannels
+    bufferGetAudioDownmixMetaForChannels    ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.Gst as Gst
+
+-- function gst_buffer_get_audio_downmix_meta_for_channels
+-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : TInterface "GstAudio" "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 : TInterface "Gst" "Buffer"
+    Ptr CUInt ->                            -- to_position : TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- to_channels : TBasicType TInt32
+    IO (Ptr AudioDownmixMeta)
+
+
+bufferGetAudioDownmixMetaForChannels ::
+    (MonadIO m) =>
+    Gst.Buffer                              -- buffer
+    -> [AudioChannelPosition]               -- toPosition
+    -> m AudioDownmixMeta                   -- result
+bufferGetAudioDownmixMetaForChannels buffer toPosition = liftIO $ do
+    let toChannels = fromIntegral $ length toPosition
+    let 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 "gst_buffer_get_audio_downmix_meta_for_channels" result
+    result' <- (newPtr 48 AudioDownmixMeta) result
+    touchManagedPtr buffer
+    freeMem toPosition''
+    return result'
+
+
+-- function gst_buffer_add_audio_downmix_meta
+-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_position", argType = TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 4 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "matrix", argType = TBasicType TFloat, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : TInterface "GstAudio" "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 : TInterface "Gst" "Buffer"
+    Ptr CUInt ->                            -- from_position : TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- from_channels : TBasicType TInt32
+    Ptr CUInt ->                            -- to_position : TCArray False (-1) 4 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- to_channels : TBasicType TInt32
+    CFloat ->                               -- matrix : TBasicType TFloat
+    IO (Ptr AudioDownmixMeta)
+
+
+bufferAddAudioDownmixMeta ::
+    (MonadIO m) =>
+    Gst.Buffer                              -- buffer
+    -> [AudioChannelPosition]               -- fromPosition
+    -> [AudioChannelPosition]               -- toPosition
+    -> Float                                -- matrix
+    -> m AudioDownmixMeta                   -- result
+bufferAddAudioDownmixMeta buffer fromPosition toPosition matrix = liftIO $ do
+    let toChannels = fromIntegral $ length toPosition
+    let fromChannels = fromIntegral $ length fromPosition
+    let 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 "gst_buffer_add_audio_downmix_meta" result
+    result' <- (newPtr 48 AudioDownmixMeta) result
+    touchManagedPtr buffer
+    freeMem fromPosition''
+    freeMem toPosition''
+    return result'
+
+
+-- function gst_audio_reorder_channels
+-- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "AudioFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : 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 "GstAudio" "AudioFormat"
+    Int32 ->                                -- channels : TBasicType TInt32
+    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    IO CInt
+
+
+audioReorderChannels ::
+    (MonadIO m) =>
+    ByteString                              -- data_
+    -> AudioFormat                          -- format
+    -> Int32                                -- channels
+    -> Ptr CUInt                            -- from
+    -> Ptr CUInt                            -- to
+    -> m Bool                               -- result
+audioReorderChannels data_ format channels from to = liftIO $ do
+    let size = fromIntegral $ B.length data_
+    data_' <- packByteString data_
+    let format' = (fromIntegral . fromEnum) format
+    result <- gst_audio_reorder_channels data_' size format' channels from to
+    let result' = (/= 0) result
+    freeMem data_'
+    return result'
+
+
+-- function gst_audio_iec61937_payload
+-- Args : [Arg {argCName = "src", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "endianness", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "dst_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : 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 TUInt32
+    Ptr Word8 ->                            -- dst : TCArray False (-1) 3 (TBasicType TUInt8)
+    Word32 ->                               -- dst_n : TBasicType TUInt32
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    Int32 ->                                -- endianness : TBasicType TInt32
+    IO CInt
+
+
+audioIec61937Payload ::
+    (MonadIO m) =>
+    ByteString                              -- src
+    -> ByteString                           -- dst
+    -> AudioRingBufferSpec                  -- spec
+    -> Int32                                -- endianness
+    -> m Bool                               -- result
+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
+    let 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 "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_iec61937_frame_size" gst_audio_iec61937_frame_size :: 
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    IO Word32
+
+
+audioIec61937FrameSize ::
+    (MonadIO m) =>
+    AudioRingBufferSpec                     -- spec
+    -> m Word32                             -- result
+audioIec61937FrameSize spec = liftIO $ do
+    let 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 TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "reorder_map", argType = TCArray False (-1) (-1) (TBasicType TInt32), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 TInt32
+    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    Ptr Int32 ->                            -- reorder_map : TCArray False (-1) (-1) (TBasicType TInt32)
+    IO CInt
+
+
+audioGetChannelReorderMap ::
+    (MonadIO m) =>
+    Int32                                   -- channels
+    -> Ptr CUInt                            -- from
+    -> Ptr CUInt                            -- to
+    -> Ptr Int32                            -- reorderMap
+    -> m Bool                               -- result
+audioGetChannelReorderMap channels from to reorderMap = liftIO $ do
+    result <- gst_audio_get_channel_reorder_map channels from to reorderMap
+    let result' = (/= 0) result
+    return result'
+
+
+-- function gst_audio_format_info_get_type
+-- Args : []
+-- Lengths : []
+-- returnType : TBasicType TGType
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_format_info_get_type" gst_audio_format_info_get_type :: 
+    IO CGType
+
+
+audioFormatInfoGetType ::
+    (MonadIO m) =>
+    m GType                                 -- result
+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 : 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
+
+
+audioDownmixMetaApiGetType ::
+    (MonadIO m) =>
+    m GType                                 -- result
+audioDownmixMetaApiGetType  = liftIO $ do
+    result <- gst_audio_downmix_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 "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_check_valid_channel_positions" gst_audio_check_valid_channel_positions :: 
+    Ptr CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- channels : TBasicType TInt32
+    CInt ->                                 -- force_order : TBasicType TBoolean
+    IO CInt
+
+
+audioCheckValidChannelPositions ::
+    (MonadIO m) =>
+    [AudioChannelPosition]                  -- position
+    -> Bool                                 -- forceOrder
+    -> m Bool                               -- result
+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 "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : 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 CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- channels : TBasicType TInt32
+    IO CInt
+
+
+audioChannelPositionsToValidOrder ::
+    (MonadIO m) =>
+    [AudioChannelPosition]                  -- position
+    -> m Bool                               -- result
+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_mask
+-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TCArray False (-1) (-1) (TBasicType TUInt64), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_channel_positions_to_mask" gst_audio_channel_positions_to_mask :: 
+    Ptr CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
+    Int32 ->                                -- channels : TBasicType TInt32
+    CInt ->                                 -- force_order : TBasicType TBoolean
+    Ptr Word64 ->                           -- channel_mask : TCArray False (-1) (-1) (TBasicType TUInt64)
+    IO CInt
+
+
+audioChannelPositionsToMask ::
+    (MonadIO m) =>
+    [AudioChannelPosition]                  -- position
+    -> Bool                                 -- forceOrder
+    -> Ptr Word64                           -- channelMask
+    -> m Bool                               -- result
+audioChannelPositionsToMask position forceOrder channelMask = liftIO $ do
+    let channels = fromIntegral $ length position
+    let position' = map (fromIntegral . fromEnum) position
+    position'' <- packStorableArray position'
+    let forceOrder' = (fromIntegral . fromEnum) forceOrder
+    result <- gst_audio_channel_positions_to_mask position'' channels forceOrder' channelMask
+    let result' = (/= 0) result
+    freeMem position''
+    return result'
+
+
+-- function gst_audio_channel_positions_from_mask
+-- Args : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False (-1) 0 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- returnType : 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 TInt32
+    Word64 ->                               -- channel_mask : TBasicType TUInt64
+    Ptr CUInt ->                            -- position : TCArray False (-1) 0 (TInterface "GstAudio" "AudioChannelPosition")
+    IO CInt
+
+
+audioChannelPositionsFromMask ::
+    (MonadIO m) =>
+    Word64                                  -- channelMask
+    -> [AudioChannelPosition]               -- position
+    -> m Bool                               -- result
+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_buffer_reorder_channels
+-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "AudioFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_buffer_reorder_channels" gst_audio_buffer_reorder_channels :: 
+    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
+    CUInt ->                                -- format : TInterface "GstAudio" "AudioFormat"
+    Int32 ->                                -- channels : TBasicType TInt32
+    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
+    IO CInt
+
+
+audioBufferReorderChannels ::
+    (MonadIO m) =>
+    Gst.Buffer                              -- buffer
+    -> AudioFormat                          -- format
+    -> Int32                                -- channels
+    -> Ptr CUInt                            -- from
+    -> Ptr CUInt                            -- to
+    -> m Bool                               -- result
+audioBufferReorderChannels buffer format channels from to = liftIO $ do
+    let buffer' = unsafeManagedPtrGetPtr buffer
+    let format' = (fromIntegral . fromEnum) format
+    result <- gst_audio_buffer_reorder_channels buffer' format' channels from to
+    let result' = (/= 0) result
+    touchManagedPtr buffer
+    return result'
+
+
+-- function gst_audio_buffer_clip
+-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "segment", argType = TInterface "Gst" "Segment", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "bpf", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Buffer"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_buffer_clip" gst_audio_buffer_clip :: 
+    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
+    Ptr Gst.Segment ->                      -- segment : TInterface "Gst" "Segment"
+    Int32 ->                                -- rate : TBasicType TInt32
+    Int32 ->                                -- bpf : TBasicType TInt32
+    IO (Ptr Gst.Buffer)
+
+
+audioBufferClip ::
+    (MonadIO m) =>
+    Gst.Buffer                              -- buffer
+    -> Gst.Segment                          -- segment
+    -> Int32                                -- rate
+    -> Int32                                -- bpf
+    -> m Gst.Buffer                         -- result
+audioBufferClip buffer segment rate bpf = liftIO $ do
+    buffer' <- copyBoxed buffer
+    let segment' = unsafeManagedPtrGetPtr segment
+    result <- gst_audio_buffer_clip buffer' segment' rate bpf
+    checkUnexpectedReturnNULL "gst_audio_buffer_clip" result
+    result' <- (wrapBoxed Gst.Buffer) result
+    touchManagedPtr buffer
+    touchManagedPtr segment
+    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,27 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Interfaces
+    (     module GI.GstAudio.Interfaces.StreamVolume,
+
+
+    ) where
+
+import GI.GstAudio.Interfaces.StreamVolume
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+
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,341 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Interfaces.StreamVolume
+    ( 
+
+-- * Exported types
+    StreamVolume(..)                        ,
+    noStreamVolume                          ,
+    StreamVolumeK                           ,
+    toStreamVolume                          ,
+
+
+ -- * Methods
+-- ** streamVolumeConvertVolume
+    streamVolumeConvertVolume               ,
+
+
+-- ** streamVolumeGetMute
+    StreamVolumeGetMuteMethodInfo           ,
+    streamVolumeGetMute                     ,
+
+
+-- ** streamVolumeGetVolume
+    StreamVolumeGetVolumeMethodInfo         ,
+    streamVolumeGetVolume                   ,
+
+
+-- ** streamVolumeSetMute
+    StreamVolumeSetMuteMethodInfo           ,
+    streamVolumeSetMute                     ,
+
+
+-- ** streamVolumeSetVolume
+    StreamVolumeSetVolumeMethodInfo         ,
+    streamVolumeSetVolume                   ,
+
+
+
+
+ -- * Properties
+-- ** Mute
+    StreamVolumeMutePropertyInfo            ,
+    constructStreamVolumeMute               ,
+    getStreamVolumeMute                     ,
+    setStreamVolumeMute                     ,
+
+
+-- ** Volume
+    StreamVolumeVolumePropertyInfo          ,
+    constructStreamVolumeVolume             ,
+    getStreamVolumeVolume                   ,
+    setStreamVolumeVolume                   ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+
+-- interface StreamVolume 
+
+newtype StreamVolume = StreamVolume (ForeignPtr StreamVolume)
+noStreamVolume :: Maybe StreamVolume
+noStreamVolume = Nothing
+
+type family ResolveStreamVolumeMethod (t :: Symbol) (o :: *) :: * where
+    ResolveStreamVolumeMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveStreamVolumeMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveStreamVolumeMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveStreamVolumeMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveStreamVolumeMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveStreamVolumeMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveStreamVolumeMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveStreamVolumeMethod "ref" o = GObject.ObjectRefMethodInfo
+    ResolveStreamVolumeMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveStreamVolumeMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveStreamVolumeMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveStreamVolumeMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveStreamVolumeMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveStreamVolumeMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveStreamVolumeMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveStreamVolumeMethod "unref" o = GObject.ObjectUnrefMethodInfo
+    ResolveStreamVolumeMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveStreamVolumeMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveStreamVolumeMethod "getMute" o = StreamVolumeGetMuteMethodInfo
+    ResolveStreamVolumeMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveStreamVolumeMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveStreamVolumeMethod "getVolume" o = StreamVolumeGetVolumeMethodInfo
+    ResolveStreamVolumeMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveStreamVolumeMethod "setMute" o = StreamVolumeSetMuteMethodInfo
+    ResolveStreamVolumeMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveStreamVolumeMethod "setVolume" o = StreamVolumeSetVolumeMethodInfo
+    ResolveStreamVolumeMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveStreamVolumeMethod t StreamVolume, MethodInfo info StreamVolume p) => IsLabelProxy t (StreamVolume -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveStreamVolumeMethod t StreamVolume, MethodInfo info StreamVolume p) => IsLabel t (StreamVolume -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "mute"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getStreamVolumeMute :: (MonadIO m, StreamVolumeK o) => o -> m Bool
+getStreamVolumeMute obj = liftIO $ getObjectPropertyBool obj "mute"
+
+setStreamVolumeMute :: (MonadIO m, StreamVolumeK o) => o -> Bool -> m ()
+setStreamVolumeMute obj val = liftIO $ setObjectPropertyBool obj "mute" val
+
+constructStreamVolumeMute :: Bool -> IO ([Char], GValue)
+constructStreamVolumeMute val = constructObjectPropertyBool "mute" val
+
+data StreamVolumeMutePropertyInfo
+instance AttrInfo StreamVolumeMutePropertyInfo where
+    type AttrAllowedOps StreamVolumeMutePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint StreamVolumeMutePropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint StreamVolumeMutePropertyInfo = StreamVolumeK
+    type AttrGetType StreamVolumeMutePropertyInfo = Bool
+    type AttrLabel StreamVolumeMutePropertyInfo = "mute"
+    attrGet _ = getStreamVolumeMute
+    attrSet _ = setStreamVolumeMute
+    attrConstruct _ = constructStreamVolumeMute
+
+-- VVV Prop "volume"
+   -- Type: TBasicType TDouble
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getStreamVolumeVolume :: (MonadIO m, StreamVolumeK o) => o -> m Double
+getStreamVolumeVolume obj = liftIO $ getObjectPropertyDouble obj "volume"
+
+setStreamVolumeVolume :: (MonadIO m, StreamVolumeK o) => o -> Double -> m ()
+setStreamVolumeVolume obj val = liftIO $ setObjectPropertyDouble obj "volume" val
+
+constructStreamVolumeVolume :: Double -> IO ([Char], GValue)
+constructStreamVolumeVolume val = constructObjectPropertyDouble "volume" val
+
+data StreamVolumeVolumePropertyInfo
+instance AttrInfo StreamVolumeVolumePropertyInfo where
+    type AttrAllowedOps StreamVolumeVolumePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint StreamVolumeVolumePropertyInfo = (~) Double
+    type AttrBaseTypeConstraint StreamVolumeVolumePropertyInfo = StreamVolumeK
+    type AttrGetType StreamVolumeVolumePropertyInfo = Double
+    type AttrLabel StreamVolumeVolumePropertyInfo = "volume"
+    attrGet _ = getStreamVolumeVolume
+    attrSet _ = setStreamVolumeVolume
+    attrConstruct _ = constructStreamVolumeVolume
+
+type instance AttributeList StreamVolume = StreamVolumeAttributeList
+type StreamVolumeAttributeList = ('[ '("mute", StreamVolumeMutePropertyInfo), '("volume", StreamVolumeVolumePropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList StreamVolume = StreamVolumeSignalList
+type StreamVolumeSignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo)] :: [(Symbol, *)])
+
+foreign import ccall "gst_stream_volume_get_type"
+    c_gst_stream_volume_get_type :: IO GType
+
+type instance ParentTypes StreamVolume = StreamVolumeParentTypes
+type StreamVolumeParentTypes = '[GObject.Object]
+
+instance GObject StreamVolume where
+    gobjectIsInitiallyUnowned _ = False
+    gobjectType _ = c_gst_stream_volume_get_type
+    
+
+class GObject o => StreamVolumeK o
+instance (GObject o, IsDescendantOf StreamVolume o) => StreamVolumeK o
+
+toStreamVolume :: StreamVolumeK o => o -> IO StreamVolume
+toStreamVolume = unsafeCastTo StreamVolume
+
+-- method StreamVolume::get_mute
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "StreamVolume", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_get_mute" gst_stream_volume_get_mute :: 
+    Ptr StreamVolume ->                     -- _obj : TInterface "GstAudio" "StreamVolume"
+    IO CInt
+
+
+streamVolumeGetMute ::
+    (MonadIO m, StreamVolumeK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+streamVolumeGetMute _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_stream_volume_get_mute _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data StreamVolumeGetMuteMethodInfo
+instance (signature ~ (m Bool), MonadIO m, StreamVolumeK a) => MethodInfo StreamVolumeGetMuteMethodInfo a signature where
+    overloadedMethod _ = streamVolumeGetMute
+
+-- method StreamVolume::get_volume
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "StreamVolume", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "StreamVolumeFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TDouble
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_get_volume" gst_stream_volume_get_volume :: 
+    Ptr StreamVolume ->                     -- _obj : TInterface "GstAudio" "StreamVolume"
+    CUInt ->                                -- format : TInterface "GstAudio" "StreamVolumeFormat"
+    IO CDouble
+
+
+streamVolumeGetVolume ::
+    (MonadIO m, StreamVolumeK a) =>
+    a                                       -- _obj
+    -> StreamVolumeFormat                   -- format
+    -> m Double                             -- result
+streamVolumeGetVolume _obj format = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let format' = (fromIntegral . fromEnum) format
+    result <- gst_stream_volume_get_volume _obj' format'
+    let result' = realToFrac result
+    touchManagedPtr _obj
+    return result'
+
+data StreamVolumeGetVolumeMethodInfo
+instance (signature ~ (StreamVolumeFormat -> m Double), MonadIO m, StreamVolumeK a) => MethodInfo StreamVolumeGetVolumeMethodInfo a signature where
+    overloadedMethod _ = streamVolumeGetVolume
+
+-- method StreamVolume::set_mute
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "StreamVolume", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mute", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_set_mute" gst_stream_volume_set_mute :: 
+    Ptr StreamVolume ->                     -- _obj : TInterface "GstAudio" "StreamVolume"
+    CInt ->                                 -- mute : TBasicType TBoolean
+    IO ()
+
+
+streamVolumeSetMute ::
+    (MonadIO m, StreamVolumeK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- mute
+    -> m ()                                 -- result
+streamVolumeSetMute _obj mute = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let mute' = (fromIntegral . fromEnum) mute
+    gst_stream_volume_set_mute _obj' mute'
+    touchManagedPtr _obj
+    return ()
+
+data StreamVolumeSetMuteMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, StreamVolumeK a) => MethodInfo StreamVolumeSetMuteMethodInfo a signature where
+    overloadedMethod _ = streamVolumeSetMute
+
+-- method StreamVolume::set_volume
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "StreamVolume", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "StreamVolumeFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "val", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_set_volume" gst_stream_volume_set_volume :: 
+    Ptr StreamVolume ->                     -- _obj : TInterface "GstAudio" "StreamVolume"
+    CUInt ->                                -- format : TInterface "GstAudio" "StreamVolumeFormat"
+    CDouble ->                              -- val : TBasicType TDouble
+    IO ()
+
+
+streamVolumeSetVolume ::
+    (MonadIO m, StreamVolumeK a) =>
+    a                                       -- _obj
+    -> StreamVolumeFormat                   -- format
+    -> Double                               -- val
+    -> m ()                                 -- result
+streamVolumeSetVolume _obj format val = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let format' = (fromIntegral . fromEnum) format
+    let val' = realToFrac val
+    gst_stream_volume_set_volume _obj' format' val'
+    touchManagedPtr _obj
+    return ()
+
+data StreamVolumeSetVolumeMethodInfo
+instance (signature ~ (StreamVolumeFormat -> Double -> m ()), MonadIO m, StreamVolumeK a) => MethodInfo StreamVolumeSetVolumeMethodInfo a signature where
+    overloadedMethod _ = streamVolumeSetVolume
+
+-- method StreamVolume::convert_volume
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "from", argType = TInterface "GstAudio" "StreamVolumeFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TInterface "GstAudio" "StreamVolumeFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "val", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TDouble
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_stream_volume_convert_volume" gst_stream_volume_convert_volume :: 
+    CUInt ->                                -- from : TInterface "GstAudio" "StreamVolumeFormat"
+    CUInt ->                                -- to : TInterface "GstAudio" "StreamVolumeFormat"
+    CDouble ->                              -- val : TBasicType TDouble
+    IO CDouble
+
+
+streamVolumeConvertVolume ::
+    (MonadIO m) =>
+    StreamVolumeFormat                      -- from
+    -> StreamVolumeFormat                   -- to
+    -> Double                               -- val
+    -> m Double                             -- result
+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'
+
+
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,19 @@
+module GI.GstAudio.Interfaces.StreamVolume where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype StreamVolume = StreamVolume (ForeignPtr StreamVolume)
+data StreamVolumeMutePropertyInfo
+data StreamVolumeVolumePropertyInfo
+instance GObject StreamVolume where
+class GObject o => StreamVolumeK o
+instance (GObject o, IsDescendantOf StreamVolume o) => StreamVolumeK o
+data StreamVolumeGetMuteMethodInfo
+data StreamVolumeGetVolumeMethodInfo
+data StreamVolumeSetMuteMethodInfo
+data StreamVolumeSetVolumeMethodInfo
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,45 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects
+    (     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.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 Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+
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,898 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioBaseSink
+    ( 
+
+-- * Exported types
+    AudioBaseSink(..)                       ,
+    AudioBaseSinkK                          ,
+    toAudioBaseSink                         ,
+    noAudioBaseSink                         ,
+
+
+ -- * Methods
+-- ** audioBaseSinkCreateRingbuffer
+    AudioBaseSinkCreateRingbufferMethodInfo ,
+    audioBaseSinkCreateRingbuffer           ,
+
+
+-- ** audioBaseSinkGetAlignmentThreshold
+    AudioBaseSinkGetAlignmentThresholdMethodInfo,
+    audioBaseSinkGetAlignmentThreshold      ,
+
+
+-- ** audioBaseSinkGetDiscontWait
+    AudioBaseSinkGetDiscontWaitMethodInfo   ,
+    audioBaseSinkGetDiscontWait             ,
+
+
+-- ** audioBaseSinkGetDriftTolerance
+    AudioBaseSinkGetDriftToleranceMethodInfo,
+    audioBaseSinkGetDriftTolerance          ,
+
+
+-- ** audioBaseSinkGetProvideClock
+    AudioBaseSinkGetProvideClockMethodInfo  ,
+    audioBaseSinkGetProvideClock            ,
+
+
+-- ** audioBaseSinkGetSlaveMethod
+    AudioBaseSinkGetSlaveMethodMethodInfo   ,
+    audioBaseSinkGetSlaveMethod             ,
+
+
+-- ** audioBaseSinkReportDeviceFailure
+    AudioBaseSinkReportDeviceFailureMethodInfo,
+    audioBaseSinkReportDeviceFailure        ,
+
+
+-- ** audioBaseSinkSetAlignmentThreshold
+    AudioBaseSinkSetAlignmentThresholdMethodInfo,
+    audioBaseSinkSetAlignmentThreshold      ,
+
+
+-- ** audioBaseSinkSetCustomSlavingCallback
+    AudioBaseSinkSetCustomSlavingCallbackMethodInfo,
+    audioBaseSinkSetCustomSlavingCallback   ,
+
+
+-- ** audioBaseSinkSetDiscontWait
+    AudioBaseSinkSetDiscontWaitMethodInfo   ,
+    audioBaseSinkSetDiscontWait             ,
+
+
+-- ** audioBaseSinkSetDriftTolerance
+    AudioBaseSinkSetDriftToleranceMethodInfo,
+    audioBaseSinkSetDriftTolerance          ,
+
+
+-- ** audioBaseSinkSetProvideClock
+    AudioBaseSinkSetProvideClockMethodInfo  ,
+    audioBaseSinkSetProvideClock            ,
+
+
+-- ** audioBaseSinkSetSlaveMethod
+    AudioBaseSinkSetSlaveMethodMethodInfo   ,
+    audioBaseSinkSetSlaveMethod             ,
+
+
+
+
+ -- * Properties
+-- ** AlignmentThreshold
+    AudioBaseSinkAlignmentThresholdPropertyInfo,
+    constructAudioBaseSinkAlignmentThreshold,
+    getAudioBaseSinkAlignmentThreshold      ,
+    setAudioBaseSinkAlignmentThreshold      ,
+
+
+-- ** BufferTime
+    AudioBaseSinkBufferTimePropertyInfo     ,
+    constructAudioBaseSinkBufferTime        ,
+    getAudioBaseSinkBufferTime              ,
+    setAudioBaseSinkBufferTime              ,
+
+
+-- ** CanActivatePull
+    AudioBaseSinkCanActivatePullPropertyInfo,
+    constructAudioBaseSinkCanActivatePull   ,
+    getAudioBaseSinkCanActivatePull         ,
+    setAudioBaseSinkCanActivatePull         ,
+
+
+-- ** DiscontWait
+    AudioBaseSinkDiscontWaitPropertyInfo    ,
+    constructAudioBaseSinkDiscontWait       ,
+    getAudioBaseSinkDiscontWait             ,
+    setAudioBaseSinkDiscontWait             ,
+
+
+-- ** DriftTolerance
+    AudioBaseSinkDriftTolerancePropertyInfo ,
+    constructAudioBaseSinkDriftTolerance    ,
+    getAudioBaseSinkDriftTolerance          ,
+    setAudioBaseSinkDriftTolerance          ,
+
+
+-- ** LatencyTime
+    AudioBaseSinkLatencyTimePropertyInfo    ,
+    constructAudioBaseSinkLatencyTime       ,
+    getAudioBaseSinkLatencyTime             ,
+    setAudioBaseSinkLatencyTime             ,
+
+
+-- ** ProvideClock
+    AudioBaseSinkProvideClockPropertyInfo   ,
+    constructAudioBaseSinkProvideClock      ,
+    getAudioBaseSinkProvideClock            ,
+    setAudioBaseSinkProvideClock            ,
+
+
+-- ** SlaveMethod
+    AudioBaseSinkSlaveMethodPropertyInfo    ,
+    constructAudioBaseSinkSlaveMethod       ,
+    getAudioBaseSinkSlaveMethod             ,
+    setAudioBaseSinkSlaveMethod             ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GLib as GLib
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioBaseSink = AudioBaseSink (ForeignPtr AudioBaseSink)
+foreign import ccall "gst_audio_base_sink_get_type"
+    c_gst_audio_base_sink_get_type :: IO GType
+
+type instance ParentTypes AudioBaseSink = AudioBaseSinkParentTypes
+type AudioBaseSinkParentTypes = '[GstBase.BaseSink, Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioBaseSink where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_base_sink_get_type
+    
+
+class GObject o => AudioBaseSinkK o
+instance (GObject o, IsDescendantOf AudioBaseSink o) => AudioBaseSinkK o
+
+toAudioBaseSink :: AudioBaseSinkK o => o -> IO AudioBaseSink
+toAudioBaseSink = unsafeCastTo AudioBaseSink
+
+noAudioBaseSink :: Maybe AudioBaseSink
+noAudioBaseSink = Nothing
+
+type family ResolveAudioBaseSinkMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioBaseSinkMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioBaseSinkMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioBaseSinkMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioBaseSinkMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioBaseSinkMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioBaseSinkMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioBaseSinkMethod "createRingbuffer" o = AudioBaseSinkCreateRingbufferMethodInfo
+    ResolveAudioBaseSinkMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioBaseSinkMethod "doPreroll" o = GstBase.BaseSinkDoPrerollMethodInfo
+    ResolveAudioBaseSinkMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioBaseSinkMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioBaseSinkMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioBaseSinkMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioBaseSinkMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioBaseSinkMethod "isAsyncEnabled" o = GstBase.BaseSinkIsAsyncEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioBaseSinkMethod "isLastSampleEnabled" o = GstBase.BaseSinkIsLastSampleEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioBaseSinkMethod "isQosEnabled" o = GstBase.BaseSinkIsQosEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioBaseSinkMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioBaseSinkMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioBaseSinkMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioBaseSinkMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioBaseSinkMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioBaseSinkMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioBaseSinkMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioBaseSinkMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioBaseSinkMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioBaseSinkMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioBaseSinkMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioBaseSinkMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioBaseSinkMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioBaseSinkMethod "queryLatency" o = GstBase.BaseSinkQueryLatencyMethodInfo
+    ResolveAudioBaseSinkMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioBaseSinkMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioBaseSinkMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioBaseSinkMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioBaseSinkMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioBaseSinkMethod "reportDeviceFailure" o = AudioBaseSinkReportDeviceFailureMethodInfo
+    ResolveAudioBaseSinkMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioBaseSinkMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioBaseSinkMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioBaseSinkMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioBaseSinkMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioBaseSinkMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioBaseSinkMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioBaseSinkMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioBaseSinkMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioBaseSinkMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioBaseSinkMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioBaseSinkMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioBaseSinkMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioBaseSinkMethod "wait" o = GstBase.BaseSinkWaitMethodInfo
+    ResolveAudioBaseSinkMethod "waitClock" o = GstBase.BaseSinkWaitClockMethodInfo
+    ResolveAudioBaseSinkMethod "waitPreroll" o = GstBase.BaseSinkWaitPrerollMethodInfo
+    ResolveAudioBaseSinkMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioBaseSinkMethod "getAlignmentThreshold" o = AudioBaseSinkGetAlignmentThresholdMethodInfo
+    ResolveAudioBaseSinkMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getBlocksize" o = GstBase.BaseSinkGetBlocksizeMethodInfo
+    ResolveAudioBaseSinkMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioBaseSinkMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioBaseSinkMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioBaseSinkMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioBaseSinkMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioBaseSinkMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioBaseSinkMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioBaseSinkMethod "getDiscontWait" o = AudioBaseSinkGetDiscontWaitMethodInfo
+    ResolveAudioBaseSinkMethod "getDriftTolerance" o = AudioBaseSinkGetDriftToleranceMethodInfo
+    ResolveAudioBaseSinkMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioBaseSinkMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioBaseSinkMethod "getLastSample" o = GstBase.BaseSinkGetLastSampleMethodInfo
+    ResolveAudioBaseSinkMethod "getLatency" o = GstBase.BaseSinkGetLatencyMethodInfo
+    ResolveAudioBaseSinkMethod "getMaxBitrate" o = GstBase.BaseSinkGetMaxBitrateMethodInfo
+    ResolveAudioBaseSinkMethod "getMaxLateness" o = GstBase.BaseSinkGetMaxLatenessMethodInfo
+    ResolveAudioBaseSinkMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioBaseSinkMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioBaseSinkMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioBaseSinkMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "getProvideClock" o = AudioBaseSinkGetProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioBaseSinkMethod "getRenderDelay" o = GstBase.BaseSinkGetRenderDelayMethodInfo
+    ResolveAudioBaseSinkMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioBaseSinkMethod "getSlaveMethod" o = AudioBaseSinkGetSlaveMethodMethodInfo
+    ResolveAudioBaseSinkMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioBaseSinkMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioBaseSinkMethod "getSync" o = GstBase.BaseSinkGetSyncMethodInfo
+    ResolveAudioBaseSinkMethod "getThrottleTime" o = GstBase.BaseSinkGetThrottleTimeMethodInfo
+    ResolveAudioBaseSinkMethod "getTsOffset" o = GstBase.BaseSinkGetTsOffsetMethodInfo
+    ResolveAudioBaseSinkMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioBaseSinkMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioBaseSinkMethod "setAlignmentThreshold" o = AudioBaseSinkSetAlignmentThresholdMethodInfo
+    ResolveAudioBaseSinkMethod "setAsyncEnabled" o = GstBase.BaseSinkSetAsyncEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setBlocksize" o = GstBase.BaseSinkSetBlocksizeMethodInfo
+    ResolveAudioBaseSinkMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioBaseSinkMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioBaseSinkMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioBaseSinkMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioBaseSinkMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioBaseSinkMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioBaseSinkMethod "setCustomSlavingCallback" o = AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+    ResolveAudioBaseSinkMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioBaseSinkMethod "setDiscontWait" o = AudioBaseSinkSetDiscontWaitMethodInfo
+    ResolveAudioBaseSinkMethod "setDriftTolerance" o = AudioBaseSinkSetDriftToleranceMethodInfo
+    ResolveAudioBaseSinkMethod "setLastSampleEnabled" o = GstBase.BaseSinkSetLastSampleEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioBaseSinkMethod "setMaxBitrate" o = GstBase.BaseSinkSetMaxBitrateMethodInfo
+    ResolveAudioBaseSinkMethod "setMaxLateness" o = GstBase.BaseSinkSetMaxLatenessMethodInfo
+    ResolveAudioBaseSinkMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioBaseSinkMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioBaseSinkMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioBaseSinkMethod "setProvideClock" o = AudioBaseSinkSetProvideClockMethodInfo
+    ResolveAudioBaseSinkMethod "setQosEnabled" o = GstBase.BaseSinkSetQosEnabledMethodInfo
+    ResolveAudioBaseSinkMethod "setRenderDelay" o = GstBase.BaseSinkSetRenderDelayMethodInfo
+    ResolveAudioBaseSinkMethod "setSlaveMethod" o = AudioBaseSinkSetSlaveMethodMethodInfo
+    ResolveAudioBaseSinkMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioBaseSinkMethod "setSync" o = GstBase.BaseSinkSetSyncMethodInfo
+    ResolveAudioBaseSinkMethod "setThrottleTime" o = GstBase.BaseSinkSetThrottleTimeMethodInfo
+    ResolveAudioBaseSinkMethod "setTsOffset" o = GstBase.BaseSinkSetTsOffsetMethodInfo
+    ResolveAudioBaseSinkMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioBaseSinkMethod t AudioBaseSink, MethodInfo info AudioBaseSink p) => IsLabelProxy t (AudioBaseSink -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioBaseSinkMethod t AudioBaseSink, MethodInfo info AudioBaseSink p) => IsLabel t (AudioBaseSink -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "alignment-threshold"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkAlignmentThreshold :: (MonadIO m, AudioBaseSinkK o) => o -> m Word64
+getAudioBaseSinkAlignmentThreshold obj = liftIO $ getObjectPropertyUInt64 obj "alignment-threshold"
+
+setAudioBaseSinkAlignmentThreshold :: (MonadIO m, AudioBaseSinkK o) => o -> Word64 -> m ()
+setAudioBaseSinkAlignmentThreshold obj val = liftIO $ setObjectPropertyUInt64 obj "alignment-threshold" val
+
+constructAudioBaseSinkAlignmentThreshold :: Word64 -> IO ([Char], GValue)
+constructAudioBaseSinkAlignmentThreshold val = constructObjectPropertyUInt64 "alignment-threshold" val
+
+data AudioBaseSinkAlignmentThresholdPropertyInfo
+instance AttrInfo AudioBaseSinkAlignmentThresholdPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkAlignmentThresholdPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkAlignmentThresholdPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioBaseSinkAlignmentThresholdPropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkAlignmentThresholdPropertyInfo = Word64
+    type AttrLabel AudioBaseSinkAlignmentThresholdPropertyInfo = "alignment-threshold"
+    attrGet _ = getAudioBaseSinkAlignmentThreshold
+    attrSet _ = setAudioBaseSinkAlignmentThreshold
+    attrConstruct _ = constructAudioBaseSinkAlignmentThreshold
+
+-- VVV Prop "buffer-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkBufferTime :: (MonadIO m, AudioBaseSinkK o) => o -> m Int64
+getAudioBaseSinkBufferTime obj = liftIO $ getObjectPropertyInt64 obj "buffer-time"
+
+setAudioBaseSinkBufferTime :: (MonadIO m, AudioBaseSinkK o) => o -> Int64 -> m ()
+setAudioBaseSinkBufferTime obj val = liftIO $ setObjectPropertyInt64 obj "buffer-time" val
+
+constructAudioBaseSinkBufferTime :: Int64 -> IO ([Char], GValue)
+constructAudioBaseSinkBufferTime val = constructObjectPropertyInt64 "buffer-time" val
+
+data AudioBaseSinkBufferTimePropertyInfo
+instance AttrInfo AudioBaseSinkBufferTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkBufferTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkBufferTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkBufferTimePropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkBufferTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkBufferTimePropertyInfo = "buffer-time"
+    attrGet _ = getAudioBaseSinkBufferTime
+    attrSet _ = setAudioBaseSinkBufferTime
+    attrConstruct _ = constructAudioBaseSinkBufferTime
+
+-- VVV Prop "can-activate-pull"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkCanActivatePull :: (MonadIO m, AudioBaseSinkK o) => o -> m Bool
+getAudioBaseSinkCanActivatePull obj = liftIO $ getObjectPropertyBool obj "can-activate-pull"
+
+setAudioBaseSinkCanActivatePull :: (MonadIO m, AudioBaseSinkK o) => o -> Bool -> m ()
+setAudioBaseSinkCanActivatePull obj val = liftIO $ setObjectPropertyBool obj "can-activate-pull" val
+
+constructAudioBaseSinkCanActivatePull :: Bool -> IO ([Char], GValue)
+constructAudioBaseSinkCanActivatePull val = constructObjectPropertyBool "can-activate-pull" val
+
+data AudioBaseSinkCanActivatePullPropertyInfo
+instance AttrInfo AudioBaseSinkCanActivatePullPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkCanActivatePullPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkCanActivatePullPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioBaseSinkCanActivatePullPropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkCanActivatePullPropertyInfo = Bool
+    type AttrLabel AudioBaseSinkCanActivatePullPropertyInfo = "can-activate-pull"
+    attrGet _ = getAudioBaseSinkCanActivatePull
+    attrSet _ = setAudioBaseSinkCanActivatePull
+    attrConstruct _ = constructAudioBaseSinkCanActivatePull
+
+-- VVV Prop "discont-wait"
+   -- Type: TBasicType TUInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkDiscontWait :: (MonadIO m, AudioBaseSinkK o) => o -> m Word64
+getAudioBaseSinkDiscontWait obj = liftIO $ getObjectPropertyUInt64 obj "discont-wait"
+
+setAudioBaseSinkDiscontWait :: (MonadIO m, AudioBaseSinkK o) => o -> Word64 -> m ()
+setAudioBaseSinkDiscontWait obj val = liftIO $ setObjectPropertyUInt64 obj "discont-wait" val
+
+constructAudioBaseSinkDiscontWait :: Word64 -> IO ([Char], GValue)
+constructAudioBaseSinkDiscontWait val = constructObjectPropertyUInt64 "discont-wait" val
+
+data AudioBaseSinkDiscontWaitPropertyInfo
+instance AttrInfo AudioBaseSinkDiscontWaitPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkDiscontWaitPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkDiscontWaitPropertyInfo = (~) Word64
+    type AttrBaseTypeConstraint AudioBaseSinkDiscontWaitPropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkDiscontWaitPropertyInfo = Word64
+    type AttrLabel AudioBaseSinkDiscontWaitPropertyInfo = "discont-wait"
+    attrGet _ = getAudioBaseSinkDiscontWait
+    attrSet _ = setAudioBaseSinkDiscontWait
+    attrConstruct _ = constructAudioBaseSinkDiscontWait
+
+-- VVV Prop "drift-tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkDriftTolerance :: (MonadIO m, AudioBaseSinkK o) => o -> m Int64
+getAudioBaseSinkDriftTolerance obj = liftIO $ getObjectPropertyInt64 obj "drift-tolerance"
+
+setAudioBaseSinkDriftTolerance :: (MonadIO m, AudioBaseSinkK o) => o -> Int64 -> m ()
+setAudioBaseSinkDriftTolerance obj val = liftIO $ setObjectPropertyInt64 obj "drift-tolerance" val
+
+constructAudioBaseSinkDriftTolerance :: Int64 -> IO ([Char], GValue)
+constructAudioBaseSinkDriftTolerance val = constructObjectPropertyInt64 "drift-tolerance" val
+
+data AudioBaseSinkDriftTolerancePropertyInfo
+instance AttrInfo AudioBaseSinkDriftTolerancePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkDriftTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkDriftTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkDriftTolerancePropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkDriftTolerancePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkDriftTolerancePropertyInfo = "drift-tolerance"
+    attrGet _ = getAudioBaseSinkDriftTolerance
+    attrSet _ = setAudioBaseSinkDriftTolerance
+    attrConstruct _ = constructAudioBaseSinkDriftTolerance
+
+-- VVV Prop "latency-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkLatencyTime :: (MonadIO m, AudioBaseSinkK o) => o -> m Int64
+getAudioBaseSinkLatencyTime obj = liftIO $ getObjectPropertyInt64 obj "latency-time"
+
+setAudioBaseSinkLatencyTime :: (MonadIO m, AudioBaseSinkK o) => o -> Int64 -> m ()
+setAudioBaseSinkLatencyTime obj val = liftIO $ setObjectPropertyInt64 obj "latency-time" val
+
+constructAudioBaseSinkLatencyTime :: Int64 -> IO ([Char], GValue)
+constructAudioBaseSinkLatencyTime val = constructObjectPropertyInt64 "latency-time" val
+
+data AudioBaseSinkLatencyTimePropertyInfo
+instance AttrInfo AudioBaseSinkLatencyTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSinkLatencyTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkLatencyTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSinkLatencyTimePropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkLatencyTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSinkLatencyTimePropertyInfo = "latency-time"
+    attrGet _ = getAudioBaseSinkLatencyTime
+    attrSet _ = setAudioBaseSinkLatencyTime
+    attrConstruct _ = constructAudioBaseSinkLatencyTime
+
+-- VVV Prop "provide-clock"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkProvideClock :: (MonadIO m, AudioBaseSinkK o) => o -> m Bool
+getAudioBaseSinkProvideClock obj = liftIO $ getObjectPropertyBool obj "provide-clock"
+
+setAudioBaseSinkProvideClock :: (MonadIO m, AudioBaseSinkK o) => o -> Bool -> m ()
+setAudioBaseSinkProvideClock obj val = liftIO $ setObjectPropertyBool obj "provide-clock" val
+
+constructAudioBaseSinkProvideClock :: Bool -> IO ([Char], GValue)
+constructAudioBaseSinkProvideClock val = constructObjectPropertyBool "provide-clock" val
+
+data AudioBaseSinkProvideClockPropertyInfo
+instance AttrInfo AudioBaseSinkProvideClockPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkProvideClockPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkProvideClockPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioBaseSinkProvideClockPropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkProvideClockPropertyInfo = Bool
+    type AttrLabel AudioBaseSinkProvideClockPropertyInfo = "provide-clock"
+    attrGet _ = getAudioBaseSinkProvideClock
+    attrSet _ = setAudioBaseSinkProvideClock
+    attrConstruct _ = constructAudioBaseSinkProvideClock
+
+-- VVV Prop "slave-method"
+   -- Type: TInterface "GstAudio" "AudioBaseSinkSlaveMethod"
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSinkSlaveMethod :: (MonadIO m, AudioBaseSinkK o) => o -> m AudioBaseSinkSlaveMethod
+getAudioBaseSinkSlaveMethod obj = liftIO $ getObjectPropertyEnum obj "slave-method"
+
+setAudioBaseSinkSlaveMethod :: (MonadIO m, AudioBaseSinkK o) => o -> AudioBaseSinkSlaveMethod -> m ()
+setAudioBaseSinkSlaveMethod obj val = liftIO $ setObjectPropertyEnum obj "slave-method" val
+
+constructAudioBaseSinkSlaveMethod :: AudioBaseSinkSlaveMethod -> IO ([Char], GValue)
+constructAudioBaseSinkSlaveMethod val = constructObjectPropertyEnum "slave-method" val
+
+data AudioBaseSinkSlaveMethodPropertyInfo
+instance AttrInfo AudioBaseSinkSlaveMethodPropertyInfo where
+    type AttrAllowedOps AudioBaseSinkSlaveMethodPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSinkSlaveMethodPropertyInfo = (~) AudioBaseSinkSlaveMethod
+    type AttrBaseTypeConstraint AudioBaseSinkSlaveMethodPropertyInfo = AudioBaseSinkK
+    type AttrGetType AudioBaseSinkSlaveMethodPropertyInfo = AudioBaseSinkSlaveMethod
+    type AttrLabel AudioBaseSinkSlaveMethodPropertyInfo = "slave-method"
+    attrGet _ = getAudioBaseSinkSlaveMethod
+    attrSet _ = setAudioBaseSinkSlaveMethod
+    attrConstruct _ = constructAudioBaseSinkSlaveMethod
+
+type instance AttributeList AudioBaseSink = AudioBaseSinkAttributeList
+type AudioBaseSinkAttributeList = ('[ '("alignmentThreshold", AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSinkBlocksizePropertyInfo), '("bufferTime", AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSinkLastSamplePropertyInfo), '("latencyTime", AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("provideClock", AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", AudioBaseSinkSlaveMethodPropertyInfo), '("sync", GstBase.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioBaseSink = AudioBaseSinkSignalList
+type AudioBaseSinkSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioBaseSink::create_ringbuffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioRingBuffer"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_create_ringbuffer" gst_audio_base_sink_create_ringbuffer :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO (Ptr AudioRingBuffer)
+
+
+audioBaseSinkCreateRingbuffer ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m AudioRingBuffer                    -- result
+audioBaseSinkCreateRingbuffer _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_create_ringbuffer _obj'
+    checkUnexpectedReturnNULL "gst_audio_base_sink_create_ringbuffer" result
+    result' <- (newObject AudioRingBuffer) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSinkCreateRingbufferMethodInfo
+instance (signature ~ (m AudioRingBuffer), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkCreateRingbufferMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkCreateRingbuffer
+
+-- method AudioBaseSink::get_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO Word64
+
+
+audioBaseSinkGetAlignmentThreshold ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioBaseSinkGetAlignmentThreshold _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_get_alignment_threshold _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioBaseSinkGetAlignmentThresholdMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkGetAlignmentThresholdMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetAlignmentThreshold
+
+-- method AudioBaseSink::get_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO Word64
+
+
+audioBaseSinkGetDiscontWait ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioBaseSinkGetDiscontWait _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_get_discont_wait _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioBaseSinkGetDiscontWaitMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkGetDiscontWaitMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetDiscontWait
+
+-- method AudioBaseSink::get_drift_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO Int64
+
+
+audioBaseSinkGetDriftTolerance ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m Int64                              -- result
+audioBaseSinkGetDriftTolerance _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_get_drift_tolerance _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioBaseSinkGetDriftToleranceMethodInfo
+instance (signature ~ (m Int64), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkGetDriftToleranceMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetDriftTolerance
+
+-- method AudioBaseSink::get_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO CInt
+
+
+audioBaseSinkGetProvideClock ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioBaseSinkGetProvideClock _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_get_provide_clock _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSinkGetProvideClockMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkGetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetProvideClock
+
+-- method AudioBaseSink::get_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO CUInt
+
+
+audioBaseSinkGetSlaveMethod ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m AudioBaseSinkSlaveMethod           -- result
+audioBaseSinkGetSlaveMethod _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_sink_get_slave_method _obj'
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSinkGetSlaveMethodMethodInfo
+instance (signature ~ (m AudioBaseSinkSlaveMethod), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkGetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkGetSlaveMethod
+
+-- method AudioBaseSink::report_device_failure
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_report_device_failure" gst_audio_base_sink_report_device_failure :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    IO ()
+
+
+audioBaseSinkReportDeviceFailure ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> m ()                                 -- result
+audioBaseSinkReportDeviceFailure _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_base_sink_report_device_failure _obj'
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkReportDeviceFailureMethodInfo
+instance (signature ~ (m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkReportDeviceFailureMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkReportDeviceFailure
+
+-- method AudioBaseSink::set_alignment_threshold
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_alignment_threshold" gst_audio_base_sink_set_alignment_threshold :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    Word64 ->                               -- alignment_threshold : TBasicType TUInt64
+    IO ()
+
+
+audioBaseSinkSetAlignmentThreshold ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> Word64                               -- alignmentThreshold
+    -> m ()                                 -- result
+audioBaseSinkSetAlignmentThreshold _obj alignmentThreshold = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_base_sink_set_alignment_threshold _obj' alignmentThreshold
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetAlignmentThresholdMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetAlignmentThresholdMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetAlignmentThreshold
+
+-- method AudioBaseSink::set_custom_slaving_callback
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface "GstAudio" "AudioBaseSinkCustomSlavingCallback", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- 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 ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    FunPtr AudioBaseSinkCustomSlavingCallbackC -> -- callback : TInterface "GstAudio" "AudioBaseSinkCustomSlavingCallback"
+    Ptr () ->                               -- user_data : TBasicType TVoid
+    FunPtr GLib.DestroyNotifyC ->           -- notify : TInterface "GLib" "DestroyNotify"
+    IO ()
+
+
+audioBaseSinkSetCustomSlavingCallback ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> AudioBaseSinkCustomSlavingCallback   -- callback
+    -> m ()                                 -- result
+audioBaseSinkSetCustomSlavingCallback _obj callback = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    callback' <- mkAudioBaseSinkCustomSlavingCallback (audioBaseSinkCustomSlavingCallbackWrapper Nothing callback)
+    let userData = castFunPtrToPtr callback'
+    let notify = safeFreeFunPtrPtr
+    gst_audio_base_sink_set_custom_slaving_callback _obj' callback' userData notify
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+instance (signature ~ (AudioBaseSinkCustomSlavingCallback -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetCustomSlavingCallbackMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetCustomSlavingCallback
+
+-- method AudioBaseSink::set_discont_wait
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_discont_wait" gst_audio_base_sink_set_discont_wait :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    Word64 ->                               -- discont_wait : TBasicType TUInt64
+    IO ()
+
+
+audioBaseSinkSetDiscontWait ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> Word64                               -- discontWait
+    -> m ()                                 -- result
+audioBaseSinkSetDiscontWait _obj discontWait = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_base_sink_set_discont_wait _obj' discontWait
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetDiscontWaitMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetDiscontWaitMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetDiscontWait
+
+-- method AudioBaseSink::set_drift_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "drift_tolerance", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_drift_tolerance" gst_audio_base_sink_set_drift_tolerance :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    Int64 ->                                -- drift_tolerance : TBasicType TInt64
+    IO ()
+
+
+audioBaseSinkSetDriftTolerance ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> Int64                                -- driftTolerance
+    -> m ()                                 -- result
+audioBaseSinkSetDriftTolerance _obj driftTolerance = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_base_sink_set_drift_tolerance _obj' driftTolerance
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetDriftToleranceMethodInfo
+instance (signature ~ (Int64 -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetDriftToleranceMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetDriftTolerance
+
+-- method AudioBaseSink::set_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "provide", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_provide_clock" gst_audio_base_sink_set_provide_clock :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    CInt ->                                 -- provide : TBasicType TBoolean
+    IO ()
+
+
+audioBaseSinkSetProvideClock ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- provide
+    -> m ()                                 -- result
+audioBaseSinkSetProvideClock _obj provide = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let provide' = (fromIntegral . fromEnum) provide
+    gst_audio_base_sink_set_provide_clock _obj' provide'
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetProvideClockMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetProvideClock
+
+-- method AudioBaseSink::set_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSink", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "method", argType = TInterface "GstAudio" "AudioBaseSinkSlaveMethod", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_sink_set_slave_method" gst_audio_base_sink_set_slave_method :: 
+    Ptr AudioBaseSink ->                    -- _obj : TInterface "GstAudio" "AudioBaseSink"
+    CUInt ->                                -- method : TInterface "GstAudio" "AudioBaseSinkSlaveMethod"
+    IO ()
+
+
+audioBaseSinkSetSlaveMethod ::
+    (MonadIO m, AudioBaseSinkK a) =>
+    a                                       -- _obj
+    -> AudioBaseSinkSlaveMethod             -- method
+    -> m ()                                 -- result
+audioBaseSinkSetSlaveMethod _obj method = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let method' = (fromIntegral . fromEnum) method
+    gst_audio_base_sink_set_slave_method _obj' method'
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSinkSetSlaveMethodMethodInfo
+instance (signature ~ (AudioBaseSinkSlaveMethod -> m ()), MonadIO m, AudioBaseSinkK a) => MethodInfo AudioBaseSinkSetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSinkSetSlaveMethod
+
+
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,34 @@
+module GI.GstAudio.Objects.AudioBaseSink where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioBaseSink = AudioBaseSink (ForeignPtr AudioBaseSink)
+instance GObject AudioBaseSink where
+class GObject o => AudioBaseSinkK o
+instance (GObject o, IsDescendantOf AudioBaseSink o) => AudioBaseSinkK o
+data AudioBaseSinkAlignmentThresholdPropertyInfo
+data AudioBaseSinkBufferTimePropertyInfo
+data AudioBaseSinkCanActivatePullPropertyInfo
+data AudioBaseSinkDiscontWaitPropertyInfo
+data AudioBaseSinkDriftTolerancePropertyInfo
+data AudioBaseSinkLatencyTimePropertyInfo
+data AudioBaseSinkProvideClockPropertyInfo
+data AudioBaseSinkSlaveMethodPropertyInfo
+data AudioBaseSinkCreateRingbufferMethodInfo
+data AudioBaseSinkGetAlignmentThresholdMethodInfo
+data AudioBaseSinkGetDiscontWaitMethodInfo
+data AudioBaseSinkGetDriftToleranceMethodInfo
+data AudioBaseSinkGetProvideClockMethodInfo
+data AudioBaseSinkGetSlaveMethodMethodInfo
+data AudioBaseSinkReportDeviceFailureMethodInfo
+data AudioBaseSinkSetAlignmentThresholdMethodInfo
+data AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+data AudioBaseSinkSetDiscontWaitMethodInfo
+data AudioBaseSinkSetDriftToleranceMethodInfo
+data AudioBaseSinkSetProvideClockMethodInfo
+data AudioBaseSinkSetSlaveMethodMethodInfo
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,534 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioBaseSrc
+    ( 
+
+-- * Exported types
+    AudioBaseSrc(..)                        ,
+    AudioBaseSrcK                           ,
+    toAudioBaseSrc                          ,
+    noAudioBaseSrc                          ,
+
+
+ -- * Methods
+-- ** audioBaseSrcCreateRingbuffer
+    AudioBaseSrcCreateRingbufferMethodInfo  ,
+    audioBaseSrcCreateRingbuffer            ,
+
+
+-- ** audioBaseSrcGetProvideClock
+    AudioBaseSrcGetProvideClockMethodInfo   ,
+    audioBaseSrcGetProvideClock             ,
+
+
+-- ** audioBaseSrcGetSlaveMethod
+    AudioBaseSrcGetSlaveMethodMethodInfo    ,
+    audioBaseSrcGetSlaveMethod              ,
+
+
+-- ** audioBaseSrcSetProvideClock
+    AudioBaseSrcSetProvideClockMethodInfo   ,
+    audioBaseSrcSetProvideClock             ,
+
+
+-- ** audioBaseSrcSetSlaveMethod
+    AudioBaseSrcSetSlaveMethodMethodInfo    ,
+    audioBaseSrcSetSlaveMethod              ,
+
+
+
+
+ -- * Properties
+-- ** ActualBufferTime
+    AudioBaseSrcActualBufferTimePropertyInfo,
+    getAudioBaseSrcActualBufferTime         ,
+
+
+-- ** ActualLatencyTime
+    AudioBaseSrcActualLatencyTimePropertyInfo,
+    getAudioBaseSrcActualLatencyTime        ,
+
+
+-- ** BufferTime
+    AudioBaseSrcBufferTimePropertyInfo      ,
+    constructAudioBaseSrcBufferTime         ,
+    getAudioBaseSrcBufferTime               ,
+    setAudioBaseSrcBufferTime               ,
+
+
+-- ** LatencyTime
+    AudioBaseSrcLatencyTimePropertyInfo     ,
+    constructAudioBaseSrcLatencyTime        ,
+    getAudioBaseSrcLatencyTime              ,
+    setAudioBaseSrcLatencyTime              ,
+
+
+-- ** ProvideClock
+    AudioBaseSrcProvideClockPropertyInfo    ,
+    constructAudioBaseSrcProvideClock       ,
+    getAudioBaseSrcProvideClock             ,
+    setAudioBaseSrcProvideClock             ,
+
+
+-- ** SlaveMethod
+    AudioBaseSrcSlaveMethodPropertyInfo     ,
+    constructAudioBaseSrcSlaveMethod        ,
+    getAudioBaseSrcSlaveMethod              ,
+    setAudioBaseSrcSlaveMethod              ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioBaseSrc = AudioBaseSrc (ForeignPtr AudioBaseSrc)
+foreign import ccall "gst_audio_base_src_get_type"
+    c_gst_audio_base_src_get_type :: IO GType
+
+type instance ParentTypes AudioBaseSrc = AudioBaseSrcParentTypes
+type AudioBaseSrcParentTypes = '[GstBase.PushSrc, GstBase.BaseSrc, Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioBaseSrc where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_base_src_get_type
+    
+
+class GObject o => AudioBaseSrcK o
+instance (GObject o, IsDescendantOf AudioBaseSrc o) => AudioBaseSrcK o
+
+toAudioBaseSrc :: AudioBaseSrcK o => o -> IO AudioBaseSrc
+toAudioBaseSrc = unsafeCastTo AudioBaseSrc
+
+noAudioBaseSrc :: Maybe AudioBaseSrc
+noAudioBaseSrc = Nothing
+
+type family ResolveAudioBaseSrcMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioBaseSrcMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioBaseSrcMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioBaseSrcMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioBaseSrcMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioBaseSrcMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioBaseSrcMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioBaseSrcMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioBaseSrcMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioBaseSrcMethod "createRingbuffer" o = AudioBaseSrcCreateRingbufferMethodInfo
+    ResolveAudioBaseSrcMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioBaseSrcMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioBaseSrcMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioBaseSrcMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioBaseSrcMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioBaseSrcMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioBaseSrcMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioBaseSrcMethod "isAsync" o = GstBase.BaseSrcIsAsyncMethodInfo
+    ResolveAudioBaseSrcMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioBaseSrcMethod "isLive" o = GstBase.BaseSrcIsLiveMethodInfo
+    ResolveAudioBaseSrcMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioBaseSrcMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioBaseSrcMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioBaseSrcMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioBaseSrcMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioBaseSrcMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioBaseSrcMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioBaseSrcMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioBaseSrcMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioBaseSrcMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioBaseSrcMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioBaseSrcMethod "newSeamlessSegment" o = GstBase.BaseSrcNewSeamlessSegmentMethodInfo
+    ResolveAudioBaseSrcMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioBaseSrcMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioBaseSrcMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioBaseSrcMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioBaseSrcMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioBaseSrcMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioBaseSrcMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioBaseSrcMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioBaseSrcMethod "queryLatency" o = GstBase.BaseSrcQueryLatencyMethodInfo
+    ResolveAudioBaseSrcMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioBaseSrcMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioBaseSrcMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioBaseSrcMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioBaseSrcMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioBaseSrcMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioBaseSrcMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioBaseSrcMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioBaseSrcMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioBaseSrcMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioBaseSrcMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioBaseSrcMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioBaseSrcMethod "startComplete" o = GstBase.BaseSrcStartCompleteMethodInfo
+    ResolveAudioBaseSrcMethod "startWait" o = GstBase.BaseSrcStartWaitMethodInfo
+    ResolveAudioBaseSrcMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioBaseSrcMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioBaseSrcMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioBaseSrcMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioBaseSrcMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioBaseSrcMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioBaseSrcMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioBaseSrcMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioBaseSrcMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioBaseSrcMethod "waitPlaying" o = GstBase.BaseSrcWaitPlayingMethodInfo
+    ResolveAudioBaseSrcMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioBaseSrcMethod "getAllocator" o = GstBase.BaseSrcGetAllocatorMethodInfo
+    ResolveAudioBaseSrcMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioBaseSrcMethod "getBlocksize" o = GstBase.BaseSrcGetBlocksizeMethodInfo
+    ResolveAudioBaseSrcMethod "getBufferPool" o = GstBase.BaseSrcGetBufferPoolMethodInfo
+    ResolveAudioBaseSrcMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioBaseSrcMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioBaseSrcMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioBaseSrcMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioBaseSrcMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioBaseSrcMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioBaseSrcMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioBaseSrcMethod "getDoTimestamp" o = GstBase.BaseSrcGetDoTimestampMethodInfo
+    ResolveAudioBaseSrcMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioBaseSrcMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioBaseSrcMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioBaseSrcMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioBaseSrcMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioBaseSrcMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioBaseSrcMethod "getProvideClock" o = AudioBaseSrcGetProvideClockMethodInfo
+    ResolveAudioBaseSrcMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioBaseSrcMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioBaseSrcMethod "getSlaveMethod" o = AudioBaseSrcGetSlaveMethodMethodInfo
+    ResolveAudioBaseSrcMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioBaseSrcMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioBaseSrcMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioBaseSrcMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioBaseSrcMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioBaseSrcMethod "setAsync" o = GstBase.BaseSrcSetAsyncMethodInfo
+    ResolveAudioBaseSrcMethod "setAutomaticEos" o = GstBase.BaseSrcSetAutomaticEosMethodInfo
+    ResolveAudioBaseSrcMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioBaseSrcMethod "setBlocksize" o = GstBase.BaseSrcSetBlocksizeMethodInfo
+    ResolveAudioBaseSrcMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioBaseSrcMethod "setCaps" o = GstBase.BaseSrcSetCapsMethodInfo
+    ResolveAudioBaseSrcMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioBaseSrcMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioBaseSrcMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioBaseSrcMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioBaseSrcMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioBaseSrcMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioBaseSrcMethod "setDoTimestamp" o = GstBase.BaseSrcSetDoTimestampMethodInfo
+    ResolveAudioBaseSrcMethod "setDynamicSize" o = GstBase.BaseSrcSetDynamicSizeMethodInfo
+    ResolveAudioBaseSrcMethod "setFormat" o = GstBase.BaseSrcSetFormatMethodInfo
+    ResolveAudioBaseSrcMethod "setLive" o = GstBase.BaseSrcSetLiveMethodInfo
+    ResolveAudioBaseSrcMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioBaseSrcMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioBaseSrcMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioBaseSrcMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioBaseSrcMethod "setProvideClock" o = AudioBaseSrcSetProvideClockMethodInfo
+    ResolveAudioBaseSrcMethod "setSlaveMethod" o = AudioBaseSrcSetSlaveMethodMethodInfo
+    ResolveAudioBaseSrcMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioBaseSrcMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioBaseSrcMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioBaseSrcMethod t AudioBaseSrc, MethodInfo info AudioBaseSrc p) => IsLabelProxy t (AudioBaseSrc -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioBaseSrcMethod t AudioBaseSrc, MethodInfo info AudioBaseSrc p) => IsLabel t (AudioBaseSrc -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "actual-buffer-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable]
+
+getAudioBaseSrcActualBufferTime :: (MonadIO m, AudioBaseSrcK o) => o -> m Int64
+getAudioBaseSrcActualBufferTime obj = liftIO $ getObjectPropertyInt64 obj "actual-buffer-time"
+
+data AudioBaseSrcActualBufferTimePropertyInfo
+instance AttrInfo AudioBaseSrcActualBufferTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSrcActualBufferTimePropertyInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcActualBufferTimePropertyInfo = (~) ()
+    type AttrBaseTypeConstraint AudioBaseSrcActualBufferTimePropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcActualBufferTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSrcActualBufferTimePropertyInfo = "actual-buffer-time"
+    attrGet _ = getAudioBaseSrcActualBufferTime
+    attrSet _ = undefined
+    attrConstruct _ = undefined
+
+-- VVV Prop "actual-latency-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable]
+
+getAudioBaseSrcActualLatencyTime :: (MonadIO m, AudioBaseSrcK o) => o -> m Int64
+getAudioBaseSrcActualLatencyTime obj = liftIO $ getObjectPropertyInt64 obj "actual-latency-time"
+
+data AudioBaseSrcActualLatencyTimePropertyInfo
+instance AttrInfo AudioBaseSrcActualLatencyTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSrcActualLatencyTimePropertyInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcActualLatencyTimePropertyInfo = (~) ()
+    type AttrBaseTypeConstraint AudioBaseSrcActualLatencyTimePropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcActualLatencyTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSrcActualLatencyTimePropertyInfo = "actual-latency-time"
+    attrGet _ = getAudioBaseSrcActualLatencyTime
+    attrSet _ = undefined
+    attrConstruct _ = undefined
+
+-- VVV Prop "buffer-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSrcBufferTime :: (MonadIO m, AudioBaseSrcK o) => o -> m Int64
+getAudioBaseSrcBufferTime obj = liftIO $ getObjectPropertyInt64 obj "buffer-time"
+
+setAudioBaseSrcBufferTime :: (MonadIO m, AudioBaseSrcK o) => o -> Int64 -> m ()
+setAudioBaseSrcBufferTime obj val = liftIO $ setObjectPropertyInt64 obj "buffer-time" val
+
+constructAudioBaseSrcBufferTime :: Int64 -> IO ([Char], GValue)
+constructAudioBaseSrcBufferTime val = constructObjectPropertyInt64 "buffer-time" val
+
+data AudioBaseSrcBufferTimePropertyInfo
+instance AttrInfo AudioBaseSrcBufferTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSrcBufferTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcBufferTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSrcBufferTimePropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcBufferTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSrcBufferTimePropertyInfo = "buffer-time"
+    attrGet _ = getAudioBaseSrcBufferTime
+    attrSet _ = setAudioBaseSrcBufferTime
+    attrConstruct _ = constructAudioBaseSrcBufferTime
+
+-- VVV Prop "latency-time"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSrcLatencyTime :: (MonadIO m, AudioBaseSrcK o) => o -> m Int64
+getAudioBaseSrcLatencyTime obj = liftIO $ getObjectPropertyInt64 obj "latency-time"
+
+setAudioBaseSrcLatencyTime :: (MonadIO m, AudioBaseSrcK o) => o -> Int64 -> m ()
+setAudioBaseSrcLatencyTime obj val = liftIO $ setObjectPropertyInt64 obj "latency-time" val
+
+constructAudioBaseSrcLatencyTime :: Int64 -> IO ([Char], GValue)
+constructAudioBaseSrcLatencyTime val = constructObjectPropertyInt64 "latency-time" val
+
+data AudioBaseSrcLatencyTimePropertyInfo
+instance AttrInfo AudioBaseSrcLatencyTimePropertyInfo where
+    type AttrAllowedOps AudioBaseSrcLatencyTimePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcLatencyTimePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioBaseSrcLatencyTimePropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcLatencyTimePropertyInfo = Int64
+    type AttrLabel AudioBaseSrcLatencyTimePropertyInfo = "latency-time"
+    attrGet _ = getAudioBaseSrcLatencyTime
+    attrSet _ = setAudioBaseSrcLatencyTime
+    attrConstruct _ = constructAudioBaseSrcLatencyTime
+
+-- VVV Prop "provide-clock"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSrcProvideClock :: (MonadIO m, AudioBaseSrcK o) => o -> m Bool
+getAudioBaseSrcProvideClock obj = liftIO $ getObjectPropertyBool obj "provide-clock"
+
+setAudioBaseSrcProvideClock :: (MonadIO m, AudioBaseSrcK o) => o -> Bool -> m ()
+setAudioBaseSrcProvideClock obj val = liftIO $ setObjectPropertyBool obj "provide-clock" val
+
+constructAudioBaseSrcProvideClock :: Bool -> IO ([Char], GValue)
+constructAudioBaseSrcProvideClock val = constructObjectPropertyBool "provide-clock" val
+
+data AudioBaseSrcProvideClockPropertyInfo
+instance AttrInfo AudioBaseSrcProvideClockPropertyInfo where
+    type AttrAllowedOps AudioBaseSrcProvideClockPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcProvideClockPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioBaseSrcProvideClockPropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcProvideClockPropertyInfo = Bool
+    type AttrLabel AudioBaseSrcProvideClockPropertyInfo = "provide-clock"
+    attrGet _ = getAudioBaseSrcProvideClock
+    attrSet _ = setAudioBaseSrcProvideClock
+    attrConstruct _ = constructAudioBaseSrcProvideClock
+
+-- VVV Prop "slave-method"
+   -- Type: TInterface "GstAudio" "AudioBaseSrcSlaveMethod"
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioBaseSrcSlaveMethod :: (MonadIO m, AudioBaseSrcK o) => o -> m AudioBaseSrcSlaveMethod
+getAudioBaseSrcSlaveMethod obj = liftIO $ getObjectPropertyEnum obj "slave-method"
+
+setAudioBaseSrcSlaveMethod :: (MonadIO m, AudioBaseSrcK o) => o -> AudioBaseSrcSlaveMethod -> m ()
+setAudioBaseSrcSlaveMethod obj val = liftIO $ setObjectPropertyEnum obj "slave-method" val
+
+constructAudioBaseSrcSlaveMethod :: AudioBaseSrcSlaveMethod -> IO ([Char], GValue)
+constructAudioBaseSrcSlaveMethod val = constructObjectPropertyEnum "slave-method" val
+
+data AudioBaseSrcSlaveMethodPropertyInfo
+instance AttrInfo AudioBaseSrcSlaveMethodPropertyInfo where
+    type AttrAllowedOps AudioBaseSrcSlaveMethodPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioBaseSrcSlaveMethodPropertyInfo = (~) AudioBaseSrcSlaveMethod
+    type AttrBaseTypeConstraint AudioBaseSrcSlaveMethodPropertyInfo = AudioBaseSrcK
+    type AttrGetType AudioBaseSrcSlaveMethodPropertyInfo = AudioBaseSrcSlaveMethod
+    type AttrLabel AudioBaseSrcSlaveMethodPropertyInfo = "slave-method"
+    attrGet _ = getAudioBaseSrcSlaveMethod
+    attrSet _ = setAudioBaseSrcSlaveMethod
+    attrConstruct _ = constructAudioBaseSrcSlaveMethod
+
+type instance AttributeList AudioBaseSrc = AudioBaseSrcAttributeList
+type AudioBaseSrcAttributeList = ('[ '("actualBufferTime", AudioBaseSrcActualBufferTimePropertyInfo), '("actualLatencyTime", AudioBaseSrcActualLatencyTimePropertyInfo), '("blocksize", GstBase.BaseSrcBlocksizePropertyInfo), '("bufferTime", AudioBaseSrcBufferTimePropertyInfo), '("doTimestamp", GstBase.BaseSrcDoTimestampPropertyInfo), '("latencyTime", AudioBaseSrcLatencyTimePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("provideClock", AudioBaseSrcProvideClockPropertyInfo), '("slaveMethod", AudioBaseSrcSlaveMethodPropertyInfo), '("typefind", GstBase.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioBaseSrc = AudioBaseSrcSignalList
+type AudioBaseSrcSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioBaseSrc::create_ringbuffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioRingBuffer"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_src_create_ringbuffer" gst_audio_base_src_create_ringbuffer :: 
+    Ptr AudioBaseSrc ->                     -- _obj : TInterface "GstAudio" "AudioBaseSrc"
+    IO (Ptr AudioRingBuffer)
+
+
+audioBaseSrcCreateRingbuffer ::
+    (MonadIO m, AudioBaseSrcK a) =>
+    a                                       -- _obj
+    -> m AudioRingBuffer                    -- result
+audioBaseSrcCreateRingbuffer _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_src_create_ringbuffer _obj'
+    checkUnexpectedReturnNULL "gst_audio_base_src_create_ringbuffer" result
+    result' <- (newObject AudioRingBuffer) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSrcCreateRingbufferMethodInfo
+instance (signature ~ (m AudioRingBuffer), MonadIO m, AudioBaseSrcK a) => MethodInfo AudioBaseSrcCreateRingbufferMethodInfo a signature where
+    overloadedMethod _ = audioBaseSrcCreateRingbuffer
+
+-- method AudioBaseSrc::get_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                     -- _obj : TInterface "GstAudio" "AudioBaseSrc"
+    IO CInt
+
+
+audioBaseSrcGetProvideClock ::
+    (MonadIO m, AudioBaseSrcK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioBaseSrcGetProvideClock _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_src_get_provide_clock _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSrcGetProvideClockMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioBaseSrcK a) => MethodInfo AudioBaseSrcGetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSrcGetProvideClock
+
+-- method AudioBaseSrc::get_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "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 ->                     -- _obj : TInterface "GstAudio" "AudioBaseSrc"
+    IO CUInt
+
+
+audioBaseSrcGetSlaveMethod ::
+    (MonadIO m, AudioBaseSrcK a) =>
+    a                                       -- _obj
+    -> m AudioBaseSrcSlaveMethod            -- result
+audioBaseSrcGetSlaveMethod _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_base_src_get_slave_method _obj'
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioBaseSrcGetSlaveMethodMethodInfo
+instance (signature ~ (m AudioBaseSrcSlaveMethod), MonadIO m, AudioBaseSrcK a) => MethodInfo AudioBaseSrcGetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSrcGetSlaveMethod
+
+-- method AudioBaseSrc::set_provide_clock
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "provide", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_src_set_provide_clock" gst_audio_base_src_set_provide_clock :: 
+    Ptr AudioBaseSrc ->                     -- _obj : TInterface "GstAudio" "AudioBaseSrc"
+    CInt ->                                 -- provide : TBasicType TBoolean
+    IO ()
+
+
+audioBaseSrcSetProvideClock ::
+    (MonadIO m, AudioBaseSrcK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- provide
+    -> m ()                                 -- result
+audioBaseSrcSetProvideClock _obj provide = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let provide' = (fromIntegral . fromEnum) provide
+    gst_audio_base_src_set_provide_clock _obj' provide'
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSrcSetProvideClockMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioBaseSrcK a) => MethodInfo AudioBaseSrcSetProvideClockMethodInfo a signature where
+    overloadedMethod _ = audioBaseSrcSetProvideClock
+
+-- method AudioBaseSrc::set_slave_method
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioBaseSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "method", argType = TInterface "GstAudio" "AudioBaseSrcSlaveMethod", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_base_src_set_slave_method" gst_audio_base_src_set_slave_method :: 
+    Ptr AudioBaseSrc ->                     -- _obj : TInterface "GstAudio" "AudioBaseSrc"
+    CUInt ->                                -- method : TInterface "GstAudio" "AudioBaseSrcSlaveMethod"
+    IO ()
+
+
+audioBaseSrcSetSlaveMethod ::
+    (MonadIO m, AudioBaseSrcK a) =>
+    a                                       -- _obj
+    -> AudioBaseSrcSlaveMethod              -- method
+    -> m ()                                 -- result
+audioBaseSrcSetSlaveMethod _obj method = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let method' = (fromIntegral . fromEnum) method
+    gst_audio_base_src_set_slave_method _obj' method'
+    touchManagedPtr _obj
+    return ()
+
+data AudioBaseSrcSetSlaveMethodMethodInfo
+instance (signature ~ (AudioBaseSrcSlaveMethod -> m ()), MonadIO m, AudioBaseSrcK a) => MethodInfo AudioBaseSrcSetSlaveMethodMethodInfo a signature where
+    overloadedMethod _ = audioBaseSrcSetSlaveMethod
+
+
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,24 @@
+module GI.GstAudio.Objects.AudioBaseSrc where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioBaseSrc = AudioBaseSrc (ForeignPtr AudioBaseSrc)
+instance GObject AudioBaseSrc where
+class GObject o => AudioBaseSrcK o
+instance (GObject o, IsDescendantOf AudioBaseSrc o) => AudioBaseSrcK o
+data AudioBaseSrcActualBufferTimePropertyInfo
+data AudioBaseSrcActualLatencyTimePropertyInfo
+data AudioBaseSrcBufferTimePropertyInfo
+data AudioBaseSrcLatencyTimePropertyInfo
+data AudioBaseSrcProvideClockPropertyInfo
+data AudioBaseSrcSlaveMethodPropertyInfo
+data AudioBaseSrcCreateRingbufferMethodInfo
+data AudioBaseSrcGetProvideClockMethodInfo
+data AudioBaseSrcGetSlaveMethodMethodInfo
+data AudioBaseSrcSetProvideClockMethodInfo
+data AudioBaseSrcSetSlaveMethodMethodInfo
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,324 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioCdSrc
+    ( 
+
+-- * Exported types
+    AudioCdSrc(..)                          ,
+    AudioCdSrcK                             ,
+    toAudioCdSrc                            ,
+    noAudioCdSrc                            ,
+
+
+ -- * Methods
+-- ** audioCdSrcAddTrack
+    AudioCdSrcAddTrackMethodInfo            ,
+    audioCdSrcAddTrack                      ,
+
+
+
+
+ -- * Properties
+-- ** Device
+    AudioCdSrcDevicePropertyInfo            ,
+    constructAudioCdSrcDevice               ,
+    getAudioCdSrcDevice                     ,
+    setAudioCdSrcDevice                     ,
+
+
+-- ** Mode
+    AudioCdSrcModePropertyInfo              ,
+    constructAudioCdSrcMode                 ,
+    getAudioCdSrcMode                       ,
+    setAudioCdSrcMode                       ,
+
+
+-- ** Track
+    AudioCdSrcTrackPropertyInfo             ,
+    constructAudioCdSrcTrack                ,
+    getAudioCdSrcTrack                      ,
+    setAudioCdSrcTrack                      ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioCdSrc = AudioCdSrc (ForeignPtr AudioCdSrc)
+foreign import ccall "gst_audio_cd_src_get_type"
+    c_gst_audio_cd_src_get_type :: IO GType
+
+type instance ParentTypes AudioCdSrc = AudioCdSrcParentTypes
+type AudioCdSrcParentTypes = '[GstBase.PushSrc, GstBase.BaseSrc, Gst.Element, Gst.Object, GObject.Object, Gst.URIHandler]
+
+instance GObject AudioCdSrc where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_cd_src_get_type
+    
+
+class GObject o => AudioCdSrcK o
+instance (GObject o, IsDescendantOf AudioCdSrc o) => AudioCdSrcK o
+
+toAudioCdSrc :: AudioCdSrcK o => o -> IO AudioCdSrc
+toAudioCdSrc = unsafeCastTo AudioCdSrc
+
+noAudioCdSrc :: Maybe AudioCdSrc
+noAudioCdSrc = Nothing
+
+type family ResolveAudioCdSrcMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioCdSrcMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioCdSrcMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioCdSrcMethod "addTrack" o = AudioCdSrcAddTrackMethodInfo
+    ResolveAudioCdSrcMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioCdSrcMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioCdSrcMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioCdSrcMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioCdSrcMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioCdSrcMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioCdSrcMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioCdSrcMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioCdSrcMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioCdSrcMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioCdSrcMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioCdSrcMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioCdSrcMethod "isAsync" o = GstBase.BaseSrcIsAsyncMethodInfo
+    ResolveAudioCdSrcMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioCdSrcMethod "isLive" o = GstBase.BaseSrcIsLiveMethodInfo
+    ResolveAudioCdSrcMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioCdSrcMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioCdSrcMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioCdSrcMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioCdSrcMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioCdSrcMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioCdSrcMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioCdSrcMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioCdSrcMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioCdSrcMethod "newSeamlessSegment" o = GstBase.BaseSrcNewSeamlessSegmentMethodInfo
+    ResolveAudioCdSrcMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioCdSrcMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioCdSrcMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioCdSrcMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioCdSrcMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioCdSrcMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioCdSrcMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioCdSrcMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioCdSrcMethod "queryLatency" o = GstBase.BaseSrcQueryLatencyMethodInfo
+    ResolveAudioCdSrcMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioCdSrcMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioCdSrcMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioCdSrcMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioCdSrcMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioCdSrcMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioCdSrcMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioCdSrcMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioCdSrcMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioCdSrcMethod "startComplete" o = GstBase.BaseSrcStartCompleteMethodInfo
+    ResolveAudioCdSrcMethod "startWait" o = GstBase.BaseSrcStartWaitMethodInfo
+    ResolveAudioCdSrcMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioCdSrcMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioCdSrcMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioCdSrcMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioCdSrcMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioCdSrcMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioCdSrcMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioCdSrcMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioCdSrcMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioCdSrcMethod "waitPlaying" o = GstBase.BaseSrcWaitPlayingMethodInfo
+    ResolveAudioCdSrcMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioCdSrcMethod "getAllocator" o = GstBase.BaseSrcGetAllocatorMethodInfo
+    ResolveAudioCdSrcMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioCdSrcMethod "getBlocksize" o = GstBase.BaseSrcGetBlocksizeMethodInfo
+    ResolveAudioCdSrcMethod "getBufferPool" o = GstBase.BaseSrcGetBufferPoolMethodInfo
+    ResolveAudioCdSrcMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioCdSrcMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioCdSrcMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioCdSrcMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioCdSrcMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioCdSrcMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioCdSrcMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioCdSrcMethod "getDoTimestamp" o = GstBase.BaseSrcGetDoTimestampMethodInfo
+    ResolveAudioCdSrcMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioCdSrcMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioCdSrcMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioCdSrcMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioCdSrcMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioCdSrcMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioCdSrcMethod "getProtocols" o = Gst.URIHandlerGetProtocolsMethodInfo
+    ResolveAudioCdSrcMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioCdSrcMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioCdSrcMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioCdSrcMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioCdSrcMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioCdSrcMethod "getUri" o = Gst.URIHandlerGetUriMethodInfo
+    ResolveAudioCdSrcMethod "getUriType" o = Gst.URIHandlerGetUriTypeMethodInfo
+    ResolveAudioCdSrcMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioCdSrcMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioCdSrcMethod "setAsync" o = GstBase.BaseSrcSetAsyncMethodInfo
+    ResolveAudioCdSrcMethod "setAutomaticEos" o = GstBase.BaseSrcSetAutomaticEosMethodInfo
+    ResolveAudioCdSrcMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioCdSrcMethod "setBlocksize" o = GstBase.BaseSrcSetBlocksizeMethodInfo
+    ResolveAudioCdSrcMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioCdSrcMethod "setCaps" o = GstBase.BaseSrcSetCapsMethodInfo
+    ResolveAudioCdSrcMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioCdSrcMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioCdSrcMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioCdSrcMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioCdSrcMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioCdSrcMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioCdSrcMethod "setDoTimestamp" o = GstBase.BaseSrcSetDoTimestampMethodInfo
+    ResolveAudioCdSrcMethod "setDynamicSize" o = GstBase.BaseSrcSetDynamicSizeMethodInfo
+    ResolveAudioCdSrcMethod "setFormat" o = GstBase.BaseSrcSetFormatMethodInfo
+    ResolveAudioCdSrcMethod "setLive" o = GstBase.BaseSrcSetLiveMethodInfo
+    ResolveAudioCdSrcMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioCdSrcMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioCdSrcMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioCdSrcMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioCdSrcMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioCdSrcMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioCdSrcMethod "setUri" o = Gst.URIHandlerSetUriMethodInfo
+    ResolveAudioCdSrcMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioCdSrcMethod t AudioCdSrc, MethodInfo info AudioCdSrc p) => IsLabelProxy t (AudioCdSrc -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioCdSrcMethod t AudioCdSrc, MethodInfo info AudioCdSrc p) => IsLabel t (AudioCdSrc -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "device"
+   -- Type: TBasicType TUTF8
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioCdSrcDevice :: (MonadIO m, AudioCdSrcK o) => o -> m T.Text
+getAudioCdSrcDevice obj = liftIO $ getObjectPropertyString obj "device"
+
+setAudioCdSrcDevice :: (MonadIO m, AudioCdSrcK o) => o -> T.Text -> m ()
+setAudioCdSrcDevice obj val = liftIO $ setObjectPropertyString obj "device" val
+
+constructAudioCdSrcDevice :: T.Text -> IO ([Char], GValue)
+constructAudioCdSrcDevice val = constructObjectPropertyString "device" val
+
+data AudioCdSrcDevicePropertyInfo
+instance AttrInfo AudioCdSrcDevicePropertyInfo where
+    type AttrAllowedOps AudioCdSrcDevicePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcDevicePropertyInfo = (~) T.Text
+    type AttrBaseTypeConstraint AudioCdSrcDevicePropertyInfo = AudioCdSrcK
+    type AttrGetType AudioCdSrcDevicePropertyInfo = T.Text
+    type AttrLabel AudioCdSrcDevicePropertyInfo = "device"
+    attrGet _ = getAudioCdSrcDevice
+    attrSet _ = setAudioCdSrcDevice
+    attrConstruct _ = constructAudioCdSrcDevice
+
+-- VVV Prop "mode"
+   -- Type: TInterface "GstAudio" "AudioCdSrcMode"
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioCdSrcMode :: (MonadIO m, AudioCdSrcK o) => o -> m AudioCdSrcMode
+getAudioCdSrcMode obj = liftIO $ getObjectPropertyEnum obj "mode"
+
+setAudioCdSrcMode :: (MonadIO m, AudioCdSrcK o) => o -> AudioCdSrcMode -> m ()
+setAudioCdSrcMode obj val = liftIO $ setObjectPropertyEnum obj "mode" val
+
+constructAudioCdSrcMode :: AudioCdSrcMode -> IO ([Char], GValue)
+constructAudioCdSrcMode val = constructObjectPropertyEnum "mode" val
+
+data AudioCdSrcModePropertyInfo
+instance AttrInfo AudioCdSrcModePropertyInfo where
+    type AttrAllowedOps AudioCdSrcModePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcModePropertyInfo = (~) AudioCdSrcMode
+    type AttrBaseTypeConstraint AudioCdSrcModePropertyInfo = AudioCdSrcK
+    type AttrGetType AudioCdSrcModePropertyInfo = AudioCdSrcMode
+    type AttrLabel AudioCdSrcModePropertyInfo = "mode"
+    attrGet _ = getAudioCdSrcMode
+    attrSet _ = setAudioCdSrcMode
+    attrConstruct _ = constructAudioCdSrcMode
+
+-- VVV Prop "track"
+   -- Type: TBasicType TUInt32
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioCdSrcTrack :: (MonadIO m, AudioCdSrcK o) => o -> m Word32
+getAudioCdSrcTrack obj = liftIO $ getObjectPropertyCUInt obj "track"
+
+setAudioCdSrcTrack :: (MonadIO m, AudioCdSrcK o) => o -> Word32 -> m ()
+setAudioCdSrcTrack obj val = liftIO $ setObjectPropertyCUInt obj "track" val
+
+constructAudioCdSrcTrack :: Word32 -> IO ([Char], GValue)
+constructAudioCdSrcTrack val = constructObjectPropertyCUInt "track" val
+
+data AudioCdSrcTrackPropertyInfo
+instance AttrInfo AudioCdSrcTrackPropertyInfo where
+    type AttrAllowedOps AudioCdSrcTrackPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioCdSrcTrackPropertyInfo = (~) Word32
+    type AttrBaseTypeConstraint AudioCdSrcTrackPropertyInfo = AudioCdSrcK
+    type AttrGetType AudioCdSrcTrackPropertyInfo = Word32
+    type AttrLabel AudioCdSrcTrackPropertyInfo = "track"
+    attrGet _ = getAudioCdSrcTrack
+    attrSet _ = setAudioCdSrcTrack
+    attrConstruct _ = constructAudioCdSrcTrack
+
+type instance AttributeList AudioCdSrc = AudioCdSrcAttributeList
+type AudioCdSrcAttributeList = ('[ '("blocksize", GstBase.BaseSrcBlocksizePropertyInfo), '("device", AudioCdSrcDevicePropertyInfo), '("doTimestamp", GstBase.BaseSrcDoTimestampPropertyInfo), '("mode", AudioCdSrcModePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("track", AudioCdSrcTrackPropertyInfo), '("typefind", GstBase.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioCdSrc = AudioCdSrcSignalList
+type AudioCdSrcSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioCdSrc::add_track
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioCdSrc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "track", argType = TInterface "GstAudio" "AudioCdSrcTrack", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_cd_src_add_track" gst_audio_cd_src_add_track :: 
+    Ptr AudioCdSrc ->                       -- _obj : TInterface "GstAudio" "AudioCdSrc"
+    Ptr AudioCdSrcTrack ->                  -- track : TInterface "GstAudio" "AudioCdSrcTrack"
+    IO CInt
+
+
+audioCdSrcAddTrack ::
+    (MonadIO m, AudioCdSrcK a) =>
+    a                                       -- _obj
+    -> AudioCdSrcTrack                      -- track
+    -> m Bool                               -- result
+audioCdSrcAddTrack _obj track = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let track' = unsafeManagedPtrGetPtr track
+    result <- gst_audio_cd_src_add_track _obj' track'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr track
+    return result'
+
+data AudioCdSrcAddTrackMethodInfo
+instance (signature ~ (AudioCdSrcTrack -> m Bool), MonadIO m, AudioCdSrcK a) => MethodInfo AudioCdSrcAddTrackMethodInfo a signature where
+    overloadedMethod _ = audioCdSrcAddTrack
+
+
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,17 @@
+module GI.GstAudio.Objects.AudioCdSrc where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioCdSrc = AudioCdSrc (ForeignPtr AudioCdSrc)
+instance GObject AudioCdSrc where
+class GObject o => AudioCdSrcK o
+instance (GObject o, IsDescendantOf AudioCdSrc o) => AudioCdSrcK o
+data AudioCdSrcDevicePropertyInfo
+data AudioCdSrcModePropertyInfo
+data AudioCdSrcTrackPropertyInfo
+data AudioCdSrcAddTrackMethodInfo
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,293 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioClock
+    ( 
+
+-- * Exported types
+    AudioClock(..)                          ,
+    AudioClockK                             ,
+    toAudioClock                            ,
+    noAudioClock                            ,
+
+
+ -- * Methods
+-- ** audioClockAdjust
+    audioClockAdjust                        ,
+
+
+-- ** audioClockGetTime
+    audioClockGetTime                       ,
+
+
+-- ** audioClockInvalidate
+    audioClockInvalidate                    ,
+
+
+-- ** audioClockNew
+    audioClockNew                           ,
+
+
+-- ** audioClockReset
+    AudioClockResetMethodInfo               ,
+    audioClockReset                         ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GLib as GLib
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+
+newtype AudioClock = AudioClock (ForeignPtr AudioClock)
+foreign import ccall "gst_audio_clock_get_type"
+    c_gst_audio_clock_get_type :: IO GType
+
+type instance ParentTypes AudioClock = AudioClockParentTypes
+type AudioClockParentTypes = '[Gst.SystemClock, Gst.Clock, Gst.Object, GObject.Object]
+
+instance GObject AudioClock where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_clock_get_type
+    
+
+class GObject o => AudioClockK o
+instance (GObject o, IsDescendantOf AudioClock o) => AudioClockK o
+
+toAudioClock :: AudioClockK o => o -> IO AudioClock
+toAudioClock = unsafeCastTo AudioClock
+
+noAudioClock :: Maybe AudioClock
+noAudioClock = Nothing
+
+type family ResolveAudioClockMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioClockMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioClockMethod "addObservation" o = Gst.ClockAddObservationMethodInfo
+    ResolveAudioClockMethod "addObservationUnapplied" o = Gst.ClockAddObservationUnappliedMethodInfo
+    ResolveAudioClockMethod "adjustUnlocked" o = Gst.ClockAdjustUnlockedMethodInfo
+    ResolveAudioClockMethod "adjustWithCalibration" o = Gst.ClockAdjustWithCalibrationMethodInfo
+    ResolveAudioClockMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioClockMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioClockMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioClockMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioClockMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioClockMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioClockMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioClockMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioClockMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioClockMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioClockMethod "isSynced" o = Gst.ClockIsSyncedMethodInfo
+    ResolveAudioClockMethod "newPeriodicId" o = Gst.ClockNewPeriodicIdMethodInfo
+    ResolveAudioClockMethod "newSingleShotId" o = Gst.ClockNewSingleShotIdMethodInfo
+    ResolveAudioClockMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioClockMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioClockMethod "periodicIdReinit" o = Gst.ClockPeriodicIdReinitMethodInfo
+    ResolveAudioClockMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioClockMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioClockMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioClockMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioClockMethod "reset" o = AudioClockResetMethodInfo
+    ResolveAudioClockMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioClockMethod "singleShotIdReinit" o = Gst.ClockSingleShotIdReinitMethodInfo
+    ResolveAudioClockMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioClockMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioClockMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioClockMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioClockMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioClockMethod "unadjustUnlocked" o = Gst.ClockUnadjustUnlockedMethodInfo
+    ResolveAudioClockMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioClockMethod "waitForSync" o = Gst.ClockWaitForSyncMethodInfo
+    ResolveAudioClockMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioClockMethod "getCalibration" o = Gst.ClockGetCalibrationMethodInfo
+    ResolveAudioClockMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioClockMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioClockMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioClockMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioClockMethod "getInternalTime" o = Gst.ClockGetInternalTimeMethodInfo
+    ResolveAudioClockMethod "getMaster" o = Gst.ClockGetMasterMethodInfo
+    ResolveAudioClockMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioClockMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioClockMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioClockMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioClockMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioClockMethod "getResolution" o = Gst.ClockGetResolutionMethodInfo
+    ResolveAudioClockMethod "getTimeout" o = Gst.ClockGetTimeoutMethodInfo
+    ResolveAudioClockMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioClockMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioClockMethod "setCalibration" o = Gst.ClockSetCalibrationMethodInfo
+    ResolveAudioClockMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioClockMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioClockMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioClockMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioClockMethod "setMaster" o = Gst.ClockSetMasterMethodInfo
+    ResolveAudioClockMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioClockMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioClockMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioClockMethod "setResolution" o = Gst.ClockSetResolutionMethodInfo
+    ResolveAudioClockMethod "setSynced" o = Gst.ClockSetSyncedMethodInfo
+    ResolveAudioClockMethod "setTimeout" o = Gst.ClockSetTimeoutMethodInfo
+    ResolveAudioClockMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioClockMethod t AudioClock, MethodInfo info AudioClock p) => IsLabelProxy t (AudioClock -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioClockMethod t AudioClock, MethodInfo info AudioClock p) => IsLabel t (AudioClock -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+type instance AttributeList AudioClock = AudioClockAttributeList
+type AudioClockAttributeList = ('[ '("clockType", Gst.SystemClockClockTypePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("timeout", Gst.ClockTimeoutPropertyInfo), '("windowSize", Gst.ClockWindowSizePropertyInfo), '("windowThreshold", Gst.ClockWindowThresholdPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioClock = AudioClockSignalList
+type AudioClockSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("synced", Gst.ClockSyncedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioClock::new
+-- method type : Constructor
+-- Args : [Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface "GstAudio" "AudioClockGetTimeFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioClock"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_new" gst_audio_clock_new :: 
+    CString ->                              -- name : TBasicType TUTF8
+    FunPtr AudioClockGetTimeFuncC ->        -- func : TInterface "GstAudio" "AudioClockGetTimeFunc"
+    Ptr () ->                               -- user_data : TBasicType TVoid
+    FunPtr GLib.DestroyNotifyC ->           -- destroy_notify : TInterface "GLib" "DestroyNotify"
+    IO (Ptr AudioClock)
+
+
+audioClockNew ::
+    (MonadIO m) =>
+    T.Text                                  -- name
+    -> AudioClockGetTimeFunc                -- func
+    -> m AudioClock                         -- result
+audioClockNew name func = liftIO $ do
+    name' <- textToCString name
+    func' <- mkAudioClockGetTimeFunc (audioClockGetTimeFuncWrapper Nothing func)
+    let userData = castFunPtrToPtr func'
+    let destroyNotify = safeFreeFunPtrPtr
+    result <- gst_audio_clock_new name' func' userData destroyNotify
+    checkUnexpectedReturnNULL "gst_audio_clock_new" result
+    result' <- (newObject AudioClock) result
+    freeMem name'
+    return result'
+
+-- method AudioClock::reset
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioClock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_reset" gst_audio_clock_reset :: 
+    Ptr AudioClock ->                       -- _obj : TInterface "GstAudio" "AudioClock"
+    Word64 ->                               -- time : TBasicType TUInt64
+    IO ()
+
+
+audioClockReset ::
+    (MonadIO m, AudioClockK a) =>
+    a                                       -- _obj
+    -> Word64                               -- time
+    -> m ()                                 -- result
+audioClockReset _obj time = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_clock_reset _obj' time
+    touchManagedPtr _obj
+    return ()
+
+data AudioClockResetMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioClockK a) => MethodInfo AudioClockResetMethodInfo a signature where
+    overloadedMethod _ = audioClockReset
+
+-- method AudioClock::adjust
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_adjust" gst_audio_clock_adjust :: 
+    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
+    Word64 ->                               -- time : TBasicType TUInt64
+    IO Word64
+
+
+audioClockAdjust ::
+    (MonadIO m, Gst.ClockK a) =>
+    a                                       -- clock
+    -> Word64                               -- time
+    -> m Word64                             -- result
+audioClockAdjust clock time = liftIO $ do
+    let clock' = unsafeManagedPtrCastPtr clock
+    result <- gst_audio_clock_adjust clock' time
+    touchManagedPtr clock
+    return result
+
+-- method AudioClock::get_time
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_get_time" gst_audio_clock_get_time :: 
+    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
+    IO Word64
+
+
+audioClockGetTime ::
+    (MonadIO m, Gst.ClockK a) =>
+    a                                       -- clock
+    -> m Word64                             -- result
+audioClockGetTime clock = liftIO $ do
+    let clock' = unsafeManagedPtrCastPtr clock
+    result <- gst_audio_clock_get_time clock'
+    touchManagedPtr clock
+    return result
+
+-- method AudioClock::invalidate
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_clock_invalidate" gst_audio_clock_invalidate :: 
+    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
+    IO ()
+
+
+audioClockInvalidate ::
+    (MonadIO m, Gst.ClockK a) =>
+    a                                       -- clock
+    -> m ()                                 -- result
+audioClockInvalidate clock = liftIO $ do
+    let clock' = unsafeManagedPtrCastPtr clock
+    gst_audio_clock_invalidate clock'
+    touchManagedPtr clock
+    return ()
+
+
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,14 @@
+module GI.GstAudio.Objects.AudioClock where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioClock = AudioClock (ForeignPtr AudioClock)
+instance GObject AudioClock where
+class GObject o => AudioClockK o
+instance (GObject o, IsDescendantOf AudioClock o) => AudioClockK o
+data AudioClockResetMethodInfo
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,1320 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioDecoder
+    ( 
+
+-- * Exported types
+    AudioDecoder(..)                        ,
+    AudioDecoderK                           ,
+    toAudioDecoder                          ,
+    noAudioDecoder                          ,
+
+
+ -- * Methods
+-- ** audioDecoderAllocateOutputBuffer
+    AudioDecoderAllocateOutputBufferMethodInfo,
+    audioDecoderAllocateOutputBuffer        ,
+
+
+-- ** audioDecoderFinishFrame
+    AudioDecoderFinishFrameMethodInfo       ,
+    audioDecoderFinishFrame                 ,
+
+
+-- ** audioDecoderGetAllocator
+    AudioDecoderGetAllocatorMethodInfo      ,
+    audioDecoderGetAllocator                ,
+
+
+-- ** audioDecoderGetAudioInfo
+    AudioDecoderGetAudioInfoMethodInfo      ,
+    audioDecoderGetAudioInfo                ,
+
+
+-- ** audioDecoderGetDelay
+    AudioDecoderGetDelayMethodInfo          ,
+    audioDecoderGetDelay                    ,
+
+
+-- ** audioDecoderGetDrainable
+    AudioDecoderGetDrainableMethodInfo      ,
+    audioDecoderGetDrainable                ,
+
+
+-- ** audioDecoderGetEstimateRate
+    AudioDecoderGetEstimateRateMethodInfo   ,
+    audioDecoderGetEstimateRate             ,
+
+
+-- ** audioDecoderGetLatency
+    AudioDecoderGetLatencyMethodInfo        ,
+    audioDecoderGetLatency                  ,
+
+
+-- ** audioDecoderGetMaxErrors
+    AudioDecoderGetMaxErrorsMethodInfo      ,
+    audioDecoderGetMaxErrors                ,
+
+
+-- ** audioDecoderGetMinLatency
+    AudioDecoderGetMinLatencyMethodInfo     ,
+    audioDecoderGetMinLatency               ,
+
+
+-- ** audioDecoderGetNeedsFormat
+    AudioDecoderGetNeedsFormatMethodInfo    ,
+    audioDecoderGetNeedsFormat              ,
+
+
+-- ** audioDecoderGetParseState
+    AudioDecoderGetParseStateMethodInfo     ,
+    audioDecoderGetParseState               ,
+
+
+-- ** audioDecoderGetPlc
+    AudioDecoderGetPlcMethodInfo            ,
+    audioDecoderGetPlc                      ,
+
+
+-- ** audioDecoderGetPlcAware
+    AudioDecoderGetPlcAwareMethodInfo       ,
+    audioDecoderGetPlcAware                 ,
+
+
+-- ** audioDecoderGetTolerance
+    AudioDecoderGetToleranceMethodInfo      ,
+    audioDecoderGetTolerance                ,
+
+
+-- ** audioDecoderMergeTags
+    AudioDecoderMergeTagsMethodInfo         ,
+    audioDecoderMergeTags                   ,
+
+
+-- ** audioDecoderNegotiate
+    AudioDecoderNegotiateMethodInfo         ,
+    audioDecoderNegotiate                   ,
+
+
+-- ** audioDecoderProxyGetcaps
+    AudioDecoderProxyGetcapsMethodInfo      ,
+    audioDecoderProxyGetcaps                ,
+
+
+-- ** audioDecoderSetDrainable
+    AudioDecoderSetDrainableMethodInfo      ,
+    audioDecoderSetDrainable                ,
+
+
+-- ** audioDecoderSetEstimateRate
+    AudioDecoderSetEstimateRateMethodInfo   ,
+    audioDecoderSetEstimateRate             ,
+
+
+-- ** audioDecoderSetLatency
+    AudioDecoderSetLatencyMethodInfo        ,
+    audioDecoderSetLatency                  ,
+
+
+-- ** audioDecoderSetMaxErrors
+    AudioDecoderSetMaxErrorsMethodInfo      ,
+    audioDecoderSetMaxErrors                ,
+
+
+-- ** audioDecoderSetMinLatency
+    AudioDecoderSetMinLatencyMethodInfo     ,
+    audioDecoderSetMinLatency               ,
+
+
+-- ** audioDecoderSetNeedsFormat
+    AudioDecoderSetNeedsFormatMethodInfo    ,
+    audioDecoderSetNeedsFormat              ,
+
+
+-- ** audioDecoderSetOutputFormat
+    AudioDecoderSetOutputFormatMethodInfo   ,
+    audioDecoderSetOutputFormat             ,
+
+
+-- ** audioDecoderSetPlc
+    AudioDecoderSetPlcMethodInfo            ,
+    audioDecoderSetPlc                      ,
+
+
+-- ** audioDecoderSetPlcAware
+    AudioDecoderSetPlcAwareMethodInfo       ,
+    audioDecoderSetPlcAware                 ,
+
+
+-- ** audioDecoderSetTolerance
+    AudioDecoderSetToleranceMethodInfo      ,
+    audioDecoderSetTolerance                ,
+
+
+-- ** audioDecoderSetUseDefaultPadAcceptcaps
+    AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo,
+    audioDecoderSetUseDefaultPadAcceptcaps  ,
+
+
+
+
+ -- * Properties
+-- ** MinLatency
+    AudioDecoderMinLatencyPropertyInfo      ,
+    constructAudioDecoderMinLatency         ,
+    getAudioDecoderMinLatency               ,
+    setAudioDecoderMinLatency               ,
+
+
+-- ** Plc
+    AudioDecoderPlcPropertyInfo             ,
+    constructAudioDecoderPlc                ,
+    getAudioDecoderPlc                      ,
+    setAudioDecoderPlc                      ,
+
+
+-- ** Tolerance
+    AudioDecoderTolerancePropertyInfo       ,
+    constructAudioDecoderTolerance          ,
+    getAudioDecoderTolerance                ,
+    setAudioDecoderTolerance                ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+
+newtype AudioDecoder = AudioDecoder (ForeignPtr AudioDecoder)
+foreign import ccall "gst_audio_decoder_get_type"
+    c_gst_audio_decoder_get_type :: IO GType
+
+type instance ParentTypes AudioDecoder = AudioDecoderParentTypes
+type AudioDecoderParentTypes = '[Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioDecoder where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_decoder_get_type
+    
+
+class GObject o => AudioDecoderK o
+instance (GObject o, IsDescendantOf AudioDecoder o) => AudioDecoderK o
+
+toAudioDecoder :: AudioDecoderK o => o -> IO AudioDecoder
+toAudioDecoder = unsafeCastTo AudioDecoder
+
+noAudioDecoder :: Maybe AudioDecoder
+noAudioDecoder = Nothing
+
+type family ResolveAudioDecoderMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioDecoderMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioDecoderMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioDecoderMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioDecoderMethod "allocateOutputBuffer" o = AudioDecoderAllocateOutputBufferMethodInfo
+    ResolveAudioDecoderMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioDecoderMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioDecoderMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioDecoderMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioDecoderMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioDecoderMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioDecoderMethod "finishFrame" o = AudioDecoderFinishFrameMethodInfo
+    ResolveAudioDecoderMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioDecoderMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioDecoderMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioDecoderMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioDecoderMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioDecoderMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioDecoderMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioDecoderMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioDecoderMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioDecoderMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioDecoderMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioDecoderMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioDecoderMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioDecoderMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioDecoderMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioDecoderMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioDecoderMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioDecoderMethod "mergeTags" o = AudioDecoderMergeTagsMethodInfo
+    ResolveAudioDecoderMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioDecoderMethod "negotiate" o = AudioDecoderNegotiateMethodInfo
+    ResolveAudioDecoderMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioDecoderMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioDecoderMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioDecoderMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioDecoderMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioDecoderMethod "proxyGetcaps" o = AudioDecoderProxyGetcapsMethodInfo
+    ResolveAudioDecoderMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioDecoderMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioDecoderMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioDecoderMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioDecoderMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioDecoderMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioDecoderMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioDecoderMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioDecoderMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioDecoderMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioDecoderMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioDecoderMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioDecoderMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioDecoderMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioDecoderMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioDecoderMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioDecoderMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioDecoderMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioDecoderMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioDecoderMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioDecoderMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioDecoderMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioDecoderMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioDecoderMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioDecoderMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioDecoderMethod "getAllocator" o = AudioDecoderGetAllocatorMethodInfo
+    ResolveAudioDecoderMethod "getAudioInfo" o = AudioDecoderGetAudioInfoMethodInfo
+    ResolveAudioDecoderMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioDecoderMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioDecoderMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioDecoderMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioDecoderMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioDecoderMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioDecoderMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioDecoderMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioDecoderMethod "getDelay" o = AudioDecoderGetDelayMethodInfo
+    ResolveAudioDecoderMethod "getDrainable" o = AudioDecoderGetDrainableMethodInfo
+    ResolveAudioDecoderMethod "getEstimateRate" o = AudioDecoderGetEstimateRateMethodInfo
+    ResolveAudioDecoderMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioDecoderMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioDecoderMethod "getLatency" o = AudioDecoderGetLatencyMethodInfo
+    ResolveAudioDecoderMethod "getMaxErrors" o = AudioDecoderGetMaxErrorsMethodInfo
+    ResolveAudioDecoderMethod "getMinLatency" o = AudioDecoderGetMinLatencyMethodInfo
+    ResolveAudioDecoderMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioDecoderMethod "getNeedsFormat" o = AudioDecoderGetNeedsFormatMethodInfo
+    ResolveAudioDecoderMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioDecoderMethod "getParseState" o = AudioDecoderGetParseStateMethodInfo
+    ResolveAudioDecoderMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioDecoderMethod "getPlc" o = AudioDecoderGetPlcMethodInfo
+    ResolveAudioDecoderMethod "getPlcAware" o = AudioDecoderGetPlcAwareMethodInfo
+    ResolveAudioDecoderMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioDecoderMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioDecoderMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioDecoderMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioDecoderMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioDecoderMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioDecoderMethod "getTolerance" o = AudioDecoderGetToleranceMethodInfo
+    ResolveAudioDecoderMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioDecoderMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioDecoderMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioDecoderMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioDecoderMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioDecoderMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioDecoderMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioDecoderMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioDecoderMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioDecoderMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioDecoderMethod "setDrainable" o = AudioDecoderSetDrainableMethodInfo
+    ResolveAudioDecoderMethod "setEstimateRate" o = AudioDecoderSetEstimateRateMethodInfo
+    ResolveAudioDecoderMethod "setLatency" o = AudioDecoderSetLatencyMethodInfo
+    ResolveAudioDecoderMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioDecoderMethod "setMaxErrors" o = AudioDecoderSetMaxErrorsMethodInfo
+    ResolveAudioDecoderMethod "setMinLatency" o = AudioDecoderSetMinLatencyMethodInfo
+    ResolveAudioDecoderMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioDecoderMethod "setNeedsFormat" o = AudioDecoderSetNeedsFormatMethodInfo
+    ResolveAudioDecoderMethod "setOutputFormat" o = AudioDecoderSetOutputFormatMethodInfo
+    ResolveAudioDecoderMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioDecoderMethod "setPlc" o = AudioDecoderSetPlcMethodInfo
+    ResolveAudioDecoderMethod "setPlcAware" o = AudioDecoderSetPlcAwareMethodInfo
+    ResolveAudioDecoderMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioDecoderMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioDecoderMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioDecoderMethod "setTolerance" o = AudioDecoderSetToleranceMethodInfo
+    ResolveAudioDecoderMethod "setUseDefaultPadAcceptcaps" o = AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
+    ResolveAudioDecoderMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioDecoderMethod t AudioDecoder, MethodInfo info AudioDecoder p) => IsLabelProxy t (AudioDecoder -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioDecoderMethod t AudioDecoder, MethodInfo info AudioDecoder p) => IsLabel t (AudioDecoder -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "min-latency"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioDecoderMinLatency :: (MonadIO m, AudioDecoderK o) => o -> m Int64
+getAudioDecoderMinLatency obj = liftIO $ getObjectPropertyInt64 obj "min-latency"
+
+setAudioDecoderMinLatency :: (MonadIO m, AudioDecoderK o) => o -> Int64 -> m ()
+setAudioDecoderMinLatency obj val = liftIO $ setObjectPropertyInt64 obj "min-latency" val
+
+constructAudioDecoderMinLatency :: Int64 -> IO ([Char], GValue)
+constructAudioDecoderMinLatency val = constructObjectPropertyInt64 "min-latency" val
+
+data AudioDecoderMinLatencyPropertyInfo
+instance AttrInfo AudioDecoderMinLatencyPropertyInfo where
+    type AttrAllowedOps AudioDecoderMinLatencyPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderMinLatencyPropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioDecoderMinLatencyPropertyInfo = AudioDecoderK
+    type AttrGetType AudioDecoderMinLatencyPropertyInfo = Int64
+    type AttrLabel AudioDecoderMinLatencyPropertyInfo = "min-latency"
+    attrGet _ = getAudioDecoderMinLatency
+    attrSet _ = setAudioDecoderMinLatency
+    attrConstruct _ = constructAudioDecoderMinLatency
+
+-- VVV Prop "plc"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioDecoderPlc :: (MonadIO m, AudioDecoderK o) => o -> m Bool
+getAudioDecoderPlc obj = liftIO $ getObjectPropertyBool obj "plc"
+
+setAudioDecoderPlc :: (MonadIO m, AudioDecoderK o) => o -> Bool -> m ()
+setAudioDecoderPlc obj val = liftIO $ setObjectPropertyBool obj "plc" val
+
+constructAudioDecoderPlc :: Bool -> IO ([Char], GValue)
+constructAudioDecoderPlc val = constructObjectPropertyBool "plc" val
+
+data AudioDecoderPlcPropertyInfo
+instance AttrInfo AudioDecoderPlcPropertyInfo where
+    type AttrAllowedOps AudioDecoderPlcPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderPlcPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioDecoderPlcPropertyInfo = AudioDecoderK
+    type AttrGetType AudioDecoderPlcPropertyInfo = Bool
+    type AttrLabel AudioDecoderPlcPropertyInfo = "plc"
+    attrGet _ = getAudioDecoderPlc
+    attrSet _ = setAudioDecoderPlc
+    attrConstruct _ = constructAudioDecoderPlc
+
+-- VVV Prop "tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioDecoderTolerance :: (MonadIO m, AudioDecoderK o) => o -> m Int64
+getAudioDecoderTolerance obj = liftIO $ getObjectPropertyInt64 obj "tolerance"
+
+setAudioDecoderTolerance :: (MonadIO m, AudioDecoderK o) => o -> Int64 -> m ()
+setAudioDecoderTolerance obj val = liftIO $ setObjectPropertyInt64 obj "tolerance" val
+
+constructAudioDecoderTolerance :: Int64 -> IO ([Char], GValue)
+constructAudioDecoderTolerance val = constructObjectPropertyInt64 "tolerance" val
+
+data AudioDecoderTolerancePropertyInfo
+instance AttrInfo AudioDecoderTolerancePropertyInfo where
+    type AttrAllowedOps AudioDecoderTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioDecoderTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioDecoderTolerancePropertyInfo = AudioDecoderK
+    type AttrGetType AudioDecoderTolerancePropertyInfo = Int64
+    type AttrLabel AudioDecoderTolerancePropertyInfo = "tolerance"
+    attrGet _ = getAudioDecoderTolerance
+    attrSet _ = setAudioDecoderTolerance
+    attrConstruct _ = constructAudioDecoderTolerance
+
+type instance AttributeList AudioDecoder = AudioDecoderAttributeList
+type AudioDecoderAttributeList = ('[ '("minLatency", AudioDecoderMinLatencyPropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("plc", AudioDecoderPlcPropertyInfo), '("tolerance", AudioDecoderTolerancePropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioDecoder = AudioDecoderSignalList
+type AudioDecoderSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioDecoder::allocate_output_buffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Buffer"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_allocate_output_buffer" gst_audio_decoder_allocate_output_buffer :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Word64 ->                               -- size : TBasicType TUInt64
+    IO (Ptr Gst.Buffer)
+
+
+audioDecoderAllocateOutputBuffer ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- size
+    -> m Gst.Buffer                         -- result
+audioDecoderAllocateOutputBuffer _obj size = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_allocate_output_buffer _obj' size
+    checkUnexpectedReturnNULL "gst_audio_decoder_allocate_output_buffer" result
+    result' <- (wrapBoxed Gst.Buffer) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderAllocateOutputBufferMethodInfo
+instance (signature ~ (Word64 -> m Gst.Buffer), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderAllocateOutputBufferMethodInfo a signature where
+    overloadedMethod _ = audioDecoderAllocateOutputBuffer
+
+-- method AudioDecoder::finish_frame
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buf", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "frames", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "FlowReturn"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_finish_frame" gst_audio_decoder_finish_frame :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr Gst.Buffer ->                       -- buf : TInterface "Gst" "Buffer"
+    Int32 ->                                -- frames : TBasicType TInt32
+    IO CUInt
+
+
+audioDecoderFinishFrame ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Gst.Buffer                           -- buf
+    -> Int32                                -- frames
+    -> m Gst.FlowReturn                     -- result
+audioDecoderFinishFrame _obj buf frames = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let buf' = unsafeManagedPtrGetPtr buf
+    result <- gst_audio_decoder_finish_frame _obj' buf' frames
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr _obj
+    touchManagedPtr buf
+    return result'
+
+data AudioDecoderFinishFrameMethodInfo
+instance (signature ~ (Gst.Buffer -> Int32 -> m Gst.FlowReturn), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderFinishFrameMethodInfo a signature where
+    overloadedMethod _ = audioDecoderFinishFrame
+
+-- method AudioDecoder::get_allocator
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocator", argType = TInterface "Gst" "Allocator", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "params", argType = TInterface "Gst" "AllocationParams", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_allocator" gst_audio_decoder_get_allocator :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr (Ptr Gst.Allocator) ->              -- allocator : TInterface "Gst" "Allocator"
+    Ptr Gst.AllocationParams ->             -- params : TInterface "Gst" "AllocationParams"
+    IO ()
+
+
+audioDecoderGetAllocator ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m (Gst.Allocator,Gst.AllocationParams)-- result
+audioDecoderGetAllocator _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    allocator <- allocMem :: IO (Ptr (Ptr Gst.Allocator))
+    params <- callocBoxedBytes 64 :: IO (Ptr Gst.AllocationParams)
+    gst_audio_decoder_get_allocator _obj' allocator params
+    allocator' <- peek allocator
+    allocator'' <- (wrapObject Gst.Allocator) allocator'
+    params' <- (wrapBoxed Gst.AllocationParams) params
+    touchManagedPtr _obj
+    freeMem allocator
+    return (allocator'', params')
+
+data AudioDecoderGetAllocatorMethodInfo
+instance (signature ~ (m (Gst.Allocator,Gst.AllocationParams)), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetAllocatorMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetAllocator
+
+-- method AudioDecoder::get_audio_info
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioInfo"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_audio_info" gst_audio_decoder_get_audio_info :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO (Ptr AudioInfo)
+
+
+audioDecoderGetAudioInfo ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m AudioInfo                          -- result
+audioDecoderGetAudioInfo _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_audio_info _obj'
+    checkUnexpectedReturnNULL "gst_audio_decoder_get_audio_info" result
+    result' <- (wrapBoxed AudioInfo) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderGetAudioInfoMethodInfo
+instance (signature ~ (m AudioInfo), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetAudioInfoMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetAudioInfo
+
+-- method AudioDecoder::get_delay
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_delay" gst_audio_decoder_get_delay :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Int32
+
+
+audioDecoderGetDelay ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioDecoderGetDelay _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_delay _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetDelayMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetDelayMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetDelay
+
+-- method AudioDecoder::get_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_drainable" gst_audio_decoder_get_drainable :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO CInt
+
+
+audioDecoderGetDrainable ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioDecoderGetDrainable _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_drainable _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderGetDrainableMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetDrainable
+
+-- method AudioDecoder::get_estimate_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_estimate_rate" gst_audio_decoder_get_estimate_rate :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Int32
+
+
+audioDecoderGetEstimateRate ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioDecoderGetEstimateRate _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_estimate_rate _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetEstimateRateMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetEstimateRateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetEstimateRate
+
+-- method AudioDecoder::get_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_latency" gst_audio_decoder_get_latency :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr Word64 ->                           -- min : TBasicType TUInt64
+    Ptr Word64 ->                           -- max : TBasicType TUInt64
+    IO ()
+
+
+audioDecoderGetLatency ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m (Word64,Word64)                    -- result
+audioDecoderGetLatency _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    min <- allocMem :: IO (Ptr Word64)
+    max <- allocMem :: IO (Ptr Word64)
+    gst_audio_decoder_get_latency _obj' min max
+    min' <- peek min
+    max' <- peek max
+    touchManagedPtr _obj
+    freeMem min
+    freeMem max
+    return (min', max')
+
+data AudioDecoderGetLatencyMethodInfo
+instance (signature ~ (m (Word64,Word64)), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetLatency
+
+-- method AudioDecoder::get_max_errors
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_max_errors" gst_audio_decoder_get_max_errors :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Int32
+
+
+audioDecoderGetMaxErrors ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioDecoderGetMaxErrors _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_max_errors _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetMaxErrorsMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetMaxErrorsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetMaxErrors
+
+-- method AudioDecoder::get_min_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_min_latency" gst_audio_decoder_get_min_latency :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Word64
+
+
+audioDecoderGetMinLatency ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioDecoderGetMinLatency _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_min_latency _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetMinLatencyMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetMinLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetMinLatency
+
+-- method AudioDecoder::get_needs_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_needs_format" gst_audio_decoder_get_needs_format :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO CInt
+
+
+audioDecoderGetNeedsFormat ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioDecoderGetNeedsFormat _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_needs_format _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderGetNeedsFormatMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetNeedsFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetNeedsFormat
+
+-- method AudioDecoder::get_parse_state
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sync", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "eos", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_parse_state" gst_audio_decoder_get_parse_state :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- sync : TBasicType TBoolean
+    CInt ->                                 -- eos : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderGetParseState ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- sync
+    -> Bool                                 -- eos
+    -> m ()                                 -- result
+audioDecoderGetParseState _obj sync eos = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let sync' = (fromIntegral . fromEnum) sync
+    let eos' = (fromIntegral . fromEnum) eos
+    gst_audio_decoder_get_parse_state _obj' sync' eos'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderGetParseStateMethodInfo
+instance (signature ~ (Bool -> Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetParseStateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetParseState
+
+-- method AudioDecoder::get_plc
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_plc" gst_audio_decoder_get_plc :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO CInt
+
+
+audioDecoderGetPlc ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioDecoderGetPlc _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_plc _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderGetPlcMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetPlcMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetPlc
+
+-- method AudioDecoder::get_plc_aware
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_plc_aware" gst_audio_decoder_get_plc_aware :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Int32
+
+
+audioDecoderGetPlcAware ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioDecoderGetPlcAware _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_plc_aware _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetPlcAwareMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetPlcAwareMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetPlcAware
+
+-- method AudioDecoder::get_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_get_tolerance" gst_audio_decoder_get_tolerance :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO Word64
+
+
+audioDecoderGetTolerance ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioDecoderGetTolerance _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_get_tolerance _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioDecoderGetToleranceMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderGetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioDecoderGetTolerance
+
+-- method AudioDecoder::merge_tags
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tags", argType = TInterface "Gst" "TagList", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface "Gst" "TagMergeMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_merge_tags" gst_audio_decoder_merge_tags :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr Gst.TagList ->                      -- tags : TInterface "Gst" "TagList"
+    CUInt ->                                -- mode : TInterface "Gst" "TagMergeMode"
+    IO ()
+
+
+audioDecoderMergeTags ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Maybe (Gst.TagList)                  -- tags
+    -> Gst.TagMergeMode                     -- mode
+    -> m ()                                 -- result
+audioDecoderMergeTags _obj tags mode = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    maybeTags <- case tags of
+        Nothing -> return nullPtr
+        Just jTags -> do
+            let jTags' = unsafeManagedPtrGetPtr jTags
+            return jTags'
+    let mode' = (fromIntegral . fromEnum) mode
+    gst_audio_decoder_merge_tags _obj' maybeTags mode'
+    touchManagedPtr _obj
+    whenJust tags touchManagedPtr
+    return ()
+
+data AudioDecoderMergeTagsMethodInfo
+instance (signature ~ (Maybe (Gst.TagList) -> Gst.TagMergeMode -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderMergeTagsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderMergeTags
+
+-- method AudioDecoder::negotiate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_negotiate" gst_audio_decoder_negotiate :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    IO CInt
+
+
+audioDecoderNegotiate ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioDecoderNegotiate _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_decoder_negotiate _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioDecoderNegotiateMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderNegotiateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderNegotiate
+
+-- method AudioDecoder::proxy_getcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "filter", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Caps"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_proxy_getcaps" gst_audio_decoder_proxy_getcaps :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
+    Ptr Gst.Caps ->                         -- filter : TInterface "Gst" "Caps"
+    IO (Ptr Gst.Caps)
+
+
+audioDecoderProxyGetcaps ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Maybe (Gst.Caps)                     -- caps
+    -> Maybe (Gst.Caps)                     -- filter
+    -> m Gst.Caps                           -- result
+audioDecoderProxyGetcaps _obj caps filter = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    maybeCaps <- case caps of
+        Nothing -> return nullPtr
+        Just jCaps -> do
+            let jCaps' = unsafeManagedPtrGetPtr jCaps
+            return jCaps'
+    maybeFilter <- case filter of
+        Nothing -> return nullPtr
+        Just jFilter -> do
+            let jFilter' = unsafeManagedPtrGetPtr jFilter
+            return jFilter'
+    result <- gst_audio_decoder_proxy_getcaps _obj' maybeCaps maybeFilter
+    checkUnexpectedReturnNULL "gst_audio_decoder_proxy_getcaps" result
+    result' <- (wrapBoxed Gst.Caps) result
+    touchManagedPtr _obj
+    whenJust caps touchManagedPtr
+    whenJust filter touchManagedPtr
+    return result'
+
+data AudioDecoderProxyGetcapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps) -> Maybe (Gst.Caps) -> m Gst.Caps), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderProxyGetcapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderProxyGetcaps
+
+-- method AudioDecoder::set_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_drainable" gst_audio_decoder_set_drainable :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetDrainable ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioDecoderSetDrainable _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_drainable _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetDrainableMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetDrainable
+
+-- method AudioDecoder::set_estimate_rate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_estimate_rate" gst_audio_decoder_set_estimate_rate :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetEstimateRate ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioDecoderSetEstimateRate _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_estimate_rate _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetEstimateRateMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetEstimateRateMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetEstimateRate
+
+-- method AudioDecoder::set_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_latency" gst_audio_decoder_set_latency :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Word64 ->                               -- min : TBasicType TUInt64
+    Word64 ->                               -- max : TBasicType TUInt64
+    IO ()
+
+
+audioDecoderSetLatency ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- min
+    -> Word64                               -- max
+    -> m ()                                 -- result
+audioDecoderSetLatency _obj min max = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_decoder_set_latency _obj' min max
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetLatencyMethodInfo
+instance (signature ~ (Word64 -> Word64 -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetLatency
+
+-- method AudioDecoder::set_max_errors
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_max_errors" gst_audio_decoder_set_max_errors :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Int32 ->                                -- num : TBasicType TInt32
+    IO ()
+
+
+audioDecoderSetMaxErrors ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Int32                                -- num
+    -> m ()                                 -- result
+audioDecoderSetMaxErrors _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_decoder_set_max_errors _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetMaxErrorsMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetMaxErrorsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetMaxErrors
+
+-- method AudioDecoder::set_min_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_min_latency" gst_audio_decoder_set_min_latency :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Word64 ->                               -- num : TBasicType TUInt64
+    IO ()
+
+
+audioDecoderSetMinLatency ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- num
+    -> m ()                                 -- result
+audioDecoderSetMinLatency _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_decoder_set_min_latency _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetMinLatencyMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetMinLatencyMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetMinLatency
+
+-- method AudioDecoder::set_needs_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_needs_format" gst_audio_decoder_set_needs_format :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetNeedsFormat ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioDecoderSetNeedsFormat _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_needs_format _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetNeedsFormatMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetNeedsFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetNeedsFormat
+
+-- method AudioDecoder::set_output_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_output_format" gst_audio_decoder_set_output_format :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Ptr AudioInfo ->                        -- info : TInterface "GstAudio" "AudioInfo"
+    IO CInt
+
+
+audioDecoderSetOutputFormat ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> AudioInfo                            -- info
+    -> m Bool                               -- result
+audioDecoderSetOutputFormat _obj info = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let info' = unsafeManagedPtrGetPtr info
+    result <- gst_audio_decoder_set_output_format _obj' info'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr info
+    return result'
+
+data AudioDecoderSetOutputFormatMethodInfo
+instance (signature ~ (AudioInfo -> m Bool), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetOutputFormatMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetOutputFormat
+
+-- method AudioDecoder::set_plc
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_plc" gst_audio_decoder_set_plc :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetPlc ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioDecoderSetPlc _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_decoder_set_plc _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetPlcMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetPlcMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetPlc
+
+-- method AudioDecoder::set_plc_aware
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "plc", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_plc_aware" gst_audio_decoder_set_plc_aware :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- plc : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetPlcAware ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- plc
+    -> m ()                                 -- result
+audioDecoderSetPlcAware _obj plc = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let plc' = (fromIntegral . fromEnum) plc
+    gst_audio_decoder_set_plc_aware _obj' plc'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetPlcAwareMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetPlcAwareMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetPlcAware
+
+-- method AudioDecoder::set_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tolerance", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_decoder_set_tolerance" gst_audio_decoder_set_tolerance :: 
+    Ptr AudioDecoder ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    Word64 ->                               -- tolerance : TBasicType TUInt64
+    IO ()
+
+
+audioDecoderSetTolerance ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- tolerance
+    -> m ()                                 -- result
+audioDecoderSetTolerance _obj tolerance = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_decoder_set_tolerance _obj' tolerance
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetToleranceMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetTolerance
+
+-- method AudioDecoder::set_use_default_pad_acceptcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioDecoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "use", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- 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 ->                     -- _obj : TInterface "GstAudio" "AudioDecoder"
+    CInt ->                                 -- use : TBasicType TBoolean
+    IO ()
+
+
+audioDecoderSetUseDefaultPadAcceptcaps ::
+    (MonadIO m, AudioDecoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- use
+    -> m ()                                 -- result
+audioDecoderSetUseDefaultPadAcceptcaps _obj use = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let use' = (fromIntegral . fromEnum) use
+    gst_audio_decoder_set_use_default_pad_acceptcaps _obj' use'
+    touchManagedPtr _obj
+    return ()
+
+data AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioDecoderK a) => MethodInfo AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo a signature where
+    overloadedMethod _ = audioDecoderSetUseDefaultPadAcceptcaps
+
+
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,45 @@
+module GI.GstAudio.Objects.AudioDecoder where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioDecoder = AudioDecoder (ForeignPtr AudioDecoder)
+instance GObject AudioDecoder where
+class GObject o => AudioDecoderK o
+instance (GObject o, IsDescendantOf AudioDecoder o) => AudioDecoderK o
+data AudioDecoderMinLatencyPropertyInfo
+data AudioDecoderPlcPropertyInfo
+data AudioDecoderTolerancePropertyInfo
+data AudioDecoderAllocateOutputBufferMethodInfo
+data AudioDecoderFinishFrameMethodInfo
+data AudioDecoderGetAllocatorMethodInfo
+data AudioDecoderGetAudioInfoMethodInfo
+data AudioDecoderGetDelayMethodInfo
+data AudioDecoderGetDrainableMethodInfo
+data AudioDecoderGetEstimateRateMethodInfo
+data AudioDecoderGetLatencyMethodInfo
+data AudioDecoderGetMaxErrorsMethodInfo
+data AudioDecoderGetMinLatencyMethodInfo
+data AudioDecoderGetNeedsFormatMethodInfo
+data AudioDecoderGetParseStateMethodInfo
+data AudioDecoderGetPlcMethodInfo
+data AudioDecoderGetPlcAwareMethodInfo
+data AudioDecoderGetToleranceMethodInfo
+data AudioDecoderMergeTagsMethodInfo
+data AudioDecoderNegotiateMethodInfo
+data AudioDecoderProxyGetcapsMethodInfo
+data AudioDecoderSetDrainableMethodInfo
+data AudioDecoderSetEstimateRateMethodInfo
+data AudioDecoderSetLatencyMethodInfo
+data AudioDecoderSetMaxErrorsMethodInfo
+data AudioDecoderSetMinLatencyMethodInfo
+data AudioDecoderSetNeedsFormatMethodInfo
+data AudioDecoderSetOutputFormatMethodInfo
+data AudioDecoderSetPlcMethodInfo
+data AudioDecoderSetPlcAwareMethodInfo
+data AudioDecoderSetToleranceMethodInfo
+data AudioDecoderSetUseDefaultPadAcceptcapsMethodInfo
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,1420 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioEncoder
+    ( 
+
+-- * Exported types
+    AudioEncoder(..)                        ,
+    AudioEncoderK                           ,
+    toAudioEncoder                          ,
+    noAudioEncoder                          ,
+
+
+ -- * Methods
+-- ** audioEncoderAllocateOutputBuffer
+    AudioEncoderAllocateOutputBufferMethodInfo,
+    audioEncoderAllocateOutputBuffer        ,
+
+
+-- ** audioEncoderFinishFrame
+    AudioEncoderFinishFrameMethodInfo       ,
+    audioEncoderFinishFrame                 ,
+
+
+-- ** audioEncoderGetAllocator
+    AudioEncoderGetAllocatorMethodInfo      ,
+    audioEncoderGetAllocator                ,
+
+
+-- ** audioEncoderGetAudioInfo
+    AudioEncoderGetAudioInfoMethodInfo      ,
+    audioEncoderGetAudioInfo                ,
+
+
+-- ** audioEncoderGetDrainable
+    AudioEncoderGetDrainableMethodInfo      ,
+    audioEncoderGetDrainable                ,
+
+
+-- ** audioEncoderGetFrameMax
+    AudioEncoderGetFrameMaxMethodInfo       ,
+    audioEncoderGetFrameMax                 ,
+
+
+-- ** audioEncoderGetFrameSamplesMax
+    AudioEncoderGetFrameSamplesMaxMethodInfo,
+    audioEncoderGetFrameSamplesMax          ,
+
+
+-- ** audioEncoderGetFrameSamplesMin
+    AudioEncoderGetFrameSamplesMinMethodInfo,
+    audioEncoderGetFrameSamplesMin          ,
+
+
+-- ** audioEncoderGetHardMin
+    AudioEncoderGetHardMinMethodInfo        ,
+    audioEncoderGetHardMin                  ,
+
+
+-- ** audioEncoderGetHardResync
+    AudioEncoderGetHardResyncMethodInfo     ,
+    audioEncoderGetHardResync               ,
+
+
+-- ** audioEncoderGetLatency
+    AudioEncoderGetLatencyMethodInfo        ,
+    audioEncoderGetLatency                  ,
+
+
+-- ** audioEncoderGetLookahead
+    AudioEncoderGetLookaheadMethodInfo      ,
+    audioEncoderGetLookahead                ,
+
+
+-- ** audioEncoderGetMarkGranule
+    AudioEncoderGetMarkGranuleMethodInfo    ,
+    audioEncoderGetMarkGranule              ,
+
+
+-- ** audioEncoderGetPerfectTimestamp
+    AudioEncoderGetPerfectTimestampMethodInfo,
+    audioEncoderGetPerfectTimestamp         ,
+
+
+-- ** audioEncoderGetTolerance
+    AudioEncoderGetToleranceMethodInfo      ,
+    audioEncoderGetTolerance                ,
+
+
+-- ** audioEncoderMergeTags
+    AudioEncoderMergeTagsMethodInfo         ,
+    audioEncoderMergeTags                   ,
+
+
+-- ** audioEncoderNegotiate
+    AudioEncoderNegotiateMethodInfo         ,
+    audioEncoderNegotiate                   ,
+
+
+-- ** audioEncoderProxyGetcaps
+    AudioEncoderProxyGetcapsMethodInfo      ,
+    audioEncoderProxyGetcaps                ,
+
+
+-- ** audioEncoderSetDrainable
+    AudioEncoderSetDrainableMethodInfo      ,
+    audioEncoderSetDrainable                ,
+
+
+-- ** audioEncoderSetFrameMax
+    AudioEncoderSetFrameMaxMethodInfo       ,
+    audioEncoderSetFrameMax                 ,
+
+
+-- ** audioEncoderSetFrameSamplesMax
+    AudioEncoderSetFrameSamplesMaxMethodInfo,
+    audioEncoderSetFrameSamplesMax          ,
+
+
+-- ** audioEncoderSetFrameSamplesMin
+    AudioEncoderSetFrameSamplesMinMethodInfo,
+    audioEncoderSetFrameSamplesMin          ,
+
+
+-- ** audioEncoderSetHardMin
+    AudioEncoderSetHardMinMethodInfo        ,
+    audioEncoderSetHardMin                  ,
+
+
+-- ** audioEncoderSetHardResync
+    AudioEncoderSetHardResyncMethodInfo     ,
+    audioEncoderSetHardResync               ,
+
+
+-- ** audioEncoderSetHeaders
+    AudioEncoderSetHeadersMethodInfo        ,
+    audioEncoderSetHeaders                  ,
+
+
+-- ** audioEncoderSetLatency
+    AudioEncoderSetLatencyMethodInfo        ,
+    audioEncoderSetLatency                  ,
+
+
+-- ** audioEncoderSetLookahead
+    AudioEncoderSetLookaheadMethodInfo      ,
+    audioEncoderSetLookahead                ,
+
+
+-- ** audioEncoderSetMarkGranule
+    AudioEncoderSetMarkGranuleMethodInfo    ,
+    audioEncoderSetMarkGranule              ,
+
+
+-- ** audioEncoderSetOutputFormat
+    AudioEncoderSetOutputFormatMethodInfo   ,
+    audioEncoderSetOutputFormat             ,
+
+
+-- ** audioEncoderSetPerfectTimestamp
+    AudioEncoderSetPerfectTimestampMethodInfo,
+    audioEncoderSetPerfectTimestamp         ,
+
+
+-- ** audioEncoderSetTolerance
+    AudioEncoderSetToleranceMethodInfo      ,
+    audioEncoderSetTolerance                ,
+
+
+
+
+ -- * Properties
+-- ** HardResync
+    AudioEncoderHardResyncPropertyInfo      ,
+    constructAudioEncoderHardResync         ,
+    getAudioEncoderHardResync               ,
+    setAudioEncoderHardResync               ,
+
+
+-- ** MarkGranule
+    AudioEncoderMarkGranulePropertyInfo     ,
+    getAudioEncoderMarkGranule              ,
+
+
+-- ** PerfectTimestamp
+    AudioEncoderPerfectTimestampPropertyInfo,
+    constructAudioEncoderPerfectTimestamp   ,
+    getAudioEncoderPerfectTimestamp         ,
+    setAudioEncoderPerfectTimestamp         ,
+
+
+-- ** Tolerance
+    AudioEncoderTolerancePropertyInfo       ,
+    constructAudioEncoderTolerance          ,
+    getAudioEncoderTolerance                ,
+    setAudioEncoderTolerance                ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+
+newtype AudioEncoder = AudioEncoder (ForeignPtr AudioEncoder)
+foreign import ccall "gst_audio_encoder_get_type"
+    c_gst_audio_encoder_get_type :: IO GType
+
+type instance ParentTypes AudioEncoder = AudioEncoderParentTypes
+type AudioEncoderParentTypes = '[Gst.Element, Gst.Object, GObject.Object, Gst.Preset]
+
+instance GObject AudioEncoder where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_encoder_get_type
+    
+
+class GObject o => AudioEncoderK o
+instance (GObject o, IsDescendantOf AudioEncoder o) => AudioEncoderK o
+
+toAudioEncoder :: AudioEncoderK o => o -> IO AudioEncoder
+toAudioEncoder = unsafeCastTo AudioEncoder
+
+noAudioEncoder :: Maybe AudioEncoder
+noAudioEncoder = Nothing
+
+type family ResolveAudioEncoderMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioEncoderMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioEncoderMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioEncoderMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioEncoderMethod "allocateOutputBuffer" o = AudioEncoderAllocateOutputBufferMethodInfo
+    ResolveAudioEncoderMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioEncoderMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioEncoderMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioEncoderMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioEncoderMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioEncoderMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioEncoderMethod "deletePreset" o = Gst.PresetDeletePresetMethodInfo
+    ResolveAudioEncoderMethod "finishFrame" o = AudioEncoderFinishFrameMethodInfo
+    ResolveAudioEncoderMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioEncoderMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioEncoderMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioEncoderMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioEncoderMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioEncoderMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioEncoderMethod "isEditable" o = Gst.PresetIsEditableMethodInfo
+    ResolveAudioEncoderMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioEncoderMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioEncoderMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioEncoderMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioEncoderMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioEncoderMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioEncoderMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioEncoderMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioEncoderMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioEncoderMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioEncoderMethod "loadPreset" o = Gst.PresetLoadPresetMethodInfo
+    ResolveAudioEncoderMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioEncoderMethod "mergeTags" o = AudioEncoderMergeTagsMethodInfo
+    ResolveAudioEncoderMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioEncoderMethod "negotiate" o = AudioEncoderNegotiateMethodInfo
+    ResolveAudioEncoderMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioEncoderMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioEncoderMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioEncoderMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioEncoderMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioEncoderMethod "proxyGetcaps" o = AudioEncoderProxyGetcapsMethodInfo
+    ResolveAudioEncoderMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioEncoderMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioEncoderMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioEncoderMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioEncoderMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioEncoderMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioEncoderMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioEncoderMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioEncoderMethod "renamePreset" o = Gst.PresetRenamePresetMethodInfo
+    ResolveAudioEncoderMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioEncoderMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioEncoderMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioEncoderMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioEncoderMethod "savePreset" o = Gst.PresetSavePresetMethodInfo
+    ResolveAudioEncoderMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioEncoderMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioEncoderMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioEncoderMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioEncoderMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioEncoderMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioEncoderMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioEncoderMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioEncoderMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioEncoderMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioEncoderMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioEncoderMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioEncoderMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioEncoderMethod "getAllocator" o = AudioEncoderGetAllocatorMethodInfo
+    ResolveAudioEncoderMethod "getAudioInfo" o = AudioEncoderGetAudioInfoMethodInfo
+    ResolveAudioEncoderMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioEncoderMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioEncoderMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioEncoderMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioEncoderMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioEncoderMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioEncoderMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioEncoderMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioEncoderMethod "getDrainable" o = AudioEncoderGetDrainableMethodInfo
+    ResolveAudioEncoderMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioEncoderMethod "getFrameMax" o = AudioEncoderGetFrameMaxMethodInfo
+    ResolveAudioEncoderMethod "getFrameSamplesMax" o = AudioEncoderGetFrameSamplesMaxMethodInfo
+    ResolveAudioEncoderMethod "getFrameSamplesMin" o = AudioEncoderGetFrameSamplesMinMethodInfo
+    ResolveAudioEncoderMethod "getGValueArray" o = Gst.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.PresetGetMetaMethodInfo
+    ResolveAudioEncoderMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioEncoderMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioEncoderMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioEncoderMethod "getPerfectTimestamp" o = AudioEncoderGetPerfectTimestampMethodInfo
+    ResolveAudioEncoderMethod "getPresetNames" o = Gst.PresetGetPresetNamesMethodInfo
+    ResolveAudioEncoderMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioEncoderMethod "getPropertyNames" o = Gst.PresetGetPropertyNamesMethodInfo
+    ResolveAudioEncoderMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioEncoderMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioEncoderMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioEncoderMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioEncoderMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioEncoderMethod "getTolerance" o = AudioEncoderGetToleranceMethodInfo
+    ResolveAudioEncoderMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioEncoderMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioEncoderMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioEncoderMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioEncoderMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioEncoderMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioEncoderMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioEncoderMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioEncoderMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioEncoderMethod "setData" o = GObject.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.ElementSetLockedStateMethodInfo
+    ResolveAudioEncoderMethod "setLookahead" o = AudioEncoderSetLookaheadMethodInfo
+    ResolveAudioEncoderMethod "setMarkGranule" o = AudioEncoderSetMarkGranuleMethodInfo
+    ResolveAudioEncoderMethod "setMeta" o = Gst.PresetSetMetaMethodInfo
+    ResolveAudioEncoderMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioEncoderMethod "setOutputFormat" o = AudioEncoderSetOutputFormatMethodInfo
+    ResolveAudioEncoderMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioEncoderMethod "setPerfectTimestamp" o = AudioEncoderSetPerfectTimestampMethodInfo
+    ResolveAudioEncoderMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioEncoderMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioEncoderMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioEncoderMethod "setTolerance" o = AudioEncoderSetToleranceMethodInfo
+    ResolveAudioEncoderMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioEncoderMethod t AudioEncoder, MethodInfo info AudioEncoder p) => IsLabelProxy t (AudioEncoder -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioEncoderMethod t AudioEncoder, MethodInfo info AudioEncoder p) => IsLabel t (AudioEncoder -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+-- VVV Prop "hard-resync"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioEncoderHardResync :: (MonadIO m, AudioEncoderK o) => o -> m Bool
+getAudioEncoderHardResync obj = liftIO $ getObjectPropertyBool obj "hard-resync"
+
+setAudioEncoderHardResync :: (MonadIO m, AudioEncoderK o) => o -> Bool -> m ()
+setAudioEncoderHardResync obj val = liftIO $ setObjectPropertyBool obj "hard-resync" val
+
+constructAudioEncoderHardResync :: Bool -> IO ([Char], GValue)
+constructAudioEncoderHardResync val = constructObjectPropertyBool "hard-resync" val
+
+data AudioEncoderHardResyncPropertyInfo
+instance AttrInfo AudioEncoderHardResyncPropertyInfo where
+    type AttrAllowedOps AudioEncoderHardResyncPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderHardResyncPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioEncoderHardResyncPropertyInfo = AudioEncoderK
+    type AttrGetType AudioEncoderHardResyncPropertyInfo = Bool
+    type AttrLabel AudioEncoderHardResyncPropertyInfo = "hard-resync"
+    attrGet _ = getAudioEncoderHardResync
+    attrSet _ = setAudioEncoderHardResync
+    attrConstruct _ = constructAudioEncoderHardResync
+
+-- VVV Prop "mark-granule"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable]
+
+getAudioEncoderMarkGranule :: (MonadIO m, AudioEncoderK o) => o -> m Bool
+getAudioEncoderMarkGranule obj = liftIO $ getObjectPropertyBool obj "mark-granule"
+
+data AudioEncoderMarkGranulePropertyInfo
+instance AttrInfo AudioEncoderMarkGranulePropertyInfo where
+    type AttrAllowedOps AudioEncoderMarkGranulePropertyInfo = '[ 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderMarkGranulePropertyInfo = (~) ()
+    type AttrBaseTypeConstraint AudioEncoderMarkGranulePropertyInfo = AudioEncoderK
+    type AttrGetType AudioEncoderMarkGranulePropertyInfo = Bool
+    type AttrLabel AudioEncoderMarkGranulePropertyInfo = "mark-granule"
+    attrGet _ = getAudioEncoderMarkGranule
+    attrSet _ = undefined
+    attrConstruct _ = undefined
+
+-- VVV Prop "perfect-timestamp"
+   -- Type: TBasicType TBoolean
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioEncoderPerfectTimestamp :: (MonadIO m, AudioEncoderK o) => o -> m Bool
+getAudioEncoderPerfectTimestamp obj = liftIO $ getObjectPropertyBool obj "perfect-timestamp"
+
+setAudioEncoderPerfectTimestamp :: (MonadIO m, AudioEncoderK o) => o -> Bool -> m ()
+setAudioEncoderPerfectTimestamp obj val = liftIO $ setObjectPropertyBool obj "perfect-timestamp" val
+
+constructAudioEncoderPerfectTimestamp :: Bool -> IO ([Char], GValue)
+constructAudioEncoderPerfectTimestamp val = constructObjectPropertyBool "perfect-timestamp" val
+
+data AudioEncoderPerfectTimestampPropertyInfo
+instance AttrInfo AudioEncoderPerfectTimestampPropertyInfo where
+    type AttrAllowedOps AudioEncoderPerfectTimestampPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderPerfectTimestampPropertyInfo = (~) Bool
+    type AttrBaseTypeConstraint AudioEncoderPerfectTimestampPropertyInfo = AudioEncoderK
+    type AttrGetType AudioEncoderPerfectTimestampPropertyInfo = Bool
+    type AttrLabel AudioEncoderPerfectTimestampPropertyInfo = "perfect-timestamp"
+    attrGet _ = getAudioEncoderPerfectTimestamp
+    attrSet _ = setAudioEncoderPerfectTimestamp
+    attrConstruct _ = constructAudioEncoderPerfectTimestamp
+
+-- VVV Prop "tolerance"
+   -- Type: TBasicType TInt64
+   -- Flags: [PropertyReadable,PropertyWritable]
+
+getAudioEncoderTolerance :: (MonadIO m, AudioEncoderK o) => o -> m Int64
+getAudioEncoderTolerance obj = liftIO $ getObjectPropertyInt64 obj "tolerance"
+
+setAudioEncoderTolerance :: (MonadIO m, AudioEncoderK o) => o -> Int64 -> m ()
+setAudioEncoderTolerance obj val = liftIO $ setObjectPropertyInt64 obj "tolerance" val
+
+constructAudioEncoderTolerance :: Int64 -> IO ([Char], GValue)
+constructAudioEncoderTolerance val = constructObjectPropertyInt64 "tolerance" val
+
+data AudioEncoderTolerancePropertyInfo
+instance AttrInfo AudioEncoderTolerancePropertyInfo where
+    type AttrAllowedOps AudioEncoderTolerancePropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet]
+    type AttrSetTypeConstraint AudioEncoderTolerancePropertyInfo = (~) Int64
+    type AttrBaseTypeConstraint AudioEncoderTolerancePropertyInfo = AudioEncoderK
+    type AttrGetType AudioEncoderTolerancePropertyInfo = Int64
+    type AttrLabel AudioEncoderTolerancePropertyInfo = "tolerance"
+    attrGet _ = getAudioEncoderTolerance
+    attrSet _ = setAudioEncoderTolerance
+    attrConstruct _ = constructAudioEncoderTolerance
+
+type instance AttributeList AudioEncoder = AudioEncoderAttributeList
+type AudioEncoderAttributeList = ('[ '("hardResync", AudioEncoderHardResyncPropertyInfo), '("markGranule", AudioEncoderMarkGranulePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("perfectTimestamp", AudioEncoderPerfectTimestampPropertyInfo), '("tolerance", AudioEncoderTolerancePropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioEncoder = AudioEncoderSignalList
+type AudioEncoderSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+-- method AudioEncoder::allocate_output_buffer
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Buffer"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_allocate_output_buffer" gst_audio_encoder_allocate_output_buffer :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Word64 ->                               -- size : TBasicType TUInt64
+    IO (Ptr Gst.Buffer)
+
+
+audioEncoderAllocateOutputBuffer ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- size
+    -> m Gst.Buffer                         -- result
+audioEncoderAllocateOutputBuffer _obj size = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_allocate_output_buffer _obj' size
+    checkUnexpectedReturnNULL "gst_audio_encoder_allocate_output_buffer" result
+    result' <- (wrapBoxed Gst.Buffer) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderAllocateOutputBufferMethodInfo
+instance (signature ~ (Word64 -> m Gst.Buffer), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderAllocateOutputBufferMethodInfo a signature where
+    overloadedMethod _ = audioEncoderAllocateOutputBuffer
+
+-- method AudioEncoder::finish_frame
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "FlowReturn"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_finish_frame" gst_audio_encoder_finish_frame :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
+    Int32 ->                                -- samples : TBasicType TInt32
+    IO CUInt
+
+
+audioEncoderFinishFrame ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Gst.Buffer                           -- buffer
+    -> Int32                                -- samples
+    -> m Gst.FlowReturn                     -- result
+audioEncoderFinishFrame _obj buffer samples = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let buffer' = unsafeManagedPtrGetPtr buffer
+    result <- gst_audio_encoder_finish_frame _obj' buffer' samples
+    let result' = (toEnum . fromIntegral) result
+    touchManagedPtr _obj
+    touchManagedPtr buffer
+    return result'
+
+data AudioEncoderFinishFrameMethodInfo
+instance (signature ~ (Gst.Buffer -> Int32 -> m Gst.FlowReturn), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderFinishFrameMethodInfo a signature where
+    overloadedMethod _ = audioEncoderFinishFrame
+
+-- method AudioEncoder::get_allocator
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allocator", argType = TInterface "Gst" "Allocator", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "params", argType = TInterface "Gst" "AllocationParams", direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_allocator" gst_audio_encoder_get_allocator :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr (Ptr Gst.Allocator) ->              -- allocator : TInterface "Gst" "Allocator"
+    Ptr Gst.AllocationParams ->             -- params : TInterface "Gst" "AllocationParams"
+    IO ()
+
+
+audioEncoderGetAllocator ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m (Gst.Allocator,Gst.AllocationParams)-- result
+audioEncoderGetAllocator _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    allocator <- allocMem :: IO (Ptr (Ptr Gst.Allocator))
+    params <- callocBoxedBytes 64 :: IO (Ptr Gst.AllocationParams)
+    gst_audio_encoder_get_allocator _obj' allocator params
+    allocator' <- peek allocator
+    allocator'' <- (wrapObject Gst.Allocator) allocator'
+    params' <- (wrapBoxed Gst.AllocationParams) params
+    touchManagedPtr _obj
+    freeMem allocator
+    return (allocator'', params')
+
+data AudioEncoderGetAllocatorMethodInfo
+instance (signature ~ (m (Gst.Allocator,Gst.AllocationParams)), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetAllocatorMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetAllocator
+
+-- method AudioEncoder::get_audio_info
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioInfo"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_audio_info" gst_audio_encoder_get_audio_info :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO (Ptr AudioInfo)
+
+
+audioEncoderGetAudioInfo ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m AudioInfo                          -- result
+audioEncoderGetAudioInfo _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_audio_info _obj'
+    checkUnexpectedReturnNULL "gst_audio_encoder_get_audio_info" result
+    result' <- (wrapBoxed AudioInfo) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetAudioInfoMethodInfo
+instance (signature ~ (m AudioInfo), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetAudioInfoMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetAudioInfo
+
+-- method AudioEncoder::get_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_drainable" gst_audio_encoder_get_drainable :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderGetDrainable ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderGetDrainable _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_drainable _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetDrainableMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetDrainable
+
+-- method AudioEncoder::get_frame_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_max" gst_audio_encoder_get_frame_max :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO Int32
+
+
+audioEncoderGetFrameMax ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioEncoderGetFrameMax _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_frame_max _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioEncoderGetFrameMaxMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetFrameMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameMax
+
+-- method AudioEncoder::get_frame_samples_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_samples_max" gst_audio_encoder_get_frame_samples_max :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO Int32
+
+
+audioEncoderGetFrameSamplesMax ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioEncoderGetFrameSamplesMax _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_frame_samples_max _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioEncoderGetFrameSamplesMaxMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetFrameSamplesMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameSamplesMax
+
+-- method AudioEncoder::get_frame_samples_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_frame_samples_min" gst_audio_encoder_get_frame_samples_min :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO Int32
+
+
+audioEncoderGetFrameSamplesMin ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioEncoderGetFrameSamplesMin _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_frame_samples_min _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioEncoderGetFrameSamplesMinMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetFrameSamplesMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetFrameSamplesMin
+
+-- method AudioEncoder::get_hard_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_hard_min" gst_audio_encoder_get_hard_min :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderGetHardMin ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderGetHardMin _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_hard_min _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetHardMinMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetHardMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetHardMin
+
+-- method AudioEncoder::get_hard_resync
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_hard_resync" gst_audio_encoder_get_hard_resync :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderGetHardResync ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderGetHardResync _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_hard_resync _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetHardResyncMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetHardResyncMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetHardResync
+
+-- method AudioEncoder::get_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_latency" gst_audio_encoder_get_latency :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr Word64 ->                           -- min : TBasicType TUInt64
+    Ptr Word64 ->                           -- max : TBasicType TUInt64
+    IO ()
+
+
+audioEncoderGetLatency ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m (Word64,Word64)                    -- result
+audioEncoderGetLatency _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    min <- allocMem :: IO (Ptr Word64)
+    max <- allocMem :: IO (Ptr Word64)
+    gst_audio_encoder_get_latency _obj' min max
+    min' <- peek min
+    max' <- peek max
+    touchManagedPtr _obj
+    freeMem min
+    freeMem max
+    return (min', max')
+
+data AudioEncoderGetLatencyMethodInfo
+instance (signature ~ (m (Word64,Word64)), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetLatency
+
+-- method AudioEncoder::get_lookahead
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_lookahead" gst_audio_encoder_get_lookahead :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO Int32
+
+
+audioEncoderGetLookahead ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Int32                              -- result
+audioEncoderGetLookahead _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_lookahead _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioEncoderGetLookaheadMethodInfo
+instance (signature ~ (m Int32), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetLookaheadMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetLookahead
+
+-- method AudioEncoder::get_mark_granule
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_mark_granule" gst_audio_encoder_get_mark_granule :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderGetMarkGranule ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderGetMarkGranule _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_mark_granule _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetMarkGranuleMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetMarkGranuleMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetMarkGranule
+
+-- method AudioEncoder::get_perfect_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_perfect_timestamp" gst_audio_encoder_get_perfect_timestamp :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderGetPerfectTimestamp ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderGetPerfectTimestamp _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_perfect_timestamp _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderGetPerfectTimestampMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetPerfectTimestampMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetPerfectTimestamp
+
+-- method AudioEncoder::get_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_get_tolerance" gst_audio_encoder_get_tolerance :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO Word64
+
+
+audioEncoderGetTolerance ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioEncoderGetTolerance _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_get_tolerance _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioEncoderGetToleranceMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderGetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioEncoderGetTolerance
+
+-- method AudioEncoder::merge_tags
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tags", argType = TInterface "Gst" "TagList", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface "Gst" "TagMergeMode", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_merge_tags" gst_audio_encoder_merge_tags :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr Gst.TagList ->                      -- tags : TInterface "Gst" "TagList"
+    CUInt ->                                -- mode : TInterface "Gst" "TagMergeMode"
+    IO ()
+
+
+audioEncoderMergeTags ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Maybe (Gst.TagList)                  -- tags
+    -> Gst.TagMergeMode                     -- mode
+    -> m ()                                 -- result
+audioEncoderMergeTags _obj tags mode = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    maybeTags <- case tags of
+        Nothing -> return nullPtr
+        Just jTags -> do
+            let jTags' = unsafeManagedPtrGetPtr jTags
+            return jTags'
+    let mode' = (fromIntegral . fromEnum) mode
+    gst_audio_encoder_merge_tags _obj' maybeTags mode'
+    touchManagedPtr _obj
+    whenJust tags touchManagedPtr
+    return ()
+
+data AudioEncoderMergeTagsMethodInfo
+instance (signature ~ (Maybe (Gst.TagList) -> Gst.TagMergeMode -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderMergeTagsMethodInfo a signature where
+    overloadedMethod _ = audioEncoderMergeTags
+
+-- method AudioEncoder::negotiate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_negotiate" gst_audio_encoder_negotiate :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    IO CInt
+
+
+audioEncoderNegotiate ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioEncoderNegotiate _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_encoder_negotiate _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioEncoderNegotiateMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderNegotiateMethodInfo a signature where
+    overloadedMethod _ = audioEncoderNegotiate
+
+-- method AudioEncoder::proxy_getcaps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "filter", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Caps"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_proxy_getcaps" gst_audio_encoder_proxy_getcaps :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
+    Ptr Gst.Caps ->                         -- filter : TInterface "Gst" "Caps"
+    IO (Ptr Gst.Caps)
+
+
+audioEncoderProxyGetcaps ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Maybe (Gst.Caps)                     -- caps
+    -> Maybe (Gst.Caps)                     -- filter
+    -> m Gst.Caps                           -- result
+audioEncoderProxyGetcaps _obj caps filter = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    maybeCaps <- case caps of
+        Nothing -> return nullPtr
+        Just jCaps -> do
+            let jCaps' = unsafeManagedPtrGetPtr jCaps
+            return jCaps'
+    maybeFilter <- case filter of
+        Nothing -> return nullPtr
+        Just jFilter -> do
+            let jFilter' = unsafeManagedPtrGetPtr jFilter
+            return jFilter'
+    result <- gst_audio_encoder_proxy_getcaps _obj' maybeCaps maybeFilter
+    checkUnexpectedReturnNULL "gst_audio_encoder_proxy_getcaps" result
+    result' <- (wrapBoxed Gst.Caps) result
+    touchManagedPtr _obj
+    whenJust caps touchManagedPtr
+    whenJust filter touchManagedPtr
+    return result'
+
+data AudioEncoderProxyGetcapsMethodInfo
+instance (signature ~ (Maybe (Gst.Caps) -> Maybe (Gst.Caps) -> m Gst.Caps), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderProxyGetcapsMethodInfo a signature where
+    overloadedMethod _ = audioEncoderProxyGetcaps
+
+-- method AudioEncoder::set_drainable
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_drainable" gst_audio_encoder_set_drainable :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioEncoderSetDrainable ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioEncoderSetDrainable _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_drainable _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetDrainableMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetDrainableMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetDrainable
+
+-- method AudioEncoder::set_frame_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_frame_max" gst_audio_encoder_set_frame_max :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Int32 ->                                -- num : TBasicType TInt32
+    IO ()
+
+
+audioEncoderSetFrameMax ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Int32                                -- num
+    -> m ()                                 -- result
+audioEncoderSetFrameMax _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_frame_max _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetFrameMaxMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetFrameMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameMax
+
+-- method AudioEncoder::set_frame_samples_max
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_frame_samples_max" gst_audio_encoder_set_frame_samples_max :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Int32 ->                                -- num : TBasicType TInt32
+    IO ()
+
+
+audioEncoderSetFrameSamplesMax ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Int32                                -- num
+    -> m ()                                 -- result
+audioEncoderSetFrameSamplesMax _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_frame_samples_max _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetFrameSamplesMaxMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetFrameSamplesMaxMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameSamplesMax
+
+-- method AudioEncoder::set_frame_samples_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_frame_samples_min" gst_audio_encoder_set_frame_samples_min :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Int32 ->                                -- num : TBasicType TInt32
+    IO ()
+
+
+audioEncoderSetFrameSamplesMin ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Int32                                -- num
+    -> m ()                                 -- result
+audioEncoderSetFrameSamplesMin _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_frame_samples_min _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetFrameSamplesMinMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetFrameSamplesMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetFrameSamplesMin
+
+-- method AudioEncoder::set_hard_min
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_hard_min" gst_audio_encoder_set_hard_min :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioEncoderSetHardMin ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioEncoderSetHardMin _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_hard_min _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetHardMinMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetHardMinMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHardMin
+
+-- method AudioEncoder::set_hard_resync
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_hard_resync" gst_audio_encoder_set_hard_resync :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioEncoderSetHardResync ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioEncoderSetHardResync _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_hard_resync _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetHardResyncMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetHardResyncMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHardResync
+
+-- method AudioEncoder::set_headers
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "headers", argType = TGList (TInterface "Gst" "Buffer"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_headers" gst_audio_encoder_set_headers :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr (GList (Ptr Gst.Buffer)) ->         -- headers : TGList (TInterface "Gst" "Buffer")
+    IO ()
+
+
+audioEncoderSetHeaders ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> [Gst.Buffer]                         -- headers
+    -> m ()                                 -- result
+audioEncoderSetHeaders _obj headers = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    headers' <- mapM copyBoxed headers
+    headers'' <- packGList headers'
+    gst_audio_encoder_set_headers _obj' headers''
+    touchManagedPtr _obj
+    mapM_ touchManagedPtr headers
+    return ()
+
+data AudioEncoderSetHeadersMethodInfo
+instance (signature ~ ([Gst.Buffer] -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetHeadersMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetHeaders
+
+-- method AudioEncoder::set_latency
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "min", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "max", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_latency" gst_audio_encoder_set_latency :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Word64 ->                               -- min : TBasicType TUInt64
+    Word64 ->                               -- max : TBasicType TUInt64
+    IO ()
+
+
+audioEncoderSetLatency ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- min
+    -> Word64                               -- max
+    -> m ()                                 -- result
+audioEncoderSetLatency _obj min max = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_latency _obj' min max
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetLatencyMethodInfo
+instance (signature ~ (Word64 -> Word64 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetLatencyMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetLatency
+
+-- method AudioEncoder::set_lookahead
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "num", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_lookahead" gst_audio_encoder_set_lookahead :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Int32 ->                                -- num : TBasicType TInt32
+    IO ()
+
+
+audioEncoderSetLookahead ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Int32                                -- num
+    -> m ()                                 -- result
+audioEncoderSetLookahead _obj num = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_lookahead _obj' num
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetLookaheadMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetLookaheadMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetLookahead
+
+-- method AudioEncoder::set_mark_granule
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_mark_granule" gst_audio_encoder_set_mark_granule :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioEncoderSetMarkGranule ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioEncoderSetMarkGranule _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_mark_granule _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetMarkGranuleMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetMarkGranuleMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetMarkGranule
+
+-- method AudioEncoder::set_output_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_output_format" gst_audio_encoder_set_output_format :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
+    IO CInt
+
+
+audioEncoderSetOutputFormat ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Gst.Caps                             -- caps
+    -> m Bool                               -- result
+audioEncoderSetOutputFormat _obj caps = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let caps' = unsafeManagedPtrGetPtr caps
+    result <- gst_audio_encoder_set_output_format _obj' caps'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr caps
+    return result'
+
+data AudioEncoderSetOutputFormatMethodInfo
+instance (signature ~ (Gst.Caps -> m Bool), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetOutputFormatMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetOutputFormat
+
+-- method AudioEncoder::set_perfect_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "enabled", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_perfect_timestamp" gst_audio_encoder_set_perfect_timestamp :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    CInt ->                                 -- enabled : TBasicType TBoolean
+    IO ()
+
+
+audioEncoderSetPerfectTimestamp ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- enabled
+    -> m ()                                 -- result
+audioEncoderSetPerfectTimestamp _obj enabled = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let enabled' = (fromIntegral . fromEnum) enabled
+    gst_audio_encoder_set_perfect_timestamp _obj' enabled'
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetPerfectTimestampMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetPerfectTimestampMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetPerfectTimestamp
+
+-- method AudioEncoder::set_tolerance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioEncoder", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tolerance", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_encoder_set_tolerance" gst_audio_encoder_set_tolerance :: 
+    Ptr AudioEncoder ->                     -- _obj : TInterface "GstAudio" "AudioEncoder"
+    Word64 ->                               -- tolerance : TBasicType TUInt64
+    IO ()
+
+
+audioEncoderSetTolerance ::
+    (MonadIO m, AudioEncoderK a) =>
+    a                                       -- _obj
+    -> Word64                               -- tolerance
+    -> m ()                                 -- result
+audioEncoderSetTolerance _obj tolerance = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_encoder_set_tolerance _obj' tolerance
+    touchManagedPtr _obj
+    return ()
+
+data AudioEncoderSetToleranceMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioEncoderK a) => MethodInfo AudioEncoderSetToleranceMethodInfo a signature where
+    overloadedMethod _ = audioEncoderSetTolerance
+
+
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,48 @@
+module GI.GstAudio.Objects.AudioEncoder where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioEncoder = AudioEncoder (ForeignPtr AudioEncoder)
+instance GObject AudioEncoder where
+class GObject o => AudioEncoderK o
+instance (GObject o, IsDescendantOf AudioEncoder o) => AudioEncoderK o
+data AudioEncoderHardResyncPropertyInfo
+data AudioEncoderMarkGranulePropertyInfo
+data AudioEncoderPerfectTimestampPropertyInfo
+data AudioEncoderTolerancePropertyInfo
+data AudioEncoderAllocateOutputBufferMethodInfo
+data AudioEncoderFinishFrameMethodInfo
+data AudioEncoderGetAllocatorMethodInfo
+data AudioEncoderGetAudioInfoMethodInfo
+data AudioEncoderGetDrainableMethodInfo
+data AudioEncoderGetFrameMaxMethodInfo
+data AudioEncoderGetFrameSamplesMaxMethodInfo
+data AudioEncoderGetFrameSamplesMinMethodInfo
+data AudioEncoderGetHardMinMethodInfo
+data AudioEncoderGetHardResyncMethodInfo
+data AudioEncoderGetLatencyMethodInfo
+data AudioEncoderGetLookaheadMethodInfo
+data AudioEncoderGetMarkGranuleMethodInfo
+data AudioEncoderGetPerfectTimestampMethodInfo
+data AudioEncoderGetToleranceMethodInfo
+data AudioEncoderMergeTagsMethodInfo
+data AudioEncoderNegotiateMethodInfo
+data AudioEncoderProxyGetcapsMethodInfo
+data AudioEncoderSetDrainableMethodInfo
+data AudioEncoderSetFrameMaxMethodInfo
+data AudioEncoderSetFrameSamplesMaxMethodInfo
+data AudioEncoderSetFrameSamplesMinMethodInfo
+data AudioEncoderSetHardMinMethodInfo
+data AudioEncoderSetHardResyncMethodInfo
+data AudioEncoderSetHeadersMethodInfo
+data AudioEncoderSetLatencyMethodInfo
+data AudioEncoderSetLookaheadMethodInfo
+data AudioEncoderSetMarkGranuleMethodInfo
+data AudioEncoderSetOutputFormatMethodInfo
+data AudioEncoderSetPerfectTimestampMethodInfo
+data AudioEncoderSetToleranceMethodInfo
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,178 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioFilter
+    ( 
+
+-- * Exported types
+    AudioFilter(..)                         ,
+    AudioFilterK                            ,
+    toAudioFilter                           ,
+    noAudioFilter                           ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioFilter = AudioFilter (ForeignPtr AudioFilter)
+foreign import ccall "gst_audio_filter_get_type"
+    c_gst_audio_filter_get_type :: IO GType
+
+type instance ParentTypes AudioFilter = AudioFilterParentTypes
+type AudioFilterParentTypes = '[GstBase.BaseTransform, Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioFilter where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_filter_get_type
+    
+
+class GObject o => AudioFilterK o
+instance (GObject o, IsDescendantOf AudioFilter o) => AudioFilterK o
+
+toAudioFilter :: AudioFilterK o => o -> IO AudioFilter
+toAudioFilter = unsafeCastTo AudioFilter
+
+noAudioFilter :: Maybe AudioFilter
+noAudioFilter = Nothing
+
+type family ResolveAudioFilterMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioFilterMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioFilterMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioFilterMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioFilterMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioFilterMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioFilterMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioFilterMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioFilterMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioFilterMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioFilterMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioFilterMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioFilterMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioFilterMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioFilterMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioFilterMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioFilterMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioFilterMethod "isInPlace" o = GstBase.BaseTransformIsInPlaceMethodInfo
+    ResolveAudioFilterMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioFilterMethod "isPassthrough" o = GstBase.BaseTransformIsPassthroughMethodInfo
+    ResolveAudioFilterMethod "isQosEnabled" o = GstBase.BaseTransformIsQosEnabledMethodInfo
+    ResolveAudioFilterMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioFilterMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioFilterMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioFilterMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioFilterMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioFilterMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioFilterMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioFilterMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioFilterMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioFilterMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioFilterMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioFilterMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioFilterMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioFilterMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioFilterMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioFilterMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioFilterMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioFilterMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioFilterMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioFilterMethod "reconfigureSink" o = GstBase.BaseTransformReconfigureSinkMethodInfo
+    ResolveAudioFilterMethod "reconfigureSrc" o = GstBase.BaseTransformReconfigureSrcMethodInfo
+    ResolveAudioFilterMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioFilterMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioFilterMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioFilterMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioFilterMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioFilterMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioFilterMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioFilterMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioFilterMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioFilterMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioFilterMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioFilterMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioFilterMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioFilterMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioFilterMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioFilterMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioFilterMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioFilterMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioFilterMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioFilterMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioFilterMethod "updateQos" o = GstBase.BaseTransformUpdateQosMethodInfo
+    ResolveAudioFilterMethod "updateSrcCaps" o = GstBase.BaseTransformUpdateSrcCapsMethodInfo
+    ResolveAudioFilterMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioFilterMethod "getAllocator" o = GstBase.BaseTransformGetAllocatorMethodInfo
+    ResolveAudioFilterMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioFilterMethod "getBufferPool" o = GstBase.BaseTransformGetBufferPoolMethodInfo
+    ResolveAudioFilterMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioFilterMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioFilterMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioFilterMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioFilterMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioFilterMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioFilterMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioFilterMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioFilterMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioFilterMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioFilterMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioFilterMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioFilterMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioFilterMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioFilterMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioFilterMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioFilterMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioFilterMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioFilterMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioFilterMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioFilterMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioFilterMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioFilterMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioFilterMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioFilterMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioFilterMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioFilterMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioFilterMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioFilterMethod "setGapAware" o = GstBase.BaseTransformSetGapAwareMethodInfo
+    ResolveAudioFilterMethod "setInPlace" o = GstBase.BaseTransformSetInPlaceMethodInfo
+    ResolveAudioFilterMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioFilterMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioFilterMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioFilterMethod "setPassthrough" o = GstBase.BaseTransformSetPassthroughMethodInfo
+    ResolveAudioFilterMethod "setPreferPassthrough" o = GstBase.BaseTransformSetPreferPassthroughMethodInfo
+    ResolveAudioFilterMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioFilterMethod "setQosEnabled" o = GstBase.BaseTransformSetQosEnabledMethodInfo
+    ResolveAudioFilterMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioFilterMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioFilterMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioFilterMethod t AudioFilter, MethodInfo info AudioFilter p) => IsLabelProxy t (AudioFilter -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioFilterMethod t AudioFilter, MethodInfo info AudioFilter p) => IsLabel t (AudioFilter -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+type instance AttributeList AudioFilter = AudioFilterAttributeList
+type AudioFilterAttributeList = ('[ '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("qos", GstBase.BaseTransformQosPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioFilter = AudioFilterSignalList
+type AudioFilterSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+
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,13 @@
+module GI.GstAudio.Objects.AudioFilter where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioFilter = AudioFilter (ForeignPtr AudioFilter)
+instance GObject AudioFilter where
+class GObject o => AudioFilterK o
+instance (GObject o, IsDescendantOf AudioFilter o) => AudioFilterK o
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,1175 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioRingBuffer
+    ( 
+
+-- * Exported types
+    AudioRingBuffer(..)                     ,
+    AudioRingBufferK                        ,
+    toAudioRingBuffer                       ,
+    noAudioRingBuffer                       ,
+
+
+ -- * Methods
+-- ** audioRingBufferAcquire
+    AudioRingBufferAcquireMethodInfo        ,
+    audioRingBufferAcquire                  ,
+
+
+-- ** audioRingBufferActivate
+    AudioRingBufferActivateMethodInfo       ,
+    audioRingBufferActivate                 ,
+
+
+-- ** audioRingBufferAdvance
+    AudioRingBufferAdvanceMethodInfo        ,
+    audioRingBufferAdvance                  ,
+
+
+-- ** audioRingBufferClear
+    AudioRingBufferClearMethodInfo          ,
+    audioRingBufferClear                    ,
+
+
+-- ** audioRingBufferClearAll
+    AudioRingBufferClearAllMethodInfo       ,
+    audioRingBufferClearAll                 ,
+
+
+-- ** audioRingBufferCloseDevice
+    AudioRingBufferCloseDeviceMethodInfo    ,
+    audioRingBufferCloseDevice              ,
+
+
+-- ** audioRingBufferCommit
+    AudioRingBufferCommitMethodInfo         ,
+    audioRingBufferCommit                   ,
+
+
+-- ** audioRingBufferConvert
+    AudioRingBufferConvertMethodInfo        ,
+    audioRingBufferConvert                  ,
+
+
+-- ** audioRingBufferDebugSpecBuff
+    audioRingBufferDebugSpecBuff            ,
+
+
+-- ** audioRingBufferDebugSpecCaps
+    audioRingBufferDebugSpecCaps            ,
+
+
+-- ** audioRingBufferDelay
+    AudioRingBufferDelayMethodInfo          ,
+    audioRingBufferDelay                    ,
+
+
+-- ** audioRingBufferDeviceIsOpen
+    AudioRingBufferDeviceIsOpenMethodInfo   ,
+    audioRingBufferDeviceIsOpen             ,
+
+
+-- ** audioRingBufferIsAcquired
+    AudioRingBufferIsAcquiredMethodInfo     ,
+    audioRingBufferIsAcquired               ,
+
+
+-- ** audioRingBufferIsActive
+    AudioRingBufferIsActiveMethodInfo       ,
+    audioRingBufferIsActive                 ,
+
+
+-- ** audioRingBufferIsFlushing
+    AudioRingBufferIsFlushingMethodInfo     ,
+    audioRingBufferIsFlushing               ,
+
+
+-- ** audioRingBufferMayStart
+    AudioRingBufferMayStartMethodInfo       ,
+    audioRingBufferMayStart                 ,
+
+
+-- ** audioRingBufferOpenDevice
+    AudioRingBufferOpenDeviceMethodInfo     ,
+    audioRingBufferOpenDevice               ,
+
+
+-- ** audioRingBufferParseCaps
+    audioRingBufferParseCaps                ,
+
+
+-- ** audioRingBufferPause
+    AudioRingBufferPauseMethodInfo          ,
+    audioRingBufferPause                    ,
+
+
+-- ** audioRingBufferPrepareRead
+    AudioRingBufferPrepareReadMethodInfo    ,
+    audioRingBufferPrepareRead              ,
+
+
+-- ** audioRingBufferRead
+    AudioRingBufferReadMethodInfo           ,
+    audioRingBufferRead                     ,
+
+
+-- ** audioRingBufferRelease
+    AudioRingBufferReleaseMethodInfo        ,
+    audioRingBufferRelease                  ,
+
+
+-- ** audioRingBufferSamplesDone
+    AudioRingBufferSamplesDoneMethodInfo    ,
+    audioRingBufferSamplesDone              ,
+
+
+-- ** audioRingBufferSetCallback
+    AudioRingBufferSetCallbackMethodInfo    ,
+    audioRingBufferSetCallback              ,
+
+
+-- ** audioRingBufferSetChannelPositions
+    AudioRingBufferSetChannelPositionsMethodInfo,
+    audioRingBufferSetChannelPositions      ,
+
+
+-- ** audioRingBufferSetFlushing
+    AudioRingBufferSetFlushingMethodInfo    ,
+    audioRingBufferSetFlushing              ,
+
+
+-- ** audioRingBufferSetSample
+    AudioRingBufferSetSampleMethodInfo      ,
+    audioRingBufferSetSample                ,
+
+
+-- ** audioRingBufferSetTimestamp
+    AudioRingBufferSetTimestampMethodInfo   ,
+    audioRingBufferSetTimestamp             ,
+
+
+-- ** audioRingBufferStart
+    AudioRingBufferStartMethodInfo          ,
+    audioRingBufferStart                    ,
+
+
+-- ** audioRingBufferStop
+    AudioRingBufferStopMethodInfo           ,
+    audioRingBufferStop                     ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+
+newtype AudioRingBuffer = AudioRingBuffer (ForeignPtr AudioRingBuffer)
+foreign import ccall "gst_audio_ring_buffer_get_type"
+    c_gst_audio_ring_buffer_get_type :: IO GType
+
+type instance ParentTypes AudioRingBuffer = AudioRingBufferParentTypes
+type AudioRingBufferParentTypes = '[Gst.Object, GObject.Object]
+
+instance GObject AudioRingBuffer where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_ring_buffer_get_type
+    
+
+class GObject o => AudioRingBufferK o
+instance (GObject o, IsDescendantOf AudioRingBuffer o) => AudioRingBufferK o
+
+toAudioRingBuffer :: AudioRingBufferK o => o -> IO AudioRingBuffer
+toAudioRingBuffer = unsafeCastTo AudioRingBuffer
+
+noAudioRingBuffer :: Maybe AudioRingBuffer
+noAudioRingBuffer = Nothing
+
+type family ResolveAudioRingBufferMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioRingBufferMethod "acquire" o = AudioRingBufferAcquireMethodInfo
+    ResolveAudioRingBufferMethod "activate" o = AudioRingBufferActivateMethodInfo
+    ResolveAudioRingBufferMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "advance" o = AudioRingBufferAdvanceMethodInfo
+    ResolveAudioRingBufferMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioRingBufferMethod "bindPropertyFull" o = GObject.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.ObjectDefaultErrorMethodInfo
+    ResolveAudioRingBufferMethod "delay" o = AudioRingBufferDelayMethodInfo
+    ResolveAudioRingBufferMethod "deviceIsOpen" o = AudioRingBufferDeviceIsOpenMethodInfo
+    ResolveAudioRingBufferMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioRingBufferMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioRingBufferMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioRingBufferMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioRingBufferMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioRingBufferMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioRingBufferMethod "isAcquired" o = AudioRingBufferIsAcquiredMethodInfo
+    ResolveAudioRingBufferMethod "isActive" o = AudioRingBufferIsActiveMethodInfo
+    ResolveAudioRingBufferMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioRingBufferMethod "isFlushing" o = AudioRingBufferIsFlushingMethodInfo
+    ResolveAudioRingBufferMethod "mayStart" o = AudioRingBufferMayStartMethodInfo
+    ResolveAudioRingBufferMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioRingBufferMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioRingBufferMethod "openDevice" o = AudioRingBufferOpenDeviceMethodInfo
+    ResolveAudioRingBufferMethod "pause" o = AudioRingBufferPauseMethodInfo
+    ResolveAudioRingBufferMethod "prepareRead" o = AudioRingBufferPrepareReadMethodInfo
+    ResolveAudioRingBufferMethod "read" o = AudioRingBufferReadMethodInfo
+    ResolveAudioRingBufferMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioRingBufferMethod "release" o = AudioRingBufferReleaseMethodInfo
+    ResolveAudioRingBufferMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioRingBufferMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioRingBufferMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioRingBufferMethod "samplesDone" o = AudioRingBufferSamplesDoneMethodInfo
+    ResolveAudioRingBufferMethod "start" o = AudioRingBufferStartMethodInfo
+    ResolveAudioRingBufferMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioRingBufferMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioRingBufferMethod "stop" o = AudioRingBufferStopMethodInfo
+    ResolveAudioRingBufferMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioRingBufferMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioRingBufferMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioRingBufferMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioRingBufferMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioRingBufferMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioRingBufferMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioRingBufferMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioRingBufferMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioRingBufferMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioRingBufferMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioRingBufferMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioRingBufferMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioRingBufferMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioRingBufferMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioRingBufferMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioRingBufferMethod "setCallback" o = AudioRingBufferSetCallbackMethodInfo
+    ResolveAudioRingBufferMethod "setChannelPositions" o = AudioRingBufferSetChannelPositionsMethodInfo
+    ResolveAudioRingBufferMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioRingBufferMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioRingBufferMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioRingBufferMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioRingBufferMethod "setFlushing" o = AudioRingBufferSetFlushingMethodInfo
+    ResolveAudioRingBufferMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioRingBufferMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioRingBufferMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioRingBufferMethod "setSample" o = AudioRingBufferSetSampleMethodInfo
+    ResolveAudioRingBufferMethod "setTimestamp" o = AudioRingBufferSetTimestampMethodInfo
+    ResolveAudioRingBufferMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioRingBufferMethod t AudioRingBuffer, MethodInfo info AudioRingBuffer p) => IsLabelProxy t (AudioRingBuffer -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioRingBufferMethod t AudioRingBuffer, MethodInfo info AudioRingBuffer p) => IsLabel t (AudioRingBuffer -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+type instance AttributeList AudioRingBuffer = AudioRingBufferAttributeList
+type AudioRingBufferAttributeList = ('[ '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioRingBuffer = AudioRingBufferSignalList
+type AudioRingBufferSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("notify", GObject.ObjectNotifySignalInfo)] :: [(Symbol, *)])
+
+-- method AudioRingBuffer::acquire
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_acquire" gst_audio_ring_buffer_acquire :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    IO CInt
+
+
+audioRingBufferAcquire ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> AudioRingBufferSpec                  -- spec
+    -> m Bool                               -- result
+audioRingBufferAcquire _obj spec = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let spec' = unsafeManagedPtrGetPtr spec
+    result <- gst_audio_ring_buffer_acquire _obj' spec'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr spec
+    return result'
+
+data AudioRingBufferAcquireMethodInfo
+instance (signature ~ (AudioRingBufferSpec -> m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferAcquireMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferAcquire
+
+-- method AudioRingBuffer::activate
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "active", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_activate" gst_audio_ring_buffer_activate :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    CInt ->                                 -- active : TBasicType TBoolean
+    IO CInt
+
+
+audioRingBufferActivate ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- active
+    -> m Bool                               -- result
+audioRingBufferActivate _obj active = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let active' = (fromIntegral . fromEnum) active
+    result <- gst_audio_ring_buffer_activate _obj' active'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferActivateMethodInfo
+instance (signature ~ (Bool -> m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferActivateMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferActivate
+
+-- method AudioRingBuffer::advance
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "advance", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_advance" gst_audio_ring_buffer_advance :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Word32 ->                               -- advance : TBasicType TUInt32
+    IO ()
+
+
+audioRingBufferAdvance ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Word32                               -- advance
+    -> m ()                                 -- result
+audioRingBufferAdvance _obj advance = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_ring_buffer_advance _obj' advance
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferAdvanceMethodInfo
+instance (signature ~ (Word32 -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferAdvanceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferAdvance
+
+-- method AudioRingBuffer::clear
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "segment", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_clear" gst_audio_ring_buffer_clear :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Int32 ->                                -- segment : TBasicType TInt32
+    IO ()
+
+
+audioRingBufferClear ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Int32                                -- segment
+    -> m ()                                 -- result
+audioRingBufferClear _obj segment = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_ring_buffer_clear _obj' segment
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferClearMethodInfo
+instance (signature ~ (Int32 -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferClearMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferClear
+
+-- method AudioRingBuffer::clear_all
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_clear_all" gst_audio_ring_buffer_clear_all :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO ()
+
+
+audioRingBufferClearAll ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m ()                                 -- result
+audioRingBufferClearAll _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_ring_buffer_clear_all _obj'
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferClearAllMethodInfo
+instance (signature ~ (m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferClearAllMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferClearAll
+
+-- method AudioRingBuffer::close_device
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_close_device" gst_audio_ring_buffer_close_device :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferCloseDevice ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferCloseDevice _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_close_device _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferCloseDeviceMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferCloseDeviceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferCloseDevice
+
+-- method AudioRingBuffer::commit
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in_samples", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_samples", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "accum", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_commit" gst_audio_ring_buffer_commit :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Word64 ->                               -- sample : TBasicType TUInt64
+    Word8 ->                                -- data : TBasicType TUInt8
+    Int32 ->                                -- in_samples : TBasicType TInt32
+    Int32 ->                                -- out_samples : TBasicType TInt32
+    Int32 ->                                -- accum : TBasicType TInt32
+    IO Word32
+
+
+audioRingBufferCommit ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Word64                               -- sample
+    -> Word8                                -- data_
+    -> Int32                                -- inSamples
+    -> Int32                                -- outSamples
+    -> Int32                                -- accum
+    -> m Word32                             -- result
+audioRingBufferCommit _obj sample data_ inSamples outSamples accum = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_commit _obj' sample data_ inSamples outSamples accum
+    touchManagedPtr _obj
+    return result
+
+data AudioRingBufferCommitMethodInfo
+instance (signature ~ (Word64 -> Word8 -> Int32 -> Int32 -> Int32 -> m Word32), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferCommitMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferCommit
+
+-- method AudioRingBuffer::convert
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_convert" gst_audio_ring_buffer_convert :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    CUInt ->                                -- src_fmt : TInterface "Gst" "Format"
+    Int64 ->                                -- src_val : TBasicType TInt64
+    CUInt ->                                -- dest_fmt : TInterface "Gst" "Format"
+    Int64 ->                                -- dest_val : TBasicType TInt64
+    IO CInt
+
+
+audioRingBufferConvert ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Gst.Format                           -- srcFmt
+    -> Int64                                -- srcVal
+    -> Gst.Format                           -- destFmt
+    -> Int64                                -- destVal
+    -> m Bool                               -- result
+audioRingBufferConvert _obj srcFmt srcVal destFmt destVal = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let srcFmt' = (fromIntegral . fromEnum) srcFmt
+    let destFmt' = (fromIntegral . fromEnum) destFmt
+    result <- gst_audio_ring_buffer_convert _obj' srcFmt' srcVal destFmt' destVal
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferConvertMethodInfo
+instance (signature ~ (Gst.Format -> Int64 -> Gst.Format -> Int64 -> m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferConvertMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferConvert
+
+-- method AudioRingBuffer::delay
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_delay" gst_audio_ring_buffer_delay :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO Word32
+
+
+audioRingBufferDelay ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Word32                             -- result
+audioRingBufferDelay _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_delay _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioRingBufferDelayMethodInfo
+instance (signature ~ (m Word32), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferDelayMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferDelay
+
+-- method AudioRingBuffer::device_is_open
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : 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 ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferDeviceIsOpen ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferDeviceIsOpen _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_device_is_open _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferDeviceIsOpenMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferDeviceIsOpenMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferDeviceIsOpen
+
+-- method AudioRingBuffer::is_acquired
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_is_acquired" gst_audio_ring_buffer_is_acquired :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferIsAcquired ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferIsAcquired _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_is_acquired _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferIsAcquiredMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferIsAcquiredMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsAcquired
+
+-- method AudioRingBuffer::is_active
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_is_active" gst_audio_ring_buffer_is_active :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferIsActive ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferIsActive _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_is_active _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferIsActiveMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferIsActiveMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsActive
+
+-- method AudioRingBuffer::is_flushing
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_is_flushing" gst_audio_ring_buffer_is_flushing :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferIsFlushing ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferIsFlushing _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_is_flushing _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferIsFlushingMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferIsFlushingMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferIsFlushing
+
+-- method AudioRingBuffer::may_start
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "allowed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_may_start" gst_audio_ring_buffer_may_start :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    CInt ->                                 -- allowed : TBasicType TBoolean
+    IO ()
+
+
+audioRingBufferMayStart ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- allowed
+    -> m ()                                 -- result
+audioRingBufferMayStart _obj allowed = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let allowed' = (fromIntegral . fromEnum) allowed
+    gst_audio_ring_buffer_may_start _obj' allowed'
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferMayStartMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferMayStartMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferMayStart
+
+-- method AudioRingBuffer::open_device
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_open_device" gst_audio_ring_buffer_open_device :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferOpenDevice ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferOpenDevice _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_open_device _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferOpenDeviceMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferOpenDeviceMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferOpenDevice
+
+-- method AudioRingBuffer::pause
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_pause" gst_audio_ring_buffer_pause :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferPause ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferPause _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_pause _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferPauseMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferPauseMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferPause
+
+-- method AudioRingBuffer::prepare_read
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "segment", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "readptr", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_prepare_read" gst_audio_ring_buffer_prepare_read :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Int32 ->                                -- segment : TBasicType TInt32
+    Word8 ->                                -- readptr : TBasicType TUInt8
+    Int32 ->                                -- len : TBasicType TInt32
+    IO CInt
+
+
+audioRingBufferPrepareRead ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Int32                                -- segment
+    -> Word8                                -- readptr
+    -> Int32                                -- len
+    -> m Bool                               -- result
+audioRingBufferPrepareRead _obj segment readptr len = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_prepare_read _obj' segment readptr len
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferPrepareReadMethodInfo
+instance (signature ~ (Int32 -> Word8 -> Int32 -> m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferPrepareReadMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferPrepareRead
+
+-- method AudioRingBuffer::read
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt32
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_read" gst_audio_ring_buffer_read :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Word64 ->                               -- sample : TBasicType TUInt64
+    Word8 ->                                -- data : TBasicType TUInt8
+    Word32 ->                               -- len : TBasicType TUInt32
+    Word64 ->                               -- timestamp : TBasicType TUInt64
+    IO Word32
+
+
+audioRingBufferRead ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Word64                               -- sample
+    -> Word8                                -- data_
+    -> Word32                               -- len
+    -> Word64                               -- timestamp
+    -> m Word32                             -- result
+audioRingBufferRead _obj sample data_ len timestamp = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_read _obj' sample data_ len timestamp
+    touchManagedPtr _obj
+    return result
+
+data AudioRingBufferReadMethodInfo
+instance (signature ~ (Word64 -> Word8 -> Word32 -> Word64 -> m Word32), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferReadMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferRead
+
+-- method AudioRingBuffer::release
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_release" gst_audio_ring_buffer_release :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferRelease ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferRelease _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_release _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferReleaseMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferReleaseMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferRelease
+
+-- method AudioRingBuffer::samples_done
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TUInt64
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_samples_done" gst_audio_ring_buffer_samples_done :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO Word64
+
+
+audioRingBufferSamplesDone ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Word64                             -- result
+audioRingBufferSamplesDone _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_samples_done _obj'
+    touchManagedPtr _obj
+    return result
+
+data AudioRingBufferSamplesDoneMethodInfo
+instance (signature ~ (m Word64), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSamplesDoneMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSamplesDone
+
+-- method AudioRingBuffer::set_callback
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cb", argType = TInterface "GstAudio" "AudioRingBufferCallback", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_callback" gst_audio_ring_buffer_set_callback :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    FunPtr AudioRingBufferCallbackC ->      -- cb : TInterface "GstAudio" "AudioRingBufferCallback"
+    Ptr () ->                               -- user_data : TBasicType TVoid
+    IO ()
+
+
+audioRingBufferSetCallback ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> AudioRingBufferCallback              -- cb
+    -> m ()                                 -- result
+audioRingBufferSetCallback _obj cb = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    ptrcb <- callocMem :: IO (Ptr (FunPtr AudioRingBufferCallbackC))
+    cb' <- mkAudioRingBufferCallback (audioRingBufferCallbackWrapper (Just ptrcb) cb)
+    poke ptrcb cb'
+    let userData = nullPtr
+    gst_audio_ring_buffer_set_callback _obj' cb' userData
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferSetCallbackMethodInfo
+instance (signature ~ (AudioRingBufferCallback -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSetCallbackMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetCallback
+
+-- method AudioRingBuffer::set_channel_positions
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TInterface "GstAudio" "AudioChannelPosition", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_channel_positions" gst_audio_ring_buffer_set_channel_positions :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    CUInt ->                                -- position : TInterface "GstAudio" "AudioChannelPosition"
+    IO ()
+
+
+audioRingBufferSetChannelPositions ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> AudioChannelPosition                 -- position
+    -> m ()                                 -- result
+audioRingBufferSetChannelPositions _obj position = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let position' = (fromIntegral . fromEnum) position
+    gst_audio_ring_buffer_set_channel_positions _obj' position'
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferSetChannelPositionsMethodInfo
+instance (signature ~ (AudioChannelPosition -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSetChannelPositionsMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetChannelPositions
+
+-- method AudioRingBuffer::set_flushing
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flushing", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_flushing" gst_audio_ring_buffer_set_flushing :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    CInt ->                                 -- flushing : TBasicType TBoolean
+    IO ()
+
+
+audioRingBufferSetFlushing ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Bool                                 -- flushing
+    -> m ()                                 -- result
+audioRingBufferSetFlushing _obj flushing = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    let flushing' = (fromIntegral . fromEnum) flushing
+    gst_audio_ring_buffer_set_flushing _obj' flushing'
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferSetFlushingMethodInfo
+instance (signature ~ (Bool -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSetFlushingMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetFlushing
+
+-- method AudioRingBuffer::set_sample
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_sample" gst_audio_ring_buffer_set_sample :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Word64 ->                               -- sample : TBasicType TUInt64
+    IO ()
+
+
+audioRingBufferSetSample ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Word64                               -- sample
+    -> m ()                                 -- result
+audioRingBufferSetSample _obj sample = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_ring_buffer_set_sample _obj' sample
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferSetSampleMethodInfo
+instance (signature ~ (Word64 -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSetSampleMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetSample
+
+-- method AudioRingBuffer::set_timestamp
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "readseg", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_set_timestamp" gst_audio_ring_buffer_set_timestamp :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    Int32 ->                                -- readseg : TBasicType TInt32
+    Word64 ->                               -- timestamp : TBasicType TUInt64
+    IO ()
+
+
+audioRingBufferSetTimestamp ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> Int32                                -- readseg
+    -> Word64                               -- timestamp
+    -> m ()                                 -- result
+audioRingBufferSetTimestamp _obj readseg timestamp = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    gst_audio_ring_buffer_set_timestamp _obj' readseg timestamp
+    touchManagedPtr _obj
+    return ()
+
+data AudioRingBufferSetTimestampMethodInfo
+instance (signature ~ (Int32 -> Word64 -> m ()), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferSetTimestampMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferSetTimestamp
+
+-- method AudioRingBuffer::start
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_start" gst_audio_ring_buffer_start :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferStart ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferStart _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_start _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferStartMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferStartMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferStart
+
+-- method AudioRingBuffer::stop
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioRingBuffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_stop" gst_audio_ring_buffer_stop :: 
+    Ptr AudioRingBuffer ->                  -- _obj : TInterface "GstAudio" "AudioRingBuffer"
+    IO CInt
+
+
+audioRingBufferStop ::
+    (MonadIO m, AudioRingBufferK a) =>
+    a                                       -- _obj
+    -> m Bool                               -- result
+audioRingBufferStop _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrCastPtr _obj
+    result <- gst_audio_ring_buffer_stop _obj'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioRingBufferStopMethodInfo
+instance (signature ~ (m Bool), MonadIO m, AudioRingBufferK a) => MethodInfo AudioRingBufferStopMethodInfo a signature where
+    overloadedMethod _ = audioRingBufferStop
+
+-- method AudioRingBuffer::debug_spec_buff
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_debug_spec_buff" gst_audio_ring_buffer_debug_spec_buff :: 
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    IO ()
+
+
+audioRingBufferDebugSpecBuff ::
+    (MonadIO m) =>
+    AudioRingBufferSpec                     -- spec
+    -> m ()                                 -- result
+audioRingBufferDebugSpecBuff spec = liftIO $ do
+    let spec' = unsafeManagedPtrGetPtr spec
+    gst_audio_ring_buffer_debug_spec_buff spec'
+    touchManagedPtr spec
+    return ()
+
+-- method AudioRingBuffer::debug_spec_caps
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_debug_spec_caps" gst_audio_ring_buffer_debug_spec_caps :: 
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    IO ()
+
+
+audioRingBufferDebugSpecCaps ::
+    (MonadIO m) =>
+    AudioRingBufferSpec                     -- spec
+    -> m ()                                 -- result
+audioRingBufferDebugSpecCaps spec = liftIO $ do
+    let spec' = unsafeManagedPtrGetPtr spec
+    gst_audio_ring_buffer_debug_spec_caps spec'
+    touchManagedPtr spec
+    return ()
+
+-- method AudioRingBuffer::parse_caps
+-- method type : MemberFunction
+-- Args : [Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_ring_buffer_parse_caps" gst_audio_ring_buffer_parse_caps :: 
+    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
+    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
+    IO CInt
+
+
+audioRingBufferParseCaps ::
+    (MonadIO m) =>
+    AudioRingBufferSpec                     -- spec
+    -> Gst.Caps                             -- caps
+    -> m Bool                               -- result
+audioRingBufferParseCaps spec caps = liftIO $ do
+    let spec' = unsafeManagedPtrGetPtr spec
+    let caps' = unsafeManagedPtrGetPtr caps
+    result <- gst_audio_ring_buffer_parse_caps spec' caps'
+    let result' = (/= 0) result
+    touchManagedPtr spec
+    touchManagedPtr caps
+    return result'
+
+
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,40 @@
+module GI.GstAudio.Objects.AudioRingBuffer where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioRingBuffer = AudioRingBuffer (ForeignPtr AudioRingBuffer)
+instance GObject AudioRingBuffer where
+class GObject o => AudioRingBufferK o
+instance (GObject o, IsDescendantOf AudioRingBuffer o) => AudioRingBufferK o
+data AudioRingBufferAcquireMethodInfo
+data AudioRingBufferActivateMethodInfo
+data AudioRingBufferAdvanceMethodInfo
+data AudioRingBufferClearMethodInfo
+data AudioRingBufferClearAllMethodInfo
+data AudioRingBufferCloseDeviceMethodInfo
+data AudioRingBufferCommitMethodInfo
+data AudioRingBufferConvertMethodInfo
+data AudioRingBufferDelayMethodInfo
+data AudioRingBufferDeviceIsOpenMethodInfo
+data AudioRingBufferIsAcquiredMethodInfo
+data AudioRingBufferIsActiveMethodInfo
+data AudioRingBufferIsFlushingMethodInfo
+data AudioRingBufferMayStartMethodInfo
+data AudioRingBufferOpenDeviceMethodInfo
+data AudioRingBufferPauseMethodInfo
+data AudioRingBufferPrepareReadMethodInfo
+data AudioRingBufferReadMethodInfo
+data AudioRingBufferReleaseMethodInfo
+data AudioRingBufferSamplesDoneMethodInfo
+data AudioRingBufferSetCallbackMethodInfo
+data AudioRingBufferSetChannelPositionsMethodInfo
+data AudioRingBufferSetFlushingMethodInfo
+data AudioRingBufferSetSampleMethodInfo
+data AudioRingBufferSetTimestampMethodInfo
+data AudioRingBufferStartMethodInfo
+data AudioRingBufferStopMethodInfo
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,204 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioSink
+    ( 
+
+-- * Exported types
+    AudioSink(..)                           ,
+    AudioSinkK                              ,
+    toAudioSink                             ,
+    noAudioSink                             ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioSink = AudioSink (ForeignPtr AudioSink)
+foreign import ccall "gst_audio_sink_get_type"
+    c_gst_audio_sink_get_type :: IO GType
+
+type instance ParentTypes AudioSink = AudioSinkParentTypes
+type AudioSinkParentTypes = '[AudioBaseSink, GstBase.BaseSink, Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioSink where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_sink_get_type
+    
+
+class GObject o => AudioSinkK o
+instance (GObject o, IsDescendantOf AudioSink o) => AudioSinkK o
+
+toAudioSink :: AudioSinkK o => o -> IO AudioSink
+toAudioSink = unsafeCastTo AudioSink
+
+noAudioSink :: Maybe AudioSink
+noAudioSink = Nothing
+
+type family ResolveAudioSinkMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioSinkMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioSinkMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioSinkMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioSinkMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioSinkMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioSinkMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioSinkMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioSinkMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioSinkMethod "createRingbuffer" o = AudioBaseSinkCreateRingbufferMethodInfo
+    ResolveAudioSinkMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioSinkMethod "doPreroll" o = GstBase.BaseSinkDoPrerollMethodInfo
+    ResolveAudioSinkMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioSinkMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioSinkMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioSinkMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioSinkMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioSinkMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioSinkMethod "isAsyncEnabled" o = GstBase.BaseSinkIsAsyncEnabledMethodInfo
+    ResolveAudioSinkMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioSinkMethod "isLastSampleEnabled" o = GstBase.BaseSinkIsLastSampleEnabledMethodInfo
+    ResolveAudioSinkMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioSinkMethod "isQosEnabled" o = GstBase.BaseSinkIsQosEnabledMethodInfo
+    ResolveAudioSinkMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioSinkMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioSinkMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioSinkMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioSinkMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioSinkMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioSinkMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioSinkMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioSinkMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioSinkMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioSinkMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioSinkMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioSinkMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioSinkMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioSinkMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioSinkMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioSinkMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioSinkMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioSinkMethod "queryLatency" o = GstBase.BaseSinkQueryLatencyMethodInfo
+    ResolveAudioSinkMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioSinkMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioSinkMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioSinkMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioSinkMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioSinkMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioSinkMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioSinkMethod "reportDeviceFailure" o = AudioBaseSinkReportDeviceFailureMethodInfo
+    ResolveAudioSinkMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioSinkMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioSinkMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioSinkMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioSinkMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioSinkMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioSinkMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioSinkMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioSinkMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioSinkMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioSinkMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioSinkMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioSinkMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioSinkMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioSinkMethod "wait" o = GstBase.BaseSinkWaitMethodInfo
+    ResolveAudioSinkMethod "waitClock" o = GstBase.BaseSinkWaitClockMethodInfo
+    ResolveAudioSinkMethod "waitPreroll" o = GstBase.BaseSinkWaitPrerollMethodInfo
+    ResolveAudioSinkMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioSinkMethod "getAlignmentThreshold" o = AudioBaseSinkGetAlignmentThresholdMethodInfo
+    ResolveAudioSinkMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioSinkMethod "getBlocksize" o = GstBase.BaseSinkGetBlocksizeMethodInfo
+    ResolveAudioSinkMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioSinkMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioSinkMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioSinkMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioSinkMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioSinkMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioSinkMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioSinkMethod "getDiscontWait" o = AudioBaseSinkGetDiscontWaitMethodInfo
+    ResolveAudioSinkMethod "getDriftTolerance" o = AudioBaseSinkGetDriftToleranceMethodInfo
+    ResolveAudioSinkMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioSinkMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioSinkMethod "getLastSample" o = GstBase.BaseSinkGetLastSampleMethodInfo
+    ResolveAudioSinkMethod "getLatency" o = GstBase.BaseSinkGetLatencyMethodInfo
+    ResolveAudioSinkMethod "getMaxBitrate" o = GstBase.BaseSinkGetMaxBitrateMethodInfo
+    ResolveAudioSinkMethod "getMaxLateness" o = GstBase.BaseSinkGetMaxLatenessMethodInfo
+    ResolveAudioSinkMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioSinkMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioSinkMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioSinkMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioSinkMethod "getProvideClock" o = AudioBaseSinkGetProvideClockMethodInfo
+    ResolveAudioSinkMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioSinkMethod "getRenderDelay" o = GstBase.BaseSinkGetRenderDelayMethodInfo
+    ResolveAudioSinkMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioSinkMethod "getSlaveMethod" o = AudioBaseSinkGetSlaveMethodMethodInfo
+    ResolveAudioSinkMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioSinkMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioSinkMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioSinkMethod "getSync" o = GstBase.BaseSinkGetSyncMethodInfo
+    ResolveAudioSinkMethod "getThrottleTime" o = GstBase.BaseSinkGetThrottleTimeMethodInfo
+    ResolveAudioSinkMethod "getTsOffset" o = GstBase.BaseSinkGetTsOffsetMethodInfo
+    ResolveAudioSinkMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioSinkMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioSinkMethod "setAlignmentThreshold" o = AudioBaseSinkSetAlignmentThresholdMethodInfo
+    ResolveAudioSinkMethod "setAsyncEnabled" o = GstBase.BaseSinkSetAsyncEnabledMethodInfo
+    ResolveAudioSinkMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioSinkMethod "setBlocksize" o = GstBase.BaseSinkSetBlocksizeMethodInfo
+    ResolveAudioSinkMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioSinkMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioSinkMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioSinkMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioSinkMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioSinkMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioSinkMethod "setCustomSlavingCallback" o = AudioBaseSinkSetCustomSlavingCallbackMethodInfo
+    ResolveAudioSinkMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioSinkMethod "setDiscontWait" o = AudioBaseSinkSetDiscontWaitMethodInfo
+    ResolveAudioSinkMethod "setDriftTolerance" o = AudioBaseSinkSetDriftToleranceMethodInfo
+    ResolveAudioSinkMethod "setLastSampleEnabled" o = GstBase.BaseSinkSetLastSampleEnabledMethodInfo
+    ResolveAudioSinkMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioSinkMethod "setMaxBitrate" o = GstBase.BaseSinkSetMaxBitrateMethodInfo
+    ResolveAudioSinkMethod "setMaxLateness" o = GstBase.BaseSinkSetMaxLatenessMethodInfo
+    ResolveAudioSinkMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioSinkMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioSinkMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioSinkMethod "setProvideClock" o = AudioBaseSinkSetProvideClockMethodInfo
+    ResolveAudioSinkMethod "setQosEnabled" o = GstBase.BaseSinkSetQosEnabledMethodInfo
+    ResolveAudioSinkMethod "setRenderDelay" o = GstBase.BaseSinkSetRenderDelayMethodInfo
+    ResolveAudioSinkMethod "setSlaveMethod" o = AudioBaseSinkSetSlaveMethodMethodInfo
+    ResolveAudioSinkMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioSinkMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioSinkMethod "setSync" o = GstBase.BaseSinkSetSyncMethodInfo
+    ResolveAudioSinkMethod "setThrottleTime" o = GstBase.BaseSinkSetThrottleTimeMethodInfo
+    ResolveAudioSinkMethod "setTsOffset" o = GstBase.BaseSinkSetTsOffsetMethodInfo
+    ResolveAudioSinkMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioSinkMethod t AudioSink, MethodInfo info AudioSink p) => IsLabelProxy t (AudioSink -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioSinkMethod t AudioSink, MethodInfo info AudioSink p) => IsLabel t (AudioSink -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+type instance AttributeList AudioSink = AudioSinkAttributeList
+type AudioSinkAttributeList = ('[ '("alignmentThreshold", AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSinkBlocksizePropertyInfo), '("bufferTime", AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSinkLastSamplePropertyInfo), '("latencyTime", AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("provideClock", AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", AudioBaseSinkSlaveMethodPropertyInfo), '("sync", GstBase.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioSink = AudioSinkSignalList
+type AudioSinkSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+
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,13 @@
+module GI.GstAudio.Objects.AudioSink where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioSink = AudioSink (ForeignPtr AudioSink)
+instance GObject AudioSink where
+class GObject o => AudioSinkK o
+instance (GObject o, IsDescendantOf AudioSink o) => AudioSinkK o
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,188 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Objects.AudioSrc
+    ( 
+
+-- * Exported types
+    AudioSrc(..)                            ,
+    AudioSrcK                               ,
+    toAudioSrc                              ,
+    noAudioSrc                              ,
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.GObject as GObject
+import qualified GI.Gst as Gst
+import qualified GI.GstBase as GstBase
+
+newtype AudioSrc = AudioSrc (ForeignPtr AudioSrc)
+foreign import ccall "gst_audio_src_get_type"
+    c_gst_audio_src_get_type :: IO GType
+
+type instance ParentTypes AudioSrc = AudioSrcParentTypes
+type AudioSrcParentTypes = '[AudioBaseSrc, GstBase.PushSrc, GstBase.BaseSrc, Gst.Element, Gst.Object, GObject.Object]
+
+instance GObject AudioSrc where
+    gobjectIsInitiallyUnowned _ = True
+    gobjectType _ = c_gst_audio_src_get_type
+    
+
+class GObject o => AudioSrcK o
+instance (GObject o, IsDescendantOf AudioSrc o) => AudioSrcK o
+
+toAudioSrc :: AudioSrcK o => o -> IO AudioSrc
+toAudioSrc = unsafeCastTo AudioSrc
+
+noAudioSrc :: Maybe AudioSrc
+noAudioSrc = Nothing
+
+type family ResolveAudioSrcMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioSrcMethod "abortState" o = Gst.ElementAbortStateMethodInfo
+    ResolveAudioSrcMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
+    ResolveAudioSrcMethod "addPad" o = Gst.ElementAddPadMethodInfo
+    ResolveAudioSrcMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
+    ResolveAudioSrcMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
+    ResolveAudioSrcMethod "changeState" o = Gst.ElementChangeStateMethodInfo
+    ResolveAudioSrcMethod "continueState" o = Gst.ElementContinueStateMethodInfo
+    ResolveAudioSrcMethod "createAllPads" o = Gst.ElementCreateAllPadsMethodInfo
+    ResolveAudioSrcMethod "createRingbuffer" o = AudioBaseSrcCreateRingbufferMethodInfo
+    ResolveAudioSrcMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
+    ResolveAudioSrcMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
+    ResolveAudioSrcMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
+    ResolveAudioSrcMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
+    ResolveAudioSrcMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
+    ResolveAudioSrcMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
+    ResolveAudioSrcMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
+    ResolveAudioSrcMethod "isAsync" o = GstBase.BaseSrcIsAsyncMethodInfo
+    ResolveAudioSrcMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
+    ResolveAudioSrcMethod "isLive" o = GstBase.BaseSrcIsLiveMethodInfo
+    ResolveAudioSrcMethod "isLockedState" o = Gst.ElementIsLockedStateMethodInfo
+    ResolveAudioSrcMethod "iteratePads" o = Gst.ElementIteratePadsMethodInfo
+    ResolveAudioSrcMethod "iterateSinkPads" o = Gst.ElementIterateSinkPadsMethodInfo
+    ResolveAudioSrcMethod "iterateSrcPads" o = Gst.ElementIterateSrcPadsMethodInfo
+    ResolveAudioSrcMethod "link" o = Gst.ElementLinkMethodInfo
+    ResolveAudioSrcMethod "linkFiltered" o = Gst.ElementLinkFilteredMethodInfo
+    ResolveAudioSrcMethod "linkPads" o = Gst.ElementLinkPadsMethodInfo
+    ResolveAudioSrcMethod "linkPadsFiltered" o = Gst.ElementLinkPadsFilteredMethodInfo
+    ResolveAudioSrcMethod "linkPadsFull" o = Gst.ElementLinkPadsFullMethodInfo
+    ResolveAudioSrcMethod "lostState" o = Gst.ElementLostStateMethodInfo
+    ResolveAudioSrcMethod "messageFull" o = Gst.ElementMessageFullMethodInfo
+    ResolveAudioSrcMethod "newSeamlessSegment" o = GstBase.BaseSrcNewSeamlessSegmentMethodInfo
+    ResolveAudioSrcMethod "noMorePads" o = Gst.ElementNoMorePadsMethodInfo
+    ResolveAudioSrcMethod "notify" o = GObject.ObjectNotifyMethodInfo
+    ResolveAudioSrcMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
+    ResolveAudioSrcMethod "postMessage" o = Gst.ElementPostMessageMethodInfo
+    ResolveAudioSrcMethod "provideClock" o = Gst.ElementProvideClockMethodInfo
+    ResolveAudioSrcMethod "query" o = Gst.ElementQueryMethodInfo
+    ResolveAudioSrcMethod "queryConvert" o = Gst.ElementQueryConvertMethodInfo
+    ResolveAudioSrcMethod "queryDuration" o = Gst.ElementQueryDurationMethodInfo
+    ResolveAudioSrcMethod "queryLatency" o = GstBase.BaseSrcQueryLatencyMethodInfo
+    ResolveAudioSrcMethod "queryPosition" o = Gst.ElementQueryPositionMethodInfo
+    ResolveAudioSrcMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
+    ResolveAudioSrcMethod "releaseRequestPad" o = Gst.ElementReleaseRequestPadMethodInfo
+    ResolveAudioSrcMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
+    ResolveAudioSrcMethod "removePad" o = Gst.ElementRemovePadMethodInfo
+    ResolveAudioSrcMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
+    ResolveAudioSrcMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
+    ResolveAudioSrcMethod "requestPad" o = Gst.ElementRequestPadMethodInfo
+    ResolveAudioSrcMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
+    ResolveAudioSrcMethod "seek" o = Gst.ElementSeekMethodInfo
+    ResolveAudioSrcMethod "seekSimple" o = Gst.ElementSeekSimpleMethodInfo
+    ResolveAudioSrcMethod "sendEvent" o = Gst.ElementSendEventMethodInfo
+    ResolveAudioSrcMethod "startComplete" o = GstBase.BaseSrcStartCompleteMethodInfo
+    ResolveAudioSrcMethod "startWait" o = GstBase.BaseSrcStartWaitMethodInfo
+    ResolveAudioSrcMethod "stealData" o = GObject.ObjectStealDataMethodInfo
+    ResolveAudioSrcMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
+    ResolveAudioSrcMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
+    ResolveAudioSrcMethod "syncStateWithParent" o = Gst.ElementSyncStateWithParentMethodInfo
+    ResolveAudioSrcMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
+    ResolveAudioSrcMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
+    ResolveAudioSrcMethod "unlink" o = Gst.ElementUnlinkMethodInfo
+    ResolveAudioSrcMethod "unlinkPads" o = Gst.ElementUnlinkPadsMethodInfo
+    ResolveAudioSrcMethod "unparent" o = Gst.ObjectUnparentMethodInfo
+    ResolveAudioSrcMethod "waitPlaying" o = GstBase.BaseSrcWaitPlayingMethodInfo
+    ResolveAudioSrcMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
+    ResolveAudioSrcMethod "getAllocator" o = GstBase.BaseSrcGetAllocatorMethodInfo
+    ResolveAudioSrcMethod "getBaseTime" o = Gst.ElementGetBaseTimeMethodInfo
+    ResolveAudioSrcMethod "getBlocksize" o = GstBase.BaseSrcGetBlocksizeMethodInfo
+    ResolveAudioSrcMethod "getBufferPool" o = GstBase.BaseSrcGetBufferPoolMethodInfo
+    ResolveAudioSrcMethod "getBus" o = Gst.ElementGetBusMethodInfo
+    ResolveAudioSrcMethod "getClock" o = Gst.ElementGetClockMethodInfo
+    ResolveAudioSrcMethod "getCompatiblePad" o = Gst.ElementGetCompatiblePadMethodInfo
+    ResolveAudioSrcMethod "getCompatiblePadTemplate" o = Gst.ElementGetCompatiblePadTemplateMethodInfo
+    ResolveAudioSrcMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
+    ResolveAudioSrcMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
+    ResolveAudioSrcMethod "getData" o = GObject.ObjectGetDataMethodInfo
+    ResolveAudioSrcMethod "getDoTimestamp" o = GstBase.BaseSrcGetDoTimestampMethodInfo
+    ResolveAudioSrcMethod "getFactory" o = Gst.ElementGetFactoryMethodInfo
+    ResolveAudioSrcMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
+    ResolveAudioSrcMethod "getName" o = Gst.ObjectGetNameMethodInfo
+    ResolveAudioSrcMethod "getParent" o = Gst.ObjectGetParentMethodInfo
+    ResolveAudioSrcMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
+    ResolveAudioSrcMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
+    ResolveAudioSrcMethod "getProvideClock" o = AudioBaseSrcGetProvideClockMethodInfo
+    ResolveAudioSrcMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
+    ResolveAudioSrcMethod "getRequestPad" o = Gst.ElementGetRequestPadMethodInfo
+    ResolveAudioSrcMethod "getSlaveMethod" o = AudioBaseSrcGetSlaveMethodMethodInfo
+    ResolveAudioSrcMethod "getStartTime" o = Gst.ElementGetStartTimeMethodInfo
+    ResolveAudioSrcMethod "getState" o = Gst.ElementGetStateMethodInfo
+    ResolveAudioSrcMethod "getStaticPad" o = Gst.ElementGetStaticPadMethodInfo
+    ResolveAudioSrcMethod "getValue" o = Gst.ObjectGetValueMethodInfo
+    ResolveAudioSrcMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
+    ResolveAudioSrcMethod "setAsync" o = GstBase.BaseSrcSetAsyncMethodInfo
+    ResolveAudioSrcMethod "setAutomaticEos" o = GstBase.BaseSrcSetAutomaticEosMethodInfo
+    ResolveAudioSrcMethod "setBaseTime" o = Gst.ElementSetBaseTimeMethodInfo
+    ResolveAudioSrcMethod "setBlocksize" o = GstBase.BaseSrcSetBlocksizeMethodInfo
+    ResolveAudioSrcMethod "setBus" o = Gst.ElementSetBusMethodInfo
+    ResolveAudioSrcMethod "setCaps" o = GstBase.BaseSrcSetCapsMethodInfo
+    ResolveAudioSrcMethod "setClock" o = Gst.ElementSetClockMethodInfo
+    ResolveAudioSrcMethod "setContext" o = Gst.ElementSetContextMethodInfo
+    ResolveAudioSrcMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
+    ResolveAudioSrcMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
+    ResolveAudioSrcMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
+    ResolveAudioSrcMethod "setData" o = GObject.ObjectSetDataMethodInfo
+    ResolveAudioSrcMethod "setDoTimestamp" o = GstBase.BaseSrcSetDoTimestampMethodInfo
+    ResolveAudioSrcMethod "setDynamicSize" o = GstBase.BaseSrcSetDynamicSizeMethodInfo
+    ResolveAudioSrcMethod "setFormat" o = GstBase.BaseSrcSetFormatMethodInfo
+    ResolveAudioSrcMethod "setLive" o = GstBase.BaseSrcSetLiveMethodInfo
+    ResolveAudioSrcMethod "setLockedState" o = Gst.ElementSetLockedStateMethodInfo
+    ResolveAudioSrcMethod "setName" o = Gst.ObjectSetNameMethodInfo
+    ResolveAudioSrcMethod "setParent" o = Gst.ObjectSetParentMethodInfo
+    ResolveAudioSrcMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
+    ResolveAudioSrcMethod "setProvideClock" o = AudioBaseSrcSetProvideClockMethodInfo
+    ResolveAudioSrcMethod "setSlaveMethod" o = AudioBaseSrcSetSlaveMethodMethodInfo
+    ResolveAudioSrcMethod "setStartTime" o = Gst.ElementSetStartTimeMethodInfo
+    ResolveAudioSrcMethod "setState" o = Gst.ElementSetStateMethodInfo
+    ResolveAudioSrcMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioSrcMethod t AudioSrc, MethodInfo info AudioSrc p) => IsLabelProxy t (AudioSrc -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioSrcMethod t AudioSrc, MethodInfo info AudioSrc p) => IsLabel t (AudioSrc -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#endif
+
+type instance AttributeList AudioSrc = AudioSrcAttributeList
+type AudioSrcAttributeList = ('[ '("actualBufferTime", AudioBaseSrcActualBufferTimePropertyInfo), '("actualLatencyTime", AudioBaseSrcActualLatencyTimePropertyInfo), '("blocksize", GstBase.BaseSrcBlocksizePropertyInfo), '("bufferTime", AudioBaseSrcBufferTimePropertyInfo), '("doTimestamp", GstBase.BaseSrcDoTimestampPropertyInfo), '("latencyTime", AudioBaseSrcLatencyTimePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("numBuffers", GstBase.BaseSrcNumBuffersPropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("provideClock", AudioBaseSrcProvideClockPropertyInfo), '("slaveMethod", AudioBaseSrcSlaveMethodPropertyInfo), '("typefind", GstBase.BaseSrcTypefindPropertyInfo)] :: [(Symbol, *)])
+
+type instance SignalList AudioSrc = AudioSrcSignalList
+type AudioSrcSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.ElementNoMorePadsSignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("padAdded", Gst.ElementPadAddedSignalInfo), '("padRemoved", Gst.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])
+
+
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,13 @@
+module GI.GstAudio.Objects.AudioSrc where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioSrc = AudioSrc (ForeignPtr AudioSrc)
+instance GObject AudioSrc where
+class GObject o => AudioSrcK o
+instance (GObject o, IsDescendantOf AudioSrc o) => AudioSrcK o
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,35 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+-}
+
+module GI.GstAudio.Structs
+    (     module GI.GstAudio.Structs.AudioCdSrcTrack,
+    module GI.GstAudio.Structs.AudioDownmixMeta,
+    module GI.GstAudio.Structs.AudioFormatInfo,
+    module GI.GstAudio.Structs.AudioInfo    ,
+    module GI.GstAudio.Structs.AudioRingBufferSpec,
+
+
+    ) where
+
+import GI.GstAudio.Structs.AudioCdSrcTrack
+import GI.GstAudio.Structs.AudioDownmixMeta
+import GI.GstAudio.Structs.AudioFormatInfo
+import GI.GstAudio.Structs.AudioInfo
+import GI.GstAudio.Structs.AudioRingBufferSpec
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+
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,108 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+
+CD track abstraction to communicate TOC entries to the base class.
+
+This structure is only for use by sub-classed in connection with
+gst_audio_cd_src_add_track().
+
+Applications will be informed of the available tracks via a TOC message
+on the pipeline's #GstBus instead.
+-}
+
+module GI.GstAudio.Structs.AudioCdSrcTrack
+    ( 
+
+-- * Exported types
+    AudioCdSrcTrack(..)                     ,
+    newZeroAudioCdSrcTrack                  ,
+    noAudioCdSrcTrack                       ,
+
+
+ -- * Properties
+-- ** End
+    audioCdSrcTrackReadEnd                  ,
+
+
+-- ** IsAudio
+    audioCdSrcTrackReadIsAudio              ,
+
+
+-- ** Num
+    audioCdSrcTrackReadNum                  ,
+
+
+-- ** Start
+    audioCdSrcTrackReadStart                ,
+
+
+-- ** Tags
+    audioCdSrcTrackReadTags                 ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.Gst as Gst
+
+newtype AudioCdSrcTrack = AudioCdSrcTrack (ForeignPtr AudioCdSrcTrack)
+-- | Construct a `AudioCdSrcTrack` struct initialized to zero.
+newZeroAudioCdSrcTrack :: MonadIO m => m AudioCdSrcTrack
+newZeroAudioCdSrcTrack = liftIO $ callocBytes 48 >>= wrapPtr AudioCdSrcTrack
+
+noAudioCdSrcTrack :: Maybe AudioCdSrcTrack
+noAudioCdSrcTrack = Nothing
+
+audioCdSrcTrackReadIsAudio :: AudioCdSrcTrack -> IO Bool
+audioCdSrcTrackReadIsAudio s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO CInt
+    let val' = (/= 0) val
+    return val'
+
+audioCdSrcTrackReadNum :: AudioCdSrcTrack -> IO Word32
+audioCdSrcTrackReadNum s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 4) :: IO Word32
+    return val
+
+audioCdSrcTrackReadStart :: AudioCdSrcTrack -> IO Word32
+audioCdSrcTrackReadStart s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO Word32
+    return val
+
+audioCdSrcTrackReadEnd :: AudioCdSrcTrack -> IO Word32
+audioCdSrcTrackReadEnd s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 12) :: IO Word32
+    return val
+
+audioCdSrcTrackReadTags :: AudioCdSrcTrack -> IO Gst.TagList
+audioCdSrcTrackReadTags s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO (Ptr Gst.TagList)
+    val' <- (newBoxed Gst.TagList) val
+    return val'
+
+type family ResolveAudioCdSrcTrackMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioCdSrcTrackMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioCdSrcTrackMethod t AudioCdSrcTrack, MethodInfo info AudioCdSrcTrack p) => IsLabelProxy t (AudioCdSrcTrack -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioCdSrcTrackMethod t AudioCdSrcTrack, MethodInfo info AudioCdSrcTrack p) => IsLabel t (AudioCdSrcTrack -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#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,10 @@
+module GI.GstAudio.Structs.AudioCdSrcTrack where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioCdSrcTrack = AudioCdSrcTrack (ForeignPtr AudioCdSrcTrack)
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,148 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+
+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 @to_channels times @from_channels
+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.
+-}
+
+module GI.GstAudio.Structs.AudioDownmixMeta
+    ( 
+
+-- * Exported types
+    AudioDownmixMeta(..)                    ,
+    newZeroAudioDownmixMeta                 ,
+    noAudioDownmixMeta                      ,
+
+
+ -- * Methods
+-- ** audioDownmixMetaGetInfo
+    audioDownmixMetaGetInfo                 ,
+
+
+
+
+ -- * Properties
+-- ** FromChannels
+    audioDownmixMetaReadFromChannels        ,
+
+
+-- ** FromPosition
+    audioDownmixMetaReadFromPosition        ,
+
+
+-- ** Matrix
+    audioDownmixMetaReadMatrix              ,
+
+
+-- ** Meta
+    audioDownmixMetaReadMeta                ,
+
+
+-- ** ToChannels
+    audioDownmixMetaReadToChannels          ,
+
+
+-- ** ToPosition
+    audioDownmixMetaReadToPosition          ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.Gst as Gst
+
+newtype AudioDownmixMeta = AudioDownmixMeta (ForeignPtr AudioDownmixMeta)
+-- | Construct a `AudioDownmixMeta` struct initialized to zero.
+newZeroAudioDownmixMeta :: MonadIO m => m AudioDownmixMeta
+newZeroAudioDownmixMeta = liftIO $ callocBytes 48 >>= wrapPtr AudioDownmixMeta
+
+noAudioDownmixMeta :: Maybe AudioDownmixMeta
+noAudioDownmixMeta = Nothing
+
+audioDownmixMetaReadMeta :: AudioDownmixMeta -> IO Gst.Meta
+audioDownmixMetaReadMeta s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Meta)
+    val' <- (newPtr 16 Gst.Meta) val
+    return val'
+
+audioDownmixMetaReadFromPosition :: AudioDownmixMeta -> IO AudioChannelPosition
+audioDownmixMetaReadFromPosition s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+audioDownmixMetaReadToPosition :: AudioDownmixMeta -> IO AudioChannelPosition
+audioDownmixMetaReadToPosition s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+audioDownmixMetaReadFromChannels :: AudioDownmixMeta -> IO Int32
+audioDownmixMetaReadFromChannels s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 32) :: IO Int32
+    return val
+
+audioDownmixMetaReadToChannels :: AudioDownmixMeta -> IO Int32
+audioDownmixMetaReadToChannels s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 36) :: IO Int32
+    return val
+
+audioDownmixMetaReadMatrix :: AudioDownmixMeta -> IO Float
+audioDownmixMetaReadMatrix s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 40) :: IO CFloat
+    let val' = realToFrac val
+    return val'
+
+-- method AudioDownmixMeta::get_info
+-- method type : MemberFunction
+-- Args : []
+-- Lengths : []
+-- returnType : TInterface "Gst" "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)
+
+
+audioDownmixMetaGetInfo ::
+    (MonadIO m) =>
+    m Gst.MetaInfo                          -- result
+audioDownmixMetaGetInfo  = liftIO $ do
+    result <- gst_audio_downmix_meta_get_info
+    checkUnexpectedReturnNULL "gst_audio_downmix_meta_get_info" result
+    result' <- (newPtr 80 Gst.MetaInfo) result
+    return result'
+
+type family ResolveAudioDownmixMetaMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioDownmixMetaMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, MethodInfo info AudioDownmixMeta p) => IsLabelProxy t (AudioDownmixMeta -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, MethodInfo info AudioDownmixMeta p) => IsLabel t (AudioDownmixMeta -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#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,10 @@
+module GI.GstAudio.Structs.AudioDownmixMeta where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioDownmixMeta = AudioDownmixMeta (ForeignPtr AudioDownmixMeta)
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,137 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+
+Information for an audio format.
+-}
+
+module GI.GstAudio.Structs.AudioFormatInfo
+    ( 
+
+-- * Exported types
+    AudioFormatInfo(..)                     ,
+    newZeroAudioFormatInfo                  ,
+    noAudioFormatInfo                       ,
+
+
+ -- * Properties
+-- ** Depth
+    audioFormatInfoReadDepth                ,
+
+
+-- ** Description
+    audioFormatInfoReadDescription          ,
+
+
+-- ** Endianness
+    audioFormatInfoReadEndianness           ,
+
+
+-- ** Flags
+    audioFormatInfoReadFlags                ,
+
+
+-- ** Format
+    audioFormatInfoReadFormat               ,
+
+
+-- ** Name
+    audioFormatInfoReadName                 ,
+
+
+-- ** UnpackFormat
+    audioFormatInfoReadUnpackFormat         ,
+
+
+-- ** Width
+    audioFormatInfoReadWidth                ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+
+newtype AudioFormatInfo = AudioFormatInfo (ForeignPtr AudioFormatInfo)
+-- | Construct a `AudioFormatInfo` struct initialized to zero.
+newZeroAudioFormatInfo :: MonadIO m => m AudioFormatInfo
+newZeroAudioFormatInfo = liftIO $ callocBytes 104 >>= wrapPtr AudioFormatInfo
+
+noAudioFormatInfo :: Maybe AudioFormatInfo
+noAudioFormatInfo = Nothing
+
+audioFormatInfoReadFormat :: AudioFormatInfo -> IO AudioFormat
+audioFormatInfoReadFormat s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+audioFormatInfoReadName :: AudioFormatInfo -> IO T.Text
+audioFormatInfoReadName s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CString
+    val' <- cstringToText val
+    return val'
+
+audioFormatInfoReadDescription :: AudioFormatInfo -> IO T.Text
+audioFormatInfoReadDescription s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO CString
+    val' <- cstringToText val
+    return val'
+
+audioFormatInfoReadFlags :: AudioFormatInfo -> IO [AudioFormatFlags]
+audioFormatInfoReadFlags s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO CUInt
+    let val' = wordToGFlags val
+    return val'
+
+audioFormatInfoReadEndianness :: AudioFormatInfo -> IO Int32
+audioFormatInfoReadEndianness s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 28) :: IO Int32
+    return val
+
+audioFormatInfoReadWidth :: AudioFormatInfo -> IO Int32
+audioFormatInfoReadWidth s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 32) :: IO Int32
+    return val
+
+audioFormatInfoReadDepth :: AudioFormatInfo -> IO Int32
+audioFormatInfoReadDepth s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 36) :: IO Int32
+    return val
+
+-- XXX Skipped getter for "AudioFormatInfo:silence" :: Not implemented: "Don't know how to unpack C array of type TCArray False 8 (-1) (TBasicType TUInt8)"
+
+audioFormatInfoReadUnpackFormat :: AudioFormatInfo -> IO AudioFormat
+audioFormatInfoReadUnpackFormat s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 48) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+-- XXX Skipped getter for "AudioFormatInfo:unpack_func" :: Not implemented: "Wrapping foreign callbacks is not supported yet"
+
+-- XXX Skipped getter for "AudioFormatInfo:pack_func" :: Not implemented: "Wrapping foreign callbacks is not supported yet"
+
+type family ResolveAudioFormatInfoMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioFormatInfoMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioFormatInfoMethod t AudioFormatInfo, MethodInfo info AudioFormatInfo p) => IsLabelProxy t (AudioFormatInfo -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioFormatInfoMethod t AudioFormatInfo, MethodInfo info AudioFormatInfo p) => IsLabel t (AudioFormatInfo -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#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,10 @@
+module GI.GstAudio.Structs.AudioFormatInfo where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioFormatInfo = AudioFormatInfo (ForeignPtr AudioFormatInfo)
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,450 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+
+Information describing audio properties. This information can be filled
+in from GstCaps with gst_audio_info_from_caps().
+
+Use the provided macros to access the info in this structure.
+-}
+
+module GI.GstAudio.Structs.AudioInfo
+    ( 
+
+-- * Exported types
+    AudioInfo(..)                           ,
+    newZeroAudioInfo                        ,
+    noAudioInfo                             ,
+
+
+ -- * Methods
+-- ** audioInfoConvert
+    AudioInfoConvertMethodInfo              ,
+    audioInfoConvert                        ,
+
+
+-- ** audioInfoCopy
+    AudioInfoCopyMethodInfo                 ,
+    audioInfoCopy                           ,
+
+
+-- ** audioInfoFree
+    AudioInfoFreeMethodInfo                 ,
+    audioInfoFree                           ,
+
+
+-- ** audioInfoFromCaps
+    AudioInfoFromCapsMethodInfo             ,
+    audioInfoFromCaps                       ,
+
+
+-- ** audioInfoInit
+    AudioInfoInitMethodInfo                 ,
+    audioInfoInit                           ,
+
+
+-- ** audioInfoIsEqual
+    AudioInfoIsEqualMethodInfo              ,
+    audioInfoIsEqual                        ,
+
+
+-- ** audioInfoNew
+    audioInfoNew                            ,
+
+
+-- ** audioInfoSetFormat
+    AudioInfoSetFormatMethodInfo            ,
+    audioInfoSetFormat                      ,
+
+
+-- ** audioInfoToCaps
+    AudioInfoToCapsMethodInfo               ,
+    audioInfoToCaps                         ,
+
+
+
+
+ -- * Properties
+-- ** Bpf
+    audioInfoReadBpf                        ,
+
+
+-- ** Channels
+    audioInfoReadChannels                   ,
+
+
+-- ** Finfo
+    audioInfoReadFinfo                      ,
+
+
+-- ** Flags
+    audioInfoReadFlags                      ,
+
+
+-- ** Layout
+    audioInfoReadLayout                     ,
+
+
+-- ** Rate
+    audioInfoReadRate                       ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.Gst as Gst
+
+newtype AudioInfo = AudioInfo (ForeignPtr 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
+
+noAudioInfo :: Maybe AudioInfo
+noAudioInfo = Nothing
+
+audioInfoReadFinfo :: AudioInfo -> IO AudioFormatInfo
+audioInfoReadFinfo s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO (Ptr AudioFormatInfo)
+    val' <- (newPtr 104 AudioFormatInfo) val
+    return val'
+
+audioInfoReadFlags :: AudioInfo -> IO [AudioFlags]
+audioInfoReadFlags s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CUInt
+    let val' = wordToGFlags val
+    return val'
+
+audioInfoReadLayout :: AudioInfo -> IO AudioLayout
+audioInfoReadLayout s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 12) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+audioInfoReadRate :: AudioInfo -> IO Int32
+audioInfoReadRate s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO Int32
+    return val
+
+audioInfoReadChannels :: AudioInfo -> IO Int32
+audioInfoReadChannels s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 20) :: IO Int32
+    return val
+
+audioInfoReadBpf :: AudioInfo -> IO Int32
+audioInfoReadBpf s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 24) :: IO Int32
+    return val
+
+-- XXX Skipped getter for "AudioInfo:position" :: Not implemented: "Don't know how to unpack C array of type TCArray False 64 (-1) (TInterface \"GstAudio\" \"AudioChannelPosition\")"
+
+-- method AudioInfo::new
+-- method type : Constructor
+-- Args : []
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioInfo"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_new" gst_audio_info_new :: 
+    IO (Ptr AudioInfo)
+
+
+audioInfoNew ::
+    (MonadIO m) =>
+    m AudioInfo                             -- result
+audioInfoNew  = liftIO $ do
+    result <- gst_audio_info_new
+    checkUnexpectedReturnNULL "gst_audio_info_new" result
+    result' <- (wrapBoxed AudioInfo) result
+    return result'
+
+-- method AudioInfo::convert
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_convert" gst_audio_info_convert :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    CUInt ->                                -- src_fmt : TInterface "Gst" "Format"
+    Int64 ->                                -- src_val : TBasicType TInt64
+    CUInt ->                                -- dest_fmt : TInterface "Gst" "Format"
+    Int64 ->                                -- dest_val : TBasicType TInt64
+    IO CInt
+
+
+audioInfoConvert ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> Gst.Format                           -- srcFmt
+    -> Int64                                -- srcVal
+    -> Gst.Format                           -- destFmt
+    -> Int64                                -- destVal
+    -> m Bool                               -- result
+audioInfoConvert _obj srcFmt srcVal destFmt destVal = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    let srcFmt' = (fromIntegral . fromEnum) srcFmt
+    let destFmt' = (fromIntegral . fromEnum) destFmt
+    result <- gst_audio_info_convert _obj' srcFmt' srcVal destFmt' destVal
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioInfoConvertMethodInfo
+instance (signature ~ (Gst.Format -> Int64 -> Gst.Format -> Int64 -> m Bool), MonadIO m) => MethodInfo AudioInfoConvertMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoConvert
+
+-- method AudioInfo::copy
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "GstAudio" "AudioInfo"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_copy" gst_audio_info_copy :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    IO (Ptr AudioInfo)
+
+
+audioInfoCopy ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> m AudioInfo                          -- result
+audioInfoCopy _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    result <- gst_audio_info_copy _obj'
+    checkUnexpectedReturnNULL "gst_audio_info_copy" result
+    result' <- (wrapBoxed AudioInfo) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioInfoCopyMethodInfo
+instance (signature ~ (m AudioInfo), MonadIO m) => MethodInfo AudioInfoCopyMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoCopy
+
+-- method AudioInfo::free
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_free" gst_audio_info_free :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    IO ()
+
+
+audioInfoFree ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> m ()                                 -- result
+audioInfoFree _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    gst_audio_info_free _obj'
+    touchManagedPtr _obj
+    return ()
+
+data AudioInfoFreeMethodInfo
+instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoFreeMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoFree
+
+-- method AudioInfo::from_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_from_caps" gst_audio_info_from_caps :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
+    IO CInt
+
+
+audioInfoFromCaps ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> Gst.Caps                             -- caps
+    -> m Bool                               -- result
+audioInfoFromCaps _obj caps = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    let caps' = unsafeManagedPtrGetPtr caps
+    result <- gst_audio_info_from_caps _obj' caps'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr caps
+    return result'
+
+data AudioInfoFromCapsMethodInfo
+instance (signature ~ (Gst.Caps -> m Bool), MonadIO m) => MethodInfo AudioInfoFromCapsMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoFromCaps
+
+-- method AudioInfo::init
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_init" gst_audio_info_init :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    IO ()
+
+
+audioInfoInit ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> m ()                                 -- result
+audioInfoInit _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    gst_audio_info_init _obj'
+    touchManagedPtr _obj
+    return ()
+
+data AudioInfoInitMethodInfo
+instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoInitMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoInit
+
+-- method AudioInfo::is_equal
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TBoolean
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_is_equal" gst_audio_info_is_equal :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    Ptr AudioInfo ->                        -- other : TInterface "GstAudio" "AudioInfo"
+    IO CInt
+
+
+audioInfoIsEqual ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> AudioInfo                            -- other
+    -> m Bool                               -- result
+audioInfoIsEqual _obj other = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    let other' = unsafeManagedPtrGetPtr other
+    result <- gst_audio_info_is_equal _obj' other'
+    let result' = (/= 0) result
+    touchManagedPtr _obj
+    touchManagedPtr other
+    return result'
+
+data AudioInfoIsEqualMethodInfo
+instance (signature ~ (AudioInfo -> m Bool), MonadIO m) => MethodInfo AudioInfoIsEqualMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoIsEqual
+
+-- method AudioInfo::set_format
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "AudioFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TInterface "GstAudio" "AudioChannelPosition", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TBasicType TVoid
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_set_format" gst_audio_info_set_format :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    CUInt ->                                -- format : TInterface "GstAudio" "AudioFormat"
+    Int32 ->                                -- rate : TBasicType TInt32
+    Int32 ->                                -- channels : TBasicType TInt32
+    CUInt ->                                -- position : TInterface "GstAudio" "AudioChannelPosition"
+    IO ()
+
+
+audioInfoSetFormat ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> AudioFormat                          -- format
+    -> Int32                                -- rate
+    -> Int32                                -- channels
+    -> AudioChannelPosition                 -- position
+    -> m ()                                 -- result
+audioInfoSetFormat _obj format rate channels position = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    let format' = (fromIntegral . fromEnum) format
+    let position' = (fromIntegral . fromEnum) position
+    gst_audio_info_set_format _obj' format' rate channels position'
+    touchManagedPtr _obj
+    return ()
+
+data AudioInfoSetFormatMethodInfo
+instance (signature ~ (AudioFormat -> Int32 -> Int32 -> AudioChannelPosition -> m ()), MonadIO m) => MethodInfo AudioInfoSetFormatMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoSetFormat
+
+-- method AudioInfo::to_caps
+-- method type : OrdinaryMethod
+-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
+-- Lengths : []
+-- returnType : TInterface "Gst" "Caps"
+-- throws : False
+-- Skip return : False
+
+foreign import ccall "gst_audio_info_to_caps" gst_audio_info_to_caps :: 
+    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
+    IO (Ptr Gst.Caps)
+
+
+audioInfoToCaps ::
+    (MonadIO m) =>
+    AudioInfo                               -- _obj
+    -> m Gst.Caps                           -- result
+audioInfoToCaps _obj = liftIO $ do
+    let _obj' = unsafeManagedPtrGetPtr _obj
+    result <- gst_audio_info_to_caps _obj'
+    checkUnexpectedReturnNULL "gst_audio_info_to_caps" result
+    result' <- (wrapBoxed Gst.Caps) result
+    touchManagedPtr _obj
+    return result'
+
+data AudioInfoToCapsMethodInfo
+instance (signature ~ (m Gst.Caps), MonadIO m) => MethodInfo AudioInfoToCapsMethodInfo AudioInfo signature where
+    overloadedMethod _ = audioInfoToCaps
+
+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 = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioInfoMethod t AudioInfo, MethodInfo info AudioInfo p) => IsLabelProxy t (AudioInfo -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioInfoMethod t AudioInfo, MethodInfo info AudioInfo p) => IsLabel t (AudioInfo -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#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,19 @@
+module GI.GstAudio.Structs.AudioInfo where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioInfo = AudioInfo (ForeignPtr AudioInfo)
+instance BoxedObject AudioInfo where
+data AudioInfoConvertMethodInfo
+data AudioInfoCopyMethodInfo
+data AudioInfoFreeMethodInfo
+data AudioInfoFromCapsMethodInfo
+data AudioInfoInitMethodInfo
+data AudioInfoIsEqualMethodInfo
+data AudioInfoSetFormatMethodInfo
+data AudioInfoToCapsMethodInfo
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,130 @@
+
+
+{- |
+Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
+License    : LGPL-2.1
+Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
+
+The structure containing the format specification of the ringbuffer.
+-}
+
+module GI.GstAudio.Structs.AudioRingBufferSpec
+    ( 
+
+-- * Exported types
+    AudioRingBufferSpec(..)                 ,
+    newZeroAudioRingBufferSpec              ,
+    noAudioRingBufferSpec                   ,
+
+
+ -- * Properties
+-- ** BufferTime
+    audioRingBufferSpecReadBufferTime       ,
+
+
+-- ** Caps
+    audioRingBufferSpecReadCaps             ,
+
+
+-- ** Info
+    audioRingBufferSpecReadInfo             ,
+
+
+-- ** LatencyTime
+    audioRingBufferSpecReadLatencyTime      ,
+
+
+-- ** Seglatency
+    audioRingBufferSpecReadSeglatency       ,
+
+
+-- ** Segsize
+    audioRingBufferSpecReadSegsize          ,
+
+
+-- ** Segtotal
+    audioRingBufferSpecReadSegtotal         ,
+
+
+-- ** Type
+    audioRingBufferSpecReadType             ,
+
+
+
+
+    ) where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+import GI.GstAudio.Types
+import GI.GstAudio.Callbacks
+import qualified GI.Gst as Gst
+
+newtype AudioRingBufferSpec = AudioRingBufferSpec (ForeignPtr AudioRingBufferSpec)
+-- | Construct a `AudioRingBufferSpec` struct initialized to zero.
+newZeroAudioRingBufferSpec :: MonadIO m => m AudioRingBufferSpec
+newZeroAudioRingBufferSpec = liftIO $ callocBytes 400 >>= wrapPtr AudioRingBufferSpec
+
+noAudioRingBufferSpec :: Maybe AudioRingBufferSpec
+noAudioRingBufferSpec = Nothing
+
+audioRingBufferSpecReadCaps :: AudioRingBufferSpec -> IO Gst.Caps
+audioRingBufferSpecReadCaps s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Caps)
+    val' <- (newBoxed Gst.Caps) val
+    return val'
+
+audioRingBufferSpecReadType :: AudioRingBufferSpec -> IO AudioRingBufferFormatType
+audioRingBufferSpecReadType s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 8) :: IO CUInt
+    let val' = (toEnum . fromIntegral) val
+    return val'
+
+audioRingBufferSpecReadInfo :: AudioRingBufferSpec -> IO AudioInfo
+audioRingBufferSpecReadInfo s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 16) :: IO (Ptr AudioInfo)
+    val' <- (newBoxed AudioInfo) val
+    return val'
+
+audioRingBufferSpecReadLatencyTime :: AudioRingBufferSpec -> IO Word64
+audioRingBufferSpecReadLatencyTime s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 336) :: IO Word64
+    return val
+
+audioRingBufferSpecReadBufferTime :: AudioRingBufferSpec -> IO Word64
+audioRingBufferSpecReadBufferTime s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 344) :: IO Word64
+    return val
+
+audioRingBufferSpecReadSegsize :: AudioRingBufferSpec -> IO Int32
+audioRingBufferSpecReadSegsize s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 352) :: IO Int32
+    return val
+
+audioRingBufferSpecReadSegtotal :: AudioRingBufferSpec -> IO Int32
+audioRingBufferSpecReadSegtotal s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 356) :: IO Int32
+    return val
+
+audioRingBufferSpecReadSeglatency :: AudioRingBufferSpec -> IO Int32
+audioRingBufferSpecReadSeglatency s = withManagedPtr s $ \ptr -> do
+    val <- peek (ptr `plusPtr` 360) :: IO Int32
+    return val
+
+type family ResolveAudioRingBufferSpecMethod (t :: Symbol) (o :: *) :: * where
+    ResolveAudioRingBufferSpecMethod l o = MethodResolutionFailed l o
+
+instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, MethodInfo info AudioRingBufferSpec p) => IsLabelProxy t (AudioRingBufferSpec -> p) where
+    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)
+
+#if MIN_VERSION_base(4,9,0)
+instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, MethodInfo info AudioRingBufferSpec p) => IsLabel t (AudioRingBufferSpec -> p) where
+    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
+#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,10 @@
+module GI.GstAudio.Structs.AudioRingBufferSpec where
+
+import Prelude ()
+import Data.GI.Base.ShortPrelude
+
+import qualified Data.Text as T
+import qualified Data.ByteString.Char8 as B
+import qualified Data.Map as Map
+
+newtype AudioRingBufferSpec = AudioRingBufferSpec (ForeignPtr AudioRingBufferSpec)
diff --git a/GI/GstAudio/Types.hs b/GI/GstAudio/Types.hs
new file mode 100644
--- /dev/null
+++ b/GI/GstAudio/Types.hs
@@ -0,0 +1,44 @@
+module GI.GstAudio.Types
+    (     module GI.GstAudio.Interfaces.StreamVolume,
+    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     ,
+    module GI.GstAudio.Structs.AudioCdSrcTrack,
+    module GI.GstAudio.Structs.AudioDownmixMeta,
+    module GI.GstAudio.Structs.AudioFormatInfo,
+    module GI.GstAudio.Structs.AudioInfo    ,
+    module GI.GstAudio.Structs.AudioRingBufferSpec,
+    module GI.GstAudio.Enums                ,
+    module GI.GstAudio.Flags                ,
+
+
+    ) where
+
+
+import {-# SOURCE #-} GI.GstAudio.Interfaces.StreamVolume
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioBaseSink
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioBaseSrc
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioCdSrc
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioClock
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioDecoder
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioEncoder
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioFilter
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioRingBuffer
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioSink
+import {-# SOURCE #-} GI.GstAudio.Objects.AudioSrc
+import {-# SOURCE #-} GI.GstAudio.Structs.AudioCdSrcTrack
+import {-# SOURCE #-} GI.GstAudio.Structs.AudioDownmixMeta
+import {-# SOURCE #-} GI.GstAudio.Structs.AudioFormatInfo
+import {-# SOURCE #-} GI.GstAudio.Structs.AudioInfo
+import {-# SOURCE #-} GI.GstAudio.Structs.AudioRingBufferSpec
+
+import GI.GstAudio.Enums
+import GI.GstAudio.Flags
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,456 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+import Distribution.Simple
+main = defaultMain
diff --git a/gi-gstaudio.cabal b/gi-gstaudio.cabal
new file mode 100644
--- /dev/null
+++ b/gi-gstaudio.cabal
@@ -0,0 +1,56 @@
+-- Autogenerated, do not edit.
+name:               gi-gstaudio
+version:            0.1.6.13
+synopsis:           GstAudio bindings
+description:        Bindings for GstAudio, 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)
+category:           Bindings
+build-type:         Simple
+cabal-version:      >=1.10
+
+library
+    default-language:   Haskell2010
+    default-extensions: ScopedTypeVariables, CPP, OverloadedStrings, NegativeLiterals, ConstraintKinds, TypeFamilies, MultiParamTypeClasses, KindSignatures, FlexibleInstances, UndecidableInstances, DataKinds, FlexibleContexts
+    other-extensions:   PatternSynonyms ViewPatterns
+    ghc-options:        -fno-warn-unused-imports -fno-warn-warnings-deprecations
+    exposed-modules:    GI.GstAudio.Types
+                        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.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.AudioCdSrcTrack
+                        GI.GstAudio.Structs.AudioDownmixMeta
+                        GI.GstAudio.Structs.AudioFormatInfo
+                        GI.GstAudio.Structs.AudioInfo
+                        GI.GstAudio.Structs.AudioRingBufferSpec
+    pkgconfig-depends:  gstreamer-audio-1.0 >= 1.6
+    build-depends: base >= 4.7 && <5,
+        haskell-gi-base >= 0.13 && < 1,
+        gi-glib >= 0.2.46.13 && < 0.2.47,
+        gi-gobject >= 0.2.46.13 && < 0.2.47,
+        gi-gst >= 0.1.6.13 && < 0.1.7,
+        gi-gstbase >= 0.1.6.13 && < 0.1.7,
+        bytestring >= 0.10,
+        containers >= 0.5,
+        text >= 1.0,
+        transformers >= 0.3
