5. Synthese


* Uitgedeeld op 14 november 2024.
* Deadline: aftekenen in de les, uiterlijk 5 december 2024.
* Met deze opdracht denken we dat je zo'n 1 - 3 uur bezig bent tot deel d. Voor verdere stappen ben je waarschijnlijk wat meer tijd kwijt.
* Bronnen bij deze opdracht: Syllabus | P5.js Sound reference
* Schrijf commentaar bij de code die je maakt, zodat duidelijk wordt wat je doet.

Je hebt voor deze opdracht de keuze uit twee mogelijkheden:

  1. je bouwt door op de sequencer: in dat geval maak je een eigen oscillator, met envelope en effecten, die geluid maakt als de sequencer noten afspeelt.
  2. je maakt een nieuwe sketch, waarbij je ook een oscillator maakt met envelope en effecten, maar je (abstracte) piano-toetsen maakt waarmee je de oscillator afspeelt.

De basis is voor allebei de opdrachten tot en met c hetzelfde, bij d pas je jouw keuze toe. De eerste keuze is iets minder werk, in de tweede keuze zit iets meer uitdaging.


a. simpele oscillator

Maak een functie die een oscillator met envelope afspeelt en roep die functie aan als je op de muis klikt.

function makeSound() {
    //hier die functionaliteit om een geluid af te spelen
}

function mousePressed() { 
    makeSound(); //hier roep je de functie aan.
}

b. frequentie aanpassen

pas de functie aan dat je als argument de frequentie van de oscillator kan meegeven in midi-noten. Hiervoor kan je de midiToFreq-functie gebruiken.

function makeSound(midi) {
    //hier die functionaliteit om een geluid af te spelen
}

function mousePressed() { 
    makeSound(60); //hier roep je de functie aan.
}

c. voeg een effect toe

Zorg dat je een effect toevoegt aan de oscillator. Dit kan een reverb, delay of filter zijn. Je bent zelf vrij om te kiezen welke waarden je de parameters geeft.



Keuze-optie 1

klik hier voor keuze-optie 2


d. voeg duur en nootlengte toe aan je functie

Pas de functie makeSound() aan zodat je drie argumenten mee kan geven, midinoot, amplitude en nootlengte.

function makeSound(freq,amp,dur) {
    //hier die functionaliteit om een geluid af te spelen
}

function mousePressed() { 
    makeSound(60,0.5,250); //hier roep je de functie aan.
}

e. integreer de oscillator in je sequencer.

Vervang de functie makeNote() die je tot nu toe hebt gebruikt in je sequencer door je eigen gemaakt oscillator die in makeSound() staat.

(Beoordeling: voldoende)


f. sequence meer parameters

Maak ook andere parameters - zoals die van je effecten (decay time voor reverb, delay time voor delay of cutoff voor filter) aanstuurbaar door de sequencer.

//de constructie van de makeSound-functie ziet er dan zo uit
function makeSound(freq,amp,dur,fx) {
    //hier die functionaliteit om een geluid af te spelen
}

function mousePressed() { 
    makeSound(60,0.5,250,3); //hier roep je de functie aan.
}

(Beoordeling: goed)


g. geavanceerde opdrachten



Keuze-optie 2


d. piano maken

Maak een visuele weergave van een octaaf op een piano. Je kunt hierbij denken aan een zo realistisch mogelijk weergave van een echte piano, maar ook de meest abstracte weergave. Als er maar duidelijk is dat het 12 noten zijn en dat er een onderscheid is tussen de 'witte' en 'zwarte' toetsen. Gebruik een for-loop om de objecten te tekenen.


e. toetsen aanklikken

Zorg dat je de 'toetsen' van jouw piano aan kan klikken en dat dan de corresponderende noot wordt afgespeeld.

(Beoordeling: voldoende)


f. met toetsenbord aansturen

Voeg keyboard-controle toe, waarbij je met het toetsenbord noten kan spelen.


g. sustaining envelope

Pas de envelope zo aan dat de sustain blijft hangen zolang je de toets of muis ingedrukt houdt en dat de release van de envelope pas start als je de toets/muis loslaat.

(Beoordeling goed)


h. geavanceerde opdrachten

(Beoordeling: zeer goed)