jevstrudel.git / website / src / pages / de / workshop / first-notes.mdx
first-notes.mdx391 lines · 8.8 KB · raw
1---
2title: Erste Töne
3layout: ../../../layouts/MainLayout.astro
4---
5
6import { MiniRepl } from '@src/docs/MiniRepl';
7import { midi2note } from '@strudel/core/';
8import Box from '@components/Box.astro';
9import QA from '@components/QA';
10
11# Erste Töne
12
13Jetzt schauen wir uns an wie man mit Tönen mit der `note` Funktion spielt.
14
15## Zahlen und Noten
16
17**Töne mit Zahlen**
18
19<MiniRepl
20  client:visible
21  tune={`note("48 52 55 59").sound("piano")`}
22  claviature
23  claviatureLabels={Object.fromEntries(
24    Array(49)
25      .fill()
26      .map((_, i) => [midi2note(i + 36), i + 36]),
27  )}
28/>
29
30<Box>
31
32Probiere verschiedene Zahlen aus!
33
34Versuch auch mal Kommazahlen, z.B. 55.5 (beachte die englische Schreibweise von Kommazahlen mit "." anstatt ",")
35
36</Box>
37
38**Töne mit Buchstaben**
39
40<MiniRepl
41  client:visible
42  tune={`note("c e g b").sound("piano")`}
43  claviature
44  claviatureLabels={Object.fromEntries(['c3', 'd3', 'e3', 'f3', 'g3', 'a3', 'b3'].map((n) => [n, n.split('')[0]]))}
45/>
46
47<Box>
48
49Versuch verschiedene Buchstaben aus (a - g).
50
51Findest du Melodien die auch gleichzeitig ein Wort sind? Tipp: ☕ 🙈 🧚
52
53</Box>
54
55**Vorzeichen**
56
57<MiniRepl
58  client:visible
59  tune={`note("db eb gb ab bb").sound("piano")`}
60  claviature
61  claviatureLabels={Object.fromEntries(
62    ['db3', 'eb3', 'gb3', 'ab3', 'bb3'].map((n) => [n, n.split('').slice(0, 2).join('')]),
63  )}
64/>
65
66<MiniRepl
67  client:visible
68  tune={`note("c# d# f# g# a#").sound("piano")`}
69  claviature
70  claviatureLabels={Object.fromEntries(
71    ['c#3', 'd#3', 'f#3', 'g#3', 'a#3'].map((n) => [n, n.split('').slice(0, 2).join('')]),
72  )}
73/>
74
75**Andere Oktaven**
76
77<MiniRepl
78  client:visible
79  tune={`note("c2 e3 g4 b5").sound("piano")`}
80  claviature
81  claviatureLabels={Object.fromEntries(['c1', 'c2', 'c3', 'c4', 'c5'].map((n) => [n, n]))}
82  claviatureLabels={Object.fromEntries(
83    Array(49)
84      .fill()
85      .map((_, i) => [midi2note(i + 36), midi2note(i + 36)]),
86  )}
87/>
88
89<Box>
90
91Probiere verschiedene Oktaven aus (1-8)
92
93</Box>
94
95Normalerweise kommen Leute die keine Noten besser mit Zahlen anstatt mit Buchstaben zurecht.
96Daher benutzen die folgenden Beispiele meistens Zahlen.
97Später sehen wir auch noch ein paar Tricks die es uns erleichtern Töne zu spielen die zueinander passen.
98
99## Den Sound verändern
100
101Genau wie bei geräuschhaften Sounds können wir den Klang unserer Töne mit `sound` verändern:
102
103<MiniRepl client:visible tune={`note("36 43, 52 59 62 64").sound("piano")`} />
104
105<Box>
106
107Probier ein paar sounds aus:
108
109- gm_electric_guitar_muted - E-Gitarre
110- gm_acoustic_bass - Kontrabass
111- gm_voice_oohs - Chords
112- gm_blown_bottle - Flasche
113- sawtooth - Sägezahn-Welle
114- square - Rechteck-Welle
115- triangle - Dreieck-Welle
116- Was ist mit bd, sd oder hh?
117- Entferne `.sound('...')` komplett
118
119</Box>
120
121**Zwischen Sounds hin und her wechseln**
122
123<MiniRepl
124  client:visible
125  tune={`note("48 67 63 [62, 58]")
126.sound("piano gm_electric_guitar_muted")`}
127/>
128
129**Gleichzeitige Sounds**
130
131<MiniRepl
132  client:visible
133  tune={`note("48 67 63 [62, 58]")
134.sound("piano, gm_electric_guitar_muted")`}
135/>
136
137<Box>
138
139Die patterns in `note` und `sound` werden kombiniert!
140
141Wir schauen uns später noch mehr Möglichkeiten an wie man patterns kombiniert.
142
143</Box>
144
145## Längere Sequenzen
146
147**Sequenzen verlangsamen mit `/`**
148
149<MiniRepl client:visible tune={`note("[36 34 41 39]/4").sound("gm_acoustic_bass")`} punchcard />
150
151<Box>
152
153Das `/4` spielt die Sequenz 4 mal so langsam, also insgesamt 4 cycles = 8s.
154
155Jede Note ist nun also 2s lang.
156
157Schreib noch mehr Töne in die Klammern und achte darauf dass es schneller wird.
158
159</Box>
160
161Wenn eine Sequenz unabhängig von ihrem Inhalt immer gleich schnell bleiben soll, gibt es noch eine andere Art Klammern:
162
163**Eins pro Cycle per \< \>**
164
165Im letzten Kapitel haben wir schon gelernt dass `< ... >` (angle brackets) nur ein Element pro Cycle spielt.
166Das ist für Melodien auch sehr nützlich:
167
168<MiniRepl client:visible tune={`note("<36 34 41 39>").sound("gm_acoustic_bass")`} punchcard />
169
170<Box>
171
172Füg noch mehr Töne hinzu und achte darauf wie das Tempo gleich bleibt!
173
174Tatsächlich sind diese Klammern nur eine Abkürzung:
175
176`<a b c>` = `[a b c]/3`
177
178`<a b c d>` = `[a b c d]/4`
179
180usw..
181
182</Box>
183
184**Eine Sequenz pro Cycle**
185
186<MiniRepl
187  client:visible
188  tune={`note("<[36 48] [34 46] [41 53] [39 51]>")
189.sound("gm_acoustic_bass")`}
190  punchcard
191/>
192
193oder auch...
194
195<MiniRepl
196  client:visible
197  tune={`note("<[36 48]*4 [34 46]*4 [41 53]*4 [39 51]*4>/2")
198.sound("gm_acoustic_bass")`}
199  punchcard
200/>
201
202**Alternativen**
203
204Ähnlich wie Unter-Sequenzen, kann auch `<...>` innerhalb einer Sequenz verwendet werden:
205
206<MiniRepl
207  client:visible
208  tune={`note("60 <63 62 65 63>")
209.sound("gm_xylophone")`}
210  punchcard
211/>
212
213Das ist auch praktisch für atonale Sounds:
214
215<MiniRepl
216  client:visible
217  tune={`sound("bd*2, ~ <sd cp>, [~ hh]*2")
218.bank("RolandTR909")`}
219  punchcard
220/>
221
222## Skalen
223
224Es kann mühsam sein die richtigen Noten zu finden wenn man alle zur Verfügung hat.
225Mit Skalen ist das einfacher:
226
227<MiniRepl
228  client:visible
229  tune={`n("0 2 4 <[6,8] [7,9]>")
230.scale("C:minor").sound("piano")`}
231  punchcard
232/>
233
234<Box>
235
236Probier verschiedene Zahlen aus. Jede klingt gut!
237
238Probier verschiedene Skalen:
239
240- C:major
241- A2:minor
242- D:dorian
243- G:mixolydian
244- A2:minor:pentatonic
245- F:major:pentatonic
246
247</Box>
248
249**Automatisierte Skalen**
250
251Wie alle Funktionen können auch Skalen mit einem Pattern automatisiert werden:
252
253<MiniRepl
254  client:visible
255  tune={`n("<0 -3>, 2 4 <[6,8] [7,9]>")
256.scale("<C:major D:mixolydian>/4")
257.sound("piano")`}
258  punchcard
259/>
260
261<Box>
262
263Wenn du keine Ahnung hast was die Skalen bedeuten, keine Sorge.
264Es sind einfach nur Namen für verschiedene Gruppen von Tönen die gut zusammenpassen.
265
266Nimm dir Zeit um herauszufinden welche Skalen du magst.
267
268</Box>
269
270## Wiederholen und Verlängern
271
272**Verlängern mit @**
273
274<MiniRepl client:visible tune={`note("c@3 eb").sound("gm_acoustic_bass")`} punchcard />
275
276<Box>
277
278Ein Element ohne `@` ist gleichbedeutend mit `@1`. Im Beispiel ist `c` drei Einheiten lang, `eb` nur eine.
279
280Spiel mit der Länge!
281
282</Box>
283
284**Unter-Sequenzen verlängern**
285
286<MiniRepl
287  client:visible
288  tune={`n("<[4@2 4] [5@2 5] [6@2 6] [5@2 5]>*2")
289.scale("<C2:mixolydian F2:mixolydian>/4")
290.sound("gm_acoustic_bass")`}
291  punchcard
292/>
293
294<Box>
295
296Dieser Groove wird auch `shuffle` genannt.
297Jeder Schlag enthält 2 Töne, wobei der erste doppelt so lang wie der zweite ist.
298Das nennt man auch manchmal `triolen swing`. Es ist ein typischer Rhythmus im Blues und Jazz.
299
300</Box>
301
302**Wiederholen**
303
304<MiniRepl client:visible tune={`note("c!2 [eb,<g a bb a>]").sound("piano")`} punchcard />
305
306<Box>
307
308Wechsel zwischen `!`, `*` und `@` hin und her.
309
310Was ist der Unterschied?
311
312</Box>
313
314## Rückblick
315
316Das haben wir in diesem Kapitel gelernt:
317
318| Concept      | Syntax | Example                                                  |
319| ------------ | ------ | -------------------------------------------------------- |
320| Verlangsamen | \/     | <MiniRepl client:visible tune={`note("[c a f e]/2")`} /> |
321| Alternativen | \<\>   | <MiniRepl client:visible tune={`note("c <e g>")`} />     |
322| Verlängern   | @      | <MiniRepl client:visible tune={`note("c@3 e")`} />       |
323| Wiederholen  | !      | <MiniRepl client:visible tune={`note("c!3 e")`} />       |
324
325Neue Funktionen:
326
327| Name  | Description                             | Example                                                                           |
328| ----- | --------------------------------------- | --------------------------------------------------------------------------------- |
329| note  | Tonhöhe als Buchstabe oder Zahl         | <MiniRepl client:visible tune={`note("b g e c").sound("piano")`} />               |
330| scale | Interpretiert `n` als Skalenstufe       | <MiniRepl client:visible tune={`n("6 4 2 0").scale("C:minor").sound("piano")`} /> |
331| stack | Spiele mehrere Patterns parallel (s.u.) | <MiniRepl client:visible tune={`stack(s("bd sd"),note("c eb g"))`} />             |
332
333## Beispiele
334
335**Bassline**
336
337<MiniRepl
338  client:visible
339  tune={`note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>/2")
340.sound("gm_synth_bass_1")
341.lpf(800) // <-- we'll learn about this soon`}
342/>
343
344**Melodie**
345
346<MiniRepl
347  client:visible
348  tune={`n(\`<
349[~ 0] 2 [0 2] [~ 2]
350[~ 0] 1 [0 1] [~ 1]
351[~ 0] 3 [0 3] [~ 3]
352[~ 0] 2 [0 2] [~ 2]
353>*2\`).scale("C4:minor")
354.sound("gm_synth_strings_1")`}
355/>
356
357**Drums**
358
359<MiniRepl
360  client:visible
361  tune={`sound("bd*2, ~ <sd cp>, [~ hh]*2")
362.bank("RolandTR909")`}
363/>
364
365**Wenn es doch nur einen Weg gäbe das alles gleichzeitig zu spielen.......**
366
367<Box>
368
369Das geht mit `stack` 😙
370
371</Box>
372
373<MiniRepl
374  client:visible
375  tune={`stack(
376  note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>/2")
377  .sound("gm_synth_bass_1").lpf(800),
378  n(\`<
379  [~ 0] 2 [0 2] [~ 2]
380  [~ 0] 1 [0 1] [~ 1]
381  [~ 0] 3 [0 3] [~ 3]
382  [~ 0] 2 [0 2] [~ 2]
383  >*2\`).scale("C4:minor")
384  .sound("gm_synth_strings_1"),
385  sound("bd*2, ~ <sd cp>, [~ hh]*2")
386  .bank("RolandTR909")
387)`}
388/>
389
390Das hört sich doch langsam nach echter Musik an!
391Wir haben Sounds, wir haben Töne.. noch ein Puzzleteil fehlt: [Effekte](/de/workshop/first-effects)