# -*- coding: ISO-8859-1 -*- """ capellaScript -- 23.05.2019 P.Becker >>> Schalmei - Griffe für die Instrumente einer Schalmeienkapelle anzeigen Dieses Skript basiert auf dem Skript Ventilgriffe anzeigen von H.Lampe| 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 Griff-Angaben erhalten sollen, bitte diese vor Aufruf des Skripts markieren.|| Rückmeldungen bitte an Peter Becker:|peter_becker@freenet.de <<< Shawm - fingerings for instruments of shawms bands

This script is based on the script 'Valve Fingerings, resp. Slide Positions' (Ventilgriffe-anzeigen.py) of H. Lampe.

With this script the fingerings or tones are displayed for the usual instruments of a shawms orchestre.

Feedback please to Peter Becker:

peter_becker@freenet.de

Schalmei - Griffe für die Instrumente einer Schalmeienkapelle anzeigen

Dieses Skript basiert auf dem Skript Ventilgriffe anzeigen von H.Lampe.

Mit diesem Skript werden die Griffe, bzw. Töne für die im Schalmeienorchester üblichen Instrumente angezeigt.

Rückmeldungen bitte an Peter Becker:

peter_becker@freenet.de

Schalmei - Grepen voor instrumenten schalmeienkapel

Dit script is gebaseerd op het script 'Ventielgrepen of schuifposities' (Ventilgriffe-anzeigen.py) van H. Lampe.

Met dit script worden de grepen, resp. tonen voor de gebruikelijke instrumenten van een schalmeienkapel weergegeven.

Reacties graag naar: Peter Becker:

peter_becker@freenet.de

