packages feed

FModExRaw-0.1.0.0: Sound/FModEx/Raw/DSP/Types.hsc

{-# LANGUAGE CPP, ForeignFunctionInterface #-}

{- |
Module      :  Sound.FModEx.Raw.DSP.Types
Description :  FModEx library C DSP types binding
Copyright   :  (c) Dimitri Sabadie
License     :  GPL-3

Maintainer  :  dimitri.sabadie@gmail.com
Stability   :  experimental
Portability :  Linux only for now

FModEx API C DSP types raw Haskell binding.
-}

module Sound.FModEx.Raw.DSP.Types where


import Foreign.C.String
import Foreign.C.Types
import Foreign.Ptr
import Sound.FModEx.Raw.Core.Types

#include <fmodex/fmod.h>
#include <fmodex/fmod_dsp.h>

-- DSP callbacks
type FModDSPCreateCallback      = FunPtr (Ptr FModDSPState -> IO FModResult)
type FModDSPReleaseCallback     = FunPtr (Ptr FModDSPState -> IO FModResult)
type FModDSPResetCallback       = FunPtr (Ptr FModDSPState -> IO FModResult)
type FModDSPReadCallback        = FunPtr (Ptr FModDSPState -> Ptr CFloat -> Ptr CFloat -> CUInt -> CInt -> CInt -> IO FModResult)
type FModDSPSetPositionCallback = FunPtr (Ptr FModDSPState -> CUInt -> IO FModResult)
type FModDSPSetParamCallback    = FunPtr (Ptr FModDSPState -> CInt -> CFloat -> IO FModResult)
type FModDSPGetParamCallback    = FunPtr (Ptr FModDSPState -> CInt -> Ptr CFloat -> Ptr CChar -> IO FModResult)
type FModDSPDialogCallback      = FunPtr (Ptr FModDSPState -> Ptr () -> CInt -> IO FModResult)

-- FMOD_DSP_TYPE
newtype FModDSPType = FModDSPType CInt deriving (Eq,Show)
#{enum FModDSPType, FModDSPType
 , fmod_DSP_TYPE_UNKNOWN         = FMOD_DSP_TYPE_UNKNOWN
 , fmod_DSP_TYPE_MIXER           = FMOD_DSP_TYPE_MIXER
 , fmod_DSP_TYPE_OSCILLATOR      = FMOD_DSP_TYPE_OSCILLATOR
 , fmod_DSP_TYPE_LOWPASS         = FMOD_DSP_TYPE_LOWPASS
 , fmod_DSP_TYPE_ITLOWPASS       = FMOD_DSP_TYPE_ITLOWPASS
 , fmod_DSP_TYPE_HIGHPASS        = FMOD_DSP_TYPE_HIGHPASS
 , fmod_DSP_TYPE_ECHO            = FMOD_DSP_TYPE_ECHO
 , fmod_DSP_TYPE_FLANGE          = FMOD_DSP_TYPE_FLANGE
 , fmod_DSP_TYPE_DISTORTION      = FMOD_DSP_TYPE_DISTORTION
 , fmod_DSP_TYPE_NORMALIZE       = FMOD_DSP_TYPE_NORMALIZE
 , fmod_DSP_TYPE_PARAMEQ         = FMOD_DSP_TYPE_PARAMEQ
 , fmod_DSP_TYPE_PITCHSHIFT      = FMOD_DSP_TYPE_PITCHSHIFT
 , fmod_DSP_TYPE_CHORUS          = FMOD_DSP_TYPE_CHORUS
 , fmod_DSP_TYPE_VSTPLUGIN       = FMOD_DSP_TYPE_VSTPLUGIN
 , fmod_DSP_TYPE_WINAMPPLUGIN    = FMOD_DSP_TYPE_WINAMPPLUGIN
 , fmod_DSP_TYPE_ITECHO          = FMOD_DSP_TYPE_ITECHO
 , fmod_DSP_TYPE_COMPRESSOR      = FMOD_DSP_TYPE_COMPRESSOR
 , fmod_DSP_TYPE_SFXREVERB       = FMOD_DSP_TYPE_SFXREVERB
 , fmod_DSP_TYPE_LOWPASS_SIMPLE  = FMOD_DSP_TYPE_LOWPASS_SIMPLE
 , fmod_DSP_TYPE_DELAY           = FMOD_DSP_TYPE_DELAY
 , fmod_DSP_TYPE_TREMOLO         = FMOD_DSP_TYPE_TREMOLO
 , fmod_DSP_TYPE_LADSPAPLUGIN    = FMOD_DSP_TYPE_LADSPAPLUGIN
 , fmod_DSP_TYPE_HIGHPASS_SIMPLE = FMOD_DSP_TYPE_HIGHPASS_SIMPLE
 , fmod_DSP_TYPE_HARDWARE        = FMOD_DSP_TYPE_HARDWARE
 , fmod_DSP_TYPE_FORCEINT        = FMOD_DSP_TYPE_FORCEINT
 }
 
