do
cps (86/60/2)
d9 $ midicmd "midiClock*48" # s "midi"
d1
$ note
((scaleP scalePattern
$ off 4 ((+ 2 ).slow 2)
$ off 1 (inversion.slow 2)
$ off 3 (inversion.slow 3)
$ off 1.5 ((+ 2).rev.slow 2)
$ generateMelodicSeed
))#s "[pe-gtr:10,midi]" #gain 1 #orbit 0 #midichan 1
do
cps (86/60/2)
d9 $ midicmd "midiClock*48" # s "midi"
do
d9 $ midicmd "stop" # s "midi"
hush
Tranquility: process of translation
other places where you see this kind of thing
This resembles something you sometimes see with popular API's which are available in a number of programming languages. This happens frequently with libraries that facilitate communication over some kind of common protocol. For example, Google's GRPC protocal provides libraries that have similar or identical API's in many programming languages as the Tx and Rx may be running programs written in different languages.
Tidal is a kind of domain specific language which is similar and related to the idea of API. Translating a DSL to another programming language is a bit like implementing the same API in another programming language. We have equivalent methods, objects, and data-structures to the extent that the host programming language allows.
This allows the programmer to use the same, or very similar expressions, to denote the same end behavior to the computer even though the way it is executed may be radically different. (For example: the machine code that is run for a strudel pattern vs. a tidal pattern would look nothing like one another)
translation - observed qualitative differences between tidal and its translations
- Frege: two phrases in natural languages that denote the same thing may not have the same meaning...
In translating computer code from one language to another this does
not, at first seem to be the case. However, I wonder if it depends on
where we think the meaning is coming from. For example if tidal's
d1 $ cat [s "bd", fast 3 $ s "sd"]
and strudel's
cat([ s("bd"), s("sd").fast(3)])
do not produce the same
sounds, one of the systems would be said to be broken. It would be
treated as a bug or malfunction.
From perspective of the improviser these two expressions require
different physical actions and different mental framing to reproduce. In
the case of tidal, the pattern flows outward and to the left. The
patterns are born inside the brackets and are transformed on their way
leftward to the code d1
where the system receives them and
plays them back. In the strudel example, the patterns flow outward and
to the right and they do not reach any terminating point. Strudel also
requires more parentheses as it lacks Haskell's $
operator.
This is a bit like a righthanded guitar vs. a left-handed guitar.
What is preserved through the difference in syntax seems to be the relationship between functions.
Something that is different is the way that the computer interprets the instructions (even if they sound the same).
perhaps this is a bit like having two character sets that represent the same spoken language?
perhaps this is like