This document is a listing of many of the pattern classes and event keys from standard SuperCollider/sclang and various quarks, and their implementation status and/or equivalent in cl-patterns. If a pattern you want is not yet implemented (or not listed here), feel free to open an issue requesting it (or if you’re feeling inspired, code it yourself and open a pull request!).
Note that this is just a simple rip of all the Pattern
subclasses and that a pattern’s inclusion in this list doesn’t necessarily guarantee it will be implemented–or implemented exactly as it is in standard SC–in the future.
Treat this list as a “quick reference” for users familiar with SuperCollider’s patterns. For more in-depth information, have a look at the sc-differences.org file instead, which gives a more high-level overview of the ways cl-patterns differs from SuperCollider.
Pseq
- done aspseq
.Pser
- done aspser
.Pshuf
- done aspshuf
.Prand
- done asprand
.Pxrand
- done aspxrand
.Pwrand
- done aspwrand
.Pwxrand
- done aspwxrand
.Pfsm
Pdfsm
Ppar
- done asppar
.Pfpar
Pslide
- done aspslide
.Ptuple
Pwalk
- done aspwalk
.Pindex
- done aspindex
.Place
- done asplace
.Ppatlace
- done asppatlace
.Pswitch
- functionality covered bypindex
.PseqFunc
- functionality covered bypfunc
andpseq
.PserFunc
- functionality covered bypfunc
andpser
.
Pavaroh
Pbus
Pclump
- done aspclump
. see also:paclump
.Pclutch
Pconst
- functionality covered bypfindur
.Pdelay
Pdelta
- done aspdelta
.Pdiff
- done aspdiff
.Pdrop
- done aspdrop
.PfadeIn
PfadeOut
Pfin
- done aspfin
. see also:pbind
’s:pfin
key.PfinQuant
Pfindur
- done aspfindur
. see also:pbind
’s:pfindur
key.Pfx
Pinterp
Plag
Pn
- done aspn
.PpatRewrite
Pplayer
Pprotect
- not implemented yet; in the future you will also be able to usepbind
’s:cleanup
key.Prewrite
Prorate
Pscratch
- done aspscratch
.Pseed
Pset
Psetpre
Pstretch
Pstutter
- functionality covered bypr
.PdurStutter
- done aspdurstutter
. see also:pbind
’s:pdurstutter
key.Psmartstutter
Psym
- done aspsym
.Psync
- done aspsync
. see also:pbind
’s:psync
key.Ptrace
- done asptrace
.Pwrap
- see also:(pnary #'wrap)
.
Punop
- done aspunop
.Pbinop
- done aspbinop
.Pnaryop
- done aspnaryop
.Pwhite
- done aspwhite
.Pbrown
- done aspbrown
.Pexprand
- done aspexprand
.Pbeta
Pgbrown
Pcauchy
Pgauss
- done aspgauss
.Pseries
- done aspseries
.Pgeom
- done aspgeom
.Phprand
Plprand
Pmeanrand
Ppoisson
Pprob
Paccum
- done aspaccum
.
Phenon
Platoo
Plorenz
Pquad
PlinCong
Pstandard
Pgbman
Pfhn
Pseg
Penv
Ptempo
- see also:(pk :tempo)
.Ptime
- done aspbeat
.Pstep
- done asprun
.
PSinOsc
POsc
Pbind
- done aspbind
.Pbindf
Pbindef
- functionality covered bypb
.Pmono
- done aspmono
.PmonoArtic
- functionality covered bypmono
.Pdef
- done aspdef
. see also:pbind
’s:name
/:pdef
keys.Pchain
- done aspchain
. see also:pbind
’s:embed
key.Pdict
Penvir
Peventmod
Pif
- done aspif
.Pkey
- done aspk
.Plazy
- done asplazy
.Plambda
Plet
Pget
Ppatmod
Pproto
- functionality covered bypbind
’s:init
key.Pvoss
Pfunc
- done aspfunc
.Pfuncn
- functionality covered bypfunc
.Prout
Pbjorklund
- done aspbjorklund
.PS
- done asps
.Pspawn
- functionality covered bypmeta
.Pspawner
- functionality covered bypmeta
.Spawner
- functionality covered bypmeta
.
Ctl
PnC
- conditional looping, likePn
but with a condition instead of a number of repeats - functionality will be covered bypn
, i.e.(pn repeat-this (lambda () (if my-condition 1 0)))
- need to implement and add a test for it (FIX).Ps
- done asps
.Prs
- done asprs
.Ptrack
- done asptrack
.Pfuse
Pmix
Pline
Parp
- done aspfor
.Parpf
- parp (pfor
) fork; not implemented yet.Parpm
- likeParp
, but the pattern’s notes are subdivided without retriggering (a laPmono
).Pf
- filter a pattern based on the outputs of another pattern. done aspfilter
.Pg
- “global”Pseries
.Pb
- done aspb
.Pm
- functionality covered by(pbind :type :mono)
.Pinject
- functionality covered by the:embed
special key.Psyncer
- combine a list of patterns into one event stream; the rest are looped for the full duration of the first. functionality covered bypmeta
’s:sync
key.Pcomp
- functionality covered bypmeta
.Pfwd
- sends copies of the outputs of a pattern to the specified function. functionality covered by*event*
, i.e.(pbind :foo 1 :- (lambda () (print *event*) 1))
Ppar2
Pmod
- play a modified copy of a stream in parallel.PkEnv
- start/control anEnvGen
synth and yield the control bus it’s outputting to.PkLFO
- start/control an LFO synth and yield the control bus it’s outputting to.Pfeed
- after an initial value, a function is passed the previous output, to do “feedback”, within an optional set of bounds.
Pcbrown
Pevent
Pstep3add
PenvirGet
Pstep2add
PstepNfunc
Ppostln
PintC
PintN
PbindProxy
PintL
Phenon
PstepDur
PstepNadd
PTimePoints
PAbstractGroup
Paddpre
Pmulpre
Pselect
Pfset
Pwhile
Preject
Pcollect
Pwhile1
PcollectFinal
Psym1
Ptsym
Pnsym
Pnsym1
Pstretchp
Pfinval
Pfintime
Pflatten
Pmul
Padd
Psetp
Paddp
Pmulp
PparGroup
Pgroup
Pembedn
PnNilSafe
Pgate
Pfxb
Plimitsum
Pmcvoss
Pdefn
PdegreeToKey
Paccumbounce
Pvbrown
PbindMultiChan
PbindArrayDefault
Pwshuf
Phrand
Pfpar
Pgpar
Ptpar
Pgtpar
Pslide1
PslideNoWrap
Pswitch1
PlazyEnvir
PlazyEnvirN
Many (but not all) of SuperCollider’s “special keys” are supported in cl-patterns. special-keys.org lists all of the supported keys in cl-patterns, but the implementation/equivalent status of all of the SuperCollider special keys are listed here for convenience.
server
- not implemented; you probably wantbackend
instead.instrument
- implemented.group
- implemented for the SuperCollider backend.addAction
- not implemented.out
- implemented.
amp
- implemented.db
- implemented.pan
- implemented.velocity
- not implemented; just set:amp
toN/127
instead.trig
- not implemented.
tempo
- implemented.dur
- implemented.stretch
- not implemented; just multiply the:dur
key, i.e.:dur (p* (pk :dur) N)
legato
- implemented.sustain
- implemented.lag
- not implemented;latency
effectively provides this; just add your desired value onto it.timingOffset
- implemented but namedtiming-offset
.strum
- not implemented; will likely be implemented as a pattern instead.strumEndsTogether
- not implemented; will likely be implemented as a pattern instead.sendGate
- not implemented; the system automatically detects whether to send a gate parameter based on whether the instrument definition has one. You should ensure your instrument metadata and/or synth definitions are correct if you’re having issues.
freq
- implemented.midinote
- implemented.note
- implemented.degree
- implemented.scale
- implemented.octave
- implemented.root
- implemented.stepsPerOctave
- not implemented; just set thescale
key to a scale that has the number of steps you want to have per octave.octaveRatio
- not implemented; just set thescale
key to a scale that has the octave ratio you need.harmonic
- not implemented; just multiply thefreq
key, i.e.:freq (p* (pk :freq) N)
detune
- not implemented; just add to thefreq
key, i.e.:freq (p+ (pk :freq) N)
midiToCps
- not implemented; pitch calculations are automatically done by the system; set yourscale
key to your desired scale and provide pitch information as additional keys and the system should calculate the frequency for you. It’s not recommended to attempt to use themidinote
key to notate non-12-tone scale music. If the system’s built-in pitch functionality is not enough, you can specify frequencies directly with thefreq
key, or define your ownscale
ortuning
and use thedegree
key to access its pitches.mtranspose
- not implemented; just add to thedegree
key instead, i.e.:degree (p+ (pk :degree) N)
gtranspose
- not implemented; just ensure yourscale
is set correctly and add to thenote
key instead, i.e.:note (p+ (pk :note) N)
ctranspose
- not implemented; just add to thenote
ormidinote
key instead, i.e.:midinote (p+ (pk :note) N)