-- FMOD_DSP_PARAMETERDESC
data FModDSPParameterDesc = FModDSPParameterDesc {
    fmod_DSPParameterDescMin          :: CFloat
  , fmod_DSPParameterDescMax          :: CFloat
  , fmod_DSPParameterDescDefaultValue :: CFloat
  , fmod_DSPParameterDescName         :: CString
  , fmod_DSPParameterDescLabel        :: CString
  , fmod_DSPParameterDescDescription  :: CString
  } deriving (Eq,Show)

-- FMOD_DSP_DESCRIPTION
data FModDSPDescription = FModDSPDescription {
    fmod_DSPDescriptionName          :: CString
  , fmod_DSPDescriptionVersion       :: CUInt
  , fmod_DSPDescriptionChannels      :: CInt
  , fmod_DSPDescriptionCreate        :: FModDSPCreateCallback
  , fmod_DSPDescriptionRelease       :: FModDSPReleaseCallback
  , fmod_DSPDescriptionReset         :: FModDSPResetCallback
  , fmod_DSPDescriptionRead          :: FModDSPReadCallback
  , fmod_DSPDescriptionSetPosition   :: FModDSPSetPositionCallback
  , fmod_DSPDescriptionNumParameters :: CInt
  , fmod_DSPDescriptionParamDesc     :: Ptr FModDSPParameterDesc
  , fmod_DSPDescriptionSetParameter  :: FModDSPSetParamCallback
  , fmod_DSPDescriptionGetParameter  :: FModDSPGetParamCallback
  , fmod_DSPDescriptionConfig        :: FModDSPDialogCallback
  , fmod_DSPDescriptionConfigWidth   :: CInt
  , fmod_DSPDescriptionConfigHeight  :: CInt
  , fmod_DSPDescriptionUserData      :: Ptr ()
  } deriving (Eq,Show)

-- FMOD_DSP_STATE
data FModDSPState = FModDSPState {
    fmod_DSPStateInstance    :: Ptr FModDSP
  , fmod_DSPStatePluginData  :: Ptr ()
  , fmod_DSPStateSpeakerMask :: CUShort
  } deriving (Eq,Show)

-- FMOD_DSP_OSCILLATOR
newtype FModDSPOscillator = FModDSPOscillator CInt deriving (Eq,Show)
#{enum FModDSPOscillator, FModDSPOscillator
 , fmod_DSP_OSCILLATOR_TYPE = FMOD_DSP_OSCILLATOR_TYPE
 , fmod_DSP_OSCILLATOR_RATE = FMOD_DSP_OSCILLATOR_RATE
 }

-- FMOD_DSP_LOWPASS
newtype FModDSPLowPass = FModDSPLowPass CInt deriving (Eq,Show)
#{enum FModDSPLowPass, FModDSPLowPass
 , fmod_DSP_LOWPASS_CUTOFF    = FMOD_DSP_LOWPASS_CUTOFF
 , fmod_DSP_LOWPASS_RESONANCE = FMOD_DSP_LOWPASS_RESONANCE
 }

-- FMOD_DSP_ITLOWPASS
newtype FModDSPITLowPass = FModDSPITLowPass CInt deriving (Eq,Show)
#{enum FModDSPITLowPass, FModDSPITLowPass
 , fmod_DSP_ITLOWPASS_CUTOFF    = FMOD_DSP_ITLOWPASS_CUTOFF
 , fmod_DSP_ITLOWPASS_RESONANCE = FMOD_DSP_ITLOWPASS_RESONANCE
 }

