Hiernaast is een notenschrift 'Iubilate deo universa terra' (een psalmvers) uit de 9de eeuw afgebeeld.
Hieronder zijn de eerste noten van het muziekstuk 'Für Elise' uit 1810 van Ludwig van Beethoven (1770 - 1827) afgebeeld.
In de tijd van Beethoven werd het huidige huidige notenschrift gebruikt, waarbij noten als bolletjes of vijf lijnen genoteerd worden.
Bij digitale muziek worden in plaats van notenbalken getallen of letters gebruikt. De klank 'do' wordt C4 genoemd of 60.
| A |
| Bb |
| B |
| C |
| C# |
| D |
| Eb |
| E |
| F |
| F# |
| G |
| Ab |
De witte toetsen op een piano worden 'do', 're', 'mi', 'fa', 'sol', 'la', 'si', 'do' genoemd. Tegenwoordig wordt echte vaker aangegeven met 'C', 'D', 'E', 'F', 'G', 'A', 'B', 'C'.
Tussen de witte toetsen van de piano bevinden zich soms wél en soms géén zwarte toetsen. De zwarte toetsen worden of aangegeven met een '#' (kruis) 'b' (mol) aangegeven. Tussen C3 3n C4 bevinden zich de opeenvolgend de volgende pianotoetsen: 'C', 'C#', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B', 'C'.
De toetsten op de piano representeren noten. Noten zijn gebaseerd op natuurkundige principes.
Tonen hebben een bepaalde afstand tot elkaar.
Bij noten wordt dit een interval genoemd.
De noot 'A4' ligt een octaaf hoger dan de noot 'A3'.
Tussen de noten 'A' en 'B' ligt 'Ab'.
De afstand tussen 'A' en 'B' wordt een grote secunde genoemd
Tussen de noten 'E' en 'F' ligt echter geen noot.
en de afstand tussen 'E' en 'F' wordt een kleine secunde genoemd.
De afstand tussen 'A' en 'C' wordt een kleine terts genoemd
en de afstand tussen 'C' en 'E' wordt een grote terts genoemd
omdat tussen 'C' en 'E' meer noten liggen dan tussen 'A' en 'C'.
Bij de samenklank van sommige tonen wordt de toonafstand als minder prettig ervaren. Dit is bijvoorbeeld het geval bij tonen die dicht bij elkaar liggen (denk hierbij aan grote en kleine secunden). Dit soort tonen worden dissonanten genoemd. Toonafstanden die als prettig ervaren worden worden consonanten genoemd.
In Sonic Pi™ worden kruizen en mollen als volgt weergegeven:
C#4 = play :Cs4 & Eb4 = play :Eb4
1
Plak de code hiernaast in Sonic Pi™.
2
Plak de code hiernaast in Sonic Pi™.
3
Schrijf zelf een code waarin het verschil tussen een kleine en een grote terts hoorbaar is.
4 Hoeveel verschillende kleine tertsen kun je samenstellen binnen één octaaf?
In muziekstukken worden consonanten doorgaans meer gebruikt dan dissonanten. Dissonanten worden meestal subtiel gebruikt om de spanning in muziek op te voeren en worden veelal afgewisseld met een consonanten. Muziek met veel dissonanten wordt atonale muziek genoemd. Muziek met weinig of geen dissonanten wordt tonale muziek genoemd. Tonale muziek ligt doorgaans veel beter in het gehoor dan atonale muziek.
De meest bekende toonladder is de toonladder in C-majeur. Een C-majeur toonladder zijn de witte toetsen op een piano.
De toonafstanden in een C-majeur toonladder zijn als volgt:
| C ←1→ D ←1→ E ←½→ F ←1→ G ←1→ A ←1→ B ←½→ C |
In traditionele westerse muziek wordt de toonafstand (1↔1↔½↔1↔1↔1↔½) van een majeur toonladder als vrolijk ervaren.
Als een toonladder in D-majeur gespeeld wordt zijn de toonafstanden ook 1↔1↔½↔1↔1↔1↔½:
| D ←1→ E ←1→ F# ←½→ G ←1→ A ←1→ B ←1→ C# ←½→ D |
Als een toonladder in Eb-majeur gespeeld wordt zijn de toonafstanden ook 1↔1↔½↔1↔1↔1↔½:
| Eb ←1→ F ←1→ G ←½→ Ab ←1→ Bb ←1→ C ←1→ D ←½→ Eb |
Een mineur toonladder wordt in de westerse cultuur ervaren als een melodramatische of droevige toonlader. De toonafstanden van een mineur toonladder zijn als volgt: 1↔½↔1↔1↔½↔1↔1↔:
| C ←1→ D ←½→ Eb ←1→ F ←1→ G ←½→ Ab ←1→ Bb ←1→ C |
De noten van een Eb-majeur en een C-mineur zijn dezelfde noten. De grondtoon van beide toonladders is echter verschillend. De grondtoon van een Eb-majeur toonladder is Eb en de grondtoon van een C-mineur toonladder is C. Een grondtoon is de eerste noot van een toonladder.
Akkoorden zijn samenklanken van drie of meer tonen. Doorgaans bestaan akkoorden uit een tertsenstapeling vanuit de grondtoon. Zeer gangbare akkoorden met grondtoon C zijn het C-majeur akkoord ('C', 'E' en 'G') en het C-mineur akkoord ('C', 'Eb' en 'G').
5
Plak de code hiernaast in Sonic Pi™.
Hoewel de noten van een Eb-majeur toonladder en de C-mineur toonladder hetzelfde zijn, bestaat een Eb-majeur akkoord uit 'Eb', 'G' en 'Bb' en een C-mineur akkoord uit 'C', 'Eb' en 'G'.
6 Zoek met behulp van Google naar een akkoordenzoeker, waarbij je noten kunt invoeren zodat de akkoordenzoeker toonladers en akkoorden zoekt bij de ingevoerde noten (bijvoorbeeld: tablature.nl).
Veel muziek zoals popmuziek en met name dance- en techo-varianten, bestaat uit gratie van herhaling.
Akkoorden, ritmes en effecten worden op een al dan niet gecompliceerde manier veelvuldig herhaald.
Omdat achter deze herhalingen doorgaans een bepaalde logica zit,
is deze logica gemakkelijk om te zetten in code.
Door de logica achter een nummer te analyseren kunnen herhalingen worden omgezet in reeksen.
Deze reeksen kunnen met behulp van Sonic Pi™ herhaald worden.
Hieronder is de code van een synthesizer partij
van 'Shape of You' twee keer afgebeeld.
De bovenste code bestaat uit 55 regels en speelt het akkoordenpatroon slecht één keer.
De onderste code bestaat uit 12 regels en speelt de begeleiding voor het hele nummer.
Dit komt omdat bij de onderste versie variablen en rings gebruikt worden.
Daarnaast zijn met behulp van een akkoordenzoeker
(tablature.nl)
de samenklanken omgezet in akkoorden.
ritme: De synthesizer partij is ritmisch opgebouwd uit vierde en kwarten:
.ring:
Dit patroon wordt elke twee maten herhaald, waardoor een reeks ontstaat.
Deze reeks kan in de de variabele var_sleep worden opgeslagen.
Een reeks wordt als volgt opgeslagen in een variabele:
var_sleep = [0.25, 0.5, 0.25, 0.5, 0.25, 0.25].ring.
tick:
Het aantal keer dat een loop doorlopen wordt, kan worden bijgehouden
door de standaard variabele tick.
De standaard variabele tick wordt elke keer
als deze wordt aangeroepen één waarde hoger.
t = tick:
Om te zorgen dat tick per loop slechts één waarde stijgt
wordt tick steeds opnieuw opgeslagen in de variabele t.
In 'Shape of You' krijgt de sleep elke loop de volgende waarde uit de
variabele var_sleep.
sleep var_sleep[t].
| maat | 1 | 2 | 3 | 4 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
||||
| ritme | 1/4 | 1/2 | 1/4 | 1/2 | 1/4 | 1/4 | 1/4 | 1/2 | 1/4 | 1/2 | 1/4 | 1/4 | ||||
var_sleep
|
0.25
|
0.5
|
0.25
|
0.5
|
0.5
|
0.25
|
0.25
|
0.5
|
1/4
|
0.5
|
0.25
|
0.25
|
||||
| maat | 5 | 6 | 7 | 8 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
||||
| ritme | 1/4 | 1/2 | 1/4 | 1/2 | 1/4 | 1/4 | 1/4 | 1/2 | 1/4 | 1/2 | 1/4 | 1/4 | ||||
var_sleep
|
0.25
|
0.5
|
0.25
|
0.5
|
0.5
|
0.25
|
0.25
|
0.5
|
1/4
|
0.5
|
0.25
|
0.25
|
||||
klankkleur: Gedurende de synthesizerpartij van 'Shape of You' veranderd de klankkleur. Dit komt omdat de klank van dof naar helder en weer terug naar dof gaat.
cutoff:
Met cutoff kan de klankkleur verandert worden.
Een lage cutoff (bijv. 40) levert een doffe klank en
een hoge cutoff (bijv. 100) levert een heldere klank op.
patroon:
Dit gebeurt in 'Shape of You' in 28 stappen die constant herhaald worden.
De eerste 14 stappen neemt de helderheid elke twee stappen toe
en de laatste 14 stappen neemt de helderheid elke twee stappen af.
Dit patroon kan worden vastgelegd in de onderstaande variabele var_cutoff:
var_cutoff = [50, 50, 60, 60, 70, 70, 80, 80, 90, 90, 100, 100, 110, 110, 110, 110, 100, 100, 90, 90, 80, 80, 70, 70, 60, 60, 50, 50].ring
ct=(t/2).floor:
Om niet elke waarde twee keer te hoeven noteren wordt ct = (t/2).floor gebruikt.
Door dit stukje code wordt elke waarde van ct twee keer herhaald,
en kunnen de dubbelingen uit de ring gehaald worden:
var_cutoff = [50, 60, 70, 80, 90, 100, 110, 110, 100, 90, 80, 70, 60, 50].ring
.ring.mirror:
Omdat de waarden eerst toenemen en daarna afnemen kan .mirror
gebruikt worden, waardoor de reeks in de ring gespiegeld aan
de oorspronkelijke ring wordt toegevoegd:
var_cutoff = [50, 60, 70, 80, 90, 100, 110].ring.mirror
50.step(110,10)
Omdat de ring.mirror een logische opbouw heeft (steeds 10 erbij),
kan dit gegenereerd worden:
var_cutoff = 50.step(110,10).to_a.ring.mirror
In de bovenstaande code wordt de waarde 50 steeds 10 verhoogd,
totdat de waarde 110 bereikt is. mirror zorgt ervoor dat als de
waarde 110 is, deze steeds met 10 afneemt.
| maat | 1 | 2 | 3 | 4 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
||||
ct
|
1
|
2
|
3
|
4
|
5
|
6
|
||||||||||
var_cutoff
|
50
|
50
|
60
|
60
|
70
|
70
|
80
|
80
|
90
|
90
|
100
|
100
|
||||
| maat | 5 | 6 | 7 | 8 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
24
|
24
|
||||
ct
|
7
|
8
|
9
|
10
|
11
|
12
|
||||||||||
var_cutoff
|
110
|
110
|
110
|
110
|
100
|
100
|
90
|
90
|
80
|
80
|
70
|
70
|
||||
| maat | 9 | 10 | 11 | 12 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
32
|
33
|
34
|
35
|
36
|
||||
ct
|
13
|
14
|
15
|
16
|
17
|
18
|
||||||||||
var_cutoff
|
60
|
60
|
50
|
50
|
50
|
50
|
60
|
60
|
70
|
70
|
80
|
80
|
||||
| maat | 13 | 14 | 15 | 16 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
37
|
38
|
39
|
40
|
41
|
42
|
43
|
44
|
45
|
46
|
47
|
48
|
||||
ct
|
19
|
20
|
21
|
22
|
23
|
24
|
||||||||||
var_cutoff
|
90
|
90
|
100
|
100
|
110
|
110
|
110
|
110
|
100
|
100
|
90
|
90
|
||||
faseverschil:
Het patroon binnen de cutoff
loopt niet synchroon met het ritme van het nummer.
Hierdoor treedt steeds een verschuiving of faseverschil op
in welke noten een bepaalde cutoff krijgen.
Deze techniek wordt veelvuldig toegepast in moderne elektronische muziek.
finetunen
Uiteindelijk wordt de waarde van de cutoff gedeeld door 1.1 om het geheel te finetunen:
cutoff: (var_cutoff[ct] / 1.1)
chord:
Met behulp van een akkoordenzoeker
(tablature.nl)
zijn de samenklanken in 'Shape of You' omgezet in akkoorden.
De synthesizer partij uit 'Shape of You' is opgebouwd uit vier verschillende akkoorden
(C#4 mineur, F#4 mineur, E4 mineur, C#5 mineur), die elk zes keer herhaald worden.
notatie: In Sonic Pi worden deze akkoorden genoteerd als:
:Cs4, :minor, :Fs4, :minor, :Ab4, :minor & :Cs5, :minor
De reeks akkoorden kan als volgt in de variabele var_chord worden opgeslagen:
var_chord = [:Cs4, :Fs4, :Ab4, :Cs5].ring
tt=(t/6).floor:
Met behulp van t = tick en tt = (t/6).floor,
wordt de waarde van de tick gedeeld door 6 en naar beneden afgerond.
Hierdoor wordt elk akkoord in 'Shape of You' zes keer herhaald.
minor:
Omdat alle akkoorden in de synthesizer partij van 'Shape of You' mineur akkoorden zijn,
kan de toevoeging :minor toegevoegd worden als de akkoorden in de variabele
var_chord worden opgeroepen:
play chord(var_chord[tt], :minor)
| maat | 1 | 2 | 3 | 4 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
||||
chord
|
:Cs4, :minor
|
:Fs4, :minor
|
||||||||||||||
| play | o | o | o | o | o | o | o | o | o | o | o | o | ||||
| maat | 5 | 6 | 7 | 8 | ||||||||||||
| tel | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 | 1 | 2 | 3 | 4 |
t
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
||||
chord
|
:Ab4, :minor
|
:Cs5, :minor
|
||||||||||||||
| play | o | o | o | o | o | o | o | o | o | o | o | o | ||||
Hieronder wordt het nummer 'The Plan'
in de toonsoort F-mineur (F, G, Ab, Bb, C, C#, Eb, F) in delen geleidelijk opgebouwd.
In de code van dit nummer
wordt op verschillende manieren omgegaan met reeksen en patronen.
De reeks (Ab, F, C, F, Bb, F, Bb, Bb) is opgebouwd uit noten uit de F-mineur toonladder. Het ritme waarin de reeks wordt gespeeld wordt is: 1/2 - 1/4 - 1/8 - 1/8. Binnen de reeks wordt dit ritme een keer herhaald.
| reeks | Ab | F | C | F | Bb | F | Bb | Bb | ||||||||
| ritme | 1/2 | 1/4 | 1/8 | 1/8 | 1/2 | 1/4 | 1/8 | 1/8 | ||||||||
play_pattern_timed:
Met play_pattern_timed kunnen de noten en het ritme
in één deel code worden vastgelegd :
play_pattern_timed [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4],[1, 0.5, 0.25]
In het eerste deel van de code worden de noten,
gescheiden door een komma's, tussen '[]' geplaatst.
In het tweede deel van de code wordt het ritme,
gescheiden door komma's,tussen '[]' geplaatst.
Beide '[]' worden eveneens door een komma gescheiden.
variabele:
Hoewel de bovenstaande code> zonder probleemloos
in Sonic Pi™ geplakt kan worden,
wordt de reeks en het ritme vastgelegd
in de variabele var_play en var_sleep.
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring
var_sleep = [0.5, 0.25, 0.125, 0.125].ring
Deze variabele worden in play_pattern_timed var_play,var_sleep aangeroepen,
waardoor in grond van de zaak dezelfde code ontstaat
als in de oorspronkelijke code.
lay_pattern_timed var_play,var_sleep
effecten:
Er worden in 'The Plan' twee verschillende effecten gebruikt.
De notenreeks is dus ook tussen twee with_fx, end
(flanger & panslicer) geplaatst.
Achter elk effect staan parameters (invert_flange, decay &
probability, smooth).
Onder fx
is te vinden welke parameters bij een bepaald effect gekozen kunnen worden.
define:
Met behulp van define
wordt vanuit een loop een functionaliteit (of functie) aangeroepen worden.
In 'The Plan' wordt in de loop met mood
verwezen naar de functie mood die in define gedefinieerd wordt.
mood
define :mood do
Als de de code wordt uitgevoerd, en in de code mood staat,
wordt in plaats van mood de functie define :mood do uitgevoerd.
In de code van 'The Plan' wordt de notenreeks niet steeds op dezelfde manier afgespeeld.
Dit wordt gedaan door rekenkundige functionaliteiten aan de notenreeks toe te voegen.
In de code van 'The Plan'
wordt var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring
achtereenvolgens op zes manieren gemanipuleerd.
Op deze manier hoeft niet alle elke noot gedefineerd te worden in een reeks,
maar kan kunnen de patronen in een reeks rekenkundig gemanipuleerd worden:
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring.stretch(2),
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring.take_last(4),
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring,
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring.take_last(4),
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring.reverse,
var_play = [:Ab4, :F4, :C4, :F4, :Bb4, :F4, :Bb4, :Bb4].ring.take(4),
patronen kiezen:
Om steeds te wisselen van notenpatroon,
wordt de variable t gebruikt.
De waarde van t wordt door t = tick
elke keer dat de loop
gespeeld wordt met één verhoogd.
Hierdoor wordt steeds een ander notenpatroon gekozen.
| t | 1 | 2 | 3 |
| stretch(2) | mirror | -- |
| 4 | 5 | 6 | 7 |
| take_last(4) | reverse | take(4) | -- |
patronen vastleggen:
De zes verschillende manipulatie van de oorspronkelijke reeks
worden vastgelegd in de variabele var_ring.
var_ring = [
var_play.stretch(2),
var_play.mirror,
var_play,
var_play.take_last(4),
var_play.reverse,
var_play.take(4)].ring,
waarden doorgeven:
De waarde van t wordt steeds in de loop bepaald.
In de loop wordt verwezen naar de functie mood.
Als de inhoud van de functie mood afgespeeld wordt,
is de waarde van tniet bekent voor deze functie.
De waarde t moet aan de functie mood doorgegeven worden.
mood t
define :mood do |t|
Door de variable t achter de mood te plaatsen,
wordt de waarde van t doorgegeven aan de functie.
In de functie define :mood do |t|
wordt met |t| aangegeven dat de waarde van t
wordt doorgegeven aan de functie.
play_pattern_timed var_ring[t],var_sleep
Hierdoor ontstaan de onderstaande reeks met 64 noten.
| Ab | Ab | F | F | C | C | F | F | Bb | Bb | F | F | Bb | Bb | Bb | Bb | ||||||||||||||||
| Ab | F | C | F | Bb | F | Bb | Bb | Bb | Bb | F | Bb | F | C | F | Ab | ||||||||||||||||
| Ab | F | C | F | Bb | F | Bb | Bb | Bb | F | Bb | Bb | Bb | Bb | F | Bb | ||||||||||||||||
| F | C | F | Ab | Ab | F | C | F | Ab | F | C | F | Bb | F | Bb | Bb | ||||||||||||||||
Uit de toonladder F-mineur (F, G, Ab, Bb, C, C#, Eb, F) zijn verschillende drieklanken of akkoorden samen te stellen. De afzonderlijke noten van een akkoord dat in de F-mineur toonladder past, bestaat uit noten uit de toonladder van F-mineur. De afzonderlijke noten van de akkoorden F-mineur (F, Ab, C) en Bb-mineur (Bb, C# , F) komen voor in de toonladder van F-mineur en zijn toepasbaar binnen 'The Plan'. Het F-mineur-akkoord bij het eerste deel (Ab, F, C, F) van de oorspronkelijke reeks en het Bb-mineur-akkoord past het tweede deel (Bb, F, Bb, Bb) van de oorspronkelijke reeks.
| F-mineur | F-mineur | Bb-mineur | Bb-mineur | ||||||||||||||||||||||||||||
| Ab | Ab | F | F | C | C | F | F | Bb | Bb | F | F | Bb | Bb | Bb | Bb | ||||||||||||||||
| F-mineur | Bb-mineur | Bb-mineur | F-mineur | ||||||||||||||||||||||||||||
| Ab | F | C | F | Bb | F | Bb | Bb | Bb | Bb | F | Bb | F | C | F | Ab | ||||||||||||||||
| F-mineur | Bb-mineur | Bb-mineur | Bb-mineur | ||||||||||||||||||||||||||||
| Ab | F | C | F | Bb | F | Bb | Bb | Bb | F | Bb | Bb | Bb | Bb | F | Bb | ||||||||||||||||
| F-mineur | F-mineur | F-mineur | Bb-mineur | ||||||||||||||||||||||||||||
| F | C | F | Ab | Ab | F | C | F | Ab | F | C | F | Bb | F | Bb | Bb | ||||||||||||||||
De 16 akkoorden die gedurende de 64 gegenereerde noten in de functie mood
gepeeld worden, worden opgeslagen in de variabele var_chord.
Het ritme, 1/2 - 1/4 - 1/4 - 1/4 -1/4 - 1/2,
waarmee deze akkoorden gespeeld worden,
wordt opgeslagen in de variabele var_sleep2.
var_chord = [:F2, :F2, :Bb2, :Bb2, :F2, :Bb2, :Bb2, :F2, :F2, :Bb2, :Bb2, :Bb2, :F2, :F2, :F2, :Bb2].ring
var_sleep = [0.5, 0.25, 0.125, 0.125].ring
notenreeksen oproepen:
De notenreeksen die uit de akkoorden gegenereerd worden,
worden in de loop loop_square opgeroepen met de functie square.
In loop_square wordt de variabele tt
met behulp van tick elke keer als de loop gespeeld wordt,
één waarde verhoogd (tt = tick).
De waarde voor tt,
die elke loop verhoogt,
wordt met square tt
doorgegeven aan de functie square.
square tt
define :square do |tt|
play_pattern_timed chord:
In de functie square worden de afzonderlijke noten in de akkoorden afgespeeld
met play_pattern_timed chord.
Het verschil tussen play_pattern_timed en play_pattern_timed chord
is dat bij de laatste de afzonderlijke noten van een akkoord afgespeeld worden.
In play_pattern_timed chord moet het akkoord en het ritme gegeven worden.
Als een F-mineur akkoord twee maal achter elkaar zou spelen met het ritme 1/2 - 1/2,
levert dit play_pattern_timed (:F2, :minor),[0.5, 0.5] chord op.
In 'The Plan' staan de akkoorden in de variable var_chord en
het ritme in var_sleep2.
Het notenpatroon wordt in de functie square als volgt aangeroepen:
play_pattern_timed chord(var_chord[tt], :minor),var_sleep2
Op de notenreeks die uit de akkoorden worden gegenereerd wordt met behulp van het effect
slicer vibrerend gespeeld.
Door de parameter phase met een waarde van 0.125 wordt de vibratie in 1/8 tellen
op de notenreeks toegepast.
Om de notenreeks meer stereo te maken wordt panslicer gebruikt.
Met panning wordt bedoelt dat het geluid op de twee stereokanalen apart beïnvloed kan worden.
(pan: 1 = rechts en pan: -1 = links).
Door waarden tussen de -1 en 1 te kiezen kan geluid over de stereokanalen verdeeld worden.
In 'The Plan' worden de volgende noten in een soort van melodielijn gespeeld: Ab, F, G, Bb, Bb, Ab, F, G, Bb, Bb, Ab, F, Ab, F. Dit is onder te verdelen in 2x Ab, F, G, Bb, Bb met daarna 2x Ab, F, woordoor een patroon van 14 noten ontstaat dat in het ritme 1/2 - 1/2 - 1 - 1/4 - 1/4 - 1/2 - 1/2 - 1 - 1/4 - 1/4 - 1/2 - 1/2 - 1/2 - 1/2 gespeeld wordt.
| Ab | F | G | Bb | Bb | Ab | F | |||||||
| G | Bb | Bb | Ab | F | Ab | F | |||||||
patronen:
Met behulp van x.times do kan een stuk code
x keer herhaald worden. x.times do wordt afgesloten met end.
Door de combinatie van x.times do en play_pattern_timed.
play_pattern_timed [:Ab4, :F4, :G4, :Bb4, :Bb4],[0.5, 0.5, 1, 0.25, 0.25]
play_pattern_timed [:Ab4, :F4],[0.5, 0.5]
uit fase: De reeks noten duurt alles bij elkaar 7 maten en 28 tellen. Aangezien de ander notenpatronen uit 'The plan' tot nu toe altijd veelvouden van 4 of 8 maten waren, speelt de melodie-achtige partij uit fase. Dit wil zeggen dat elke keer als de partij herhaald wordt deze tegenover ander akkoorden en noten te liggen komt.
| 1 - 8 | 19 - 16 | 17 - 24 | 25 - 32 | 33 - 40 | 41 - 48 | 48 - 56 |
| 1 - 7 | 8 - 14 | 15 - 21 | 22 - 28 | 29 - 35 | 36 - 42 | 43 - 49 | 50 - 56 |
Door dit faseverschil klinken op sommige stukken in 'The Plan' de note Ab en Bb soms samen en de noten F en G soms samen. De aftand tussen beide noten is een grote secunde, waardoor een bepaalde dissonantie ontstaat. Deze dissonantie zorgt voor 'sfeer' in het nummer.
Met dynamiek in muziek wordt bedoeld hoe hard of zacht iets gespeeld wordt.
In de code van 'The Plan' speelt elke functie eindeloos in
dezelfde dynamiek.
In het uiteindelijke nummer verandert de dynamiek van de verschillende loops
voortdurend.
crescendo & decrescendo:
Omdat de loops in 'The Plan' geleidelijk harder (itl: crescendo) en zachter (itl: decrescendo)
worden, kunnen deze geautomatiseerd worden.
Met behulp van de x.step(y, z).to_a kan de waarde 'x' oplopen (of aflopen)
tot aan de 'y' met intervallen 'z'.
Op deze code te kunnen gebruiken om achtereenvolgens een crescendo en decrescendo
te krijgen, kan x.step(y, z).to_a.ring.mirror gebruikt worden.
'x' is het beginvolume, 'y' het maximale volume en 'z' geeft aan hoeveel elke waarde moet toenemen.
Zo 0.step(10, 2).to_a.ring.mirror levert bijvoorbeeld
0, 2, 4, 6, 8, 10, 10, 8, 6, 4, 2, 0 op.
In 'The Plan' wordt 0.step(0.6, 0.03125).to_a.ring.mirror gebruikt om de amplitude
van de verschillende loops te reguleren.
wisselende dynamiek: Omdat de omlooptijd van elke loop in 'The Plan' anders is lopen de crescendo's en decrescendo's in de verschillende loops niet synchroon. Hierdoor ontstaat binnen het nummer een steeds wisselende dynamiek. De crescendo's en decrescendo's in de verschillende loops worden als volgt opgeroepen:
amp: 0.6 - var_vol[t],
wat een decrescendo en crescendo oplevert.
amp: var_vol[tt],
wat een crescendo en decrescendo oplevert.
amp: var_vol[ttt]*3,
wat de waarde van het crescendo en decrescendo met drie vermenigvuldigt.
panning:
x.step(y, z).to_a.ring.mirror wordt
in 'The Plan' eveneens gebruikt voor panning.
De waarde van pan verloop in stappen van 0.0125 van - 1 naar 1,
het geluid geleidelijk van het linkerkanaal overgaat naar het rechterkanaal.
var_pan = -1.step(1, 0.125).to_a.ring.mirror
pan: var_pan[ttt]
Met behulp van stop kan een live_loop gestopt worden.
Met het statement if en else
kan een limiet aan het aantal loops gesteld worden.
In de functie mood wordt de loop gestopt als de waarde
van t niet meer kleiner dan 85.
Een if statement heeft doorgaans een 'als dit dan '--' , anders '--'' vorm
if t < 85 : als t kleiner is dan 85 voer dan ... uit.
else : als dit niet zo is stop.
end NB: variabele moeten gedefinieerd (bijv t = 0) worden
samples:
Hoewel het muzikale gedeelte van 'The Plan' met de voorgaande code>
af is, klinkt het stuk nog niet als onderstaande nummer:
Dit komt omdat bepaalde geluidssamples nog niet aan het nummer zijn toegevoegd. Deze samples maken geen deel uit van de standaard samples in Sonic Pi™, en moeten apart aangeroepen worden.
In het volgende deel van deze module ga je leren hoe je zogenaamde external samples moet maken, opslaan en moet aanroepen binnen Sonic Pi™
7 Maak naar aanleiding van het bovenstaande zelf een compositie met Sonic Pi.
7 target="_blank" href="http://www.tablature.nl/akkoorden-zoeker.php">tablature.nl om akkoorden bij een bepaalde toonsoort te zoeken.
play, play_pattern_timed,
play chord, play_pattern_timed chord
ring, mirror, reverse e.d.
define).
live_loop door aan een functie (define).
x.step(y, z).to_a.ring.mirror of dynamiek, panning, en cufoff te generenen.
if, else en end of loops te stoppen.