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 $$\longrightarrow$$ mineur septiem $$\longrightarrow$$ [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] $$\longrightarrow$$ [G, A#, D, F]
Dit zijn de gezochte noten waaruit het akkoord is opgebouwd.
Schrijf een functie ontleding waaraan de verkorte notatie van een akkoord moet doorgegeven worden. De functie moet een tuple van twee strings teruggeven, die respectievelijk de grondnoot en de symbolische voorstelling 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 string die een grondnoot voorstelt en een lijst van natuurlijke getallen die de toonintervallen in de chromatische toonladder voorstellen van de noten waaruit een akkoord is opgebouwd. De functie moet een lijst teruggeven die de noten 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) een string met de verkorte notatie van een akkoord, ii) een dictionary die de namen van een aantal verschillende types akkoorden afbeeldt op de corresponderende lijst van toonintervallen, en iii) een dictionary die de symbolische voorstelling van dezelfde types akkoorden afbeeldt op de naam van die akkoordtypes. De functie moet een tuple teruggeven dat de noten uit de chromatische toonladder bevat waaruit het akkoord is opgebouwd.
>>> ontleding('F')
('F', '')
>>> ontleding('Gm7')
('G', 'm7')
>>> ontleding('D#M7')
('D#', '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']
>>> 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]}
>>> 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')