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
}