SYSBAS1A/MAX Practicum
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 algoritmische compositie gaat maken op basis van de de tijd, een snooze-functie maakt en een user-interface bouwt. Bewaar vanaf nu dus altijd je patch, want je bouwt hier op voort! Voor deze opdracht ben je verplicht a t/m f te maken.
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 de Max Cheat Sheet
Plaats comments (sneltoets "c") bij delen van je patch om voor jezelf duidelijk te maken 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.
Maak je patch netjes en overzichtelijk voordat je hem laat aftekenen!
a)
Gebruik het [date] object om de huidige tijd weer te geven in 3 numberboxes. Zorg dat [date] iedere seconde de tijd update met behulp van een [metro]. Hiervoor moet je de goede message naar date sturen. Gebruik [unpack] om de lijst van date om te zetten naar 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)
Maak nu een wekker functie, deze moet voldoen aan de volgende eisen:
1. Zorg dat je de tijd waarop de wekker af moet gaan kan instellen (uren + minuten + seconden) met number-boxes. (De tijd in kunnen stellen met seconden is handig tijdens het programmeren zodat je niet telkens een minuut hoeft te wachten om te zien of iets werkt.)
2. Als de wekker afgaat moet het woord "Alarm!" 1x geprint worden naar de Max-Console.
Objecten die je nodig zult hebben: [==], [+ ], [select], [print], [message].
c)
Zorg nu dat, zodra je wekker afgaat, er een metro aan gaat die om de 100 ms een midinoot afspeelt. Gebruik hiervoor de midi module van de afbeelding uit opdracht1 deel3b. (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)
Maak een aan/uit functie voor het Alarm van je wekker, deze functie moet voldoen aan de volgende eisen:
1. De tijd moet altijd doorlopen.
2. De alarmfunctie kan in of uitgeschakeld worden (vergelijkbaar met een alarm aanzetten op je smartphone).
3. Het alarm moet uitgezet worden met dezelfde toggle waarmee je de alarmfunctie inschakeld, nadat die is afgegaan op de juiste tijd.
Objecten die je nodig zult hebben: [gate], [toggle], [trigger], [select]
e)
Zorg dat alle instellingen van je patch bij het opstarten ervan meteen correct zijn, gebruik hiervoor de [loadbang] of [loadmess] objecten. De default-tijd van de wekker bij het opstarten moet 08:30 zijn. De tijd moet direct lopen.
f)
Maak je patch overzichtelijk en leesbaar:
1. Zorg dat al je user-interface objecten voorzien zijn van comments (sneltoets c voor een commentbox), 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-8
EXTRA
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 [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].
5. Bouw verder met de bovenstaande toevoegingen! GA LOS!
cijfer: 8-10