Under the hood, Tidal
1.0.0 is a major rewrite. If you're used to previous versions, this will mostly be evident in terms of new functionality. But there are some breaking changes too. Below is a growing list of changes and additions. I, Yaxu, have tried to thank people who have done/contributed towards things, apologies to those I've missed. Things not marked are probably entirely my fault.
- The old
scalehas been renamed to
scaleis now used to specify musical scale
protateand friends has been replaced with
- New function fix for manipulating control patterns with matching control values
- New function
monofor making a pattern monophonic (thanks
- New function
smoothfor turning a discrete/digital numerical pattern into a continuous/analog one, by interpolating between the values (thanks
- Chord names can now be put into numerical patterns, e.g. n "c'maj e'min". The old
chordPhas been removed.
discretiseis now known as
eis now known as
breakOutis now known as
- Functions generally standardised into being 'slow', e.g.
scann will work over n cycles, not squeeze the whole buildup into a single cycle.
- Functions that only worked on one numerical type generalised to work on any where it makes sense, e.g.
randcan now be used as a pattern of time/rational values as well as double/floating point values (thanks
- select functions for choosing between patterns with a pattern of floats
wchooseweights no longer have to add up to
weave'is now known as
arpfunction for arpeggiation
- Easy ways to send Custom OSC to systems other than SuperDirt
- The meaning of
stutWithparameters have changed to match each other.
solonow does a 'true' solo. I.e. there is now also
- You can now run a cycle immediately, once, with
- Experimental transition interpolate for merging between new and old values
- Tidal now takes input from OSC and MIDI - see
Configuration > I/O. This means you can send numbers and strings into Tidal to be used as control values, function parameters, or parsed sequences
'Show'instance for patterns (and control patterns) is now more readable
- If you treat a control pattern as a number, you'll be manipulating the n control, e.g.
(s "bd" # n "1 2") + 3will add
- More parameters are patternable, e.g.
- The parser can now produce binary (boolean) patterns where euclidean rhythms produce
falsevalues not, true and silence. Useful for use with e.g.
- Configuration is done via a boot script and not environment variables
- Documentation has moved to a wiki (thanks to many, including
- What we used to call a 'param pattern' is now called a 'control pattern'
setcpsis now used to set a fixed tempo
- Tempo can now be patterned, using
cpsas a control pattern
The way patterns are combined has been reworked:
- The old 'structure comes from the left' adage no longer applies - you can now control where structure comes from
- The behaviour of
#works the same as before, but is now an alias for
>|, rather than
|=|(which no longer exists).
tidal-midiis not currently working (but midi is still working great via SuperDirt)
tidalinkis not currently working (should be fixed soon)
- classic Dirt is not currently supported (should also be fixed soon)
- Switched to
system.randomfor random number generation (thanks
- MiniTidal moved into core tidal repo (thanks
- Started on a unit test suite (thanks
- More lawful Applicative and Monad instances for Pattern
- Definition of
*>, that work like
<*>but using the structure on the left or right
<*>now uses structure on both sides
outerJoinfor 'flattening' patterns of patterns - works like join but taking structure from the inner or outer pattern respectively.
- Patterns are now flagged as either analog or digital
- Tidal is generally a single process, multithreaded thing, rather than multi-process as before
- The websocket tempo protocol has been replaced with an OSC based one
- The modules have been extensively reorganised, e.g.
Strategiesno longer exists, but
- Compiles without warnings
- Better stack support (thanks
- Fleshed out datatype structure (thanks
- Tidyier travis builds with more haskell versions tested (thanks
- New function
invfor inverting a binary (boolean) pattern
- Calculation is done based on
hZrather than calculations/cycle. By default it tidal runs at 20 calculations per second.