mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-17 08:38:28 +00:00
95 lines
2.7 KiB
Plaintext
95 lines
2.7 KiB
Plaintext
---
|
|
title: Synths
|
|
layout: ../../layouts/MainLayout.astro
|
|
---
|
|
|
|
import { MiniRepl } from '../../docs/MiniRepl';
|
|
import { JsDoc } from '../../docs/JsDoc';
|
|
|
|
# Synths
|
|
|
|
For now, [samples](/learn/samples) are the main way to play with Strudel.
|
|
In the future, more powerful synthesis capabilities will be added.
|
|
If in the meantime you want to dive deeper into audio synthesis with Tidal, you will need to [install SuperCollider and SuperDirt](https://tidalcycles.org/docs/).
|
|
|
|
## Playing synths with `s`
|
|
|
|
We can change the sound, using the `s` function:
|
|
|
|
<MiniRepl client:idle tune={`note("c2 <eb2 <g2 g1>>").s('sawtooth')`} />
|
|
|
|
Here, we are wrapping our notes inside `note` and set the sound using `s`, connected by a dot.
|
|
|
|
Those functions are only 2 of many ways to alter the properties, or _params_ of a sound.
|
|
The power of patterns allows us to sequence any _param_ independently:
|
|
|
|
<MiniRepl client:idle tune={`note("c2 <eb2 <g2 g1>>").s("<sawtooth square triangle>")`} />
|
|
|
|
Now we not only pattern the notes, but the sound as well!
|
|
`sawtooth` `square` and `triangle` are the basic waveforms available in `s`.
|
|
|
|
## FM Synthesis
|
|
|
|
### fm
|
|
|
|
<JsDoc client:idle name="fm" h={0} />
|
|
|
|
### fmh
|
|
|
|
<JsDoc client:idle name="fmh" h={0} />
|
|
|
|
### fmattack
|
|
|
|
<JsDoc client:idle name="fmattack" h={0} />
|
|
|
|
### fmdecay
|
|
|
|
<JsDoc client:idle name="fmdecay" h={0} />
|
|
|
|
### fmsustain
|
|
|
|
<JsDoc client:idle name="fmsustain" h={0} />
|
|
|
|
### fmenv
|
|
|
|
<JsDoc client:idle name="fmenv" h={0} />
|
|
|
|
## ZZFX
|
|
|
|
The "Zuper Zmall Zound Zynth" [ZZFX](https://github.com/KilledByAPixel/ZzFX) is also integrated in strudel.
|
|
Developed by [Frank Force](https://frankforce.com/), it is a synth and FX engine originally intended to be used for size coding games.
|
|
|
|
It has 20 parameters in total, here is a snippet that uses all:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`note("<c2 eb2 f2 g2>") // also supports freq
|
|
.s("<z_sawtooth z_tan z_noise z_sine z_square>")
|
|
.zrand(0) // randomization
|
|
// zzfx envelope
|
|
.attack(0.001)
|
|
.decay(0.1)
|
|
.sustain(.8)
|
|
.release(.1)
|
|
// special zzfx params
|
|
.curve(1) // waveshape 1-3
|
|
.slide(0) // +/- pitch slide
|
|
.deltaSlide(0) // +/- pitch slide (?)
|
|
.noise(0) // make it dirty
|
|
.zmod(0) // fm speed
|
|
.zcrush(0) // bit crush 0 - 1
|
|
.zdelay(0) // simple delay
|
|
.pitchJump(0) // +/- pitch change after pitchJumpTime
|
|
.pitchJumpTime(0) // >0 time after pitchJump is applied
|
|
.lfo(0) // >0 resets slide + pitchJump + sets tremolo speed
|
|
.tremolo(0) // 0-1 lfo volume modulation amount
|
|
//.duration(.2) // overwrite strudel event duration
|
|
//.gain(1) // change volume
|
|
.scope() // vizualise waveform (not zzfx related)
|
|
`}
|
|
/>
|
|
|
|
Note that you can also combine zzfx with all the other audio fx (next chapter).
|
|
|
|
Next up: [Audio Effects](/learn/effects)...
|