-- FMOD_DSP_HIGHPASS
newtype FModDSPHighPass = FModDSPHighPass CInt deriving (Eq,Show)
#{enum FModDSPHighPass, FModDSPHighPass
 , fmod_DSP_HIGHPASS_CUTOFF    = FMOD_DSP_HIGHPASS_CUTOFF
 , fmod_DSP_HIGHPASS_RESONANCE = FMOD_DSP_HIGHPASS_RESONANCE
 }

-- FMOD_DSP_ECHO
newtype FModDSPEcho = FModDSPEcho CInt deriving (Eq,Show)
#{enum FModDSPEcho, FModDSPEcho
 , fmod_DSP_ECHO_DELAY       = FMOD_DSP_ECHO_DELAY
 , fmod_DSP_ECHO_DECAYRATIO  = FMOD_DSP_ECHO_DECAYRATIO
 , fmod_DSP_ECHO_MAXCHANNELS = FMOD_DSP_ECHO_MAXCHANNELS
 , fmod_DSP_ECHO_DRYMIX      = FMOD_DSP_ECHO_DRYMIX
 , fmod_DSP_ECHO_WETMIX      = FMOD_DSP_ECHO_WETMIX
 }

-- FMOD_DSP_DELAY
newtype FModDSPDelay = FModDSPDelay CInt deriving (Eq,Show)
#{enum FModDSPDelay, FModDSPDelay
 , fmod_DSP_DELAY_CH0      = FMOD_DSP_DELAY_CH0
 , fmod_DSP_DELAY_CH1      = FMOD_DSP_DELAY_CH1
 , fmod_DSP_DELAY_CH2      = FMOD_DSP_DELAY_CH2
 , fmod_DSP_DELAY_CH3      = FMOD_DSP_DELAY_CH3
 , fmod_DSP_DELAY_CH4      = FMOD_DSP_DELAY_CH4
 , fmod_DSP_DELAY_CH5      = FMOD_DSP_DELAY_CH5
 , fmod_DSP_DELAY_CH6      = FMOD_DSP_DELAY_CH6
 , fmod_DSP_DELAY_CH7      = FMOD_DSP_DELAY_CH7
 , fmod_DSP_DELAY_CH8      = FMOD_DSP_DELAY_CH8
 , fmod_DSP_DELAY_CH9      = FMOD_DSP_DELAY_CH9
 , fmod_DSP_DELAY_CH10     = FMOD_DSP_DELAY_CH10
 , fmod_DSP_DELAY_CH11     = FMOD_DSP_DELAY_CH11
 , fmod_DSP_DELAY_CH12     = FMOD_DSP_DELAY_CH12
 , fmod_DSP_DELAY_CH13     = FMOD_DSP_DELAY_CH13
 , fmod_DSP_DELAY_CH14     = FMOD_DSP_DELAY_CH14
 , fmod_DSP_DELAY_CH15     = FMOD_DSP_DELAY_CH15
 , fmod_DSP_DELAY_MAXDELAY = FMOD_DSP_DELAY_MAXDELAY
 }

-- FMOD_DSP_FLANGE
newtype FModDSPFlange = FModDSPFlange CInt deriving (Eq,Show)
#{enum FModDSPFlange, FModDSPFlange
 , fmod_DSP_FLANGE_DRYMIX = FMOD_DSP_FLANGE_DRYMIX
 , fmod_DSP_FLANGE_WETMIX = FMOD_DSP_FLANGE_WETMIX
 , fmod_DSP_FLANGE_DEPTH  = FMOD_DSP_FLANGE_DEPTH
 , fmod_DSP_FLANGE_RATE   = FMOD_DSP_FLANGE_RATE
 }

