3 Een Wekker Bouwen


Bij deze opdracht ga je de logica van een wekker bouwen in Max. Dit is de eerste opdracht uit een serie van 3, waarin je naast het bouwen van de logica in de wekker ook een snooze-functie gaat maken, een algoritmische compositie gaat maken op basis van de de tijd en een user-interface bouwt. Bewaar vanaf nu dus altijd je patch, want je bouwt hier op voort! Je hebt tot de roostervrije week de tijd om deze opdracht te laten aftekenen. Voor deze opdracht ben je verplicht a t/m f te maken.

Deadline voor alle opdrachten: 15 October

Belangrijke objecten in deze opdracht (plus alle objecten van voorgaande opdrachten):



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. What's the time?

Gebruik het [date] object om de huidige tijd weer te geven in 3 numberboxes. Gebruik het [metro] object om iedere seconde de tijd van [date] op te vragen met een (time) message. Gebruik [unpack i i i] om de lijst van de outlet van date uit te pakken in 3 afzonderlijke numbers. Open de helpfile van date om te zien hoe het object werkt!

Objecten die je nodig zult hebben: [date], [metro], [toggle], [unpack], [number]

b. Alarm!

Maak nu een wekker functie, deze moet voldoen aan de volgende eisen:

  1. Gebruik 2 [number]-boxes om de uren en minuten voor je wekker in te kunnen stellen (optioneel stel je ook seconden in, dat is handig tijdens programmeren zodat je niet zo lang hoeft te wachten om te zien of iets werkt).
  2. Vergelijk de uren, minuten en seconden met de door jouw ingestelde tijd door de comparator [==] te gebruiken.
  3. Alleen zodra alledrie de tijdseenheden kloppen moet er een bang gestuurd worden
  4. De bang moet de message Alarm! 1x printen naar de max-window.

Objecten die je nodig zult hebben: [==], [+ ], [select], [print], [message].

c. Alarm! Alarm! Alarm! Alarm! ∞!

Zorg nu dat, zodra je wekker "afgaat", de bang ervoor zorgt dat er een metro aan gaat die om de 100 ms een midinoot afspeelt. Gebruik hiervoor de [makenote] en [noteout] combinatie uit de vorige opdrachten. (NB: De wekker moet vanaf dat moment altijd blijven aan staan, en niet uit gaan na 1 minuut of 1 seconde.)

Objecten die nodig zijn: [metro], [message], [makenote], [noteout]

d. Make it stop

Maak een aan/uit knop voor je wekker met behulp van een [toggle]. Deze knop krijgt de volgende functies:

  1. Als de [toggle] een 0 stuurt gaat de [metro] van je wekker uit, en kan het alarm niet meer afgaan door de vergelijking.
  2. De [toggle] heeft geen invloed op de huidige tijd, die moet altijd blijven lopen.
  3. Als de [toggle] een 1 stuurt (en de wekker dus "aan" staat), gaat niet het geluid af, maar kan wel het alarm in de toekomst op de ingestelde tijd afgaan. (vergelijkbaar met een alarm "aan"-zetten op je smartphone).

Objecten die je waarschijnlijk nodig zult hebben: [gate], [toggle], [trigger], [select], [message]

e. Clean-up

Zorg dat alle instellingen van je patch bij het opstarten ervan meteen correct zijn, gebruik hiervoor de [loadbang] of [loadmess] objecten. De default van de ingestelde alarm-tijd bij het opstarten moet 08:30 zijn. De klok van de wekker moet direct lopen.

Maak je patch overzichtelijk, leesbaar en gebruik comments:

  1. Zorg dat al je user-interface objecten voorzien zijn van comments, zodat een eventuele gebruiker van je patch weet waar alle knoppen voor dienen.
  2. Plaats ook comments voor jezelf zodat je volgende week nog weet hoe alles werkt wat je hebt gebouwd.

(cijfer: 6, 7)


UITDAGING

(cijfer: 8, 9, 10, 10+ met eeuwige waardering)

Ben je klaar met alle bovenstaande opdrachten? Kijk eens naar een of meer van deze opdrachten om je patch mee uit te breiden:

  1. Probeer je wekkerfunctie van vraag 2 opnieuw te maken zonder het [==] object en probeer zo min mogelijk objecten te gebruiken. Tip, kijk naar de volgende objecten: [expr], [if]

  2. Maak een interessantere midi module voor als je wekker afgaat. Bijvoorbeeld: Er wordt een midisequentie afgespeeld, de midinoten die afgespeeld worden zijn gerelateerd aan hoe laat het is, de midinoten worden steeds harder nadat de wekker is afgegaan en je hem niet uit zet...etc.

  3. Zorg dat de tijd niet in 3 integer boxes wordt weergegeven maar in 1 [comment] of [message] object en zorg dat er : tussen de getallen staat. Tip, kijk eens naar de volgende objecten en de help-files daarvan: [sprintf] en [combine].

  4. Los het kleiner dan 10 probleem op zodat je tijd op de volgende manier wordt weergegeven 05:30:02 i.p.v. 5:30:2. Tip, de volgende objecten kunnen van pas komen : [combine], [sprintf], [if], [select].