strudel/paper/paper.md
2022-04-03 00:04:00 +02:00

3.5 KiB

title, date, url2cite
title date url2cite
Strudel 2022-03-22 all-links

Introduction

That @roberts2016 are excellent, I reference their work at least twice per sentence [@roberts2016, p. 3]. Another reference @mclean21.

"1 2 3"

Background

General motivations / related work. Reference vortex paper and summarise its background.

Introducing TidalStrudel

(do we want to call it TidalStrudel once, and Strudel for short from then on as with vortex? Or just stick with Strudel? Should we start calling TidalCycles just Cycles??)

  • Motivating musical example

Tidal patterns

  • Some comparisons of -Strudel with -Vortex and -Cycles code?

(the following examples are from vortex paper, with added js versions)

1

sound "bd ~ [sd cp]"
sound("bd", silence, ["sd", "cp"])
sound("bd ~ [sd cp]")

without mini notation:

sound $ cat
   [pure "bd", silence,
    cat(pure "sd", pure "cp")]
sound('bd', silence, cat('sd', 'cp'))

2

sound "bd ~ <sd cp>"
sound("bd", silence, slowcat("sd", "cp"))
sound("bd ~ <sd cp>")
// sound('bd', silence, slowcat('sd', 'cp'))

3

sound "bd {cp sd, lt mt ht}"
sound("bd", pm(["cp", "sd"], ["lt", "mt", "ht"]))
?

4

sound "bd {cp sd, [lt mt,bd bd bd] ht}"
 sound("bd", pm(["cp", "sd"],
 [pr(["lt", "mt"],
 ["bd", "bd", "bd"]
 ),
 "ht" ]))
??

5

sound "bd sd cp" # speed "1 2"
sound("bd", "sd", "cp") >> speed (1, 2)
sound("bd sd cp").speed("1 2")

(operator overloading like in vortex?)

6

rev $ sound "bd sd"
rev(sound("bd", "sd"))
sound("bd", "sd").rev()
rev(sound("bd sd"))
sound("bd sd").rev()

7

jux rev $ every 3 (fast 2) $ sound "bd sd"
jux(rev, every(3, fast(2), sound("bd", "sd")))
sound("bd","sd").every(3, fast(2)).jux(rev)
jux(rev, every(3, fast(2), sound("bd sd")))
sound("bd sd").every(3, fast(2)).jux(rev)

(partial application)

8

n ("1 2 3" + "4 5") # sound "drum"
n (sequence(1,2,3) + sequence(4,5)) >> sound "drum"
n("1 2 3".add("4 5")).sound("drum")
n("5 [6 7] 8").sound("drum")

(operator overloading?)

9

speed("1 2 3" + sine)
speed(sequence(1,2,3) + sine)
speed("1 2 3".add(sine))
"c3*4".add(sine.mul(12).slow(8)).pianoroll()

10

  • Mininotation

Strudel/web specifics

Some discussion about whether strudel is really a port of TidalCycles, or whether javascript affordances mean it's going its own way..

  • Recursive Scheduling: "calling itself in the future"
  • Optimizing Syntax for minimal keystrokes / readability: "AST Hacking" via shift-ast pseudo variables
    • Handling mininotation - double quoted and template strings to mini calls
    • Operator overloading
  • Fixing inconsistencies (e.g. with stut/echo) adding source locations
  • Dynamic HUD: Highlighting + drawing
  • Translation of Tidal concepts to Javascript - different constraints, affordances, aesthetics
  • Dynamic Harmonic Programming?
  • emulating musician thought patterns
  • microtonal features? webserial

Musical examples

...

Ongoing work/future aims

  • WASM Sound Backend
  • OSC -> Supercollider
  • mininotation as the 'regex' of metre

References