/piratidal

Proof of concept for a Clojure port of TidalCycles

Primary LanguageClojureGNU General Public License v3.0GPL-3.0

Piratidal

Experimental Clojure port of TidalCycles. This is a very early work in progress and so far more of a proof of concept.

Table of Contents

Installation

Piratidal requires the installation of Java, the clojure-cli and a suitable editor (one with a Clojure repl). You will also need to download SuperCollider and install SuperDirt.

Usage

Open SuperCollider and evaulate the following line of code:

SuperDirt.start

The start a Clojure repl by following the instructions of the plugin from your editor of choice or running the following line of code in your terminal (while inside the piratidal directory).

$ clj

Then in an editor file or your terminal repl evaluate the following:

(require '[piratidal.core :refer :all])

(p 1 (-> (s "[bd cp/2 hh]")
         (jux rev)))

You can also use the examples file at dev/examples.cljc to try other stuff out.

The API that has been already implemented can be found in the piratidal.core namespace in the def-main-and-control-patterns, def-pattern-transformations and import-vars forms. If using the -> (thread) macro, the API replicates very closely Tidal's own.

(un)Implemented Features

Parser

Most of the parser's functionality is already implemented. Notable missing things are the following:

  1. Elongation probably doesn't work 100%.
  2. Patterned operations such as bd*<1 2>. Operations missing this are fast, slow, euclidean rhythms, elongation, replication and degradation.
  3. The fastcat operator ..
  4. Variables
  5. Chords

Tidal's API Implemented So Far

  • amp
  • begin
  • cat - not yet exposed by the API
  • degrade
  • degradeBy
  • euclid
  • end
  • fast
  • fastGap
  • fastcat
  • gain
  • hush
  • jux
  • layer - not yet exposed by the API
  • palindrome
  • rev
  • rot
  • rotL
  • rotR
  • slow
  • someCycles
  • someCyclesBy
  • sometimes
  • sometimesBy
  • sparsity
  • speed
  • stack - not yet exposed by the API
  • sustain
  • unDegradeBy
  • accelerate
  • all
  • anticipate
  • anticipateIn
  • append
  • arp
  • arpeggiate
  • bite
  • brak
  • chew
  • choose
  • choose
  • chooseby
  • chooseby
  • chop
  • chordList
  • chordTable
  • chunk
  • chunk'
  • clutch
  • clutchIn
  • compress
  • contrast
  • contrastBy
  • cycleChoose
  • discretise
  • echo
  • echoWith
  • euclidFull
  • euclidInv
  • every
  • every'
  • fastAppend
  • fastSqueeze
  • fastspread
  • fix
  • fix
  • fixRange
  • flatpat
  • foldEvery
  • fromList
  • fromMaybes
  • getScale
  • ghost
  • ghost'
  • ghostWith
  • grain
  • grain'
  • histpan
  • hurry
  • ifp
  • ifp
  • inhabit
  • inside
  • interpolate
  • interpolateIn
  • irand
  • iter
  • iter'
  • jump
  • jumpIn
  • jumpIn'
  • jumpMod
  • juxBy
  • lindenmayer
  • linger
  • listToPat
  • loopAt
  • loopFirst
  • mask
  • mt
  • mtrigger
  • off
  • once
  • outside
  • overlay
  • perlin
  • perlin2
  • perlin2With
  • perlinWith
  • pickF
  • ply
  • press
  • pressBy
  • qt
  • qtrigger
  • quantise
  • rand
  • randcat
  • randslice
  • range
  • rangex
  • resetCycles
  • rolled
  • rolledBy
  • run
  • scale
  • scaleList
  • scaleTable
  • scan
  • scramble
  • segment
  • select
  • selectF
  • seqP
  • seqPLoop
  • setcps
  • sew
  • shuffle
  • sig
  • slice
  • slowSqueeze
  • slowstripe
  • smash
  • smash'
  • spin
  • splice
  • spread
  • spreadChoose
  • spreadf
  • squeeze
  • step
  • step'
  • steps
  • stitch
  • stretch
  • striate
  • striateBy
  • stripe
  • struct
  • stut
  • stutWith
  • stutter
  • superimpose
  • swing
  • swingBy
  • timeCat
  • timescale
  • timescalewin
  • toScale
  • trigger
  • triggerWith
  • trunc
  • unfix
  • unit
  • ur
  • wait
  • waitT
  • wash
  • washIn
  • wchoose
  • wchoose
  • wchooseby
  • wchooseby
  • weave
  • weaveWith
  • wedge
  • when
  • whenT
  • whenmod
  • within
  • wrandcat
  • xfade
  • xfadeIn
  • zoom