2 My Simple Sequencer


In deze opdracht bouw je een simpele step sequencer die midinoten speelt. Je kunt zelf bepalen hoe ver je de opdracht maakt, maar minimaal t/m C. Kijk ook naar de uitdagingen als je meer wilt patchen!

Belangrijke objecten in deze opdracht:



Snap je de functie van een object niet? Gebruik alt-click op het object om er meer over te weten te komen. Help-files in Max bestaan uit werkende programma's, zodat je meteen de toepassing van het object kan zien. Bekijk ook de Max Keyboard Shortcuts en Max CheatSheet.

Plaats comments (sneltoets c) bij delen van je patch om voor jezelf en ons duidelijk te maken dat je snapt wat er gebeurd en hoe iets werkt. Dit wordt documentatie genoemd, en kan je helpen jezelf te herinneren als je een week later (of een maand/jaar) weer eens de patch opent. Ook helpt dit ons gerichte vragen te stellen bij het aftekenen.

Maak je patch netjes en overzichtelijk voordat je hem laat aftekenen!



a. Counting

Maak een [counter]. Bekijk de help-file en zorg dat de teller van 1 t/m 4 gaat (hiervoor moet je de counter de goede argumenten geven). Telkens eentje 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 zien in een [number] of [print] het naar de max-window.

b. Tempo

Maak een patch die een bepaald 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 * 1000) / 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 bereking 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. Let dus op de initial-value wat als argument in je objecten moet staan. Hiervoor zal het object [/ 0.] i.c.m een [trigger] of [!/ 0.] heel handig zijn.

c. Steps

Met het [select] object kun je een bang sturen zodra een getal uit de argumenten overeenkomt met het inkomende getal. Gebruik het select-object om elke tel een bang te sturen van de counter uit een verschillende outlet. Maak nu 4 [message]-objecten aan die elk een andere midi-noot als argument krijgen (bijvoorbeeld: (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.

(cijfer: 6)

d. Customized Notes

Bekijk het [int]-object eens, en ook de help-file. Vervang de 4 messages voor 4 [int] objecten en stuur bangs van het select-object naar de hot-inlet. Voeg 4 [number] objecten toe aan je patch waarom je de noten van de verschillende steps van de sequencer kunt aanpassen. Het aanpassen moet niet direct hoorbaar zijn, maar pas zodra die step aan de beurt komt! Gebruik hiervoor de cold-inlet van het int object.

(cijfer: 7)


UITDAGING

(cijfer: 8, 9)

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!

Uneven Counting

Zorg dat de stepsequencer een oneven aantal steps krijgt (bijvoorbeeld 5, 7, 9) en verzien een manier waarmee je met een user-interface object dat ook kan aanpassen!

Count Measures

Voeg een extra counter toe die elke maat telt en daarmee een vaste waarde bij alle steps van de sequence kan optellen voor 1 maat lang. Tip: kijk naar de vorige opdracht voor het optellen.

Velocity Sequencing

Voeg een optie toe dat elke step de velocity steeds iets zachter wordt. Tip: Gebruik het [!-] en [* ]-object