-- FMOD_DSP_TREMOLO
newtype FModDSPTremolo = FModDSPTremolo CInt deriving (Eq,Show)
#{enum FModDSPTremolo, FModDSPTremolo
 , fmod_DSP_TREMOLO_FREQUENCY = FMOD_DSP_TREMOLO_FREQUENCY
 , fmod_DSP_TREMOLO_DEPTH     = FMOD_DSP_TREMOLO_DEPTH
 , fmod_DSP_TREMOLO_SHAPE     = FMOD_DSP_TREMOLO_SHAPE
 , fmod_DSP_TREMOLO_SKEW      = FMOD_DSP_TREMOLO_SKEW
 , fmod_DSP_TREMOLO_DUTY      = FMOD_DSP_TREMOLO_DUTY
 , fmod_DSP_TREMOLO_SQUARE    = FMOD_DSP_TREMOLO_SQUARE
 , fmod_DSP_TREMOLO_PHASE     = FMOD_DSP_TREMOLO_PHASE
 , fmod_DSP_TREMOLO_SPREAD    = FMOD_DSP_TREMOLO_SPREAD
 }

-- FMOD_DSP_DISTORTION_LEVEL
newtype FModDSPDistortionLevel = FModDSPDistortionLevel CInt deriving (Eq,Show)
#{enum FModDSPDistortionLevel, FModDSPDistortionLevel
 , fmod_DSP_DISTORTION_LEVEL = FMOD_DSP_DISTORTION_LEVEL
 }

-- FMOD_DSP_NORMALIZE
-- FIXME: type FMOD_DSP_NORMALIZE_THRESHOLD
newtype FModDSPNormalize = FModDSPNormalize CInt deriving (Eq,Show)
#{enum FModDSPNormalize, FModDSPNormalize
 , fmod_DSP_NORMALIZE_FADETIME  = FMOD_DSP_NORMALIZE_FADETIME
 , fmod_DSP_NORMALIZE_THRESHOLD = FMOD_DSP_NORMALIZE_THRESHHOLD
 , fmod_DSP_NORMALIZE_MAXAMP    = FMOD_DSP_NORMALIZE_MAXAMP
 }

-- FMOD_DSP_PARAMEQ
newtype FModDSPParamEq = FModDSPParamEq CInt deriving (Eq,Show)
#{enum FModDSPParamEq, FModDSPParamEq
 , fmod_DSP_PARAMEQ_CENTER    = FMOD_DSP_PARAMEQ_CENTER
 , fmod_DSP_PARAMEQ_BANDWIDTH = FMOD_DSP_PARAMEQ_BANDWIDTH
 , fmod_DSP_PARAMEQ_GAIN      = FMOD_DSP_PARAMEQ_GAIN
 }

-- FMOD_DSP_PITCHSHIFT
newtype FModDSPPitchShift = FModDSPPitchShift CInt deriving (Eq,Show)
#{enum FModDSPPitchShift, FModDSPPitchShift
 , fmod_DSP_PITCHSHIFT_PITCH       = FMOD_DSP_PITCHSHIFT_PITCH
 , fmod_DSP_PITCHSHIFT_FFTSIZE     = FMOD_DSP_PITCHSHIFT_FFTSIZE
 , fmod_DSP_PITCHSHIFT_OVERLAP     = FMOD_DSP_PITCHSHIFT_OVERLAP
 , fmod_DSP_PITCHSHIFT_MAXCHANNELS = FMOD_DSP_PITCHSHIFT_MAXCHANNELS
 }

-- FMOD_DSP_CHORUS
newtype FModDSPChorus = FModDSPChorus CInt deriving (Eq,Show)
#{enum FModDSPChorus, FModDSPChorus
 , fmod_DSP_CHORUS_DRYMIX  = FMOD_DSP_CHORUS_DRYMIX
 , fmod_DSP_CHORUS_WETMIX1 = FMOD_DSP_CHORUS_WETMIX1
 , fmod_DSP_CHORUS_WETMIX2 = FMOD_DSP_CHORUS_WETMIX2
 , fmod_DSP_CHORUS_WETMIX3 = FMOD_DSP_CHORUS_WETMIX3
 , fmod_DSP_CHORUS_DELAY   = FMOD_DSP_CHORUS_DELAY
 , fmod_DSP_CHORUS_RATE    = FMOD_DSP_CHORUS_RATE
 , fmod_DSP_CHORUS_DEPTH   = FMOD_DSP_CHORUS_DEPTH
 }

