7 Broken Chords
Opdracht 7 van 9
In deze opdracht ga je gebroken akkoorden genereren bij het drukken van 1 noot op de kslider/keyboard. Je maakt gebruik van logica/algoritmes zodat jouw akkoorden gegenereerd kunnen worden voor alle noten van het MIDI-keyboard. Met een algoritme maak je onderscheid tussen welke noot gespeeld wordt zodat de akkoorden in de juiste trap gegenereerd worden. Met delays worden de noten gebroken afgespeeld.
Deadline: 5 December
Belangrijke objecten in deze opdracht:
Belangrijk:
Gebruik de help-files (alt-click). Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.
Plaats comments om duidelijk te maken dat je snapt hoe iets werkt.
Maak je patch netjes en overzichtelijk voordat je hem laat beoordelen!
a. Solo note
- Maak een
[kslider]
-object en zorg dat het klikken op de kslider een MIDI-noot afspeelt via[makenote]
en[noteout]
. - Maak de noot "los" van het octaaf (zodat alleen de relatieve semitoon overblijft) en gebruik een
[number]
om zelf het octaaf in te stellen van de gespeelde noot (bijv. elkeC
klinkt nu in hetzelfde ingestelde octaaf).
Tip: [%]
, [*]
, [+]
, [number]
, [kslider]
b. Major Chord Generator
- Verzin een manier om alle witte toetsen van alle zwarte toetsen te splitsen.
- Zorg er voor dat een witte toets wordt omgezet naar een majeur drieklank (dus priem, grote terts en reine kwint)
- Bij de zwarte toetsen hoor je geen akkoord maar alleen de losse noot.
Tip: [select]
, [trigger]
, [+]
, [message]
, [int]
c. Delay it!
- Zorg er nu voor dat de terts in het akkoord met 250 ms vertraagt wordt en de kwint 500 ms.
- Maak een
[slider]
of[dial]
object waarmee je de "spread" (de delaytijden) van het gebroken akkoord kunt beΓ―nvloeden. - Bedenk zelf je range voor de delaytijden, maar zorg ervoor dat de eerste delay altijd de helft in tijd van de tweede delay is!
- Je kunt de range van de slider/dial aanpassen via de inspector-window of met een
[scale]
object.
Tip: [pipe]
, [delay]
, [dial]
, [slider]
, [*]
, [scale]
(voldoende)
d. Chords in key
- Maak het trappensysteem (scale degree) correct van de C-majeur toonladder, zorg er hierbij voor dat op iedere witte toets de juist drieklank klinkt van die trap in de C-majeur toonladder. Dus: C > Cmaj (C E G), D > Dmin (D F A), E > Emin (E G B), etc.
- De zwarte toetsen genereren geen akkoord maar zijn wel nog steeds hoorbaar als losse noot.
- Mocht je het trappensysteem van de westerse harmonieleer nog niet kennen, zoek dit dan eerst op op internet, of vraag uitleg bij je medestudenten.
Tip: [select]
, [+]
, [int]
, [trigger]
, [message]
e. Include the octave
- Verwijder de octave
[number]
-box die je bija
hebt gemaakt. - Zorg dat je algoritme werkt voor elke noot op de
[kslider]
(en daarbuiten!) en vervolgens ook de drieklank in dat octaaf laat terughoren als de oorspronkelijk gedrukte noot.
Tip: [%]
, [/]
, [*]
, [+]
(goed)
Uitdaging (zeer goed)
Ben je klaar met alle bovenstaande opdrachten? Kijk eens naar een of meer van deze opdrachten om je patch mee uit te breiden:
Random Chord Progressions
Maak een sequencer die met 1 druk op een button een willekeurige akkoordprogressie genereert door enkele noten in een lijst op te slaan en deze vervolgens af te spelen en via jouw algoritme omzet in akkoorden. Voeg ook ritmische patronen toe aan de sequencer. Gebruik hiervoor: [uzi]
, [urn]
/[random]
/[drunk]
, [zl.group]
, [zl.lookup]
Meer toonladders
Maak een optie voor andere toonladders die gebruikt kunnen worden om akkoorden mee te genereren (bijvoorbeeld: mineur, dorisch, hexatonisch, of ga eens op zoek naar niet-westerse toonladders) en hun bijbehorende trappensysteem of breidt uit met septiem akkoorden. Probeer eens [bendout]
te gebruiken zodat je kan afstappen van de 12-tone equal temperament stemming. Kijk eens naar objecten als: [zl.lookup]
, [expr]
, [vexpr]
, [coll]
.
Interpolated Chords
Verzin een systeem dat, zodra jij een volgend akkoord aanslaat, eerst een akkoord speelt dat halverwege het nieuwe akkoord en het vorige akkoord ligt. Hiervoor zul je moeten interpoleren. Je kunt beginnen met het gemiddelde nemen, maar je zou ook een systeem kunnen verzinnen dat meer stappen maakt om naar een ander akkoord toe te bewegen. Je kunt ook nog akkoorden laten genereren met verschillende liggingen en daar tussen interpoleren. Objecten als: [iter]
, [expr]
, [zl.group]
, [vexpr]
kunnen van pas komen.