# Oppgave 8a, python-del. Kjetil S. Matheussen # Kopier denne til scripts-folderen som notestatistikk.py import pyext # 'intervals' en en liste av noter hvor grunntonen er 0. # F.eks vil [4,7] gi dur (returnere ingenting) og [3,7] gi moll (returnere "m"). def findChord(intervals): ret="" intervals=filter(lambda x:x!=0,intervals) intervals.sort() if intervals==[3,6,9]: return "dim" if intervals==[3,6]: return "dim" if intervals==[6,9]: return "dim" if intervals==[4,8]: return "+" if intervals.count(3)>0: ret="m" for i in intervals: ret+={1:"-lite sekund-", 2:"9", 3:"", 4:"", 5:"-kvart-", 6:"-tritonus-", 7:"", 8:"-liten sekst-", 9:"6", 10:"7", 11:"Maj7" }[i] return ret class NoteStatistikk: def __init__(self): self.notes=map(lambda x:0,range(128)) self.notes2=map(lambda x:0,range(12)) self.num_notes=0 def checkChord(self): if self.num_notes<3: return chord=[] for i in range(128): if self.notes[i]>0: chord.append(i) chord.sort() grunntone=chord[0]%12 for i in range(12): if self.notes2[i]>self.notes2[grunntone]: grunntone=i return ["C","C#","D","D#","E","F","F#","G","G#","A","B","H" ][grunntone ]+findChord(map(lambda x2:(x2-grunntone)%12, chord)) def addNote(self,note,num=1): self.notes[note]+=num self.notes2[note%12]+=num self.num_notes+=num return self.checkChord() def removeNote(self,note): return self.addNote(note,-1) class ns(pyext._class): _inlets=4 _outlets=1 def __init__(self,*args): self.notestatistikk=NoteStatistikk() self.vol=0 def float_1(self,f): ret=self.notestatistikk.addNote(int(f)) if ret!=None: self._outlet(1,ret) def float_2(self,f): ret=self.notestatistikk.removeNote(int(f)) if ret!=None: self._outlet(1,ret) def float_3(self,f): if self.vol==0: self.float_2(f) else: self.float_1(f) def float_4(self,f): self.vol=int(f)