-- FMOD_DSP_ITECHO
newtype FModDSPITEcho = FModDSPITEcho CInt deriving (Eq,Show)
#{enum FModDSPITEcho, FModDSPITEcho
 , fmod_DSP_ITECHO_WETDRYMIX  = FMOD_DSP_ITECHO_WETDRYMIX
 , fmod_DSP_ITECHO_FEEDBACK   = FMOD_DSP_ITECHO_FEEDBACK
 , fmod_DSP_ITECHO_LEFTDELAY  = FMOD_DSP_ITECHO_LEFTDELAY
 , fmod_DSP_ITECHO_RIGHTDELAY = FMOD_DSP_ITECHO_RIGHTDELAY
 , fmod_DSP_ITECHO_PANDELAY   = FMOD_DSP_ITECHO_PANDELAY
 }

-- FMOD_DSP_COMPRESSOR
newtype FModDSPCompressor = FModDSPCompressor CInt deriving (Eq,Show)
#{enum FModDSPCompressor, FModDSPCompressor
 , fmod_DSP_COMPRESSOR_THRESHOLD  = FMOD_DSP_COMPRESSOR_THRESHOLD
 , fmod_DSP_COMPRESSOR_ATTACK     = FMOD_DSP_COMPRESSOR_ATTACK
 , fmod_DSP_COMPRESSOR_RELEASE    = FMOD_DSP_COMPRESSOR_RELEASE
 , fmod_DSP_COMPRESSOR_GAINMAKEUP = FMOD_DSP_COMPRESSOR_GAINMAKEUP
 }

-- FMOD_DSP_SFXREVERB
newtype FModDSPSFXReverb = FModDSPSFXReverb CInt deriving (Eq,Show)
#{enum FModDSPSFXReverb, FModDSPSFXReverb
 , fmod_DSP_SFXREVERB_DRYLEVEL         = FMOD_DSP_SFXREVERB_DRYLEVEL
 , fmod_DSP_SFXREVERB_ROOM             = FMOD_DSP_SFXREVERB_ROOM
 , fmod_DSP_SFXREVERB_ROOMHF           = FMOD_DSP_SFXREVERB_ROOMHF
 , fmod_DSP_SFXREVERB_DECAYTIME        = FMOD_DSP_SFXREVERB_DECAYTIME
 , fmod_DSP_SFXREVERB_DECAYHFRATIO     = FMOD_DSP_SFXREVERB_DECAYHFRATIO
 , fmod_DSP_SFXREVERB_REFLECTIONSLEVEL = FMOD_DSP_SFXREVERB_REFLECTIONSLEVEL
 , fmod_DSP_SFXREVERB_REFLECTIONSDELAY = FMOD_DSP_SFXREVERB_REFLECTIONSDELAY
 , fmod_DSP_SFXREVERB_REVERBLEVEL      = FMOD_DSP_SFXREVERB_REVERBLEVEL
 , fmod_DSP_SFXREVERB_REVERBDELAY      = FMOD_DSP_SFXREVERB_REVERBDELAY
 , fmod_DSP_SFXREVERB_DIFFUSION        = FMOD_DSP_SFXREVERB_DIFFUSION
 , fmod_DSP_SFXREVERB_DENSITY          = FMOD_DSP_SFXREVERB_DENSITY
 , fmod_DSP_SFXREVERB_HFREFERENCE      = FMOD_DSP_SFXREVERB_HFREFERENCE
 , fmod_DSP_SFXREVERB_ROOMLF           = FMOD_DSP_SFXREVERB_ROOMLF
 , fmod_DSP_SFXREVERB_LFREFERENCE      = FMOD_DSP_SFXREVERB_LFREFERENCE
 }

-- FMOD_DSP_LOWPASS_SIMPLE
newtype FModDSPLowPassSimple = FModDSPLowPassSimple CInt deriving (Eq,Show)
#{enum FModDSPLowPassSimple, FModDSPLowPassSimple
 , fmod_DSP_LOWPASS_SIMPLE_CUTOFF = FMOD_DSP_LOWPASS_SIMPLE_CUTOFF
 }

-- FMOD_DSP_HIGHPASS_SIMPLE
newtype FModDSPHighPassSimple = FModDSPHighPassSimple CInt deriving (Eq,Show)
#{enum FModDSPHighPassSimple, FModDSPHighPassSimple
 , fmod_DSP_HIGHPASS_SIMPLE_CUTOFF = FMOD_DSP_HIGHPASS_SIMPLE_CUTOFF
 }