4. Algoritmische bewerkingen
* Uitgedeeld op 7 november 2024.
* Deadline: aftekenen in de les, uiterlijk 28 november 2024.
* Met deze opdracht denken we dat je zo'n 1 - 3 uur bezig bent tot deel e. Voor verdere stappen ben je waarschijnlijk wat meer tijd kwijt.
* Bronnen bij deze opdracht: Syllabus | P5.js reference
* Schrijf commentaar bij de code die je maakt, zodat duidelijk wordt wat je doet.
a. Werk door op de sequencer
Je werkt voor deze opdracht door op de sequencer uit de vorige opdracht. Dus kopieer deze om hier mee verder te kunnen werken.
Maak een nieuw project in je CSDOSC map door opdracht2_sequencer
te kopiΓ«ren en deze naam te geven: opdracht3_algoritmische_bewerkingen
.
gebruik hiervoor het commando
cp -rn opdracht2_sequencer opdracht3_algoritmische_bewerkingen
Start csdosc door in de terminal npm start
te typen in de csdosc map.
b. rotatie
- Maak een functie die alle elementen uit een array die je aan de functie meegeeft 1 positie naar rechts verschuift. Bedenk welke array-functies die je hier in de syllabus vindt je daar bij nodig hebt.
De code zou het volgende resultaat moeten geven:
console.log(rotateRight([1, 2, 3, 4])); //output in de console is dan [4, 1, 2, 3]
Als je moeite hebt om te bedenken welke array-functies je nodig hebt om dit te realiseren, ga dan elke functie die in het genoemde hoofdstuk in de Syllabus staat langs, bekijk wat ze doen en kom er zo achter wat je nodig hebt.
Dus:let lijst = [1,2,3,4]; console.log(lijst.shift(),lijst); console.log(lijst.pop(),lijst); //enzovoorts
- Maak een functie die alle elementen uit een array die je aan de functie meegeeft 1 positie naar links verschuift. Bedenk welke array-functies die je hier in de syllabus vindt je daar bij nodig hebt.
De code zou het volgende resultaat moeten geven:
console.log(rotateLeft([1, 2, 3, 4])); //output inde console is dan [2, 3, 4, 1]
c. trigger een functie met je keyboard
Zorg ervoor dat je de functies uit stap b kan uitvoeren door op een toets op je toetsenbord te drukken. Gebruik de array's met midinoten, amplitudewaarden en nootlengtes uit de vorige opdracht als arrays die je meegeeft aan de functies - kies zelf per array welke bewerking je uitvoert
- Als je op de
n
drukt roteert de array met midinoten links- of rechtsom - Als je op de
a
drukt roteert de array met amplitudewaarden links- of rechtsom - Als je op de
d
drukt roteert de array met nootlengtes links- of rechtsom
Gebruik hiervoor de functie
keyPressed()
en de variabelekeyCode
ofkey
d. Overige array-bewerkingen
Voeg extra toetsenbord-triggers toe om de array's met noot-informatie te bewerken, gebruik hiervoor de in P5.js ingebouwde shuffle()-functie en de standaard javascript reverse()-functie.
Dus bijvoorbeeld, als je op de s
drukt op je toetsenbord, wordt de lijst met toonhoogten geshuffeld, en als je op de r
drukt wordt de lijst met durations naar omgedraaid en zo voor alle drie de arrays.
Speel de sequencer af en druk eens in de zoveel tijd op de door jou ingestelde toetsen, luister naar de verandering, welke functie is het interessantst om toe te passen?
e. Notenmateriaal genereren
zie voor meer informatie voor deze stap: Functies maken in Javascript, kijk specifiek naar het kopje 'Verder werken met het resultaat van een functie' en de subkop 'een array teruggeven uit een functie'
- Maak een functie die met behulp van een for-loop ofwel de midi-, amplitude- of duurwaarden willekeurig in een array zet.
-
Bepaal hierbij een logisch bereik voor de random-waardes. Dat ziet er alsvolgt uit:
let noteArray = fillNotes(10); //10 geeft aan hoeveel noten je wil let ampArray = fillAmp(10); //10 geeft aan hoeveel noten je wil let durArray = fillDuration(10); //10 geeft aan hoeveel noten je wil
de functie ziet er in opzet als volgt uit:
function fillNotes(aantal) { let tempArray = []; //doe iets om x-aantal keer een willekeurig element //aan de tempArray toe te voegen return tempArray; }
Deze functie kan de waarden die je eerder in je array hebt gezet overschrijven.
(beoordeling voldoende)
f. EΓ©n functie voor alles
- Maak de bovenstaande functionaliteit in één functie, waarbij je met een extra argument aangeeft welk type waarde je wil generen.
- Afhankelijk van dat type wordt het juiste bereik in waardes gegenereerd.
let noteArray = fillArray(10,"notes"); let ampArray = fillArray(10,"amp"); let durArray = fillArray(10,"dur");
(beoordeling: goed)
Extra's voor als je meer wil doen!
Als je een zeer goed wil halen moet je minimaal twee van onderstaande opdrachten doen.
- Maak de
reverse()
-functie zelf. - Maak de
shuffle()
-functie zelf. - Laat elke
x-aantal
maten de midinoten, amplitudes of duur automatisch roteren, omdraaien of husselen. - Laat elke
x-aantal
maten de midinoten, amplitudes of duur automatisch generen. - Pas elke
x-aantal
maten de lengte van een van de lijsten aan, zodat de noten-sequence verschuift.
(beoordeling zeer goed)