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: 15 oktober

Belangrijke objecten in deze opdracht:



LET OP

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. Counter

Maak een [counter].

  1. Zorg dat de teller van 1 t/m 5 gaat (zie de help-file voor meer info), laat de tel zien in een [number].
  2. Gebruik een [button], die een bang stuurt naar de hot-inlet van de counter. Klik een paar keer om te zien dat de counter optelt.
  3. Sluit een [metro 500] aan op de counter (via de button), en zet de metro aan/uit met een [toggle].
  4. Controleer dat de counter elke 500 ms naar het volgende nummer telt.


b. Steps

Met het [select] object kun je een bang sturen zodra een getal van de argumenten overeenkomt met het binnenkomende getal.

  1. Gebruik [select] om elke stap van de counter een bang te sturen naar een aparte outlet (dus 1 naar outlet 1, ..., 5 naar outlet 5).
  2. Gebruik 5 [message]'s, die elk een andere MIDI-noot als argument krijgen (bijvoorbeeld: (60) (63) (67) (62) (60)).
  3. Trigger de messages via de outlets van [select], zodat elke stap een eigen noot klinkt. Gebruik [makenote] en [noteout] (uit de vorige opdracht) zodat je de MIDI-noot kunt horen. Geef zinnige argumenten mee voor velocity en duration.

Extra: Met [pgmout 1] en [noteout 1] kan je op MIDI channel 1 het instrument veranderen. En [noteout 10] is een MIDI channel met percussie geluiden


c. Tempo

Maak een kleine patch die het tempo (in Beats per Minute) omrekent naar een tijdsinterval (in milliseconden) dat tussen elke bang moet plaats vinden. Dit heb je nodig om BPM in te kunnen vullen, en daarmee de metro aan te sturen. Gebruik de volgende berekening:

tijdinterval(ms) = (60sec * 1000ms) / BPM

Voorbeeld: 120 BPM staat gelijk aan 1 "bang" elke 500 milliseconden.

  1. Gebruik een [flonum] om het BPM in te kunnen stellen.
  2. Dat getal gaat door je berekening heen zoals beschreven hierboven, en het resultaat past het interval van de metro aan.
  3. Denk bij je berekening aan de objecten uit de vorige opdracht, zoals: [/], [!/], [t b f]
  4. 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.


d. Noten aanpassen

Bekijk het [int]-object (niet number!), en de help-file.

  1. Vervang de 5 messages voor 5 [int] objecten en stuur bangs van het select-object naar de hot-inlet.
  2. Voeg 5 [number]-objecten toe aan je patch waarmee je de noten van de verschillende steps van de sequencer kunt aanpassen aan de cold-inlet.
  3. Zorg dat het aanpassen van de noten niet direct hoorbaar is, maar pas zodra die stap aan de beurt is. Gebruik hiervoor de cold-inlet van het [int] object.

Extra: In de inspector-window kan je de [number] display-format aanpassen naar MIDI zodat je geen getal ziet, maar de noot, bijv. E4

(beoordeling: voldoende)


e. Loops tellen

  1. Voeg een extra [counter] toe die de loops telt (dus elke 1ste tel v/d 5 tellen krijgt deze counter een bang en gaat de teller een stap omhoog).
  2. Bepaal zelf hoe lang die counter doortelt totdat die weer terug gaat naar het begin, bijvoorbeeld 0 t/m 7.
  3. Gebruik een [+]-object om bij elke noot van de sequencer de waarde van de maat op te tellen (de melodie wordt daardoor dus getransponeerd met 1 semitoon, daarna 2 semitonen, dan 3, etc). Tip: kijk naar de vorige opdracht voor het optellen.
  4. 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, rekening houdend met het "van-rechts-naar-links" principe van Max.
  5. Voeg een vermenigvuldiging toe onder de "loop-counter" en gebruik een [number] zodat je kan aanpassen of de transponering gebeurt in 1 semi-toon, of een secunde, kleine terts, grote terts, etc.

(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).