The 5.2 is out. Virtual pedalboards, arrays, new OSC, full support for mono synthesizers, patch skins, all GEN-routines are implemented
Complete support for monophonic synthesizers:
The argument of mono synth was updated.
Previously it was a pair of amplitude and frequency signals.
But this representation doesn't captures the notion of note retrigger.
We can not create the mono-synt with sharp attacks.
Now this is fixed. We can use adsr140 or adsrMonoSynt functions to create
mono synths with fixed attacks
monoSco - for playing scores with mono-synths
monoSched - for playing event streams with mono synt
atSco and atSched now work for mono synth too
The patch can change the skin. The Patch type has changed. Know it supports the change in common parameters.
Right now the ccommon parameters include only Low-pass filter type. But this can be extended in future releases.
The idea is that we can parametrize the patch with some common arguments so that use can tweak them
without revriting the algorithm.
The low-pass filter is a vital tool that defines the character of the synthesizer.
With recent addition of several modern filter emulators (like Korg (korg_lp), or acid filter diode)
it's good to be able to quickly switch the filters. We can do it for patches with function
setFilter :: ResonFilter -> Patch a -> Patch a
Family of standard effects was added (see module
Csound.Air.Fx.FxBox and the guide).
The effects are kindly provided by Iain McCurdy (recoded from his original implementation in Csound).
The effects have catchy names and are defined on wide variety of types. Let's briefly discuss the naming conventions:
adele - analog delay
pongy - ping pong delay
tort - distortion
flan - flanger
fowler - Envelope follower
phasy - phaser
crusher - bit-crusher
chory - stereo chorus
tremy - tremolo
pany - panning
revsy - reverse playback
Also there are set of presets that imply the notion of add a bit of effect or add a lot of effect.
They are suffixed with number from 1 to 5. Like
tort3. Also if the effect support the
tone knob (center frequency of LP filter) ter are suffixes
b for bright color and
m for muted color.
The effects are just functions from signals to signals: ~~~haskell dac $ hall 0.2 $ adele2 0.5 0.25 $ flan2 $ tort1m $ asigs ~~~
UI widgets for standard effects.
Alongside with effects there are functions to create widgets (UI-controls). They have the same naming convention
only the prefix
ui is added. For example:
uiHall. Also there are predefined presets like
With presets we put the box in the initial state corresponding to the given preset. But lately we can change it with UI-controls.
With this feature paired with functions
fxGrid we can easily design our virtual pedalboards.
It can be used like this:
> let pedals = fxGrid 2 [uiFlan1, uiTort1, uiAdele2m 0.5 0.3, uiHall 0.25] > dac $ fxApply pedals $ (sawSeq [1, 0.5, 0.25] 2) * sqr 220
Complete list of GEN routines. This release adds GEN:
* 25 bpExps -- Construct functions from segments of exponential curves in breakpoint fashion., * 27 bpLins -- Construct functions from segments of straight lines in breakpoint fashion. * wave waveletTab -- Generates a compactly supported wavelet function. * farey fareyTab -- Fills a table with the Farey Sequence Fn of the integer n. * sone soneTab -- Generate a table with values of the so
cabal update cabal install csound-catalog
that's a nice idea. You could provide sliders happy/sad, slow/fast to influence trends. I've heard someone on the csound mailing list having programmed an automated radio without interaction except the kind of music trance/jazz/... see https://algorythmradio.com/ . Maybe you could exchange together
Hello! I am a beginner in Haskell, coming more from mathematics, Overtone/Supercollider and composing with modular synthesizers.
csound-expression so far seems very promising to me, and I would like to thank you for creating this wonderful library! I have a few questions which I was unable to answer with the tutorial: I would like to do function composition to create effect chains (and perhaps also branch effects). However some effects have signatures like
... -> Sig -> SE Sig2while others have
... -> Sig -> SE Sig. How do I deal with this specific case and a function to put the
Sig into a
Sig2or the other way around? As an example of such an attempt at function composition which does not work:
snare = at (hp 1000 10 . chorus 0.1 0.2 0.1) $ mul (adsr 0.01 0.4 0 0) pink
Also (I may simply have missed this), is there a way to have buses or use things like Jack with
snare = at (hp 1000 10) . at (chorus 0.1 0.2 0.1) $ mul (adsr 0.01 0.4 0 0) pink
fromMono :: Sig -> Sig2
what is the best way to combine scores and playback of samples? My current approach is:
clap :: D -> SE Sig2 clap _ = runSam bpm $ wav1 "clap.wav" mkpattern :: [Int] -> Sco D mkpattern lst = mel $ map (\i -> if i == 0 then rest 1 else temp (double 1.0)) lst clapp :: Sco (Mix Sig2) clapp = sco clap $ mkpattern [0,0,1,0,0,0,1,1] -- then run `dac $ mix clapp`
but I would ideally like to work with samples like with
Csound.Sam like I can do with scores? Maybe there is a good way scores and samples are separated in this way?