---
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 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 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 client:visible tune={`sound("casio:1")`} />

<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 client:visible tune={`sound("bd hh sd oh")`} />

<Box>

Diese Kombinationen von Buchstaben stehen für verschiedene Teile eines Schlagzeugs:

<img src="/img/drumset.png" />

<a class="text-right text-xs" href="https://de.wikipedia.org/wiki/Schlagzeug#/media/Datei:Drum_set.svg" target="_blank">
  original von Pbroks13
</a>

- `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
- `lt` = **l**ow tom
- `mt` = **m**iddle tom
- `ht` = **h**igh tom
- `rd` = **r**i**d**e cymbal
- `cr` = **cr**ash cymbal

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 client:visible tune={`sound("bd hh sd oh").bank("RolandTR909")`} />

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 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 client:visible tune={`sound("bd bd hh bd rim bd hh bd")`} punchcard />

Der Inhalt einer Sequence wird in einen sogenannten Cycle (=Zyklus) zusammengequetscht. Ein Cycle ist standardmäßig 2 Sekunden lang.

**Eins pro Cycle mit `< .. >`**

Hier ist die gleiche Sequence, aber dieses mal umgeben von `< .. >` (angle brackets):

<MiniRepl client:visible tune={`sound("<bd bd hh bd rim bd hh bd>")`} punchcard />

Jetzt spielt nur ein Sound pro Cycle. Mit diesen Klammern bleibt das Tempo immer gleich, ganz egal wieviele Elemente enhalten sind!

Das ist jetzt aber etwas langsam, machen wir es schneller mit `*`:

<MiniRepl client:visible tune={`sound("<bd bd hh bd rim bd hh bd>*8")`} punchcard />

Die `*8` macht die ganze Sequenz 8 mal so schnell.

<Box>

Warte mal, ist das jetzt nicht das gleiche Ergebnis wie ohne `< ... >*8`? Wofür ist das dann gut?

Korrekt, der echte Vorteil dieser Schreibweise zeigt sich wenn du Elemente entfernst oder hinzufügst. Versuch es mal!

Ändere auch mal die Zahl am Ende um das Tempo zu verändern.

</Box>

**Tempo ändern mit `setcpm`**

<MiniRepl
  client:visible
  tune={`setcpm(90/4)
sound("<bd hh rim hh>*8")`}
  punchcard
/>

<Box>

cpm = **c**ycles per **m**inute = Cycles pro Minute

Das Tempo is standardmäßig is 30 Cycles pro Minute = 120/4 = 1 Cycle alle 2 Sekunden

In taditioneller Musik-Terminologie könnte man sagen, das Pattern oben besteht aus 8tel Noten auf 90bpm im 4/4 Takt.

Kein Sorge wenn dir diese Begriffe nichts sagen, das ist nicht notwendig um mit Strudel Musik zu machen.

</Box>

Wir werden später noch mehr Möglichkeiten kennen lernen das Tempo zu verändern.

**Pausen mit '-' oder '~'**

<MiniRepl client:visible tune={`sound("bd hh - rim")`} punchcard />

<Box>

Du siehst wahrscheinlich auch Patterns von anderen Leuten mit '~' als Pausensymbol.
Besonders für deutsche Tastaturen ist `-` eine Alternative zum schwer tippbaren `~`.

</Box>

**Unter-Sequenzen mit [Klammern]**

<MiniRepl 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 client:visible tune={`sound("bd hh*2 sd hh*3")`} punchcard />

**Multiplikation: Vieeeeeeel schneller**

<MiniRepl 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 client:visible tune={`sound("bd [sd hh]*2")`} punchcard />

Bolero:

<MiniRepl
  client:visible
  tune={`
setcpm(10)
sound("sd sd*3 sd sd*3 sd sd sd sd*3 sd sd*3 sd*3 sd*3")`}
  punchcard
/>

**Unter-Unter-Sequenzen mit [[Klammern]]**

<MiniRepl client:visible tune={`sound("bd [[rim rim] hh]")`} punchcard />

<Box>

Du kannst so tief verschachteln wie du willst!

</Box>

**Parallele Sequenzen mit Komma**

<MiniRepl client:visible tune={`sound("hh hh hh, bd casio")`} punchcard />

Du kannst so viele Kommas benutzen wie du möchtest:

<MiniRepl client:visible tune={`sound("hh hh hh, bd bd, - casio")`} punchcard />

Kommas können auch in Unter-Sequenzen verwendet werden:

<MiniRepl 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
  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 client:visible tune={`sound("jazz:0 jazz:1 [jazz:4 jazz:2] jazz:3*2")`} punchcard />

Das gleiche kann man auch so schreiben:

<MiniRepl 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 client:visible tune={`sound("bd bd sd hh")`} />             |
| Sound Nummer          | :x          | <MiniRepl client:visible tune={`sound("hh:0 hh:1 hh:2 hh:3")`} />     |
| Pausen                | -           | <MiniRepl client:visible tune={`sound("metal - jazz jazz:1")`} />     |
| Unter-Sequenzen       | \[\]        | <MiniRepl client:visible tune={`sound("bd wind [metal jazz] hh")`} /> |
| Unter-Unter-Sequenzen | \[\[\]\]    | <MiniRepl client:visible tune={`sound("bd [metal [jazz sd]]")`} />    |
| Schneller             | \*          | <MiniRepl client:visible tune={`sound("bd sd*2 cp*3")`} />            |
| Parallel              | ,           | <MiniRepl 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 client:visible tune={`sound("bd sd")`} />                     |
| bank   | Wählt die Soundbank / Drum Machine     | <MiniRepl client:visible tune={`sound("bd sd").bank("RolandTR909")`} /> |
| setcpm | Tempo in **C**ycles **p**ro **M**inute | <MiniRepl client:visible tune={`setcpm(90); sound("bd sd")`} />         |
| n      | Sample Nummer                          | <MiniRepl client:visible tune={`n("0 1 4 2").sound("jazz")`} />         |

## Beispiele

**Einfacher Rock Beat**

<MiniRepl
  client:visible
  tune={`setcpm(100/2)
sound("bd sd, hh*4").bank("RolandTR505")`}
  punchcard
/>

**Klassischer House**

<MiniRepl 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
  client:visible
  tune={`setcpm(81/2)
sound("bd*2 cp").bank("RolandTR707")`}
  punchcard
/>

**Yellow Magic Orchestra - Firecracker**

<MiniRepl
  client:visible
  tune={`sound("bd sd, - - - hh - hh - -, - perc - perc:1*2")
.bank("RolandCompurhythm1000")`}
  punchcard
/>

**Nachahmung eines 16 step sequencers**

<MiniRepl
  client:visible
  tune={`setcpm(90/4)
sound(\`
[-  -  oh - ] [-  -  -  - ] [-  -  -  - ] [-  -  -  - ],
[hh hh -  - ] [hh -  hh - ] [hh -  hh - ] [hh -  hh - ],
[-  -  -  - ] [cp -  -  - ] [-  -  -  - ] [cp -  -  - ],
[bd -  -  - ] [-  -  -  bd] [-  -  bd - ] [-  -  -  bd]
\`)`}
  punchcard
/>

**Noch eins**

<MiniRepl
  client:visible
  tune={`setcpm(88/4)
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")`}
  punchcard
/>

**Nicht so typische Drums**

<MiniRepl
  client:visible
  tune={`setcpm(100/2)
s(\`jazz*2, 
insect [crow metal] - -, 
- space:4 - space:1,
- wind\`)`}
  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).
