2 Step Sequencer
In deze opdracht bouw je een step sequencer die MIDI-noten speelt. Maken t/m D is verplicht, maar je kunt daarna verder werken. Kijk ook naar de uitdagingen als je de smaak te pakken hebt!
Deadline voor deze opdracht: 17 oktober
Belangrijke objecten in deze opdracht:
TIPS
Snap je de functie van een object niet? Gebruik alt-click op het object om de help-file te openen. Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.
Plaats comments (sneltoets
c
) in je patch om duidelijk te maken dat je snapt wat er gebeurd en hoe iets werkt.Maak je patch netjes en overzichtelijk voordat je hem laat aftekenen!
a. Counting
Maak een [counter]
.
- Zorg dat de teller van 1 t/m 5 gaat (hiervoor moet je de counter de goede argumenten geven)
- En telkens 1 hoger als je op een
[button]
klikt die een bang stuurt naar de hot-inlet van de counter. - Sluit een
[metro 500]
aan op de counter en zet de metro aan/uit met een[toggle]
. - Laat het resultaat van de counter zien in een
[number]
of[print]
het naar de Max-console.
b. Tempo
Maak een patch die een tempo (in Beats per Minute) omrekent naar het tijdsinterval in milliseconden dat tussen elke puls plaats vindt. Dit kan gedaan worden met de volgende formule:
tijdinterval(ms) = (60s * 1000ms) / BPM
Voorbeeld: 120 BPM staat gelijk aan 1 "bang" elke 500 milliseconden.
- Gebruik een
[number]
object om het tempo in te kunnen stellen. - Dat getal gaat door je berekening heen zoals beschreven hierboven, en het resultaat past het interval van de metro aan.
- Zorg ervoor dat je patch dit berekent met floating-point-getallen (komma) voor meer precisie. Let dus op de initial-value's die als argumenten in je objecten moet staan.
c. Steps
Met het [select]
object kun je een bang sturen zodra een getal van de argumenten overeenkomt met het binnenkomende getal.
- Gebruik het select-object om elke stap een bang te sturen van de counter uit een aparte outlet (dus 1 uit outlet 1, 2 uit outlet 2, etc).
- Maak nu 5
[message]
-objecten, die elk een andere MIDI-noot als argument krijgen (bijvoorbeeld:(60) (63) (67) (62) (60)
). - Koppel het
[select]
object aan de messages, en zorg ervoor dat de messages hun getal doorsturen naar de[makenote]
en[noteout]
combinatie (uit de vorige opdracht) zodat je de MIDI-noot kunt horen.
d. Customized Notes
Bekijk het [int]
-object (niet number!), en de help-file.
- Vervang de 5 messages voor 5
[int]
objecten en stuur bangs van het select-object naar de hot-inlet. - Voeg 5
[number]
-objecten toe aan je patch waarmee je de noten van de verschillende steps van de sequencer kunt aanpassen. - Patch het zodanig dat het aanpassen van de noten niet direct hoorbaar is, maar pas zodra die step aan de beurt komt. Gebruik hiervoor de cold-inlet van het int object.
(beoordeling: voldoende)
e. Count Measures
- Voeg een extra
[counter]
toe die de maten telt (dus 1x per maat krijgt deze counter een bang en gaat de teller een stap omhoog). - Bepaal zelf hoe lang die counter doortelt totdat die weer terug gaat naar het begin, bijvoorbeeld 0 t/m 11 (een heel octaaf).
- Gebruik nu een
[+]
-object om de tel als vaste waarde bij elke noot van de sequence op te tellen gedurende de hele maat lang (de melodie wordt dus getransponeerd met 1 semitoon, dan 2 semitonen, dan 3, etc). Tip: kijk naar de vorige opdracht voor het optellen. - Let op dat het aanpassen van deze tel gebeurt aan de cold-inlet, en je dus eerst deze tel moet klaarzetten voordat de MIDI-noot getriggered wordt.
(beoordeling: goed)
UITDAGING
(beoordeling: zeer goed)
Ben je klaar met alle bovenstaande opdrachten? Ga dan verder bouwen op deze stepsequencer. Gebruik onderstaande suggesties als uitgangspunt, maar natuurlijk moedigen wij je aan om er verder mee te experimenteren nadat je deze suggesties geprobeerd hebt!
Adjustable Counting
Zorg dat de stepsequencer een groter aantal stappen krijgt (bijvoorbeeld 7, 8, 9, ..., 16) en voeg een manier toe waarmee je met een user-interface object kan aanpassen hoeveel stappen je hoort!
Velocity Sequencing
Voeg een systeem toe waarbij binnen 1 sequence elke step de velocity steeds zachter wordt (bij de herhaling begint de velocity dus weer hard). Tip: Gebruik het
[!-]
en[* ]
-object
Polymeters / Polyritmes
Maak een extra sequencer en zorg dat ze in sync lopen maar wel een andere stepcount hebben (polymeter) OF zorg dat ze dezelfde stepcount hebben maar juist een ander tempo kunnen naar ratio van elkaar (bijvoorbeeld 2 tegen 3, polyritme).