6 Probability Drum Machine
Opdracht 6 van 9
Voor deze opdracht maak je een drum machine met kansberekeningen. Het ritme en tempo wordt door verschillende vormen van randomness bepaalt.
Deadline: 28 November
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. kick it!
- Maak een
[makenote]
-[noteout]
combinatie. - Stel de channel van noteout in op
10
zodat je de drumgeluiden hoort van de general midi (of gebruik een M4L drumrack). - Zorg dat je met het klikken op een
[button]
de kick hoort (midinoot36
).
Nodig: [makenote]
, [noteout]
, [button]
, [message]
b. kick, kick, kick, ∞
- Maak een
[metro]
aan waarvan je de BPM kan instellen met een[number]
(NB: reken dus ook BPM om naar ms-interval). - Zet de BPM op 108 (in kwartnoten), maar zorg dat de metro bangs uitstuurt op het tempo van 16de-noten (dus 4x snellere bangs).
- Sluit een
[counter]
aan op de metro en zorg er voor dat de kick alleen om de 3 16den klinkt (dus 0 1 2 3 4 5 6 7 ...), gebruik hiervoor[%]
en[select]
. - Zorg dat de BPM bij het opstarten van je patch al correct in de number-box staat met
[loadmess]
en de operators de goede argumenten hebben.
Handige objecten: [number]
, [metro]
, [!/]
, [*]
, [counter]
, [%]
, [select]
, [message]
, [loadmess]
c. some(times) snare
- Gebruik het
[random]
object om een willekeurig getal van 0 tot 100 te genereren voor elke bang van de metro (elke 16de). - Maak een vergelijking waarbij een snare 30 procent van de tijd afgespeeld wordt (midinoot 38).
- Voeg een
[slider]
of[dial]
toe die je omzet naar 0 - 100 zodat je het percentage kan veranderen, en zorg dat deze met de goede waarde opstart.
Handige objecten: [random]
, [<]
/ [>]
/ [<=]
/ [>=]
, [sel]
, [slider]
, [dial]
, [loadmess]
, [message]
d. random hats
- Voeg een hihat toe (midinoot 42),
- Zorg dat deze op alle 8ste-noten speelt.
- Maak daarnaast een kansberekening waarbij de 16de-noten daartussen 15 procent van de tijd spelen.
Tip: [%]
, [sel]
, [random]
, [<]
/[<=]
/[>]
/[>=]
(voldoende)
e. drunk drumming
- Maak een algoritme dat de drummachine laat schommelen in het tempo. Gebruik hiervoor het
[drunk]
object. - Laat het [drunk]-object elke 16de tel een random waarde genereren en gebruik die om het tempo te veranderen. Het tempo mag nooit meer of minder afwijken dan 15 BPM vanaf het ingestelde BPM.
voorbeeld: ingesteld BPM = 108, dan is het minimum
108 - 15 = 93
en het maximum108 + 15 = 123
- Je moet ook nog in staat zijn om een nieuw BPM in te stellen via een [number], waar het tempo dan rond schommelt.
Tip: [drunk]
, [trigger b f]
, [number]
, [-]
, [+]
(goed)
Uitdaging (zeer goed)
Ben je klaar met alle bovenstaande opdrachten? Kijk eens naar een of meer van deze uitdagingen om te onderzoeken en je patch mee uit te breiden:
Fills
Maak een algoritme dat in de laatste maat van een aantal (instelbare!) maten altijd een random fill speelt over de toms.
Snare ≠ Kick
Voeg een algoritme toe dat, wanneer de snare tegelijk speelt met een kick, de kick niet mag klinken, en er een nieuwe kick juist de 16de daarna speelt.
Meta sequencer
Er bestaat niet zoiets als true-random, en veelal wordt random gegenereert op basis van een zogenaamde seed. Bekijk de help-file van [random]
en hoe je zelf de seed kunt instellen. Maak een algoritme dat elke maat de seed van de random-number-generator reset, en daardoor een herhalend random patroon genereert. Zorg nu dat je verschillende random seeds in een lijst kunt plaatsen en elke maat de volgende seed uit de lijst pakt. Hierdoor kan je op een hoger niveau een random sequencer maker door de randomness aan te passen.
Probability lijsten
Voeg een manier toe om een lijst te kunnen maken voor elke stap in de sequencer van de kick, waarbij de plek op de lijst een aparte kans is. Zo kan je een lijst maken met een specifiek ritme, maar binnen het ritme kunnen variaties onstaan door de kans. Bijvoorbeeld een lijst van (100 0 0 100 0 0 50 20)
speelt de kick op tel 0
en 3
en heeft 50% en 20% kans dat die gespeeld wordt op tel 6
en 7
.