Safe Haskell | None |
---|---|
Language | Haskell98 |
Hyper vectorial synthesis
- type HvsSnapshot = [Double]
- type HvsMatrix1 = [HvsSnapshot]
- type HvsMatrix2 = [HvsMatrix1]
- type HvsMatrix3 = [HvsMatrix2]
- hvs1 :: HvsMatrix1 -> Sig -> SE [Sig]
- hvs2 :: HvsMatrix2 -> Sig2 -> SE [Sig]
- hvs3 :: HvsMatrix3 -> Sig3 -> SE [Sig]
- csdHvs1 :: Sig -> D -> D -> Tab -> Tab -> Tab -> SE ()
- csdHvs2 :: Sig -> Sig -> D -> D -> D -> Tab -> Tab -> Tab -> SE ()
- csdHvs3 :: Sig -> Sig -> Sig -> D -> D -> D -> D -> Tab -> Tab -> Tab -> SE ()
Documentation
type HvsSnapshot = [Double] Source #
Hvs vector
type HvsMatrix1 = [HvsSnapshot] Source #
1D matrix
type HvsMatrix2 = [HvsMatrix1] Source #
2D matrix (grid of vecotrs)
type HvsMatrix3 = [HvsMatrix2] Source #
3D matrix (cube of vectors)
hvs1 :: HvsMatrix1 -> Sig -> SE [Sig] Source #
One dimensional Hyper vectorial synthesis. We can provide a list of vectors (of lists but the same length for all items is assumed) and a signal that ranges from 0 to 1. It interpolates between vectors in the list. As a result we get a n interpolated vector. It's a list but the actual length equals to the length of input vectors.
An example. We can set the center frequency and resonance of the filter with the single parameter:
let f = hvs1 [[100, 0.1], [300, 0.1], [600, 0.5], [800, 0.9]] dac $ lift1 (\x -> fmap (\[cps, q] -> mlp cps q (saw 110)) $ f x) (uknob 0.5)
Notice the exact pattern match with the list in the argument of the lambda function:
\[cps, q] -> mlp cps q (saw 110)) $ f x
It's determined by the length of the items in the input list.
hvs2 :: HvsMatrix2 -> Sig2 -> SE [Sig] Source #
Two dimensional Hyper vectorial synthesis. Now we provide a list of lists of vectors. The length of all vectors should be the same but there is no limit for the number! So that's how we can control a lot of parameters with pair of signals. The input 2D atrix is the grid of samples. It finds the closest four points in the grid and interpolates between them (it's a weighted sum).
hvs2 matrix (x, y)
The usage is the same as in the case of hvs1
. An example:
g = hvs2 [[[100, 0.1, 0.3], [800, 0.1, 0.5], [1400, 0.1, 0.8]], [[100, 0.5, 0.3], [800, 0.5, 0.5], [1400, 0.5, 0.8]], [[100, 0.8, 0.3], [800, 0.8, 0.5], [1400, 0.8, 0.8]]] main = dac $ do (g1, kx) <- uknob 0.5 (g2, ky) <- uknob 0.5 [cfq, q, w] <- g (kx, ky) panel $ hor [g1, g2] at (mlp cfq q) $ fmap (cfd w (saw 110)) (white)
Csound functions
csdHvs1 :: Sig -> D -> D -> Tab -> Tab -> Tab -> SE () Source #
Allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs1 allows one-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs1 kx, inumParms, inumPointsX, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
csound doc: http://www.csounds.com/manual/html/hvs1.html
csdHvs2 :: Sig -> Sig -> D -> D -> D -> Tab -> Tab -> Tab -> SE () Source #
Allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs2 allows two-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs2 kx, ky, inumParms, inumPointsX, inumPointsY, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
csound doc: http://www.csounds.com/manual/html/hvs2.html
csdHvs3 :: Sig -> Sig -> Sig -> D -> D -> D -> D -> Tab -> Tab -> Tab -> SE () Source #
Allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs3 allows three-dimensional Hyper Vectorial Synthesis (HVS) controlled by externally-updated k-variables.
hvs3 kx, ky, kz, inumParms, inumPointsX, inumPointsY, inumPointsZ, iOutTab, iPositionsTab, iSnapTab [, iConfigTab]
csound doc: http://www.csounds.com/manual/html/hvs3.html