Safe Haskell | None |
---|---|
Language | Haskell98 |
Padsynth algorithm. See the details at:
csound docs: http://csound.github.io/docs/manual/GENpadsynth.html
original description: http://www.paulnasca.com/algorithms-created-by-me
more detailed description: http://zynaddsubfx.sourceforge.net/doc/PADsynth/PADsynth.htm
An example:
harms = [ 1, 0.7600046992, 0.6199994683, 0.9399998784, 0.4400023818, 0.0600003302, 0.8499968648, 0.0899999291, 0.8199964762, 0.3199984133, 0.9400014281, 0.3000001907, 0.120003365, 0.1799997687, 0.5200006366] spec = defPadsynthSpec 42.2 harms main = dac $ mul 0.4 $ mixAt 0.35 largeHall2 $ mixAt 0.45 (echo 0.25 0.75) $ midi $ onMsg $ mul (fades 0.5 0.7) . padsynthOsc2 spec
- padsynthOsc :: PadsynthSpec -> Sig -> SE Sig
- padsynthOsc2 :: PadsynthSpec -> Sig -> SE Sig2
- bwOscBy :: [Double] -> Double -> Sig -> SE Sig
- bwOddOscBy :: [Double] -> Double -> Sig -> SE Sig
- bwOscBy2 :: [Double] -> Double -> Sig -> SE Sig2
- bwOddOscBy2 :: [Double] -> Double -> Sig -> SE Sig2
- bwOsc :: Double -> Sig -> SE Sig
- bwTri :: Double -> Sig -> SE Sig
- bwSqr :: Double -> Sig -> SE Sig
- bwSaw :: Double -> Sig -> SE Sig
- bwOsc2 :: Double -> Sig -> SE Sig2
- bwTri2 :: Double -> Sig -> SE Sig2
- bwSqr2 :: Double -> Sig -> SE Sig2
- bwSaw2 :: Double -> Sig -> SE Sig2
- padsynthOscMultiCps :: [(Double, PadsynthSpec)] -> D -> SE Sig
- padsynthOscMultiCps2 :: [(Double, PadsynthSpec)] -> D -> SE Sig2
- padsynthOscMultiVol :: [(Double, PadsynthSpec)] -> (D, Sig) -> SE Sig
- padsynthOscMultiVol2 :: [(Double, PadsynthSpec)] -> (D, Sig) -> SE Sig2
- padsynthOscMultiVolCps :: [((Double, Double), PadsynthSpec)] -> (D, D) -> SE Sig
- padsynthOscMultiVolCps2 :: [((Double, Double), PadsynthSpec)] -> (D, D) -> SE Sig2
Generic padsynth oscillators
padsynthOsc :: PadsynthSpec -> Sig -> SE Sig Source
Padsynth oscillator.
padsynthOsc spec frequency
It makes it easy to create padsynth sound waves (see Tab.padsynth). It creates a padsynth table and reads it with poscil at the right speed.
padsynthOsc2 :: PadsynthSpec -> Sig -> SE Sig2 Source
Stereo padsynth oscillatro. It creates two padsynth ftables for left and right channels.
Simple padsynth oscillators
bwOscBy :: [Double] -> Double -> Sig -> SE Sig Source
Creates padsynth oscillator with given harmonics.
bwOscBy harmonics bandwidth frequency
bwOddOscBy :: [Double] -> Double -> Sig -> SE Sig Source
Creates padsynth oscillator with given odd harmonics.
bwOddOscBy harmonics bandwidth frequency
bwOsc :: Double -> Sig -> SE Sig Source
Pure sine wave with padsynth wave table:
bwOsc bandwidth frequency
bwTri :: Double -> Sig -> SE Sig Source
Triangle wave with padsynth wave table:
bwTri bandwidth frequency
bwSqr :: Double -> Sig -> SE Sig Source
Square wave with padsynth wave table:
bwSqr bandwidth frequency
bwSaw :: Double -> Sig -> SE Sig Source
Saw-tooth wave with padsynth wave table:
bwSaw bandwidth frequency
Layered padsynth
padsynthOscMultiCps :: [(Double, PadsynthSpec)] -> D -> SE Sig Source
It uses several padsynth tables. Each table is responsible for specific interval of frequencies. The list of pairs specifies the threshhold value and padsynth specification. The padsynth table is active for all frequencies that lie below the given threshold.
padsynthOscMultiCps thresholdSpecPairs frequency = ...
padsynthOscMultiCps2 :: [(Double, PadsynthSpec)] -> D -> SE Sig2 Source
Stereo version of padsynthOscMultiCps
.
padsynthOscMultiVol :: [(Double, PadsynthSpec)] -> (D, Sig) -> SE Sig Source
It behaves just like padsynthOscMultiCps
but it spreads the padsynth tables among amplitude values.
So the last input argument is a pair of amplitude and frequency:
padsynthOscMultiVol thresholdSpecPairs (amplitude, frequency) = ...
padsynthOscMultiVol2 :: [(Double, PadsynthSpec)] -> (D, Sig) -> SE Sig2 Source
Stereo version of padsynthOscMultiVol
.
padsynthOscMultiVolCps :: [((Double, Double), PadsynthSpec)] -> (D, D) -> SE Sig Source
TODO (undefined function)
With this function we can create square zones in the domain of (amplitude, frequency)
.
We can assign a separate padsynth table for each zone.
The list of pairs contains a pair of two threshold values (amplitude, frequency)
and dedicated padsynth specification.
padsynthOscMultiVolCps thresholdSpecPairs (amplitude, frequency) = ...
padsynthOscMultiVolCps2 :: [((Double, Double), PadsynthSpec)] -> (D, D) -> SE Sig2 Source
TODO (undefined function)
Stereo version of padsynthOscMultiVolCps
.