Ideas for a attractive (dance) beat?

Any recommendations to get a nice dance beat if you play for people who are not into algorave?

You know what I mean? A beat people find attractive and maybe could even move their feet with.


1 Like

isn't this a damning indictment of algorave (= the "rave" that you can't dance to) ... yesterday I made this answer to a homework exercise set by @yaxu in another thread. Do you recognize the beat? I think the base drum alone is enough - depending on your age, of course.

d1 $ unwrap $ slow 2 $ segment 1 $ wchoose
  [ ( stack
      [ s "clubkick:2"
        >| gain "[1*2 <1*8 1*2>]"
      , s "gretsch:19" >| gain "[0 1*2]*4"
      , s "sn:2" >| gain "[0 1]*2"
      ] , 0.8 )
  , (stack
      [ s "clubkick:2*4"
      , s "sn:2"
        >| gain "<[1*4 1*2 1*4 [1 1*2]]  [[1*2 1] 1*4 1*2 1*2 ]  >"
      ], 0.1)
  , ( stack [s "clubkick:2", s "sn:2"]
      >| gain "[1*3 1]"
    , 0.1 )

I've already done this in past tunes/performance, so I'm going to tell you my general recipe.

In terms of tempo, the default tempo for Tidal (also obtained with setcps 0.5625) works well for dance music, so I think there is no need to change it.
Samples-wise, I prefer to use some nice SuperDirt synths, and maybe one or two other samples (but if they're harmonic samples make sure they are tuned in C!).
When it comes to structure, I'd chose one or two classic (or less classic!) chord progressions (I googled "dance chord progressions" and found this article that has loads of nice ideas) and then alternate between then while playing with the arpg and struct functions, while adding a bit on variety on the go (think of a drop, a more ambient bridge, a maybe more crazy section).

Hope that helps, and don't hesitate to share the result on the dedicated thread!


All very good points. Keep it simple (four to the floor).
Make gradual changes only. But also mind the musicians' recommendation "when wrong - play strong": don't try to hide an "error" (a sudden change) but emphasize it, claiming you had planned it all the time. In another thead here, the similar concept "validation by repetition" apeared (I think).

To me, the fundamental "live coding problem" is that you sometimes want to edit part of the code that you're not currently hearing (e.g., chorus vs. verse, or, my example above, standard beat vs. breaks), so you have no immediate feedback. But when you don't have this distinction between parts, then you risk that the performance becomes boring.


I sometimes start with something that emulates a 'traditional' drum step sequencer...

d1 $ slow 4 $ struct "t t f t f f t f" $ s "kick"

8 or 16 steps. Do the same with snare and hi hat layers... not very complicated, but could be 'attractive' with some finesse...


I've been thinking about this a lot lately, I don't do a good enough job

I think what your looking for is a beat that "grooves" - syncopation (not too much) creates groove, people write papers on it:


I'm enjoying this book:
Title: The Geometry of Musical Rhythm: What Makes a "Good" Rhythm Good?
Author: Godfried T. Toussaint

It has an interesting take on syncopation


Play with other people: producers, djs musicians. Find what genre you like. Tidal cycles is probably what the future will look like for music with some added AI so learn the genres you like. I try to reverse engineer popular songs or cool grooves in tidal cycles. I find it to be a good exercise to figure out tricks into making popular music. Adding swing helps a lot. I use a lot of the modular operation so I’m working with just eight notes or sixteenth notes d1 $ n “ {0 1 3 4 5 6 7}%4” $ s “lead ” will play a pattern of 7 quarter notes before repeating so you can get multi bar riffs as music tends to be.
Music tends to be arranged so have blocks of code for different sections of the song. I try to aim for songs in tidal that are reproducible, self documented, concise.


There’s a syncopation index used frequently in that paper. Do you have access to the paper that calculates this index? I can’t seem to find it. I feel like it would be a great starting point to coming up with a syncopation function for tidal cycles.

Heh, I'll be honest I didn't read the paper - I linked it as an example of it being commonly written about... but, now that you've called me out I did feel an obligation to go digging for you :wink:

It references:

65.Longuet-Higgins HC, Lee C (1984) The rhythmic interpretation of monophonic music. Music Perception 1: 424–440.

Which is available here:

but can be read on jstor...

If R is a rest or a tied note, and N is the next sounded note before R, and the weight of N is no greater than the weight of R, then the pair (N,R) is said to constitute a syncopation. The "strength" of the syncopation is the weight of R minus the weight of N.

1 Like

You’re amazing! Thank you!

1 Like

Thanks for linking this. Just in time so that I could reference it in a lecture yesterday.

Do we agree that the given "index of syncopation" (cited/refined in attachment , example is useful?
(The "instrumental weight" seems arbitrary, and it isn't even a definition, it's just given by example.)

How can we use it for synthesis - i.e., automatically generate patterns with given index? Using Tidal's operators? (That's what I was asking my students.)

Coincidentally the author of "Syncopation, Body-Movement and Pleasure in Groove Music" is the (awesome) tidalcyclist @mxwx, in case you have more questions :slight_smile:


Hi, yes it's me! I have also wondered whether the LH&H index could be implemented as an algorhithm in tidal somehow. I think Atsushi Tadokoro @tadokoro used something like it in a piece where the syncopation level was analyzed in realtime, but I'm not sure if or how this was fed back to tidal:


Seeing this thread for the first time. One thing I've found helpful is to gently undulate the tempo via a #cps wave function. Here's a beat I'm messing with right now, using a cps range to make the tempo dip slightly for the backbeats:

  d1 $ s "supersnare(9,16)?"
# cps (range 0.5 0.45 $ fast 2 tri )
-- # smear (range 0.1 0.3 $ fast 1.4 tri )
-- # waveloss (range 0.1 00.4 $ slow 1.3 sine )
# sustain (range 0.05 0.25 $ slow 0.2 sine )
# djf (range 0.4 0.9 $ slow 32 tri )
# pan (range 0.2 0.8 $ slow 0.3 sine )
# gain (range 0.7 0.3 $ fast 9.2 sine )
# amp 0.9
 d2 $ every 8 rev $ s "bd*8 sn*8" # n "[1 ~ ~ ~ 1 ~ ~ ~] [[2 0?] ~ ~ [~ 0?]]"
# amp "0.02 0.02"
# shape "0.4 0.5"
  d3 $ every 4 rev $ s "[sostoms? ~ ~ sostoms?]*2"
# sustain (range 0.1 0.02 $ slow 0.2 sine )
# freq 420
# shape (range 00.7 0.25 $ slow 0.43 sine )
# voice (range 00.5 0.25 $ slow 0.3 sine )
# delay 0.1
# delayt 0.4
# delayfb 0.5
# amp 0.2
  d4 $ s "[~ superhat]*4"
# accelerate 1.5
# nudge 0.02
# amp 0.1