In de muziek is een akkoord een harmonische samenklank van drie of meer noten die als één geheel klinken in het oor. Op partituren worden akkoorden verkort genoteerd zodat de muziek snel kan afgelezen worden. Je opdracht bestaat erin om de verkorte notatie van een akkoord (bijvoorbeeld: Gm7
) om te zetten in de reeks noten waaruit het akkoord is opgebouwd (bijvoorbeeld: G A# D F
).
Sla niet in paniek als je geen muzikant bent — deze omzetting gebeurt volgens een eenvoudig principe. Het eerste wat je moet weten zijn de 12 noten van de chromatische toonladder: C C# D D# E F F# G G# A A# B
Het verschil tussen elke twee noten in deze toonladder is een halve toon. Zo liggen er bijvoorbeeld drie halve tonen tussen D
en F
. Er is geen bepaalde grondtoon, waardoor de toonladder op elke toon kan beginnen en na de laatste noot van de toonladder terug de eerste noot volgt (maar dan een octaaf hoger).
Het volgende dat je moet weten zijn de verschillende types akkoorden:
akkoordtype | symbool | toonintervallen |
---|---|---|
majeur | (niets) | [0, 4, 7] |
mineur | m | [0, 3, 7] |
dominant septiem | 7 | [0, 4, 7, 10] |
mineur septiem | m7 | [0, 3, 7, 10] |
majeur septiem | M7 | [0, 4, 7, 11] |
De verkorte notatie van een akkoord bestaat uit twee delen: een grondnoot gevolgd door de symbolische voorstelling van een akkoordtype. De grondnoot wordt genoteerd als een hoofdletter, eventueel gevolgd door een hekje (#
). Om de noten te vinden waaruit het akkoord is opgebouwd, vertrek je van de grondnoot. Daarna selecteer je de tonen uit de chromatische toonladder relatief ten opzichte van de getallen in de lijst van toonintervallen. Het akkoord Gm7
is bijvoorbeeld een mineur septiem akkoord (symbool m7
) met grondnoot G
. We kunnen dus de toonintervallen als volgt terugvinden: m7
→ mineur septiem → [0, 3, 7, 10]
Vervolgens stappen we op de chromatische toonladder 0, 3, 7 en 10 halve tonen vooruit vanaf de grondnoot G
, waarbij we terug naar voor springen als we het einde van de toonladder bereikt hebben: [G+0, G+3, G+7, G+10]
→ [G, A#, D, F]
Dit zijn de gezochte noten waaruit het akkoord is opgebouwd.
Schrijf een functie ontleding
waaraan de verkorte notatie (String
) van een akkoord moet doorgegeven worden. De functie moet een object (Object
) met de sleutels grondnoot
en symbool
(String
) teruggeven waarvan de waarden respectievelijk de grondnoot (String
) en de symbolische voorstelling (String
) van een akkoordtype omschrijven. Het majeurakkoord wordt hierbij symbolisch voorgesteld door de lege string.
Schrijf een functie noten
waaraan twee argumenten moeten doorgegeven worden: een grondnoot (String
) en een reeks (Array
) van natuurlijke getallen (Number
) die de toonintervallen in de chromatische toonladder voorstellen van de noten waaruit een akkoord is opgebouwd. De functie moet een reeks (Array
) teruggeven die de noten(String
) uit de chromatische toonladder bevat waaruit het akkoord is opgebouwd.
Gebruik de functies ontleding
en noten
om daarmee een functie akkoord
te schrijven. Aan deze functie moeten drie argumenten doorgegeven worden: i) de verkorte notatie (String
) van een akkoord, ii) een object (Object
) dat de namen (String
) van een aantal verschillende types akkoorden afbeeldt op de corresponderende reeks (Array
) van toonintervallen, en iii) een object (Object
) dat de symbolische voorstelling (String
) van dezelfde types akkoorden afbeeldt op de naam (String
) van die akkoordtypes. De functie moet een reeks (Array
) teruggeven die de noten (String
) uit de chromatische toonladder bevat waaruit het akkoord is opgebouwd.
> ontleding("F")
{"grondnoot": "F", "symbool": ""}
> ontleding("Gm7")
{"grondnoot": "G", "symbool": "m7"}
> ontleding("D#M7")
{"grondnoot": "D#", "symbool": "M7"}
> noten("F", [0, 4, 7])
["F", "A", "C"]
> noten("G", [0, 3, 7, 10])
["G", "A#", "D", "F"]
> noten("D#", [0, 4, 7, 11])
["D#", "G", "A#", "D"]
> const akkoordtypes = {"majeur": [0, 4, 7], "mineur": [0, 3, 7], "dominant septiem": [0, 4, 7, 10], "mineur septiem": [0, 3, 7, 10], "majeur septiem": [0, 4, 7, 11]}
> const akkoordsymbolen = {"": "majeur", "m": "mineur", "7": "dominant septiem", "m7": "mineur septiem", "M7": "majeur septiem"};
> akkoord("F", akkoordtypes, akkoordsymbolen)
["F", "A", "C"]
> akkoord("Gm7", akkoordtypes, akkoordsymbolen)
["G", "A#", "D", "F"]
> akkoord("D#M7", akkoordtypes, akkoordsymbolen)
["D#", "G", "A#", "D"]