V 1.0.0 PB 23.05.2019 Initial Version V 1.0.1 PB 24.05.2019 Rückwärtskompatibilität zu Capella V5,V6 und V7 ( Vertikale Anzeige ) V 1.0.2 PB 11.06.2019 Alternative Darstellung, verbesserte Zentrierung V 1.0.3 PB 19.06.2019 Korrektur in der alternativen Darstellung V 1.0.4 WW 31.10.2019 Intenationalisierung V 1.0.5 PB 30.01.2020 Farbdarstellung V 1.0.6 PB 14.12.2022 Kompatibilität zu Capella V9, Anzeige nach Haltebogen unterdrücken V 1.0.7 PB 13.11.2023 Position bei vertikaler Darstellung korrigiert """ english = { 'shawmSoBar' :'Shawm - Soprano and Bariton', 'shawmAlt' :'Shawm - Alto', 'shawmBas' :'Shawm - Bass (Treble Clef)', 'shawm4Chord' :'Shawm - Quadruple Chord', 'lyra' :'Bell-Lyra', '4Chord' :'Quadruple Chord', 'selStaffInstr' :'Select Instrument Staff ( preselected automatically by cursor position )', 'DescrStaffLayout' :' Staff \'Description\' in Staff Lay-out', 'selInstr' :' Please select Type of Instrument', 'notation' :'Shawm - notation in F, Lyra - notation in C', 'numbSize' :' Nuber Size ', 'vertDistStaff' :'Vertical Distance from staff downward ( \'negative values\' upward ) ', 'bold' :'Bold ', 'italic' :'Italic ', 'displayHor' :' Horizontal Display ( default is Vertical ) ', 'displayAlter' :' Alternative display of the Fingerings ( horizontal/vertical is not active ) ', 'unchangedFing' :'Unchanged Fingerings are displayed by a Dash', 'delExistFing' :'Delete existing Fingerings ( this option has priority ! )', 'NoteExclusiveDisplayFing' :'N.B. : For marked notes fingerings are displayed exclusively there', 'dialogHeader' :'Shawm - Display fingerings for instruments of shawms bands', 'version' :'Version', 'help' :'\nWith this script the fingerings or tones are displayed for the usual instrumens \ \nPlease put the cursor for automatic staff selection in the concerning staff, \ or select the desired staff in the dialogue.\n\ \nIf only certain notes must obtain the fingering, please mark them before \ opening the script.', 'posDisplay' :'Position and Display', 'format' :'Format', 'options' :'Options', 'outReach' :'Note(s) out of the Standard Range of the Selected Type of Instrument', 'notesColored' :'These notes are displayed in color: blue below, resp. red above the range', 'color' :'Color', 'black' :'Black', 'red' :'red', 'blue' :'blue', 'green' :'green', 'violet' :'violet', 'orange' :'orange', 'bluegreen' :'blue-green' } german = { 'shawmSoBar' :'Schalmei - Sopran und Bariton', 'shawmAlt' :'Schalmei - Alt', 'shawmBas' :'Schalmei - Bass (Violinschlüssel)', 'shawm4Chord' :'Schalmei - 4-fach Akkord', 'lyra' :'Lyra', '4Chord' :'4-fach Akkord', 'selStaffInstr' :'Notenzeile des Instruments wählen ( durch Cursorpositionierung automatisch vorgewählt )', 'DescrStaffLayout' :' \'Beschreibung\' der Notenzeile im Mustersystem', 'selInstr' :' Bitte Instrumententyp auswählen', 'notation' :'Schalmei - Schreibweise in F, Lyra - Schreibweise in C', 'numbSize' :' Zifferngröße ', 'vertDistStaff' :'vertikaler Abstand von der Notenzeile nach unten ( \'negative Werte\' nach oben ) ', 'bold' :'Fettdruck ', 'italic' :'Kursiv ', 'displayHor' :' Darstellung horizontal ( Default ist vertikal ) ', 'displayAlter' :' alternative Darstellung der Griffe ( horizontal/vertikal ist unwirksam ) ', 'unchangedFing' :'gleichbleibende Griffe werden durch einen Strich dargestellt', 'delExistFing' :'vorhandene Griffe löschen ( Diese Option hat Vorrang ! )', 'NoteExclusiveDisplayFing' :'HINWEIS: Für markierte Noten werden Griffe, bzw. Züge exklusiv angezeigt', 'dialogHeader' :'Schalmei - Griffe für die Instrumente einer Schalmeienkapelle anzeigen', 'version' :'Version', 'help' :'Mit diesem Skript werden die Griffe, bzw. Töne für die im Schalmeienorchester \ üblichen Instrumente angezeigt.\ \nBitte den Cursor für die automatische Zeilenwahl in die entsprechende Notenzeile setzen, \ oder die gewünschte Notenzeile im nachfolgenden Dialog wählen. \n\ \nFalls nur bestimmte Noten die Griff-Angaben erhalten sollen, \ bitte diese vor Aufruf des Skripts markieren.', 'posDisplay' :'Position und Darstellung', 'format' :'Aussehen', 'options' :'Optionen', 'outReach' :'Note(n) außerhalb des Standardbereichs der gewählten Instrumentenart', 'notesColored' :'Diese Noten werden farbig dargestellt: blau unterhalb, bzw. rot oberhalb des Bereichs', 'color' :'Farbe', 'black' :'schwarz', 'red' :'rot', 'blue' :'Blau', 'green' :'grün', 'violet' :'violett', 'orange' :'orange', 'bluegreen' :'blau-grün' } dutch = { 'shawmSoBar' :'Schalmei - Sopraan en Bariton', 'shawmAlt' :'Schalmei - Alt', 'shawmBas' :'Schalmei - Bas (Vioolsleutel)', 'shawm4Chord' :'Schalmei - 4-voudig Akkoord', 'lyra' :'Lyra', '4Chord' :'4-voudig Akkoord', 'selStaffInstr' :'Kies de notenbalk van het instrument ( door cursorpositie automatisch voorgeselecteerd )', 'DescrStaffLayout' :' \'Beschrijving\' van de notenbalk in het partituursjabloon', 'selInstr' :' S.v.p. soort instrument selecteren', 'notation' :'Schalmei - notatie in F, Lyra - notatie in C', 'numbSize' :' Cijfergrootte ', 'vertDistStaff' :'Verticale afstand vanaf de notenbalk naar beneden ( \'negatieve waarden\' naar boven ) ', 'bold' :'Vet ', 'italic' :'Cursief ', 'displayHor' :' Horizontale weergave ( standaard is verticaal ) ', 'displayAlter' :' Alternatieve weergave van de grepen ( horizontaal/verticaal is niet actief ) ', 'unchangedFing' :'Gelijkblijvende grepen worden door een streepje weergegeven', 'delExistFing' :'Bestaande grepen verwijderen ( deze optie heeft voorrang ! )', 'NoteExclusiveDisplayFing' :'N.B. : Bij gemarkeerde noten worden grepen uitsluitend aldaar getoond', 'dialogHeader' :'Schalmei - Grepen weergeven voor instrumenten van een schalmeienkapel', 'version' :'Versie', 'help' :'Met dit script worden de grepen, resp. tonen voor de gebruikelijke \ instrumenten van een schalmeikapel weergegeven.\n\ \nS.v.p. plaats voor automatische notenbalkselectie de cursor in de betreffende notenbalk \ of selecteer de gewenste notenbalk in de dialoog.\n\ \nWanneer men het script slechts op bepaalde noten wil toepassen, moet men deze vóór \ het openen van het script markeren.', 'posDisplay' :'Positie en weergave', 'format' :'Opmaak', 'options' :'Opties', 'outReach' :'Note(n) buiten het standaardbereik van het geselecteerde soort instrument', 'notesColored' :'Deze noten worden in kleur weergegeven: blauw onder en rood boven het bereik', 'color' :'gekleurd', 'black' :'zwart', 'red' :'rood', 'blue' :'blauw', 'green' :'groen', 'violet' :'violet', 'orange' :'oranje', 'bluegreen' :'blauw-groen' } try: setStringTable( ("en", english), ("de", german), ("nl", dutch)) except: def tr(s): return german[s] ###################################################################### from caplib.capDOM import ScoreChange import xml.dom.minidom DOC = xml.dom.minidom.Document import tempfile global xcomFarbe activeScore().registerUndo("Schalmei") version = '1.0.7' ######################################################################### #---Start der externen Skripte --------------------------------------------------------------------------------------------------------------------------------------# def getTies(staffIx,voiceIx): # Haltebogenliste erzeugen def changeDoc(score): global doc, tieList doc = score.parentNode #messageBox('SI',str(staffIx)) systems = score.getElementsByTagName('system') for sy in range(systems.length): staves = systems[sy].getElementsByTagName('staves') # erzeugt Liste mit DOM Elementen - Notenzeilen #messageBox('STAVES',str(staves)) staff = staves[0].getElementsByTagName('staff') # erzeugt Liste mit DOM Elementen - Notenzeile #messageBox('STAFF',str(staff)) voices = staff[staffIx].getElementsByTagName('voice') # erzeugt Liste mit DOM Elementen - Stimmen #messageBox('STAFF',str(voices)) noteObjects = voices[vo1].getElementsByTagName('noteObjects') # erzeugt Liste mit DOM Elementen - NoteObjects #messageBox('NOs',str(noteObjects[0].childNodes)) for child in noteObjects[0].childNodes: if child.nodeType == child.ELEMENT_NODE: if child.tagName == 'chord': for heads in child.getElementsByTagName('heads'): tieForm = 0 for head in heads.getElementsByTagName('head'): for tie in head.getElementsByTagName('tie'): tieForm = 1 if tie.hasAttribute('end'): # end tie tieList.append('E') break elif tie.hasAttribute('begin'): # begin tie tieList.append('X') if tieForm == 0: # kein tie tieList.append('X') #messageBox('TL',str(tieList)) vcs = score.getElementsByTagName('voices') # Positioniert den 'Cursor' in die Partitur, ansonsten erfolgt Absturz from caplib.capDOM import ScoreChange import tempfile class ScoreChange(ScoreChange): def changeScore(self, score): changeDoc(score) if activeScore(): tempInput = tempfile.mktemp('.capx') tempOutput = tempfile.mktemp('.capx') activeScore().write(tempInput) ScoreChange(tempInput, tempOutput) activeScore().read(tempOutput) os.remove(tempInput) os.remove(tempOutput) #---Ende der externen Skripte --------------------------------------------------------------------------------------------------------------------------------------# #tieList = [] #chordCnt = 0 #tieCnt = 0 #getTies() # Liste der Haltebögen erzeugen #messageBox('tieList',str(tieList)) #--- deleteTaggedGraphics(tag) ----- # -------- 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 # -------- Typenliste -------- # typeList = [tr('shawmSoBar'), # 0 tr('shawmAlt'), # 1 tr('shawmBas'), # 2 tr('shawm4Chord'), # 3 tr('lyra'), # 4 tr('4Chord') # 5 ] # -------- Farbenliste -------- # FarbenListeX=[(0), # schwarz, (255), # rot (16711680), # blau (57344), # grün (10485856), # violett (33023), # orange (1284375) # blaugrün ] #('FFC000'),# orangegelb #('80FF00'),# gelbgrün #('003090'),# grünblau #('E00050'),# rotviolett #('808080'),# dunkelgrau #('C0C0C0'),# hellgrau #('FFFFFF')]# weiss # -------- Dialogbox --------- # options = ScriptOptions() opt = options.get() labStaff1 = Label(tr('selStaffInstr')) selStaff = ComboBox(staffList, value = staffIndex, width = 24) labStaff2 = Label(tr('DescrStaffLayout'), width=38) selType = ComboBox(typeList, value=0, width=24) labType = Label(tr('selInstr'), width=12) note = Label(tr('notation')) numberSize = Edit(opt.get('xnumberSize','8'), width=2) labSize = Label(tr('numbSize')) vertDist = Edit(opt.get('xvertDist','7'), width=2) labDist = Label(tr('vertDistStaff')) fett = CheckBox(tr('bold'), value=int(opt.get('xfett',0))) kursiv = CheckBox(tr('italic'), value=int(opt.get('xkursiv',0))) vertikal = CheckBox(tr('displayHor'), value=int(opt.get('xvertikal',0))) alternativ = CheckBox(tr('displayAlter'), value=int(opt.get('xalternativ',0))) strich = CheckBox(tr('unchangedFing'), value=int(opt.get('xstrich',1))) weg = CheckBox(tr('delExistFing'), value=int(opt.get('xweg',0))) markieren = Label(tr('NoteExclusiveDisplayFing')) radioFont = Radio(['Arial' , 'Calibri', 'Times New Roman'], value=int(opt.get('xradioFont',0))) RFarbe = [tr('black'),tr('red'),tr('blue'),tr('green'),tr('violet'),tr('orange'),tr('bluegreen')] comFarbe = ComboBox(RFarbe,width=12,value=int(opt.get('xcomFarbe',0))) schnitt = VBox([fett,kursiv]) abstand = HBox([vertDist, Label(''), labDist]) dlg = Dialog(tr('dialogHeader') + ' ' + tr('version') + ' ' + version, VBox([ HBox([labStaff1]), Label(''), HBox([selStaff, labStaff2]), Label(''), HBox([selType, labType]), HBox([note]), Label(''), Label(''), VBox([abstand, vertikal,alternativ,],text=tr('posDisplay')), Label(''), HBox([numberSize, labSize, schnitt, radioFont, comFarbe],text=tr('format')), Label(''), VBox([strich,weg],text=tr('options')), HBox([markieren]), Label('') ] ), tr('help') ) # ------ Hauptprogramm ------ # def dlgRun(): global system, vo, no, xcomFarbe, chordCnt, tieCnt, tieList if dlg.run(): # Nach OK im Dialog tieList = [] chordCnt = 0 tieCnt = 0 getTies(selStaff.value(),vo1) if weg.value(): # vorhandene Griffe löschen activeScore().deleteTaggedGraphics('2086-200') else: transposeClass(tempInput) # Ermittlung der Vorspiel-Transposition aus dem Mustersystem types = {0:{60:'0',61:'4',62:'1',63:'14',64:'2',65:'12',66:'124',67:'3',68:'34',69:'13',70:'23',71:'234',72:'123',73:'1234',74:'24',75:'134'}, 1:{57:'0',58:'1',59:'14',60:'2',61:'24',62:'12',63:'124',64:'3',65:'13',66:'134',67:'23',68:'234',69:'123',70:'4',71:'34',72:'1234'}, 2:{60:'0',61:'N',62:'N',63:'N',64:'1',65:'2',66:'N',67:'12'}, 3:{70:'2',71:'N',72:'1',73:'N',74:'N',75:'N',76:'N',77:'0',78:'N',79:'12'}, 4:{57:'A',58:'N',59:'H',60:'C',61:'N',62:'D',63:'N',64:'E',65:'F',66:'N',67:'G',68:'N',69:'A',70:'N', 71:'H',72:"C'",73:'N',74:"D'",75:'N',76:"E'",77:"F'",78:'N',79:"G'",80:'N',81:"A'",82:'N',83:"H'"}, 5:{70:'2 B',71:'N',72:'1 C',73:'N',74:'N',75:'N',76:'N',77:'0 F',78:'N',79:'12G'} } typesA= {0:{60:'0',61:'4',62:'1',63:'14',64:'2',65:'12',66:'124',67:'3',68:'34',69:'13',70:'23',71:'234',72:'/',73:'/4',74:'24',75:'134'}, 1:{57:'0',58:'1',59:'14',60:'2',61:'24',62:'12',63:'124',64:'3',65:'13',66:'134',67:'23',68:'234',69:'/',70:'4',71:'34',72:'/4'}, 2:{60:'0',61:'N',62:'N',63:'N',64:'1',65:'2',66:'N',67:'12'}, 3:{70:'2',71:'N',72:'1',73:'N',74:'N',75:'N',76:'N',77:'0',78:'N',79:'12'}, 4:{57:'A',58:'N',59:'H',60:'C',61:'N',62:'D',63:'N',64:'E',65:'F',66:'N',67:'G',68:'N',69:'A',70:'N', 71:'H',72:"C'",73:'N',74:"D'",75:'N',76:"E'",77:"F'",78:'N',79:"G'",80:'N',81:"A'",82:'N',83:"H'"}, 5:{70:'2',71:'N',72:'1',73:'N',74:'N',75:'N',76:'N',77:'0',78:'N',79:'12'} } range = {0:(60,75),1:(57,72),2:(60,67),3:(70,79),4:(57,83),5:(70,79)} # Tonumfäge der Instrumente number = {'x':0,'y':8,'align':'left','font':{'height':8.0,'color':255},'type':'text','content':''} font = number['font'] font['height'] = int(numberSize.value()) font['color'] = FarbenListeX[comFarbe.value()] if radioFont.value() == 0: font['face'] = 'Arial' elif radioFont.value() == 1: font['face'] = 'Calibri' else: font['face'] = 'Times New Roman' number['y'] = int(vertDist.value()) saveNumber = 'x' # zum Erkennen gleichbleibender Griffe die durch '-' dargestellt werden indOutRange = 0 # Griffe #============================= ver, sub, sr = capVersion() #messageBox('capella', 'Version %d.%02d-%02d' % (ver, sub, sr)) if ver <> 8 and ver <> 9: # Rückwärts-Kompatibilität zu Capella V5,V6,V7 vorschub = '\x0A\x0D\x0A' else: vorschub = '\x0D\x0A' 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(): #messageBox('NO',str(obj)) tiePos = tieList[chordCnt] #messageBox('TIE',str(tieList) + '\n' + str(chordCnt) + '**' + tiePos) chordCnt = chordCnt+1 #messageBox('TIE',str(chordCnt) + '**' + tiePos) if tiePos <> 'E': # Anzeige bei End Tie unterdrücken 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() #chrP = chrP-int(transpose) # Korrektur des MIDI-Notenwerts, der durch Vorspiel-Transp. verändert #messageBox('AV',str(alternativ.value())) #messageBox('AV',str(chrP)) if alternativ.value() == 0: type = types[selType.value()] else: type = typesA[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] if fett.value(): font['weight'] = 700 # fett if kursiv.value(): font['italic'] = 1 # italic except: # Tonumfang ist nicht eingehalten indOutRange = 1 saveNumber = 'x' # keinen Strich nach Note(n) außerhalb des Tonbereichs continue # Ablauf fortsetzen test = number['content'] if len(test) > 1: number['align'] = 'center' if alternativ.value() == 0: #messageBox('AV',str(chrP)) if vertikal.value() == 0: #messageBox('AV',str(chrP)) x = 0 textNeu = '' while x <> len(type[chrP]): textNeu = textNeu + type[chrP][x] + vorschub x = x+1 number['content'] = textNeu if strich.value(): # Striche sollen dargestellt werden if saveNumber == type[chrP]: # Griff, bzw. Zug bleibt gleich number['content'] = '-' if test[0] == 'N': # ungültiger Griff innerhalb der Tabelle B = (Color.RGB(0,0,255)) # blau obj.setColor(B) number['content'] = '' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe/Züge number['tag'] ='2086-200' messageBox('NB',str(number)) #obj.addDrawObj(number) # Anzeige des Griffes/Zuges oder Strichs number['align'] = 'left' else: # alternative Darstellung textNeu = type[chrP] number['content'] = textNeu if test[0] == 'N': # ungültiger Griff innerhalb der Tabelle B = (Color.RGB(0,0,255)) # blau obj.setColor(B) number['content'] = '' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe/Züge griff = number['content'] #messageBox('LL',str(len(griff)) + '\n' + str(griff)) if griff <> '': if griff[0] == '/' and len(griff) == 1: number['content'] = '///' elif griff[0] == '/' and len(griff) == 2: number['content'] = '///' + vorschub + griff[1] number['align'] = 'center' elif number['content'][0] <> '/' and len(griff) == 2: #messageBox('LL',str(len(griff)) + '\n' + str(griff) + '\n' + str(griff[1:2])) number['content'] = griff[0:1] + vorschub + griff[1:2] number['align'] = 'left' elif number['content'][0] <> '/' and len(griff) > 2: number['content'] = griff[0:2] + vorschub + griff[2] number['align'] = 'center' else: number['content'] = griff if selType.value() == 5: #messageBox('ST1','selType=5' + '\n' + str(griff)) if griff == '0': number['content'] = griff + vorschub + vorschub + 'F' #messageBox('ST2','selType=5' + '\n' + str(number['content'])) elif griff == '1': number['content'] = griff + vorschub + vorschub + 'C' elif griff == '2': number['content'] = griff + vorschub + vorschub + 'Bb' elif griff == '12': number['content'] = '1' + vorschub + '2' + vorschub + 'G' number['align'] = 'left' number['tag'] ='2086-200' #messageBox('ADD',str(number)) obj.addDrawObj(number) # Anzeige des Griffes/Zuges oder Strichs number['align'] = 'left' else: # keine Markierung vorhanden head = obj.head(0) chrP = head.chromaticPitch() #messageBox('transpose',str(transpose)) chrP = chrP-int(transpose) # Korrektur des MIDI-Notenwerts, der durch Vorspiel-Transp. verändert wird #messageBox('AV',str(alternativ.value())) if alternativ.value() == 0: type = types[selType.value()] else: type = typesA[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] if fett.value(): font['weight'] = 700 # fett if kursiv.value(): font['italic'] = 1 # italic #font['color'] = str(FarbenListeX[comFarbe.value()]) #hellgrau #font['color'] = 'FF0000' #hellgrau #font['charSet'] = '1' #hellgrau #font['pitchAndFamily'] = '34' #hellgrau #messageBox('FC',str(FarbenListeX[comFarbe.value()])) except: # Tonumfang ist nicht eingehalten indOutRange = 1 saveNumber = 'x' # keinen Strich nach Note(n) außerhalb des Tonbereichs continue # Ablauf fortsetzen if alternativ.value() == 0: if vertikal.value() == 0 and selType.value() <> 4: #messageBox('AV',str(alternativ.value())) number['x'] = 0.6 x = 0 textNeu = '' while x <> len(type[chrP]): textNeu = textNeu + type[chrP][x] + vorschub x = x+1 number['content'] = textNeu if strich.value(): # Striche sollen dargestellt werden if saveNumber == type[chrP]: # Griff, bzw. Zug bleibt gleich number['content'] = '-' test = number['content'] if len(test) > 1: number['align'] = 'center' if test[0] == 'N': # ungültiger Griff innerhalb der Tabelle B = (Color.RGB(0,0,255)) # blau obj.setColor(B) number['content'] = '' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe/Züge number['tag'] ='2086-200' #number['color'] = 'FF0000' #hellgrau #number['charSet'] = '1' #hellgrau #number['pitchAndFamily'] = '34' #hellgrau #number['y'] = '6' number['x'] = 0.6 #messageBox('ADD',str(number)) obj.addDrawObj(number) # Anzeige des Griffes/Zuges oder Strichs number['align'] = 'left' else: textNeu = type[chrP] number['content'] = textNeu test = number['content'] if test[0] == 'N': # ungültiger Griff innerhalb der Tabelle B = (Color.RGB(0,0,255)) # blau obj.setColor(B) number['content'] = '' saveNumber = type[chrP] # für den Vergleich zweier einander folgender gleicher Griffe/Züge griff = number['content'] if griff <> '': if griff[0] == '/' and len(griff) == 1: number['content'] = '///' number['align'] = 'center' elif griff[0] == '/' and len(griff) == 2: number['content'] = '///' + vorschub + griff[1] number['align'] = 'center' elif number['content'][0] <> '/' and len(griff) == 2: number['content'] = griff[0:1] + vorschub + griff[1:2] number['align'] = 'left' elif number['content'][0] <> '/' and len(griff) > 2: number['content'] = griff[0:2] + vorschub + griff[2] number['align'] = 'center' if selType.value() == 5: #messageBox('ST1','selType=5' + '\n' + str(griff)) if griff == '0': number['content'] = griff + vorschub + vorschub + 'F' #messageBox('ST2','selType=5' + '\n' + str(number['content'])) elif griff == '1': number['content'] = griff + vorschub + vorschub + 'C' elif griff == '2': number['content'] = griff + vorschub + vorschub + 'Bb' elif griff == '12': number['content'] = '1' + vorschub + '2' + vorschub + 'G' number['align'] = 'left' number['tag'] ='2086-200' #number['color'] = 'FF0000' #hellgrau #number['charSet'] = '1' #hellgrau #number['pitchAndFamily'] = '34' #hellgrau #number['x'] = '0.5' #messageBox('NB',str(number)) obj.addDrawObj(number) # Anzeige des Griffes/Zuges oder Strichs number['align'] = 'left' # ------ 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() 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(tr('outReach'), tr('notesColored'), img=3) # messageBox('Note(n) außerhalb des Standardbereichs der gewählten Instrumentenart', # "Diese Noten werden farbig dargestellt: blau unterhalb, bzw. rot oberhalb des Bereichs", img=3) xnumberSize = numberSize.value() xvertDist = vertDist.value() xfett = fett.value() xkursiv = kursiv.value() xvertikal = vertikal.value() xalternativ = alternativ.value() xstrich = strich.value() xradioFont = radioFont.value() xcomFarbe = comFarbe.value() opt.update(dict(xnumberSize=xnumberSize,xvertDist=xvertDist,xfett=xfett,xkursiv=xkursiv,xvertikal=xvertikal,xalternativ=xalternativ,xstrich=xstrich,xradioFont=xradioFont,xcomFarbe=xcomFarbe)) options.set(opt) class transposeClass(ScoreChange): # Ermitteln der Vorspiel-Transp. in Mustersystem def changeScore(self, score): global scriptAction, doc doc = score.parentNode transpose(score)## def transpose(score): # Ermitteln der Vorspiel-Transp. in Mustersystem global transpose staffList = activeScore().voiceList() for staffLayout in score.getElementsByTagName('staffLayout'): description = staffLayout.getAttribute('description') if description == staffList[selStaff.value()]: break sound = staffLayout.getElementsByTagName('sound')[0] transpose = sound.getAttribute('transpose') # Ermitteln der Vorspiel-Transp. in Mustersystem if transpose == '': # kann fehlen - abprüfen transpose=0 tempInput = tempfile.mktemp('.capx') # für aktuelle aktive Partitur activeScore().write(tempInput) # Partitur einlesen dlgRun()