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:
- 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.
- 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.
- voeg daarvoor en extra array met toepasselijke waardes toe
- zorg voor extra parameters in je
makeSound()
-functie
//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
- zorg dat de synth bij elke nieuwe noot net iets anders klinkt - genereer voor een aantal parameters random waardes
- maak knoppen voor het aanpassen van de klank van de synthesizer
- voeg expressieve controle toe, bijvoorbeeld door het bewegen van de muis om parameters aan te passen
- maak de synth polyfoon
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
- zorg dat de synth bij elke nieuwe noot net iets anders klinkt - genereer voor een aantal parameters random waardes
- maak aparte knoppen voor het aanpassen van de klank van de synthesizer
- voeg expressieve controle toe, bijvoorbeeld door het bewegen van de muis na/tijdens het indrukken van een toets
- maak de synth polyfoon
(Beoordeling: zeer goed)