{-# LINE 1 "src/Bindings/FluidSynth.hsc" #-}

{-# LINE 2 "src/Bindings/FluidSynth.hsc" #-}

{-# LINE 3 "src/Bindings/FluidSynth.hsc" #-}

module Bindings.FluidSynth where
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 6 "src/Bindings/FluidSynth.hsc" #-}

data C'fluid_settings_t = C'fluid_settings_t

{-# LINE 8 "src/Bindings/FluidSynth.hsc" #-}
data C'fluid_synth_t = C'fluid_synth_t

{-# LINE 9 "src/Bindings/FluidSynth.hsc" #-}
data C'fluid_audio_driver_t = C'fluid_audio_driver_t

{-# LINE 10 "src/Bindings/FluidSynth.hsc" #-}

-- * Settings
foreign import ccall "new_fluid_settings" c'new_fluid_settings
  :: IO (Ptr C'fluid_settings_t)
foreign import ccall "&new_fluid_settings" p'new_fluid_settings
  :: FunPtr (IO (Ptr C'fluid_settings_t))

{-# LINE 13 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "delete_fluid_settings" c'delete_fluid_settings
  :: Ptr C'fluid_settings_t -> IO ()
foreign import ccall "&delete_fluid_settings" p'delete_fluid_settings
  :: FunPtr (Ptr C'fluid_settings_t -> IO ())

{-# LINE 14 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_settings_setstr" c'fluid_settings_setstr
  :: Ptr C'fluid_settings_t -> CString -> CString -> IO CInt
foreign import ccall "&fluid_settings_setstr" p'fluid_settings_setstr
  :: FunPtr (Ptr C'fluid_settings_t -> CString -> CString -> IO CInt)

{-# LINE 15 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_settings_setint" c'fluid_settings_setint
  :: Ptr C'fluid_settings_t -> CString -> CInt -> IO CInt
foreign import ccall "&fluid_settings_setint" p'fluid_settings_setint
  :: FunPtr (Ptr C'fluid_settings_t -> CString -> CInt -> IO CInt)

{-# LINE 16 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_settings_setnum" c'fluid_settings_setnum
  :: Ptr C'fluid_settings_t -> CString -> CDouble -> IO CInt
foreign import ccall "&fluid_settings_setnum" p'fluid_settings_setnum
  :: FunPtr (Ptr C'fluid_settings_t -> CString -> CDouble -> IO CInt)

{-# LINE 17 "src/Bindings/FluidSynth.hsc" #-}

foreign import ccall "new_fluid_synth" c'new_fluid_synth
  :: Ptr C'fluid_settings_t -> IO (Ptr C'fluid_synth_t)
foreign import ccall "&new_fluid_synth" p'new_fluid_synth
  :: FunPtr (Ptr C'fluid_settings_t -> IO (Ptr C'fluid_synth_t))

{-# LINE 19 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "delete_fluid_synth" c'delete_fluid_synth
  :: Ptr C'fluid_synth_t -> IO ()
foreign import ccall "&delete_fluid_synth" p'delete_fluid_synth
  :: FunPtr (Ptr C'fluid_synth_t -> IO ())

{-# LINE 20 "src/Bindings/FluidSynth.hsc" #-}

foreign import ccall "new_fluid_audio_driver" c'new_fluid_audio_driver
  :: Ptr C'fluid_settings_t -> Ptr C'fluid_synth_t -> IO (Ptr C'fluid_audio_driver_t)
foreign import ccall "&new_fluid_audio_driver" p'new_fluid_audio_driver
  :: FunPtr (Ptr C'fluid_settings_t -> Ptr C'fluid_synth_t -> IO (Ptr C'fluid_audio_driver_t))

{-# LINE 22 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "delete_fluid_audio_driver" c'delete_fluid_audio_driver
  :: Ptr C'fluid_audio_driver_t -> IO ()
foreign import ccall "&delete_fluid_audio_driver" p'delete_fluid_audio_driver
  :: FunPtr (Ptr C'fluid_audio_driver_t -> IO ())

{-# LINE 23 "src/Bindings/FluidSynth.hsc" #-}

-- * SoundFont loading
foreign import ccall "fluid_synth_sfload" c'fluid_synth_sfload
  :: Ptr C'fluid_synth_t -> CString -> CInt -> IO CInt
foreign import ccall "&fluid_synth_sfload" p'fluid_synth_sfload
  :: FunPtr (Ptr C'fluid_synth_t -> CString -> CInt -> IO CInt)

{-# LINE 26 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_synth_sfreload" c'fluid_synth_sfreload
  :: Ptr C'fluid_synth_t -> CUInt -> IO CInt
foreign import ccall "&fluid_synth_sfreload" p'fluid_synth_sfreload
  :: FunPtr (Ptr C'fluid_synth_t -> CUInt -> IO CInt)

{-# LINE 27 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_synth_sfunload" c'fluid_synth_sfunload
  :: Ptr C'fluid_synth_t -> CInt -> CUInt -> IO CInt
foreign import ccall "&fluid_synth_sfunload" p'fluid_synth_sfunload
  :: FunPtr (Ptr C'fluid_synth_t -> CInt -> CUInt -> IO CInt)

{-# LINE 28 "src/Bindings/FluidSynth.hsc" #-}

-- * Playing notes
foreign import ccall "fluid_synth_noteon" c'fluid_synth_noteon
  :: Ptr C'fluid_synth_t -> CInt -> CInt -> CInt -> IO CInt
foreign import ccall "&fluid_synth_noteon" p'fluid_synth_noteon
  :: FunPtr (Ptr C'fluid_synth_t -> CInt -> CInt -> CInt -> IO CInt)

{-# LINE 31 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_synth_noteoff" c'fluid_synth_noteoff
  :: Ptr C'fluid_synth_t -> CInt -> CInt -> IO CInt
foreign import ccall "&fluid_synth_noteoff" p'fluid_synth_noteoff
  :: FunPtr (Ptr C'fluid_synth_t -> CInt -> CInt -> IO CInt)

{-# LINE 32 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_synth_pitch_bend" c'fluid_synth_pitch_bend
  :: Ptr C'fluid_synth_t -> CInt -> CInt -> IO CInt
foreign import ccall "&fluid_synth_pitch_bend" p'fluid_synth_pitch_bend
  :: FunPtr (Ptr C'fluid_synth_t -> CInt -> CInt -> IO CInt)

{-# LINE 33 "src/Bindings/FluidSynth.hsc" #-}

-- * Logging
c'FLUID_PANIC = 0
c'FLUID_PANIC :: (Num a) => a

{-# LINE 36 "src/Bindings/FluidSynth.hsc" #-}
c'FLUID_ERR = 1
c'FLUID_ERR :: (Num a) => a

{-# LINE 37 "src/Bindings/FluidSynth.hsc" #-}
c'FLUID_WARN = 2
c'FLUID_WARN :: (Num a) => a

{-# LINE 38 "src/Bindings/FluidSynth.hsc" #-}
c'FLUID_DBG = 4
c'FLUID_DBG :: (Num a) => a

{-# LINE 39 "src/Bindings/FluidSynth.hsc" #-}
type FluidLogFn = CInt -> CString -> Ptr () -> IO ()
foreign import ccall "fluid_set_log_function" c'fluid_set_log_function
  :: CInt -> Ptr FluidLogFn -> Ptr () -> IO (Ptr FluidLogFn)
foreign import ccall "&fluid_set_log_function" p'fluid_set_log_function
  :: FunPtr (CInt -> Ptr FluidLogFn -> Ptr () -> IO (Ptr FluidLogFn))

{-# LINE 41 "src/Bindings/FluidSynth.hsc" #-}
foreign import ccall "fluid_default_log_function" c'fluid_default_log_function
  :: FluidLogFn
foreign import ccall "&fluid_default_log_function" p'fluid_default_log_function
  :: FunPtr (FluidLogFn)

{-# LINE 42 "src/Bindings/FluidSynth.hsc" #-}

-- * Error codes
c'FLUID_FAILED = -1
c'FLUID_FAILED :: (Num a) => a

{-# LINE 45 "src/Bindings/FluidSynth.hsc" #-}
c'FLUID_OK = 0
c'FLUID_OK :: (Num a) => a

{-# LINE 46 "src/Bindings/FluidSynth.hsc" #-}