---
title: Pattern-Effekte
layout: ../../../layouts/MainLayout.astro
---

import { MiniRepl } from '@src/docs/MiniRepl';
import Box from '@components/Box.astro';
import QA from '@components/QA';

# Pattern-Effekte

Bis jetzt sind die meisten Funktionen, die wir kennengelernt haben, ähnlich wie Funktionen in anderen Musik Programmen: Sequencing von Sounds, Noten und Effekten.

In diesem Kapitel beschäftigen wir uns mit Funktionen die weniger herkömmlich oder auch einzigartig sind.

**rev = rückwärts abspielen**

<MiniRepl client:visible tune={`n("0 1 [4 3] 2").sound("jazz").rev()`} />

**jux = einen stereo kanal modifizieren**

<MiniRepl client:visible tune={`n("0 1 [4 3] 2").sound("jazz").jux(rev)`} />

So würde man das ohne `jux` schreiben:

<MiniRepl
  client:visible
  tune={`stack(
  n("0 1 [4 3] 2").sound("jazz").pan(0),
  n("0 1 [4 3] 2").sound("jazz").pan(1).rev()
)`}
/>

Lass uns visualisieren, was hier passiert:

<MiniRepl
  client:visible
  tune={`stack(
  n("0 1 [4 3] 2").sound("jazz").pan(0).color("cyan"),
  n("0 1 [4 3] 2").sound("jazz").pan(1).color("magenta").rev()
)`}
  punchcard
/>

<Box>

Schreibe `//` vor eine der beiden Zeilen im `stack`!

</Box>

**mehrere tempos**

<MiniRepl client:visible tune={`note("c2, eb3 g3 [bb3 c4]").sound("piano").slow("1,2,3")`} />

Das hat den gleichen Effekt, wie:

<MiniRepl
  client:visible
  tune={`stack(
  note("c2, eb3 g3 [bb3 c4]").s("piano").slow(1).color('cyan'),
  note("c2, eb3 g3 [bb3 c4]").s("piano").slow(2).color('magenta'),
  note("c2, eb3 g3 [bb3 c4]").s("piano").slow(3).color('yellow')
)`}
  punchcard
/>

<Box>

Schreibe wieder `//` vor eine oder mehrere Zeilen im `stack`.

</Box>

**add = addieren**

<MiniRepl
  client:visible
  tune={`note("c2 [eb3,g3]".add("<0 <1 -1>>"))
.color("<cyan <magenta yellow>>").adsr("[.1 0]:.2:[1 0]")
.sound("gm_acoustic_bass").room(.5)`}
  punchcard
/>

<Box>

Addiert man eine Zahl zu einer Note, verhält sich diese wie eine Zahl.

z.B. c4 = 60, also ist c4 + 2 = 62

</Box>

Man kann auch mehrmals addieren:

<MiniRepl
  client:visible
  tune={`note("c2 [eb3,g3]".add("<0 <1 -1>>").add("0,7"))
.color("<cyan <magenta yellow>>").adsr("[.1 0]:.2:[1 0]")
.sound("gm_acoustic_bass").room(.5)`}
  punchcard
/>

**add + scale**

<MiniRepl
  client:visible
  tune={`n("<0 [2 4] <3 5> [~ <4 1>]>*2".add("<0 [0,2,4]>/4"))
.scale("C5:minor").release(.5)
.sound("gm_xylophone").room(.5)`}
  punchcard
/>

**Alles zusammen**

<MiniRepl
  client:visible
  tune={`stack(
  n("<0 [2 4] <3 5> [~ <4 1>]>*2".add("<0 [0,2,4]>/4"))
  .scale("C5:minor")
  .sound("gm_xylophone")
  .room(.4).delay(.125),
  note("c2 [eb3,g3]".add("<0 <1 -1>>"))
  .adsr("[.1 0]:.2:[1 0]")
  .sound("gm_acoustic_bass")
  .room(.5),
  n("0 1 [2 3] 2").sound("jazz").jux(rev).slow(2)
)`}
/>

**ply**

<MiniRepl client:visible tune={`sound("hh, bd rim").bank("RolandTR707").ply(2)`} punchcard />

das ist wie:

<MiniRepl client:visible tune={`sound("hh*2, bd*2 rim*2").bank("RolandTR707")`} punchcard />

<Box>

Probier `ply` mit einem pattern zu automatisieren, z.b. `"<1 2 1 3>"`

</Box>

**off**

<MiniRepl
  client:visible
  tune={`n("<0 [4 <3 2>] <2 3> [~ 1]>"
  .off(1/8, x=>x.add(4))
  //.off(1/4, x=>x.add(7))
).scale("<C5:minor Db5:mixolydian>/4")
.s("triangle").room(.5).dec(.1).delay(.5)`}
  punchcard
/>

<Box>

In der Notation `x=>x.`, ist `x` das Pattern, das wir bearbeiten.

</Box>

`off` ist auch nützlich für Sounds:

<MiniRepl
  client:visible
  tune={`s("bd sd,[~ hh]*2").bank("CasioRZ1")
  .off(1/8, x=>x.speed(1.5).gain(.25))`}
/>

| Name | Beschreibung                      | Beispiel                                                                            |
| ---- | --------------------------------- | ----------------------------------------------------------------------------------- |
| rev  | rückwärts                         | <MiniRepl client:visible tune={`n("0 2 4 6").scale("C:minor").rev()`} />            |
| jux  | einen Stereo-Kanal modifizieren   | <MiniRepl client:visible tune={`n("0 2 4 6").scale("C:minor").jux(rev)`} />         |
| add  | addiert Zahlen oder Noten         | <MiniRepl client:visible tune={`n("0 2 4 6".add("<0 1 2 1>")).scale("C:minor")`} /> |
| ply  | multipliziert jedes Element x mal | <MiniRepl client:visible tune={`s("bd sd").ply("<1 2 3>")`} />                      |
| off  | verzögert eine modifizierte Kopie | <MiniRepl client:visible tune={`s("bd sd, hh*4").off(1/8, x=>x.speed(2))`} />       |
