From 06950a6bd8fb2f6dccc725d5e3c2ce9c4534e6a5 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 7 Jun 2023 16:50:54 +0200 Subject: [PATCH] translate rest of workshop to german --- .../src/pages/de/workshop/first-effects.mdx | 125 ++++++++++-------- website/src/pages/de/workshop/first-notes.mdx | 2 +- .../src/pages/de/workshop/first-sounds.mdx | 21 ++- website/src/pages/de/workshop/intro.mdx | 63 +++++++-- .../src/pages/de/workshop/pattern-effects.mdx | 60 +++++---- website/src/pages/de/workshop/recap.mdx | 72 +++++----- website/src/pages/workshop/first-effects.mdx | 12 +- website/src/pages/workshop/first-sounds.mdx | 24 ++-- website/src/pages/workshop/intro.mdx | 65 +++++++-- website/src/pages/workshop/recap.mdx | 10 +- website/src/repl/prebake.mjs | 2 +- 11 files changed, 277 insertions(+), 179 deletions(-) diff --git a/website/src/pages/de/workshop/first-effects.mdx b/website/src/pages/de/workshop/first-effects.mdx index d547548d..71b1d393 100644 --- a/website/src/pages/de/workshop/first-effects.mdx +++ b/website/src/pages/de/workshop/first-effects.mdx @@ -1,18 +1,16 @@ --- -title: First Effects +title: Erste Effekte layout: ../../../layouts/MainLayout.astro --- import { MiniRepl } from '../../../docs/MiniRepl'; import QA from '@components/QA'; -# First Effects +# Erste Effekte import Box from '@components/Box.astro'; -We have sounds, we have notes, now let's look at effects! - -## Some basic effects +## Ein paar grundlegende Effekte **low-pass filter** @@ -27,12 +25,12 @@ We have sounds, we have notes, now let's look at effects! lpf = **l**ow **p**ass **f**ilter -- Change lpf to 200. Notice how it gets muffled. Think of it as standing in front of the club with the door closed 🚪. -- Now let's open the door... change it to 5000. Notice how it gets brighter ✨🪩 +- Ändere `lpf` in 200. Hörst du wie der Bass dumpfer klingt? Es klingt so ähnlich als würde die Musik hinter einer geschlossenen Tür laufen 🚪 +- Lass uns nun die Tür öffnen: Ändere `lpf` in 5000. Der Klang wird dadurch viel heller und schärfer ✨🪩 -**pattern the filter** +**filter automatisieren** -- Try adding more values -- Notice how the pattern in lpf does not change the overall rhythm +- Füg noch mehr `lpf` Werte hinzu +- Das pattern in `lpf` ändert nicht den Rhythmus der Bassline -We will learn how to automate with waves later... +Später sehen wir wie man mit Wellenformen Dinge automatisieren kann. -**vowel** +**vowel = Vokal** /2")`} /> -**gain** +**gain = Verstärkung** -Rhythm is all about dynamics! +Bei Rhythmen ist die Dynamik (= Veränderungen der Lautstärke) sehr wichtig. -- Remove `.gain(...)` and notice how flat it sounds. -- Bring it back by undoing (ctrl+z) +- Entferne `.gain(...)` und achte darauf wie es viel flacher klingt. +- Mach es rückgängig (strg+z dann strg+enter) -**stacks within stacks** +**stacks in stacks** -Let's combine all of the above into a little tune: +Lass uns die obigen Beispiele kombinieren: -Try to identify the individual parts of the stacks, pay attention to where the commas are. -The 3 parts (drums, bassline, chords) are exactly as earlier, just stacked together, separated by comma. +Versuche die einzelnen Teile innerhalb `stack` zu erkennen, schau dir an wie die Kommas gesetzt sind. + +Die 3 Teile (Drums, Bass, Akkorde) sind genau wie vorher, nur in einem `stack`, getrennt durch Kommas -**shape the sound with an adsr envelope** +**Den Sound formen mit ADSR Hüllkurve** -Try to find out what the numbers do.. Compare the following +Versuche herauszufinden was die Zahlen machen. Probier folgendes: - attack: `.5` vs `0` - decay: `.5` vs `0` - sustain: `1` vs `.25` vs `0` - release: `0` vs `.5` vs `1` -Can you guess what they do? +Kannst du erraten was die einzelnen Werte machen? - + -- attack: time it takes to fade in -- decay: time it takes to fade to sustain -- sustain: level after decay -- release: time it takes to fade out after note is finished +- attack (anschlagen): Zeit des Aufbaus +- decay (zerfallen): Zeit des Abfalls +- sustain (erhalten): Lautstärke nach Abfall +- release (loslassen): Zeit des Abfalls nach dem Ende ![ADSR](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/ADSR_parameter.svg/1920px-ADSR_parameter.svg.png) -**adsr short notation** +**adsr Kurznotation** -**delay** +**delay = Verzögerung** -Try some `delay` values between 0 and 1. Btw, `.5` is short for `0.5` +Probier verschiedene `delay` Werte zwischen 0 und 1. Übrigens: `.5` ist kurz für `0.5`. -What happens if you use `.delay(".8:.125")` ? Can you guess what the second number does? +Was passiert wenn du `.delay(".8:.125")` schreibst? Kannst du erraten was die zweite Zahl macht? -What happens if you use `.delay(".8:.06:.8")` ? Can you guess what the third number does? +Was passiert wenn du `.delay(".8:.06:.8")` schreibst? Kannst du erraten was die dritte Zahl macht? -**room aka reverb** + + +`delay("a:b:c")`: + +- a: Lautstärke des Delays +- b: Verzögerungszeit +- c: Feedback (je kleiner desto schneller verschwindet das Delay) + + + +**room aka reverb = Hall** -Try different values! +Spiel mit verschiedenen Werten. -Add a delay too! +Füg auch ein Delay hinzu! -**little dub tune** +**kleiner dub tune** -Let's add a bass to make this complete: +Für echten Dub fehlt noch der Bass: -Try adding `.hush()` at the end of one of the patterns in the stack... +Füg `.hush()` ans ende eines Patterns im stack... -**pan** +**pan = Panorama** -**speed** +**speed = Geschwindigkeit** ").room(.2)`} /> -**fast and slow** +**fast and slow = schnell und langsam** -We can use `fast` and `slow` to change the tempo of a pattern outside of Mini-Notation: +Mit `fast` und `slow` kann man das tempo eines patterns außerhalb der Mini-Notation ändern: -Change the `slow` value. Try replacing it with `fast`. +Ändere den `slow` Wert. Tausche `slow` durch `fast`. -What happens if you use a pattern like `.fast("<1 [2 4]>")`? +Was passiert wenn du den Wert automatisierst? z.b. `.fast("<1 [2 4]>")` ? -By the way, inside Mini-Notation, `fast` is `*` and slow is `/`. +Übrigens, innerhalb der Mini-Notation, `fast` ist `*` und `slow` ist `/`. ")`} /> -## automation with signals +## Automation mit Signalen -Instead of changing values stepwise, we can also control them with signals: +Anstatt Werte schrittweise zu automatisieren können wir auch sogenannte Signale benutzen: -The basic waveforms for signals are `sine`, `saw`, `square`, `tri` 🌊 +Die grundlegenden Wellenformen sind `sine`, `saw`, `square`, `tri` 🌊 -Try also random signals `rand` and `perlin`! +Probiere auch die zufälligen Signale `rand` und `perlin`! -The gain is visualized as transparency in the pianoroll. +Der `gain`-Wert (Verstärkung) wird in der Visualisierung als Transparenz dargestellt. -**setting a range** +**Bereich ändern mit `range`** -By default, waves oscillate between 0 to 1. We can change that with `range`: +Signale bewegen sich standardmäßig zwischen 0 und 1. Wir können das mit `range` ändern: +`range` ist nützlich wenn wir Funktionen mit einem anderen Wertebereich als 0 und 1 automatisieren wollen (z.b. lpf) + -What happens if you flip the range values? +Was passiert wenn du die beiden Werte vertauschst? -We can change the automation speed with slow / fast: +Wir können die Geschwindigkeit der Automation mit slow / fast ändern: -The whole automation will now take 8 cycles to repeat. +Die ganze Automation braucht nun 8 cycle bis sie sich wiederholt. -## Recap +## Rückblick | name | example | | ----- | -------------------------------------------------------------------------------------------------- | diff --git a/website/src/pages/de/workshop/first-notes.mdx b/website/src/pages/de/workshop/first-notes.mdx index 7cf16205..93ba9031 100644 --- a/website/src/pages/de/workshop/first-notes.mdx +++ b/website/src/pages/de/workshop/first-notes.mdx @@ -1,5 +1,5 @@ --- -title: First Notes +title: Erste Töne layout: ../../../layouts/MainLayout.astro --- diff --git a/website/src/pages/de/workshop/first-sounds.mdx b/website/src/pages/de/workshop/first-sounds.mdx index 0f132bec..6c3fb6fd 100644 --- a/website/src/pages/de/workshop/first-sounds.mdx +++ b/website/src/pages/de/workshop/first-sounds.mdx @@ -61,7 +61,6 @@ Diese 2-Buchstaben Kombinationen stehen für verschiedene Teile eines Drumsets: - `bd` = **b**ass **d**rum - Basstrommel - `sd` = **s**nare **d**rum - Schnarrtrommel -- `sn` = **sn**are - `rim` = **rim**shot - Rahmenschlag - `hh` = **h**i**h**at - `oh` = **o**pen **h**ihat - Offenes Hi-Hat @@ -104,13 +103,13 @@ Versuch noch mehr Sounds hinzuzfügen! **Je länger die Sequence, desto schneller** - + Der Inhalt einer Sequence wird in einen sogenannten Cycle (=Zyklus) zusammengequetscht. **Tempo ändern mit `cpm`** - + @@ -128,7 +127,7 @@ Wir werden später noch mehr Möglichkeiten kennen lernen wie man das Tempo ver **Unter-Sequenzen mit [Klammern]** - + @@ -140,15 +139,15 @@ Genau wie bei der ganzen Sequence wird der eine Unter-Sequence schneller je mehr **Multiplikation: Dinge schneller machen** - + **Multiplikation: Unter-Sequences schneller machen** - + **Multiplikation: Vieeeeeeel schneller** - + @@ -158,7 +157,7 @@ Tonhöhe = sehr schneller Rhythmus **Unter-Unter-Sequenzen mit [[Klammern]]** - + @@ -216,12 +215,12 @@ Das haben wir bisher gelernt: | Concept | Syntax | Example | | --------------------- | ----------- | -------------------------------------------------------------------------------- | -| Sequenz | Leerzeichen | | +| Sequenz | Leerzeichen | | | Sound Nummer | :x | | | Pausen | ~ | | | Unter-Sequenzen | \[\] | | -| Unter-Unter-Sequenzen | \[\[\]\] | | -| Schneller | \* | | +| Unter-Unter-Sequenzen | \[\[\]\] | | +| Schneller | \* | | | Parallel | , | | Die mit Apostrophen umgebene Mini-Notation benutzt man normalerweise in eine sogenannten Funktion. diff --git a/website/src/pages/de/workshop/intro.mdx b/website/src/pages/de/workshop/intro.mdx index 5688476b..47f90b63 100644 --- a/website/src/pages/de/workshop/intro.mdx +++ b/website/src/pages/de/workshop/intro.mdx @@ -3,20 +3,57 @@ title: Introduction layout: ../../../layouts/MainLayout.astro --- -# Introduction +# Welcome -## goals +Welcome to the Strudel documentation pages! +You've come to the right place if you want to learn how to make music with code. -- be beginner friendly -- teach a representative subset of strudel / tidal -- introduce one new thing at a time -- give practical / musical examples -- encourage self-experimentation -- hands on learning > walls of text -- maintain flow state -- no setup required +## What is Strudel? -## inspired by +With Strudel, you can expressively write dynamic music pieces. +It is an official port of the [Tidal Cycles](https://tidalcycles.org/) pattern language to JavaScript. +You don't need to know JavaScript or Tidal Cycles to make music with Strudel. +This interactive tutorial will guide you through the basics of Strudel. +The best place to actually make music with Strudel is the [Strudel REPL](https://strudel.tidalcycles.org/) -- https://github.com/tidalcycles/tidal-workshop/blob/master/workshop.tidal -- https://learningmusic.ableton.com +## What can you do with Strudel? + +- live code music: make music with code in real time +- algorithmic composition: compose music using tidal's unique approach to pattern manipulation +- teaching: focussing on a low barrier of entry, Strudel is a good fit for teaching music and code at the same time. +- integrate into your existing music setup: either via MIDI or OSC, you can use Strudel as a really flexible sequencer + +## Example + +Here is an example of how strudel can sound: + +],hh*8") + .speed(perlin.range(.8,.9)), // random sample speed variation + // bassline + "" + .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps + .add(perlin.range(0,.5)) // random pitch variation + .superimpose(add(.05)) // add second, slightly detuned voice + .note() // wrap in "note" + .decay(.15).sustain(0) // make each note of equal length + .s('sawtooth') // waveform + .gain(.4) // turn down + .cutoff(sine.slow(7).range(300,5000)), // automate cutoff + // chords + ">".voicings('lefthand') + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .note() // wrap in "note" + .s('sawtooth') // waveform + .gain(.16) // turn down + .cutoff(500) // fixed cutoff + .attack(1) // slowly fade in +) +.slow(3/2)`} +/> + +To hear more, go to the [Strudel REPL](https://strudel.tidalcycles.org/) and press shuffle to hear a random example pattern. diff --git a/website/src/pages/de/workshop/pattern-effects.mdx b/website/src/pages/de/workshop/pattern-effects.mdx index 4be0a77a..f25afdd7 100644 --- a/website/src/pages/de/workshop/pattern-effects.mdx +++ b/website/src/pages/de/workshop/pattern-effects.mdx @@ -1,5 +1,5 @@ --- -title: Pattern Effects +title: Pattern Effekte layout: ../../../layouts/MainLayout.astro --- @@ -7,21 +7,21 @@ import { MiniRepl } from '@src/docs/MiniRepl'; import Box from '@components/Box.astro'; import QA from '@components/QA'; -# Pattern Effects +# Pattern Effekte -Up until now, most of the functions we've seen are what other music programs are typically capable of: sequencing sounds, playing notes, controlling effects. +Bis jetzt sind die meisten Funktionen die wir kennengelernt haben ähnlich wie Funktionen in anderen Musik Programmen: Sequencing von Sounds, Noten und Effekten. -In this chapter, we are going to look at functions that are more unique to tidal. +In diesem Kapitel beschäftigen wir uns mit Funktionen die weniger herkömmlich oder auch enzigartig sind. -**reverse patterns with rev** +**rev = rückwärts abspielen** -**play pattern left and modify it right with jux** +**jux = einen stereo kanal modifizieren** -This is the same as: +So würde man das ohne jux schreiben: -Let's visualize what happens here: +Lass uns visualisieren was hier passiert: -Try commenting out one of the two by adding `//` before a line +Schreibe `//` vor eine der beiden Zeilen im `stack`! -**multiple tempos** +**mehrere tempos** -This is like doing +Das hat den gleichen Effekt wie: -Try commenting out one or more by adding `//` before a line +Schreibe wieder `//` vor eine oder mehrere Zeilen im `stack`. -**add** +**add = addieren** -If you add a number to a note, the note will be treated as if it was a number +Addiert man eine Zahl zu einer Note, verhält sich diese wie eine Zahl. + +z.B. c4 = 60, also ist c4 + 2 = 62 -We can add as often as we like: +Man kann auch mehrmals addieren: -**add with scale** +**add + scale** -**time to stack** +**Alles zusammen** -this is like writing: +das ist wie: -Try patterning the `ply` function, for example using `"<1 2 1 3>"` +Probier `ply` mit einem pattern zu automatisieren, z.b. `"<1 2 1 3>"` @@ -159,11 +161,11 @@ Try patterning the `ply` function, for example using `"<1 2 1 3>"` -In the notation `x=>x.`, the `x` is the shifted pattern, which where modifying. +In der notation `x=>x.`, das `x` ist das pattern das wir bearbeiten. -The above is like writing: +Das Beispiel oben sieht ohne `off` so aus: -off is also useful for sounds: +`off` ist auch nützlich für sounds: x.speed(1.5).gain(.25))`} /> -| name | description | example | -| ---- | ------------------------------ | ---------------------------------------------------------------------------------------------- | -| rev | reverse | | -| jux | split left/right, modify right | | -| add | add numbers / notes | ")).scale("C:minor")`} /> | -| ply | speed up each event n times | ")`} /> | -| off | copy, shift time & modify | x.speed(2))`} /> | +| name | description | example | +| ---- | --------------------------------- | ---------------------------------------------------------------------------------------------- | +| rev | rückwärts | | +| jux | ein stereo-kanal modifizieren | | +| add | addiert zahlen oder noten | ")).scale("C:minor")`} /> | +| ply | multipliziert jedes element x mal | ")`} /> | +| off | verzögert eine modifizierte kopie | x.speed(2))`} /> | diff --git a/website/src/pages/de/workshop/recap.mdx b/website/src/pages/de/workshop/recap.mdx index 85f3e015..8341c937 100644 --- a/website/src/pages/de/workshop/recap.mdx +++ b/website/src/pages/de/workshop/recap.mdx @@ -5,43 +5,43 @@ layout: ../../../layouts/MainLayout.astro import { MiniRepl } from '../../../docs/MiniRepl'; -# Workshop Recap +# Workshop Rückblick -This page is just a listing of all functions covered in the workshop! +Diese Seite ist eine Auflistung aller im Workshop enthaltenen Funktionen. ## Mini Notation -| Concept | Syntax | Example | -| ----------------- | -------- | -------------------------------------------------------------------------------- | -| Sequence | space | | -| Sample Number | :x | | -| Rests | ~ | | -| Sub-Sequences | \[\] | | -| Sub-Sub-Sequences | \[\[\]\] | | -| Speed up | \* | | -| Parallel | , | | -| Slow down | \/ | | -| Alternate | \<\> | ")`} /> | -| Elongate | @ | | -| Replicate | ! | | +| Concept | Syntax | Example | +| --------------------- | -------- | -------------------------------------------------------------------------------- | +| Sequence | space | | +| Sample Nummer | :x | | +| Pausen | ~ | | +| Unter-Sequences | \[\] | | +| Unter-Unter-Sequences | \[\[\]\] | | +| Schneller | \* | | +| Slow down | \/ | | +| Parallel | , | | +| Alternieren | \<\> | ")`} /> | +| Verlängern | @ | | +| Wiederholen | ! | | ## Sounds -| Name | Description | Example | -| ----- | --------------------------------- | ---------------------------------------------------------------------------------- | -| sound | plays the sound of the given name | | -| bank | selects the sound bank | | -| n | select sample number | | +| Name | Description | Example | +| ----- | -------------------------- | ---------------------------------------------------------------------------------- | +| sound | spielt den sound mit namen | | +| bank | wählt die soundbank | | +| n | wählt sample mit nummer | | ## Notes -| Name | Description | Example | -| --------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | -| note | set pitch as number or letter | | -| n + scale | set note in scale | | -| stack | play patterns in parallel (read on) | | +| Name | Description | Example | +| --------- | ---------------------------------- | -------------------------------------------------------------------------------------------- | +| note | wählt note per zahl oder buchstabe | | +| n + scale | wählt note n in skala | | +| stack | spielt mehrere patterns parallel | | -## Audio Effects +## Audio Effekte | name | example | | ----- | -------------------------------------------------------------------------------------------------- | @@ -56,16 +56,16 @@ This page is just a listing of all functions covered in the workshop! ## Pattern Effects -| name | description | example | -| ---- | ----------------------------------- | ---------------------------------------------------------------------------------------------- | -| cpm | sets the tempo in cycles per minute | | -| fast | speed up | | -| slow | slow down | | -| rev | reverse | | -| jux | split left/right, modify right | | -| add | add numbers / notes | ")).scale("C:minor")`} /> | -| ply | speed up each event n times | ")`} /> | -| off | copy, shift time & modify | x.speed(2))`} /> | +| name | description | example | +| ---- | --------------------------------- | ---------------------------------------------------------------------------------------------- | +| cpm | tempo in cycles pro minute | | +| fast | schneller | | +| slow | langsamer | | +| rev | rückwärts | | +| jux | ein stereo-kanal modifizieren | | +| add | addiert zahlen oder noten | ")).scale("C:minor")`} /> | +| ply | jedes element schneller machen | ")`} /> | +| off | verzögert eine modifizierte kopie | x.speed(2))`} /> | ## Samples diff --git a/website/src/pages/workshop/first-effects.mdx b/website/src/pages/workshop/first-effects.mdx index 1428e2bd..ab65ffe3 100644 --- a/website/src/pages/workshop/first-effects.mdx +++ b/website/src/pages/workshop/first-effects.mdx @@ -176,6 +176,16 @@ What happens if you use `.delay(".8:.06:.8")` ? Can you guess what the third num + + +`delay("a:b:c")`: + +- a: delay volume +- b: delay time +- c: feedback (smaller number = quicker fade) + + + **room aka reverb** ")`? -By the way, inside Mini-Notation, `fast` is `*` and slow is `/`. +By the way, inside Mini-Notation, `fast` is `*` and `slow` is `/`. ")`} /> diff --git a/website/src/pages/workshop/first-sounds.mdx b/website/src/pages/workshop/first-sounds.mdx index 61894333..8c421dd9 100644 --- a/website/src/pages/workshop/first-sounds.mdx +++ b/website/src/pages/workshop/first-sounds.mdx @@ -13,7 +13,7 @@ import QA from '@components/QA'; Let's start by making some noise: - + @@ -61,7 +61,7 @@ These letter combinations stand for different parts of a drum set: - `bd` = **b**ass **d**rum - `sd` = **s**nare **d**rum -- `sn` = **sn**are +- `sd` = **sd**are - `rim` = **rim**shot - `hh` = **h**i**h**at - `oh` = **o**pen **h**ihat @@ -103,13 +103,13 @@ Try adding more sounds to the sequence! **The longer the sequence, the faster it runs** - + The content of a sequence will be squished into what's called a cycle. **One way to change the tempo is using `cpm`** - + @@ -127,7 +127,7 @@ We will look at other ways to change the tempo later! **Sub-Sequences with [brackets]** - + @@ -139,15 +139,15 @@ Similar to the whole sequence, the content of a sub-sequence will be squished to **Multiplication: Speed things up** - + **Multiplication: Speed up sequences** - + **Multiplication: Speeeeeeeeed things up** - + @@ -157,7 +157,7 @@ Pitch = really fast rhythm **Sub-Sub-Sequences with [[brackets]]** - + @@ -214,12 +214,12 @@ This is what we've leared so far: | Concept | Syntax | Example | | ----------------- | -------- | -------------------------------------------------------------------------------- | -| Sequence | space | | +| Sequence | space | | | Sample Number | :x | | | Rests | ~ | | | Sub-Sequences | \[\] | | -| Sub-Sub-Sequences | \[\[\]\] | | -| Speed up | \* | | +| Sub-Sub-Sequences | \[\[\]\] | | +| Speed up | \* | | | Parallel | , | | The Mini-Notation is usually used inside some function. These are the functions we've seen so far: diff --git a/website/src/pages/workshop/intro.mdx b/website/src/pages/workshop/intro.mdx index 9e18bbfe..0de7779e 100644 --- a/website/src/pages/workshop/intro.mdx +++ b/website/src/pages/workshop/intro.mdx @@ -3,20 +3,59 @@ title: Introduction layout: ../../layouts/MainLayout.astro --- -# Introduction +import { MiniRepl } from '../../docs/MiniRepl'; -## goals +# Welcome -- be beginner friendly -- teach a representative subset of strudel / tidal -- introduce one new thing at a time -- give practical / musical examples -- encourage self-experimentation -- hands on learning > walls of text -- maintain flow state -- no setup required +Welcome to the Strudel documentation pages! +You've come to the right place if you want to learn how to make music with code. -## inspired by +## What is Strudel? -- https://github.com/tidalcycles/tidal-workshop/blob/master/workshop.tidal -- https://learningmusic.ableton.com +With Strudel, you can expressively write dynamic music pieces.
+It is an official port of the [Tidal Cycles](https://tidalcycles.org/) pattern language to JavaScript. +You don't need to know JavaScript or Tidal Cycles to make music with Strudel. +This interactive tutorial will guide you through the basics of Strudel.
+The best place to actually make music with Strudel is the [Strudel REPL](https://strudel.tidalcycles.org/) + +## What can you do with Strudel? + +- live code music: make music with code in real time +- algorithmic composition: compose music using tidal's unique approach to pattern manipulation +- teaching: focussing on a low barrier of entry, Strudel is a good fit for teaching music and code at the same time. +- integrate into your existing music setup: either via MIDI or OSC, you can use Strudel as a really flexible sequencer + +## Example + +Here is an example of how strudel can sound: + +],hh*8") + .speed(perlin.range(.8,.9)), // random sample speed variation + // bassline + "" + .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps + .add(perlin.range(0,.5)) // random pitch variation + .superimpose(add(.05)) // add second, slightly detuned voice + .note() // wrap in "note" + .decay(.15).sustain(0) // make each note of equal length + .s('sawtooth') // waveform + .gain(.4) // turn down + .cutoff(sine.slow(7).range(300,5000)), // automate cutoff + // chords + ">".voicings('lefthand') + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .note() // wrap in "note" + .s('sawtooth') // waveform + .gain(.16) // turn down + .cutoff(500) // fixed cutoff + .attack(1) // slowly fade in +) +.slow(3/2)`} +/> + +To hear more, go to the [Strudel REPL](https://strudel.tidalcycles.org/) and press shuffle to hear a random example pattern. diff --git a/website/src/pages/workshop/recap.mdx b/website/src/pages/workshop/recap.mdx index bc9c4648..6ebbd3f9 100644 --- a/website/src/pages/workshop/recap.mdx +++ b/website/src/pages/workshop/recap.mdx @@ -35,11 +35,11 @@ This page is just a listing of all functions covered in the workshop! ## Notes -| Name | Description | Example | -| --------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | -| note | set pitch as number or letter | | -| n + scale | set note in scale | | -| stack | play patterns in parallel (read on) | | +| Name | Description | Example | +| --------- | ----------------------------- | -------------------------------------------------------------------------------------------- | +| note | set pitch as number or letter | | +| n + scale | set note in scale | | +| stack | play patterns in parallel | | ## Audio Effects diff --git a/website/src/repl/prebake.mjs b/website/src/repl/prebake.mjs index f8a4e477..a534ba7c 100644 --- a/website/src/repl/prebake.mjs +++ b/website/src/repl/prebake.mjs @@ -23,7 +23,7 @@ export async function prebake() { }), samples(`./EmuSP12.json`, `./EmuSP12/`, { prebake: true, tag: 'drum-machines' }), ]); - await samples('github:tidalcycles/Dirt-Samples/master'); + await samples('github:tidalcycles/Dirt-Samples/master'); // TODO: remove } const maxPan = noteToMidi('C8');