diff --git a/website/src/pages/understand/cycles.mdx b/website/src/pages/understand/cycles.mdx new file mode 100644 index 00000000..a66794be --- /dev/null +++ b/website/src/pages/understand/cycles.mdx @@ -0,0 +1,130 @@ +--- +title: Understanding Cycles +layout: ../../layouts/MainLayout.astro +--- + +import { MiniRepl } from '../../docs/MiniRepl'; +import { PitchSlider } from '../../components/PitchSlider'; +import Box from '@components/Box.astro'; + +# Understanding Cycles + +The concept of cycles is very central to be able to understand how Strudel works. +Strudel's mother language, TidalCycles, even has it in its name. + +## Cycles and BPM + +In most music software, the unit BPM (beats per minute) is used to set the tempo. +Strudel expresses tempo as CPS (cycles per second), with a default of 1CPS: + + + +Here we can hear the 1CPS in action: The kick repeats once per second like a clock. +We could say 1CPS = 1BPS (beats per second) = 60BPM. Let's add another kick: + + + +Now we have 2 kicks per second, but the whole pattern still plays at 1CPS. +In terms of BPM, most musicians would tell you this is playing at 120bpm. +What about this one: + + + +Because the second sound is now a hihat, the tempo feels slower again. +This brings us to an important realization: + + + +Tempo is based on perception. +The choice of sounds also has an impact on the tempo feel. +This is why the same CPS can produce different perceived tempos. + + + +## Setting CPM + +If you're familiar with BPM, you can use the `cpm` method to set the tempo in cycles per minute: + + + +If you want to add more beats per cycle, you might want to divide the cpm: + + + +Or using 2 beats per cycle: + + + + + +To set a specific bpm, use `.cpm(bpm/bpc)` + +- bpm: the target beats per minute +- bpc: the number of perceived beats per cycle + + + +## Cycles and Bars + +Also in most music software, multiple beats form a bar (or measure). +The so called time signature specifies how many beats are in each bar. +In many types of music, it is common to use 4 beats per bar, also known as 4/4 time. +Many music programs use it as a default. + +Strudel does not a have concept of bars or measures, there are only cycles. +How you use them is up to you. Above, we've had this example: + + + +This could be interpreted as 4/4 time with a tempo of 110bpm. +We could write out multiple bars like this: + +\`).cpm(110/4)`} +/> + +Instead of writing out each bar separately, we could express this much shorter: + +>,hh*4").cpm(110/2)`} /> + +Here we can see that thinking in cycles rather than bars simplifies things a lot! +These types of simplifications work because of the repetitive nature of rhythm. +In computational terms, you could say the former notation has a lot of redundancy. + +## Time Signatures + +To get a time signature, just change the number of elements per bar. Here is a rhythm with 7 beats: + + + +or with 5: + +*5")`} /> + +We could also write multiple bars with different time signatures: + +\`).cpm(110*2)`} +/> + +Here we switch between 3/4 and 4/4, keeping the same tempo. + +If we don't specify the length, we get what's called a metric modulation: + +\`).cpm(110/2)`} +/> + +Now the 3 elements get the same time as the 4 elements, which is why the tempo changes.