Safe Haskell | None |
---|---|
Language | Haskell98 |
- data T p a = forall context state ioContext parameters . (Storable parameters, MakeValueTuple parameters, C (ValueTuple parameters), C context, C state) => Cons (forall r c. Phi c => context -> state -> T r c (a, state)) (forall r. ValueTuple parameters -> CodeGenFunction r (context, state)) (forall r. context -> state -> CodeGenFunction r ()) (p -> IO (ioContext, parameters)) (ioContext -> IO ())
- simple :: (Storable parameters, MakeValueTuple parameters, C (ValueTuple parameters), C context, C state) => (forall r c. Phi c => context -> state -> T r c (al, state)) -> (forall r. ValueTuple parameters -> CodeGenFunction r (context, state)) -> T p parameters -> T p al
- constant :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p al
- iterate :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => (forall r. pl -> al -> CodeGenFunction r al) -> T p ph -> T p a -> T p al
- map :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl) => (forall r. pl -> a -> CodeGenFunction r b) -> T p ph -> T p a -> T p b
- mapSimple :: (forall r. a -> CodeGenFunction r b) -> T p a -> T p b
- zip :: T p a -> T p b -> T p (a, b)
- zipWith :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl) => (forall r. pl -> a -> b -> CodeGenFunction r c) -> T p ph -> T p a -> T p b -> T p c
- zipWithSimple :: (forall r. a -> b -> CodeGenFunction r c) -> T p a -> T p b -> T p c
- mix :: (C signal, Additive a) => signal a -> signal a -> signal a
- envelope :: (C signal, PseudoRing a) => signal a -> signal a -> signal a
- envelopeStereo :: (C signal, PseudoRing a) => signal a -> signal (T a) -> signal (T a)
- reparameterize :: T q p -> T p a -> T q a
- tail :: T p a -> T p a
- drop :: T p Int -> T p a -> T p a
- append :: (Phi a, Undefined a) => T p a -> T p a -> T p a
- cycle :: (Phi a, Undefined a) => T p a -> T p a
- interpolateConstant :: (C a, IsFloating b, IntegerConstant b, CmpRet b, CmpResult b ~ Bool, Storable b, MakeValueTuple b, ValueTuple b ~ Value b, FirstClass b, IsSized (Stored b)) => T p b -> T p a -> T p a
- amplify :: (PseudoRing al, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p al -> T p al
- amplifyStereo :: (PseudoRing al, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p (T al) -> T p (T al)
- mapAccum :: (Storable pnh, MakeValueTuple pnh, ValueTuple pnh ~ pnl, C pnl, Storable psh, MakeValueTuple psh, ValueTuple psh ~ psl, C psl, C s) => (forall r. pnl -> a -> s -> CodeGenFunction r (b, s)) -> (forall r. psl -> CodeGenFunction r s) -> T p pnh -> T p psh -> T p a -> T p b
- adjacentNodes02 :: (C a, Undefined a) => T p a -> T p (Nodes02 a)
- adjacentNodes13 :: (MakeValueTuple ah, Storable ah, ValueTuple ah ~ a, C a, Undefined a) => T p ah -> T p a -> T p (Nodes13 a)
- exponentialCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al) => T p a -> T p a -> T p al
- exponential2 :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ Value a, FirstClass a, IsSized (Stored a), IsArithmetic a, IsConst a) => T p a -> T p a -> T p (Value a)
- exponentialBoundedCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, Real al) => T p a -> T p a -> T p a -> T p al
- exponentialBounded2 :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ Value a, FirstClass a, IsSized (Stored a), Real a, IsConst a) => T p a -> T p a -> T p a -> T p (Value a)
- osciCore :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, C tl, Fraction tl) => T p t -> T p t -> T p tl
- osci :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, Storable c, MakeValueTuple c, ValueTuple c ~ cl, C cl, C tl, Fraction tl, IntegerConstant tl) => (forall r. cl -> tl -> CodeGenFunction r y) -> T p c -> T p t -> T p t -> T p y
- osciSimple :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, C tl, Fraction tl, IntegerConstant tl) => (forall r. tl -> CodeGenFunction r y) -> T p t -> T p t -> T p y
- osciSaw :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, Fraction al, IntegerConstant al) => T p a -> T p a -> T p al
- rampCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p a -> T p al
- parabolaCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p a -> T p a -> T p al
- rampInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al
- parabolaFadeOutInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al
- parabolaFadeInInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al
- rampSlope :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al
- ramp :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al
- parabolaFadeOutMap :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al
- parabolaFadeInMap :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al
- parabolaFadeOut :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al
- parabolaFadeIn :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al
- noise :: (C a, IsFloating a, IsConst a, NumberOfElements a ~ D1, C (Value a), MakeValueTuple a, ValueTuple a ~ Value a, Storable a) => T p Word32 -> T p a -> T p (Value a)
- int31tofp :: (IsFloating a, NumberOfElements a ~ D1) => Value Word32 -> CodeGenFunction r (Value a)
- noiseCore :: T p Word32 -> T p (Value Word32)
- noiseCoreAlt :: T p Word32 -> T p (Value Word32)
- fromStorableVector :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (Vector a) -> T p value
- fromStorableVectorLazy :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (Vector a) -> T p value
- piecewiseConstant :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (T Int a) -> T p value
- lazySize :: T p LazySize -> T p ()
- derefFillPtr :: Importer (Ptr param -> Word32 -> Ptr a -> IO Word32)
- run :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (Int -> p -> Vector a)
- render :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> Int -> p -> Vector a
- derefChunkPtr :: Importer (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32)
- moduleChunky :: (C value, Struct value ~ struct, C parameters, Struct parameters ~ paramStruct, C context, C state, Struct (context, T state) ~ contextStateStruct) => (forall r z. Phi z => context -> state -> T r z (value, state)) -> (forall r. parameters -> CodeGenFunction r (context, state)) -> (forall r. context -> state -> CodeGenFunction r ()) -> CodeGenModule (Function (Ptr paramStruct -> IO (Ptr contextStateStruct)), Function (Ptr contextStateStruct -> IO ()), Function (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32))
- compileChunky :: (C value, Struct value ~ struct, C parameters, Struct parameters ~ paramStruct, C context, C state, Struct (context, T state) ~ contextStateStruct) => (forall r z. Phi z => context -> state -> T r z (value, state)) -> (forall r. parameters -> CodeGenFunction r (context, state)) -> (forall r. context -> state -> CodeGenFunction r ()) -> IO (FunPtr (Ptr paramStruct -> IO (Ptr contextStateStruct)), FunPtr (Ptr contextStateStruct -> IO ()), FunPtr (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32))
- debugMain :: forall parameters struct paramStruct contextStateStruct. (Storable parameters, IsType struct, IsType contextStateStruct, IsType paramStruct, IsSized paramStruct) => CodeGenModule (Function (Ptr paramStruct -> IO (Ptr contextStateStruct)), Function (Ptr contextStateStruct -> IO ()), Function (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32)) -> parameters -> IO (Function (Word32 -> Ptr (Ptr Word8) -> IO Word32))
- runChunkyPattern :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (LazySize -> p -> Vector a)
- runChunky :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (ChunkSize -> p -> Vector a)
- renderChunky :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => ChunkSize -> T p value -> p -> Vector a
Documentation
forall context state ioContext parameters . (Storable parameters, MakeValueTuple parameters, C (ValueTuple parameters), C context, C state) => Cons (forall r c. Phi c => context -> state -> T r c (a, state)) (forall r. ValueTuple parameters -> CodeGenFunction r (context, state)) (forall r. context -> state -> CodeGenFunction r ()) (p -> IO (ioContext, parameters)) (ioContext -> IO ()) |
Functor (T p) | |
Applicative (T p) | ZipList semantics |
C (T p) | |
(Field a, Real a, RationalConstant a) => Fractional (T p a) | |
(PseudoRing a, Real a, IntegerConstant a) => Num (T p a) | |
(Field a, RationalConstant a) => C (T p a) | |
(PseudoRing a, IntegerConstant a) => C (T p a) | |
Additive a => C (T p a) | |
type ProcessOf (T p) = T p |
simple :: (Storable parameters, MakeValueTuple parameters, C (ValueTuple parameters), C context, C state) => (forall r c. Phi c => context -> state -> T r c (al, state)) -> (forall r. ValueTuple parameters -> CodeGenFunction r (context, state)) -> T p parameters -> T p al Source
constant :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p al Source
iterate :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => (forall r. pl -> al -> CodeGenFunction r al) -> T p ph -> T p a -> T p al Source
map :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl) => (forall r. pl -> a -> CodeGenFunction r b) -> T p ph -> T p a -> T p b Source
mapSimple :: (forall r. a -> CodeGenFunction r b) -> T p a -> T p b Source
zipWith :: (Storable ph, MakeValueTuple ph, ValueTuple ph ~ pl, C pl) => (forall r. pl -> a -> b -> CodeGenFunction r c) -> T p ph -> T p a -> T p b -> T p c Source
zipWithSimple :: (forall r. a -> b -> CodeGenFunction r c) -> T p a -> T p b -> T p c Source
envelope :: (C signal, PseudoRing a) => signal a -> signal a -> signal a Source
envelopeStereo :: (C signal, PseudoRing a) => signal a -> signal (T a) -> signal (T a) Source
reparameterize :: T q p -> T p a -> T q a Source
timeline edit
append :: (Phi a, Undefined a) => T p a -> T p a -> T p a Source
Appending many signals is inefficient, since in cascadingly appended signals the parts are counted in an unary way. Concatenating infinitely many signals is impossible. If you want to concatenate a lot of signals, please render them to lazy storable vectors first.
signal modifiers
interpolateConstant :: (C a, IsFloating b, IntegerConstant b, CmpRet b, CmpResult b ~ Bool, Storable b, MakeValueTuple b, ValueTuple b ~ Value b, FirstClass b, IsSized (Stored b)) => T p b -> T p a -> T p a Source
Stretch signal in time by a certain factor.
This can be used for doing expensive computations
of filter parameters at a lower rate.
Alternatively, we could provide an adaptive map
that recomputes output values only if the input value changes,
or if the input value differs from the last processed one by a certain amount.
amplify :: (PseudoRing al, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p al -> T p al Source
amplifyStereo :: (PseudoRing al, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al) => T p a -> T p (T al) -> T p (T al) Source
mapAccum :: (Storable pnh, MakeValueTuple pnh, ValueTuple pnh ~ pnl, C pnl, Storable psh, MakeValueTuple psh, ValueTuple psh ~ psl, C psl, C s) => (forall r. pnl -> a -> s -> CodeGenFunction r (b, s)) -> (forall r. psl -> CodeGenFunction r s) -> T p pnh -> T p psh -> T p a -> T p b Source
adjacentNodes13 :: (MakeValueTuple ah, Storable ah, ValueTuple ah ~ a, C a, Undefined a) => T p ah -> T p a -> T p (Nodes13 a) Source
signal generators
exponentialCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al) => T p a -> T p a -> T p al Source
exponential2 :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ Value a, FirstClass a, IsSized (Stored a), IsArithmetic a, IsConst a) => T p a -> T p a -> T p (Value a) Source
exponentialBoundedCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, Real al) => T p a -> T p a -> T p a -> T p al Source
exponentialBounded2 :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ Value a, FirstClass a, IsSized (Stored a), Real a, IsConst a) => T p a -> T p a -> T p a -> T p (Value a) Source
Exponential curve that remains at the bound value if it would fall below otherwise. This way you can avoid extremal values, e.g. denormalized ones. The initial value and the bound value must be positive.
osciCore :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, C tl, Fraction tl) => T p t -> T p t -> T p tl Source
osci :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, Storable c, MakeValueTuple c, ValueTuple c ~ cl, C cl, C tl, Fraction tl, IntegerConstant tl) => (forall r. cl -> tl -> CodeGenFunction r y) -> T p c -> T p t -> T p t -> T p y Source
osciSimple :: (Storable t, MakeValueTuple t, ValueTuple t ~ tl, C tl, Fraction tl, IntegerConstant tl) => (forall r. tl -> CodeGenFunction r y) -> T p t -> T p t -> T p y Source
osciSaw :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, Fraction al, IntegerConstant al) => T p a -> T p a -> T p al Source
rampCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p a -> T p al Source
parabolaCore :: (Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p a -> T p a -> T p al Source
rampInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeOutInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeInInf :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al Source
rampSlope :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, Additive al, IntegerConstant al) => T p a -> T p al Source
ramp :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeOutMap :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeInMap :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeOut :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al Source
parabolaFadeIn :: (C a, Storable a, MakeValueTuple a, ValueTuple a ~ al, C al, PseudoRing al, IntegerConstant al) => T p a -> T p al Source
noise :: (C a, IsFloating a, IsConst a, NumberOfElements a ~ D1, C (Value a), MakeValueTuple a, ValueTuple a ~ Value a, Storable a) => T p Word32 -> T p a -> T p (Value a) Source
noise seed rate
The rate
parameter is for adjusting the amplitude
such that it is uniform across different sample rates
and after frequency filters.
The rate
is the ratio of the current sample rate to the default sample rate,
where the variance of the samples would be one.
If you want that at sample rate 22050 the variance is 1,
then in order to get a consistent volume at sample rate 44100
you have to set rate = 2
.
I use the variance as quantity and not the amplitude, because the amplitude makes only sense for uniformly distributed samples. However, frequency filters transform the probabilistic density of the samples towards the normal distribution according to the central limit theorem.
int31tofp :: (IsFloating a, NumberOfElements a ~ D1) => Value Word32 -> CodeGenFunction r (Value a) Source
conversion from and to storable vectors
fromStorableVector :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (Vector a) -> T p value Source
fromStorableVectorLazy :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (Vector a) -> T p value Source
piecewiseConstant :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p (T Int a) -> T p value Source
run :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (Int -> p -> Vector a) Source
render :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> Int -> p -> Vector a Source
This is not really a function, see renderChunky
.
moduleChunky :: (C value, Struct value ~ struct, C parameters, Struct parameters ~ paramStruct, C context, C state, Struct (context, T state) ~ contextStateStruct) => (forall r z. Phi z => context -> state -> T r z (value, state)) -> (forall r. parameters -> CodeGenFunction r (context, state)) -> (forall r. context -> state -> CodeGenFunction r ()) -> CodeGenModule (Function (Ptr paramStruct -> IO (Ptr contextStateStruct)), Function (Ptr contextStateStruct -> IO ()), Function (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32)) Source
compileChunky :: (C value, Struct value ~ struct, C parameters, Struct parameters ~ paramStruct, C context, C state, Struct (context, T state) ~ contextStateStruct) => (forall r z. Phi z => context -> state -> T r z (value, state)) -> (forall r. parameters -> CodeGenFunction r (context, state)) -> (forall r. context -> state -> CodeGenFunction r ()) -> IO (FunPtr (Ptr paramStruct -> IO (Ptr contextStateStruct)), FunPtr (Ptr contextStateStruct -> IO ()), FunPtr (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32)) Source
debugMain :: forall parameters struct paramStruct contextStateStruct. (Storable parameters, IsType struct, IsType contextStateStruct, IsType paramStruct, IsSized paramStruct) => CodeGenModule (Function (Ptr paramStruct -> IO (Ptr contextStateStruct)), Function (Ptr contextStateStruct -> IO ()), Function (Ptr contextStateStruct -> Word32 -> Ptr struct -> IO Word32)) -> parameters -> IO (Function (Word32 -> Ptr (Ptr Word8) -> IO Word32)) Source
runChunkyPattern :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (LazySize -> p -> Vector a) Source
Renders a signal generator to a chunky storable vector with given pattern. If the pattern is shorter than the generated signal this means that the signal is shortened.
runChunky :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => T p value -> IO (ChunkSize -> p -> Vector a) Source
renderChunky :: (Storable a, MakeValueTuple a, ValueTuple a ~ value, C value) => ChunkSize -> T p value -> p -> Vector a Source
This looks like a function, but it is not a function since it depends on LLVM being initialized with LLVM.initializeNativeTarget before. It is also problematic since you cannot control when and how often the underlying LLVM code is compiled. The compilation cannot be observed, thus it is referential transparent. But this influences performance considerably and I assume that you use this package exclusively for performance reasons.