mirror of
https://github.com/eliasstepanik/strudel.git
synced 2026-01-11 21:58:37 +00:00
364 lines
10 KiB
Plaintext
364 lines
10 KiB
Plaintext
---
|
|
title: Erste Sounds
|
|
layout: ../../../layouts/MainLayout.astro
|
|
---
|
|
|
|
import { MiniRepl } from '@src/docs/MiniRepl';
|
|
import Box from '@components/Box.astro';
|
|
import QA from '@components/QA';
|
|
|
|
# Erste Sounds
|
|
|
|
Dies ist das erste Kapitel im Strudel Workshop, schön dich an Bord zu haben!
|
|
|
|
## Textfelder
|
|
|
|
Der Workshop ist voller interaktiver Textfelder. Lass uns lernen wie sie funktionieren. Hier ist eins:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("casio")`} />
|
|
|
|
<Box>
|
|
|
|
1. ⬆️ Klicke in das obige Textfeld ⬆️
|
|
2. Drücke `Strg`+`Enter` zum Abspielen
|
|
3. Ändere `casio` in `metal`
|
|
4. Drücke `Strg`+`Enter` zum Aktualisieren
|
|
5. Drücke `Strg`+`Punkt` zum Stoppen
|
|
|
|
Mac: `Strg` = `control` oder auch `option`
|
|
|
|
</Box>
|
|
|
|
Glückwunsch, du kannst jetzt live coden!
|
|
|
|
## Sounds
|
|
|
|
Gerade haben wir schon den ersten sound mit `sound` abgespielt:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("casio")`} />
|
|
|
|
<Box>
|
|
|
|
`casio` ist einer von vielen Standard Sounds.
|
|
|
|
Probier ein paar andere Sounds aus:
|
|
|
|
```
|
|
insect wind jazz metal east crow casio space numbers
|
|
```
|
|
|
|
Es kann sein, dass du kurz nichts hörst während ein neuer Sound lädt.
|
|
|
|
</Box>
|
|
|
|
**Sample Nummer ändern mit :**
|
|
|
|
Ein Sound kann mehrere Samples (Audio Dateien) enthalten.
|
|
|
|
Du kannst ein anderes Sample wählen, indem du `:` und eine Zahl an den Sound-Namen anhängst:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("casio:1")`} hideHeader />
|
|
|
|
<Box>
|
|
|
|
Probiere verschiedene Sound / Zahlen Kombinationen.
|
|
|
|
Ohne Zahl ist gleichbedeutend mit `:0`
|
|
|
|
</Box>
|
|
|
|
Jetzt weißt du wie man Sounds abspielt und ihre Sample Nummer einstellt.
|
|
Vorerst bleiben wir bei den voreingestellten Sounds, später erfahren wir noch wie man eigene benutzt.
|
|
|
|
## Drum Sounds
|
|
|
|
Strudel kommt von Haus aus mit einer breiten Auswahl an Drum Sounds:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh sd oh")`} hideHeader />
|
|
|
|
<Box>
|
|
|
|
Diese 2-Buchstaben Kombinationen stehen für verschiedene Teile eines Schlagzeugs:
|
|
|
|
- `bd` = **b**ass **d**rum - Basstrommel
|
|
- `sd` = **s**nare **d**rum - Schnarrtrommel
|
|
- `rim` = **rim**shot - Rahmenschlag
|
|
- `hh` = **h**i**h**at - Hallo Hut
|
|
- `oh` = **o**pen **h**ihat - Offener Hallo Hut
|
|
|
|
Probier verschiedene Sounds aus!
|
|
|
|
</Box>
|
|
|
|
Wir können den Charakter des Drum Sounds verändern, indem wir mit `bank` die Drum Machine auswählen:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh sd oh").bank("RolandTR909")`} hideHeader />
|
|
|
|
In diesem Beispiel ist `RolandTR909` der Name der Drum Machine, die eine prägende Rolle für House und Techno Musik spielte.
|
|
|
|
<Box>
|
|
|
|
Ändere `RolandTR909` in
|
|
|
|
- `AkaiLinn`
|
|
- `RhythmAce`
|
|
- `RolandTR808`
|
|
- `RolandTR707`
|
|
- `ViscoSpaceDrum`
|
|
|
|
Es gibt noch viel mehr, aber das sollte fürs Erste reichen..
|
|
|
|
🦥 Tipp für faule: Mach Doppel-Klick auf einen Namen um ihn zu markieren.
|
|
Dann kannst du ihn mit `Strg`+`C` kopieren und mit `Strg`+`V` einfügen.
|
|
|
|
</Box>
|
|
|
|
## Sequenzen / Sequences
|
|
|
|
Im letzten Beispiel haben wir schon gesehen dass man mehrere Sounds hintereinander abspielen kann wenn man sie durch Leerzeichen trennt:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh sd hh")`} punchcard />
|
|
|
|
Beachte wie der aktuell gespielte Sound im Code markiert und auch darunter visualisiert wird.
|
|
|
|
<Box>
|
|
|
|
Versuch noch mehr Sounds hinzuzfügen!
|
|
|
|
</Box>
|
|
|
|
**Je länger die Sequence, desto schneller**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd bd hh bd rim bd hh bd")`} punchcard />
|
|
|
|
Der Inhalt einer Sequence wird in einen sogenannten Cycle (=Zyklus) zusammengequetscht.
|
|
|
|
**Tempo ändern mit `cpm`**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd bd hh bd rim bd hh bd").cpm(40)`} punchcard />
|
|
|
|
<Box>
|
|
|
|
cpm = **c**ycles per **m**inute = Cycles pro Minute
|
|
|
|
Das Tempo ist standardmäßig auf 60cpm eingestellt, also 1 Cycle pro Sekunde.
|
|
|
|
`cpm` ist angelehnt an `bpm` (=beats per minute).
|
|
|
|
</Box>
|
|
|
|
Wir werden später noch mehr Möglichkeiten kennen lernen das Tempo zu verändern.
|
|
|
|
**Pausen mit '~'**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh ~ rim")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Tilde tippen:
|
|
|
|
- Windows / Linux: `Alt Gr` + `~`
|
|
- Mac: `option` + `N`
|
|
|
|
</Box>
|
|
|
|
**Unter-Sequenzen mit [Klammern]**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd [hh hh] rim [hh hh]")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Der Inhalt der Klammer wird ebenfalls zusammengequetscht!
|
|
|
|
Füge noch mehr Sounds in die Klammern ein!
|
|
|
|
</Box>
|
|
|
|
Genau wie bei der ganzen Sequence wird eine Unter-Sequence schneller je mehr drin ist.
|
|
|
|
**Multiplikation: Dinge schneller machen**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh*2 sd hh*3")`} punchcard />
|
|
|
|
**Multiplikation: Vieeeeeeel schneller**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd hh*16 sd hh*8")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Tonhöhe = sehr schneller Rhythmus
|
|
|
|
</Box>
|
|
|
|
**Multiplikation: Ganze Unter-Sequences schneller machen**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd [sd hh]*2")`} punchcard />
|
|
|
|
Bolero:
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`sound("sd sd*3 sd sd*3 sd sd sd sd*3 sd sd*3 sd*3 sd*3")
|
|
.cpm(10)`}
|
|
punchcard
|
|
/>
|
|
|
|
**Unter-Unter-Sequenzen mit [[Klammern]]**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd [[rim rim] hh]")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Du kannst so tief verschachteln wie du willst!
|
|
|
|
</Box>
|
|
|
|
**Parallele Sequenzen mit Komma**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("hh hh hh, bd casio")`} punchcard />
|
|
|
|
Du kannst so viele Kommas benutzen wie du möchtest:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("hh hh hh, bd bd, ~ casio")`} punchcard />
|
|
|
|
Kommas können auch in Unter-Sequenzen verwendet werden:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("hh hh hh, bd [bd,casio]")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Ist dir aufgefallen dass sich die letzten beiden Beispiele gleich anhören?
|
|
|
|
Es kommt öfter vor, dass man die gleiche Idee auf verschiedene Arten ausdrücken kann.
|
|
|
|
</Box>
|
|
|
|
**Mehrere Zeilen schreiben mit \` (backtick)**
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`sound(\`bd*2, ~ cp,
|
|
~ ~ ~ oh, hh*4,
|
|
[~ casio]*2\`)`}
|
|
punchcard
|
|
/>
|
|
|
|
<Box>
|
|
|
|
Ob man " oder \` benutzt ist nur eine Frage der Übersichtlichkeit.
|
|
|
|
</Box>
|
|
|
|
**Sample Nummer separat auswählen**
|
|
|
|
Benutzt man nur einen Sound mit unterschiedlichen Sample Nummer sieht das so aus:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("jazz:0 jazz:1 [jazz:4 jazz:2] jazz:3*2")`} punchcard />
|
|
|
|
Das gleiche kann man auch so schreiben:
|
|
|
|
<MiniRepl hideHeader client:visible tune={`n("0 1 [4 2] 3*2").sound("jazz")`} punchcard />
|
|
|
|
## Rückblick
|
|
|
|
Wir haben jetzt die Grundlagen der sogenannten Mini-Notation gelernt, der Rhythmus-Sprache von Tidal.
|
|
|
|
Das haben wir bisher gelernt:
|
|
|
|
| Concept | Syntax | Example |
|
|
| --------------------- | ----------- | -------------------------------------------------------------------------------- |
|
|
| Sequenz | Leerzeichen | <MiniRepl hideHeader client:visible tune={`sound("bd bd sd hh")`} /> |
|
|
| Sound Nummer | :x | <MiniRepl hideHeader client:visible tune={`sound("hh:0 hh:1 hh:2 hh:3")`} /> |
|
|
| Pausen | ~ | <MiniRepl hideHeader client:visible tune={`sound("metal ~ jazz jazz:1")`} /> |
|
|
| Unter-Sequenzen | \[\] | <MiniRepl hideHeader client:visible tune={`sound("bd wind [metal jazz] hh")`} /> |
|
|
| Unter-Unter-Sequenzen | \[\[\]\] | <MiniRepl hideHeader client:visible tune={`sound("bd [metal [jazz sd]]")`} /> |
|
|
| Schneller | \* | <MiniRepl hideHeader client:visible tune={`sound("bd sd*2 cp*3")`} /> |
|
|
| Parallel | , | <MiniRepl hideHeader client:visible tune={`sound("bd*2, hh*2 [hh oh]")`} /> |
|
|
|
|
Die mit Apostrophen umgebene Mini-Notation benutzt man normalerweise in einer sogenannten Funktion.
|
|
Die folgenden Funktionen haben wir bereits gesehen:
|
|
|
|
| Name | Description | Example |
|
|
| ----- | -------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
| sound | Spielt den Sound mit dem Namen | <MiniRepl hideHeader client:visible tune={`sound("bd sd")`} /> |
|
|
| bank | Wählt die Soundbank / Drum Machine | <MiniRepl hideHeader client:visible tune={`sound("bd sd").bank("RolandTR909")`} /> |
|
|
| cpm | Tempo in **C**ycles **p**ro **M**inute | <MiniRepl hideHeader client:visible tune={`sound("bd sd").cpm(90)`} /> |
|
|
| n | Sample Nummer | <MiniRepl hideHeader client:visible tune={`n("0 1 4 2").sound("jazz")`} /> |
|
|
|
|
## Beispiele
|
|
|
|
**Einfacher Rock Beat**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd sd, hh*4").bank("RolandTR505").cpm(100/2)`} punchcard />
|
|
|
|
**Klassischer House**
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd*2, ~ cp, [~ hh]*2").bank("RolandTR909")`} punchcard />
|
|
|
|
<Box>
|
|
|
|
Ist die aufgefallen dass die letzten 2 Patterns extrem ähnlich sind?
|
|
Bestimmte Drum Patterns werden oft genreübergreifend wiederverwendet.
|
|
|
|
</Box>
|
|
|
|
We Will Rock you
|
|
|
|
<MiniRepl hideHeader client:visible tune={`sound("bd*2 cp").bank("RolandTR707").cpm(81/2)`} punchcard />
|
|
|
|
**Yellow Magic Orchestra - Firecracker**
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`sound("bd sd, ~ ~ ~ hh ~ hh ~ ~, ~ perc ~ perc:1*2")
|
|
.bank("RolandCompurhythm1000")`}
|
|
punchcard
|
|
/>
|
|
|
|
**Nachahmung eines 16 step sequencers**
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`sound(\`
|
|
[~ ~ oh ~ ] [~ ~ ~ ~ ] [~ ~ ~ ~ ] [~ ~ ~ ~ ],
|
|
[hh hh ~ ~ ] [hh ~ hh ~ ] [hh ~ hh ~ ] [hh ~ hh ~ ],
|
|
[~ ~ ~ ~ ] [cp ~ ~ ~ ] [~ ~ ~ ~ ] [cp ~ ~ ~ ],
|
|
[bd ~ ~ ~ ] [~ ~ ~ bd] [~ ~ bd ~ ] [~ ~ ~ bd]
|
|
\`).cpm(90/4)`}
|
|
punchcard
|
|
/>
|
|
|
|
**Noch eins**
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`sound(\`
|
|
[~ ~ ~ ~ ] [~ ~ ~ ~ ] [~ ~ ~ ~ ] [~ ~ oh:1 ~ ],
|
|
[hh hh hh hh] [hh hh hh hh] [hh hh hh hh] [hh hh ~ ~ ],
|
|
[~ ~ ~ ~ ] [cp ~ ~ ~ ] [~ ~ ~ ~ ] [~ cp ~ ~ ],
|
|
[bd bd ~ ~ ] [~ ~ bd ~ ] [bd bd ~ bd ] [~ ~ ~ ~ ]
|
|
\`).bank("RolandTR808").cpm(88/4)`}
|
|
punchcard
|
|
/>
|
|
|
|
**Nicht so typische Drums**
|
|
|
|
<MiniRepl
|
|
hideHeader
|
|
client:visible
|
|
tune={`s(\`jazz*2,
|
|
insect [crow metal] ~ ~,
|
|
~ space:4 ~ space:1,
|
|
~ wind\`)
|
|
.cpm(100/2)`}
|
|
punchcard
|
|
/>
|
|
|
|
Jetzt haben wir eine grundlegende Ahnung davon wie man mit Strudel Beats baut!
|
|
Im nächsten Kapitel werden wir ein paar [Töne spielen](/de/workshop/first-notes).
|