classify-frog-0.2.3: src/SignalProcessingMethods.hs
module SignalProcessingMethods where
import qualified SpectralDistribution as SD
import qualified Signal
import qualified Rate
import SignalProcessing (lowpassTwoPass, )
import Parameters (Freq(Freq), )
import qualified Sound.SoxLib as SoxLib
import qualified Data.StorableVector.Lazy as SVL
type Triple a = (a,a,a)
data T =
Cons {
dehum :: Signal.Sox -> Signal.Sampled Float,
rumble :: Signal.Sox -> Signal.Sampled Float,
downSampleAbs ::
SoxLib.Rate -> Signal.Sampled Float -> SVL.Vector Float,
bandpassDownSample ::
Rate.Feature -> Freq -> Signal.Sox -> SVL.Vector Float,
bandParameters ::
Triple Freq -> Signal.Sampled Float ->
[Int] -> [((Float, Float), SD.T Float)]
}
envelopeLowRate ::
(Rate.C rate) =>
T -> rate -> Signal.Sampled Float ->
(SVL.Vector Float, SVL.Vector Float)
envelopeLowRate methods featRate sig =
let env = downSampleAbs methods (Rate.unpack featRate) sig
volume = lowpassTwoPass featRate (Freq 20) env
in (volume, SVL.zipWith (/) env volume)
dehummedEnvelopeLowRate ::
(Rate.C rate) =>
T -> rate -> Signal.Sox -> (SVL.Vector Float, SVL.Vector Float)
dehummedEnvelopeLowRate methods featRate sig =
let env = downSampleAbs methods (Rate.unpack featRate) $ dehum methods sig
volume = lowpassTwoPass featRate (Freq 20) env
in (volume, SVL.zipWith (/) env volume)