# -*- coding: ISO-8859-1 -*- """ capellaScript -- 13.10.2009 Axel Sauer >>> Querflötengriffe anzeigen (Version 1.2 - 06.02.2014)|| Mit diesem Skript werden die Griffe für die Spielmannszugs Sopran- oder Alt-Flöte, sowie für Lyra und Trompete Bb angezeigt. || Da sich unsere Lyra-Spieler auch nach diesen Griffen orientieren, kann hier auch das Lyra in C- oder Bb-Stimmung ausgewählt werden. Dies dient allerdings nur zur Kontrolle des Tonumfangs. || Bitte den Cursor für die automatische Zeilenwahl in die entsprechende Notenzeile setzen oder die gewünschte Notenzeile im nachfolgenden Dialog wählen.|| Falls nur bestimmte Noten die Griffe erhalten sollen, bitte diese vor Aufruf des Skripts markieren.|| <<< v0.90 13.10.2009: Erster Versuch auf der Grundlage eines Skripts von Hans H. Lampe (Quelle www.capella.de) V0.91 15.10.2009: Unterscheidung nach Instrumenten Der Intrumententyp "Lyra" dient hierbei hautsächlich zur Kontrolle des Tonumfangs v1.0 17.10.2009: The Final! Alle Griffe noch einmal mit der Sandner Griffetabelle verglichen und ergänzt. v1.1 10.11.2013: Griffe für Trompete sind jetzt ebenfalls auswählbar v1.2 06.02.2014: Trompetengriffe werden nun eine Oktave tiefer ausgegeben, da so die bestehenden Querflötennoten verwendet werden können REMEMBER! VERSIONSNUMMER AUCH IN DIALOGBOX ANPASSEN!!! """ activeScore().registerUndo("Querflötengriffe anzeigen") # -------- Cursorzeile ermitteln --------- # staffList = activeScore().voiceList() staffIndex = 0 sel = curSelection() if sel <> 0: (sy,st,vo,no0) = sel[0] (sy1,st1,vo1,no1) = sel[1] # nur 'no1' wird verwendet system = activeScore().system(sy) staff = system.staff(st) # ------ Aktuellen Eintrag im Mustersystem bestimmen ------- # i = 0 for descr in staffList: if staff.index() == system.staffIndexFromDescr(descr): staffIndex = i i += 1 # -------- Instrumententypen -------- # typeList = ['Sopran-Flöte', # 0 'Alt-Flöte', # 1 'Lyra C', # 2 'Lyra Bb (Katrin)', # 3 'Trompete Bb (eine Oktave nach unten Transponiert)'] # 4 # -------- Dialogbox --------- # labStaff1 = Label('Notenzeile des Instruments wählen (durch Cursorpositionierung automatisch vorgewählt)') selStaff = ComboBox(staffList, value = staffIndex, width = 22) labStaff2 = Label(' "Beschreibung" der Notenzeile im Mustersystem', width=38) selType = ComboBox(typeList, value=0, width=40) labType = Label(' Bitte Instrumententyp auswählen', width=12) note = Label('"Lyra" nur zur Kontrolle des Tonumfangs (nicht spielbare Noten werden rot markiert)') numberSize = Edit(' 7', width=2) labSize = Label(' Zifferngröße ') vertDist = Edit(' 5', width=2) labDist = Label(' vertikaler Abstand von der Notenzeile') strich = CheckBox('gleichbleibende Griffe werden durch einen Strich "-" dargestellt', value=0) markieren = Label('HINWEIS: Für markierte Noten werden Griffe exklusiv angezeigt') dlg = Dialog('Querflötengriffe anzeigen (Version 1.2)', VBox([ HBox([labStaff1]), (''), HBox([selStaff, labStaff2]), (''), HBox([selType, labType]), HBox([note]), (''), HBox([numberSize, labSize, vertDist, labDist]), (''), HBox([strich]), (''), HBox([markieren]), ('') ] ) ) # ------ Hauptprogramm ------ # def dlgRun(): global system, vo, no if dlg.run(): from caplib.capDOM import ScoreChange import xml.dom.minidom DOC = xml.dom.minidom.Document import tempfile, codecs # Griffe # 0 = Sopran-Flöte, 1 = Alt-Flöte, 2 = Lyra C, 3 = Lyra Bb, 4 = Trompete Bb # Sopran-Flöte types = {0:{62:'1\r\n/\r\n7', # d 63:'1\r\n/\r\n6', # dis / es 64:'1\r\n/\r\n5', # e 65:'1\r\n2\r\n3\r\n4\r\n6\r\n7', # f 66:'1\r\n2\r\n3\r\n5\r\n6\r\n7', # fis / ges 67:'1\r\n2\r\n3', # g 68:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # gis / as 69:'1\r\n2', # a 70:'1\r\n3\r\n4\r\n5\r\n6', # ais / b 71:'1', # h 72:'2\r\n3', # c 73:'4\r\n5\r\n6', # cis / des 74:'2\r\n/\r\n7', # d 75:'2\r\n/\r\n6', # dis / es 76:'1\r\n/\r\n5', # e 77:'1\r\n2\r\n3\r\n4\r\n6', # f 78:'1\r\n2\r\n3\r\n5\r\n6', # fis / ges 79:'1\r\n2\r\n3', # g 80:'1\r\n2\r\n4', # gis / as 81:'1\r\n2', # a 82:'1\r\n3', # ais / b 83:'1', # h 84:'1\r\n3\r\n4\r\n6', # c 85:'4\r\n5\r\n6', # cis / des 86:'2\r\n3', # d 87:'2\r\n3\r\n5\r\n6', # dis / es 88:'1\r\n2\r\n5\r\n6', # e 89:'1\r\n2\r\n4', # f 90:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # fis / ges 91:'1\r\n3\r\n7', # g 92:'3\r\n6', # gis / aes 93:'2\r\n/\r\n7'}, # a # 94:'1\r\n2\r\n4\r\n7', # ais / b # 95:'1\r\n2\r\n(3)', # h # 96:'1\r\n3\r\n4\r\n5', # c # 97:'n.a.', # cis / des # 98:'3\r\n4\r\n7'}, # d # Alt-Flöte 1:{62:'1\r\n/\r\n7', # d 63:'1\r\n/\r\n6', # dis / es 64:'1\r\n/\r\n5', # e 65:'1\r\n2\r\n3\r\n4\r\n6\r\n7', # f 66:'1\r\n2\r\n3\r\n5\r\n6\r\n7', # fis / ges 67:'1\r\n2\r\n3', # g 68:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # gis / as 69:'1\r\n2', # a 70:'1\r\n3\r\n4\r\n5\r\n6', # ais / b 71:'1', # h 72:'2\r\n3', # c 73:'4\r\n5\r\n6', # cis / des 74:'2\r\n/\r\n7', # d 75:'2\r\n/\r\n6', # dis / es 76:'1\r\n/\r\n5', # e 77:'1\r\n2\r\n3\r\n4\r\n6', # f 78:'1\r\n2\r\n3\r\n5\r\n6', # fis / ges 79:'1\r\n2\r\n3', # g 80:'1\r\n2\r\n4', # gis / as 81:'1\r\n2', # a 82:'1\r\n3', # ais / b 83:'1', # h 84:'1\r\n3\r\n4\r\n6', # c 85:'4\r\n5\r\n6', # cis / des 86:'2\r\n3', # d 87:'2\r\n3\r\n5\r\n6', # dis / es 88:'1\r\n2\r\n5\r\n6'}, # e # 89:'1\r\n2\r\n4', # f # 90:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # fis / ges # 91:'1\r\n3\r\n7', # g # 92:'3\r\n6', # gis / aes # 93:'2\r\n/\r\n7', # a # 94:'1\r\n2\r\n4\r\n7', # ais / b # 95:'1\r\n2\r\n(3)', # h # 96:'1\r\n3\r\n4\r\n5', # c # 97:'n.a.', # cis / des # 98:'3\r\n4\r\n7'}, # d # Lyra C 2:{ # 62:'1\r\n/\r\n7', # d # 63:'1\r\n/\r\n6', # dis / es # 64:'1\r\n/\r\n5', # e # 65:'1\r\n2\r\n3\r\n4\r\n6\r\n7', # f # 66:'1\r\n2\r\n3\r\n5\r\n6\r\n7', # fis / ges # 67:'1\r\n2\r\n3', # g # 68:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # gis / as # 69:'1\r\n2', # a # 70:'1\r\n3\r\n4\r\n5\r\n6', # ais / b # 71:'1', # h # 72:'2\r\n3', # c # 73:'4\r\n5\r\n6', # cis / des 74:'2\r\n/\r\n7', # d 75:'2\r\n/\r\n6', # dis / es 76:'1\r\n/\r\n5', # e 77:'1\r\n2\r\n3\r\n4\r\n6', # f 78:'1\r\n2\r\n3\r\n5\r\n6', # fis / ges 79:'1\r\n2\r\n3', # g 80:'1\r\n2\r\n4', # gis / as 81:'1\r\n2', # a 82:'1\r\n3', # ais / b 83:'1', # h 84:'1\r\n3\r\n4\r\n6', # c 85:'4\r\n5\r\n6', # cis / des 86:'2\r\n3', # d 87:'2\r\n3\r\n5\r\n6', # dis / es 88:'1\r\n2\r\n5\r\n6', # e 89:'1\r\n2\r\n4', # f 90:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # fis / ges 91:'1\r\n3\r\n7', # g 92:'3\r\n6', # gis / aes 93:'2\r\n/\r\n7', # a 94:'1\r\n2\r\n4\r\n7', # ais / b 95:'1\r\n2\r\n(3)', # h 96:'1\r\n3\r\n4\r\n5', # c 97:'n.a.', # cis / des 98:'3\r\n4\r\n7'}, # d # Lyra Bb 3:{ # 62:'1\r\n/\r\n7', # d # 63:'1\r\n/\r\n6', # dis / es # 64:'1\r\n/\r\n5', # e # 65:'1\r\n2\r\n3\r\n4\r\n6\r\n7', # f # 66:'1\r\n2\r\n3\r\n5\r\n6\r\n7', # fis / ges # 67:'1\r\n2\r\n3', # g # 68:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # gis / as # 69:'1\r\n2', # a # 70:'1\r\n3\r\n4\r\n5\r\n6', # ais / b # 71:'1', # h 72:'2\r\n3', # c 73:'4\r\n5\r\n6', # cis / des 74:'2\r\n/\r\n7', # d 75:'2\r\n/\r\n6', # dis / es 76:'1\r\n/\r\n5', # e 77:'1\r\n2\r\n3\r\n4\r\n6', # f 78:'1\r\n2\r\n3\r\n5\r\n6', # fis / ges 79:'1\r\n2\r\n3', # g 80:'1\r\n2\r\n4', # gis / as 81:'1\r\n2', # a 82:'1\r\n3', # ais / b 83:'1', # h 84:'1\r\n3\r\n4\r\n6', # c 85:'4\r\n5\r\n6', # cis / des 86:'2\r\n3', # d 87:'2\r\n3\r\n5\r\n6', # dis / es 88:'1\r\n2\r\n5\r\n6', # e 89:'1\r\n2\r\n4', # f 90:'1\r\n2\r\n4\r\n5\r\n6\r\n7', # fis / ges 91:'1\r\n3\r\n7', # g 92:'3\r\n6', # gis / aes 93:'2\r\n/\r\n7', # a 94:'1\r\n2\r\n4\r\n7', # ais / b 95:'1\r\n2\r\n(3)', # h 96:'1\r\n3\r\n4\r\n5'}, # c # 97:'n.a.', # cis / des # 98:'3\r\n4\r\n7'} # d # Trompte Bb 4:{ 66:'1\r\n2\r\n3', # fis / ges 67:'1\r\n3', # g 68:'2\r\n3', # gis / as 69:'1\r\n2', # a 70:'1', # ais / b 71:'2', # h 72:'0', # c 73:'1\r\n2\r\n3', # cis / des 74:'1\r\n3', # d 75:'2\r\n3', # dis / es 76:'1\r\n2', # e 77:'1', # f 78:'2', # fis / ges 79:'0', # g 80:'2\r\n3', # gis / as 81:'1\r\n2', # a 82:'1', # ais / b 83:'2', # h 84:'0', # c 85:'1\r\n2', # cis / des 86:'1', # d 87:'2', # dis / es 88:'0', # e 89:'1', # f 90:'2', # fis / ges 91:'0', # g 92:'2\r\n3', # gis / aes 93:'1\r\n2\r\n(3)', # a 94:'1', # ais / b 95:'2', # h 96:'0', # c 97:'1\r\n2', # cis / des 98:'1', # d 99:'2', # dis / es 100:'0'} # e } # Tonumfang der Instrumente # 0 = Sopran-Flöte, 1 = Alt-Flöte, 2 = Lyra C, 3 = Lyra Bb, 4 = Trompete Bb range = {0:(62,93),1:(62,88),2:(74,98),3:(72,96),4:(67,100)} number = {'x':0,'y':8,'font':{'height':8.0},'type':'text','content':''} font = number['font'] font['height'] = int(numberSize.value()) number['y'] = int(vertDist.value()) saveNumber = 'x' # zum Erkennen gleichbleibender Griffe, die durch '-' dargestellt werden indOutRange = 0 # Griffe erzeugen for system in activeScore().systems(): for staff in system.staves(): if staff.index() <> system.staffIndexFromDescr(staffList[selStaff.value()]): continue # Aufsuchen der entsprechenden Notenzeile for obj in staff.noteObjs(): if obj.isChord(): if sel[0] != sel[1]: # Markierung vorhanden syIndex = system.index() stIndex = staff.index() if syIndex == sy and stIndex == st: objIndex = obj.index() if objIndex < no0 or no1 <= objIndex: # markierter Bereich zwischen 'no0' und 'no1'-1 continue head = obj.head(0) chrP = head.chromaticPitch() type = types[selType.value()] Bl = (Color.RGB(0,0,0)) # schwarz obj.setColor(Bl) try: # prüfen, ob Tonumfang des gewählten Instruments eingehalten ist number['content'] = type[chrP] font['weight'] = 0 # nicht fett except: # Tonumfang ist nicht eingehalten indOutRange = 1 saveNumber = 'x' # keinen Strich nach Note(n) außerhalb des Tonbereichs continue # Ablauf fortsetzen if strich.value(): # Striche sollen dargestellt werden if saveNumber == type[chrP]: # Griff bleibt gleich number['content'] = '-' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe obj.addDrawObj(number) # Anzeige des Griffes oder Strichs else: # keine Markierung vorhanden head = obj.head(0) chrP = head.chromaticPitch() type = types[selType.value()] Bl = (Color.RGB(0,0,0)) # schwarz obj.setColor(Bl) try: # prüfen, ob Tonumfang des gewählten Instruments eingehalten ist number['content'] = type[chrP] font['weight'] = 0 # nicht fett except: # Tonumfang ist nicht eingehalten indOutRange = 1 saveNumber = 'x' # keinen Strich nach Note(n) außerhalb des Tonbereichs continue # Ablauf fortsetzen if strich.value(): # Striche sollen dargestellt werden if saveNumber == type[chrP]: # Griff bleibt gleich number['content'] = '-' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe obj.addDrawObj(number) # Anzeige des Griffes oder Strichs # ------ Einfärben der Noten außerhalb des Tonbereichs ------ # if indOutRange: for system in activeScore().systems(): for staff in system.staves(): if staff.index() <> system.staffIndexFromDescr(staffList[selStaff.value()]): continue # -------- Töne außerhalb des Tonumfangs werden rot, bzw. blau dargestellt -------- # R = (Color.RGB(255,0,0)) # rot = Note oberhalb des Tonumfang des gewählten Instruments B = (Color.RGB(0,0,255)) # blau = Note unterhalb des Tonumfang des gewählten Instruments for obj in staff.noteObjs(): if obj.isChord(): head = obj.head(0) chrP = head.chromaticPitch() #messageBox('pitch',str(chrP)) pR = range[selType.value()] # PitchRange des gewählten Instruments pLow = pR[0] pHigh = pR[1] if (chrP < pLow): # Note liegt unterhalb des Tonbereich obj.setColor(B) elif (chrP > pHigh): # Note liegt oberhalb des Tonbereichs obj.setColor(R) continue messageBox('Pass doch ob!!!', "Dau Lappes!!!\r\n\r\nDo sin Tön, die kann dat Instrument jarnet spille!\r\n\r\nWeißte wat?\r\n\r\n Ich färv die mol in: blau unner- un rut över dat, wat et Intrument spille kann!", img=3) dlgRun()