6. Muzikaal canvas
* Uitgedeeld op 28 november 2024.
* Deadline: aftekenen in de les, uiterlijk 19 december 2024.
* Met deze opdracht denken we dat je zo'n 2 - 4 uur bezig bent tot en met stap 5.
* Bronnen bij deze opdracht: Syllabus | P5.js reference
Inleiding
We behandelen in deze opdracht alle lesstof die jullie afgelopen weken gehad hebben, inclusief het laatste onderdeel classes & objecten.
In deze opdracht realiseer je een muzikaal canvas. Door te klikken of automatisch (volgens een bepaald patroon) verschijnen er visuele objecten op het scherm. Tegelijkertijd hoor je een geluid dat gekoppeld is aan dit visuele object. Dus de positie, grootte, kleur, etc. heeft een relatie tot de klank die je hoort. Na een bepaalde tijd verdwijnt het object en dus ook het geluid.
Bij deze opdracht is het verplicht gebruik te maken van classes en objecten en de p5-sound library.
a. Maak een classbeschrijving op papier
Je gaat straks een classomschrijving maken van het visuele object dat jij wil dat er gegenereerd moet worden. Voordat je dat doet is het goed om na te denken welke functies en eigenschappen je voor dit object gaat maken.
eigenschappen
Beschrijf eerst op papier wat de eigenschappen moeten zijn en hoe de waarde van deze eigenschappen bepaald moeten worden.
Een eigenschap is bijvoorbeeld de positie. Wordt deze willekeurig bepaald, of door waar de gebruiker in het canvas klikt?
functies
Beschrijf vervolgens ook de functies die het object moet krijgen.
Verplichte functies zijn verschijnen, geluid afspelen en verdwijnen. Je bent vrij om nog veel meer verschillende functies te bedenken.
Schrijf hierbij ook op:
- Hoe de objecten verschijnen (bij klikken, automatisch, iets anders?)
- Welk geluid er afgespeeld wordt (synthese, samples?)
- Hoe de objecten weer verdwijnen (wegfaden, uit beeld bewegen, kleiner worden, iets anders?)
laat deze papieren uitwerking ook zien bij de beoordeling
b. Werk de class uit in code - begin met de basis.
zie voor meer informatie voor deze stap: classes
- maak de classomschrijving voor jouw visuele object.
- begin met een constructor waarin de eigenschappen worden beschreven
- maak vervolgens een
teken()
-method waarmee je het visuele object kan tekenen.
c. Maak ÊÊn object uit de classbeschrijving.
zie voor meer informatie voor deze stap: objecten maken
Nu je de omschrijving van de class hebt kan je objecten gaan maken.
Zorg eerst dat er een object wordt aangemaakt in de setup()
-functie en dat dit object wordt getekend in de draw()
-functie.
d. Maak meerdere objecten.
zie voor meer informatie voor deze stap: objecten in array
Nu het gelukt is om ÊÊn object aan te maken ga je met behulp van een array meerdere objecten aanmaken. Doe dit op de manier zoals je in stap a hebt omschreven.
bijvoorbeeld als je kiest voor verschijnen bij klikken, voeg bij elke klik een object toe aan een lijst, zorg dat van alle objecten in de lijst de
teken()
-functie wordt aangeroepen
e. Laat de objecten weer verdwijnen.
Pas de classomschrijving zo aan dat de objecten na een bepaalde tijd niet meer zichtbaar zijn. Voer hierbij uit wat je in stap a hebt beschreven.
f. Voeg geluid toe
Voeg aan je classomschrijving toe dat er geluid wordt afgespeeld zodra een object verschijnt.
Dit kan een gesynthetiseerd geluid zijn of een sample die wordt afgespeeld of start met loopen.
Maak het een muzikaal geheel, dus probeer een onsamenhangende kakofonie bij het verschijnen van meerdere objecten te voorkomen.
let op, zorg dat het geluid maar ÊÊn keer getriggered wordt bij verschijnen en niet continu opnieuw wordt afgespeeld
let op, zorg dat het geluid in ieder geval weer gestopt is als het visuele object verdwenen is
(beoordeling: voldoende)
g. adaptief geluid
Laat het geluid meebewegen met het bewegen/verdwijnen van het visuele object. Je zou bijvoorbeeld de toonhoogte, een synthesizer parameter, de afspeelsnelheid van een sample of iets dergelijks aan, aan de hand van hoe het visuele object verdwijnt.
een voor de hand liggende optie zou zijn het geluid uitfaden als het object langzaam verdwijnt. Probeer vooral een creatieve manier te vinden
(beoordeling: goed)
h. geavanceerde opdrachten
- Voeg de mogelijkheid toe om bestaande objecten te verplaatsen op het scherm. Zorg dat het geluid blijft kloppen bij de veranderende positie. Zorg dat het ook mogelijk is om objecten vroegtijdig weg te halen.
- Maak een polyritmische sequencer waar een eigenschap van een object het tempo dat de noot wordt gespeeld bepaald. Bijvoorbeeld: objecten aan de linkerkant van het scherm spelen op een sneller tempo dan de objecten aan de rechterkant van het scherm.
- Maak een 2d sequencer: vanuit het midden wordt een cirkel steeds groter, dit is de playhead, zodra de radius van de cirkel een object raakt speelt deze de noot. Objecten verdwijnen nu niet meer als je ze op het scherm zet maar krijgen een vaste positie en spelen hun geluid telkens als de radius van de cirkel langs het object komt.
- Gebruik WebMIDI om met MIDI een DAW of MIDI synthesizer aan te sturen.
- Voeg interactie tussen de verschillende objecten toe. Bijvoorbeeld: objecten die dicht bij elkaar staan stoten elkaar af of bewegen naar elkaar toe.
(beoordeling: zeer goed)