def voix(tab) : degree=[] for i in range(256) : degree.append(-1) tab=repvoix(tab) j=0 for i in range(0,len(tab)): if ord(tab[i])>64 and ord(tab[i])<72 : degree[j]=code(tab[i]) j=j+1 elif ord(tab[i])>96 and ord(tab[i])<104 : degree[j]=code(tab[i]) j=j+1 elif tab[i]=="P" or tab[i]=="p" : degree[j]=0 j=j+1 elif ord(tab[i])==35 or tab[i]=="+" : degree[j-1]=degree[j-1]+1 elif tab[i]=="-" : degree[j-1]=degree[j-1]-1 elif ord(tab[i])==44 or tab[i]=="," : degree[j-1]=degree[j-1]-12 elif ord(tab[i])==39 or tab[i]=="'" : degree[j-1]=degree[j-1]+12 return degree def repvoix(tab) : itest=0 suite="" tabla="" for i in range(0,len(tab)): if tab[i]==":" and itest==0 : itest=1 elif tab[i]==":" and itest==1 : itest=0 #print("suite",suite) tabla=tabla+suite suite="" if itest==1 and tab[i] != ":": suite=suite+tab[i] tabla=tabla+tab[i] #print(tabla) return tabla def paravoix(tabvoix) : global program global volume global tempo program=instru(tabvoix) if program=="" : program=64 else : para="i:"+program tabvoix=otepara(para,tabvoix) program=int(program) print("Instrument",program) volume=vol(tabvoix) if volume=="" : volume=120 else : para="v:"+volume tabvoix=otepara(para,tabvoix) volume=int(volume) print("Volume",volume) tona=ton(tabvoix) if tona=="" : tona="c" else : para="h:"+tona tabvoix=otepara(para,tabvoix) mod=mode(tabvoix) if mod=="" : mod="maj" else : para="m:"+mod tabvoix=otepara(para,tabvoix) arma=armature(tona,mod) if arma != "" : print("armature",arma) tabvoix=anharmtabla(tabvoix,arma) print("Tablature anharmonique",tabvoix) demiton=trans(tabvoix) if demiton=="" : demiton="" else : para="o:"+demiton tabvoix=otepara(para,tabvoix) if tabvoix=="v1" or tabvoix=="" : tabvoix=gamme(tona,mod) if tona=="" : tona="C" if demiton != "" : idemiton=int(demiton) tabvoix=transpotabla(tabvoix,idemiton) print("Transposition de",demiton,"demitons") if demiton != "": tona=transpotabla(tona,idemiton) print("Nouveau ton",tona,"Mode",mod) else : print("Ton",tona,"Mode",mod) return tabvoix def normaliser(chaine) : prov="" for i in range(len(chaine)) : l1=chaine[i] l2=chaine[i:i+2] if l2=="k:" or l2=="t:" or l2=="v:" or l2=="i:" or l2=="h:" or l2=="m:" or l2=="o:" : prov=prov+" " if l1==" " : if chaine[i-1]==" " : l1="" prov=prov+l1 return prov def codeinter(inter) : if inter=="s" : deg=1 elif inter=="S" : deg=2 elif inter=="t" : deg=3 elif inter=="T" : deg=4 elif inter=="Q" : deg=5 elif inter=="v" : deg=6 elif inter=="V" : deg=7 elif inter=="x" : deg=8 elif inter=="X" : deg=9 elif inter=="O" or inter=="o" : deg=12 else : deg=0 return deg def decodeinter(int) : if int==1 : inter="s" elif int==2 : inter="S" elif int==3 : inter="t" elif int==4 : inter="T" elif int==5 : inter="Q" elif int==6 : inter="v" elif int==7 : inter="V" elif int==8 : inter="x" elif int==9 : inter="X" elif int==12 : inter="O" else : inter="" return inter def intertab(tab) : degree=[] for i in range(256) : degree.append(-1) degree=voix(tab) j=0 m=degree[0] for i in range(256) : if degree[i] >-1 : j=j+1 if degree[i]<=m : m=degree[i] basse=m prov="" tabinter="" for i in range(j-1) : int=degree[i+1]-degree[i] if int<0 : int=int+12 elif int>12 : int=int-12 prov=decodeinter(int) tabinter=tabinter+prov basse=decode(basse) tabinter=basse+tabinter return tabinter def decodetabinter(tabinter) : deg=[] for i in range(256) : deg.append(-1) j=0 basse="" if tabinter=="" : tabinter="C" tabla="" ibemol=0 b0=tabinter[0] for i in range(len(tabinter)) : l1=tabinter[i] if i==0 : basse=l1 if l1=="-" : ibemol=1 if l1=="m" : if b0=="c" or b0=="f" or b0=="g" or b0=="C" or b0=="F" or b0=="G" : ibemol=1 if l1=="," or l1=="'" or l1=="#" or l1=="-" : basse=basse+l1 l=len(basse) inter=tabinter[l:len(tabinter)] print("intervalle",inter) deg[0]=code(basse) for i in range(len(inter)) : l1=inter[i] deg[i+1]=deg[i]+codeinter(l1) print("basse",basse) if b0=="c" or b0=="C" : ibemol=1 if ibemol==1 : tabla=decodedegreebemol(deg)+" " else : tabla=decodedegree(deg)+" " #print("tabla",tabla) return tabla def decodetabacc(tabacc) : deg=[] for i in range(256) : deg.append(-1) j=0 basse="" nomacc="" if tabacc=="" : tabacc="C" tabla="" ibemol=0 b0=tabacc[0] for i in range(len(tabacc)) : l1=tabacc[i] if i==0 : basse=l1 if l1=="-" : ibemol=1 if l1=="m" : if b0=="c" or b0=="f" or b0=="g" or b0=="C" or b0=="F" or b0=="G" : ibemol=1 if l1=="," or l1=="'" or l1=="#" or l1=="-" : basse=basse+l1 else : nomacc=nomacc+l1 print("nomacc",nomacc) inter=internomacc(nomacc) deg[0]=code(basse) for i in range(len(inter)) : l1=inter[i] deg[i+1]=deg[i]+codeinter(l1) print("basse",basse) if b0=="c" or b0=="C" : ibemol=1 if ibemol==1 : tabla=decodedegreebemol(deg)+" " else : tabla=decodedegree(deg)+" " print("tabla",tabla) return tabla def decodegrille(grille) : nomacc="" tabla="" grille=grille+" " for i in range(len(grille)) : l1=grille[i] if l1==" " and nomacc != "" : print("nomacc",nomacc) tabla=tabla+decodetabacc(nomacc)+" " nomacc="" else : nomacc=nomacc+l1 return tabla def internomacc(nomacc) : if nomacc=="m7" : internom="tTt" elif nomacc=="m75b" : internom="ttT" elif nomacc=="7" : internom="Ttt" elif nomacc=="m" : internom="tTQ" elif nomacc=="7M" : internom="TtT" elif nomacc=="dim" : internom="tt" elif nomacc=="dim7" : internom="ttt" elif nomacc=="sus4" : internom="QSQ" elif nomacc=="sus2" : internom="SQQ" elif nomacc=="9" : internom="TvT" elif nomacc=="6" : internom="TQt" elif nomacc=="69" : internom="TQQ" else : internom="TtQ" return internom def tabacc(suitenomacc) : ton="" nomacc="" tabla="" suitenomacc=normaliser(suitenomacc)+" " for i in range(len(suitenomacc)) : l1=suitenomacc[i] l2=suitenomacc[i:i+2] if l1==" " : # print("ton",ton) interacc=internomacc(nomacc) tablaprov=mouveinter(interacc,ton) # print("tablaprov",tablaprov) acc=ton+interacc # print("nomacc",nomacc) # print("accord",acc) tabla=tabla+tablaprov+" " ton="" nomacc="" elif l2=="di" : nomacc=nomacc+l2 i=i+1 elif l1=="m" or l1=="7" or l1=="9" or l1=="i" or l1=="s" or l1=="u" or l1=="2" or l1=="4" or l1=="5" or l1=="b" : nomacc=nomacc+l1 else : ton=ton+l1 return tabla def otepara(para,tabla) : tab="" l=len(para) for i in range(len(tabla)) : p=tabla[i:i+l] if p==para : tab=tabla[0:i]+tabla[i+l:len(tabla)] tabla=tab return tabla def trans(tabla) : demiton="" tabla=tabla+" " for i in range(len(tabla)) : if tabla[i:i+2]=="o:" : demiton=tabla[i+2:i+3] if tabla[i+3]=="0" or tabla[i+3]=="1" or tabla[i+3]=="2"or tabla[i+3]=="3" or tabla[i+3]=="4" or tabla[i+3]=="5" or tabla[i+3]=="6" or tabla[i+3]=="7" or tabla[i+3]=="8" or tabla[i+3]=="9" : demiton=tabla[i+2:i+4] if tabla[i+4]=="0" or tabla[i+4]=="1" or tabla[i+4]=="2"or tabla[i+4]=="3" or tabla[i+4]=="4" or tabla[i+4]=="5" or tabla[i+4]=="6" or tabla[i+4]=="7" or tabla[i+4]=="8" or tabla[i+4]=="9" : demiton=tabla[i+2:i+5] i=len(tabla) return demiton def mesurythme(mesu) : rythme="1 1 1 1 8:" if mesu=="4/4" : rythme="1 1 1 1 8:" elif mesu=="3/4" : rythme="1 1 1 8:" elif mesu=="4/8" : rythme="1/2 1/2 1/2 1/2 8:" else : rythme="1/4 8:" return rythme def mesu(tabla) : mesu="" for i in range(len(tabla)) : if tabla[i:i+2]=="k:" and i<=5: mesu=tabla[i+2:i+5] i=len(tabla) return mesu def ton(tabla) : ton="" tabla=tabla+"m:maj" for i in range(len(tabla)-5) : if tabla[i:i+2]=="h:" : ton=tabla[i+2:i+3] if tabla[i+4]=="," or tabla[i+4]=="'" : ton=tabla[i+2:i+5] elif tabla[i+3]=="#" or tabla[i+3]=="+" or tabla[i+3]=="-" or tabla[i+3]=="'" or tabla[i+3]=="," : ton=tabla[i+2:i+4] i=len(tabla) return ton def mode(tabla) : mode="" for i in range(len(tabla)) : if tabla[i:i+2]=="m:" and i>=5: mode=tabla[i+2:i+5] i=len(tabla) return mode def nombrenote(tabla) : n=0 for i in range(len(tabla)) : l1=tabla[i] if l1 in "pabcdefg" or l1 in "PABCDEFG" : n=n+1 return n def code(note): mod=0 if note=="" : note="p" for i in range(len(note)) : alt=note[i] if alt=="'" : mod=mod+12 elif alt=="," : mod=mod-12 elif alt=="#" or alt=="+" : mod=mod+1 elif alt=="-" : mod=mod-1 note=note[0] if note=='c' : degnote=60 elif note=='d' : degnote=62 elif note=='e' : degnote=64 elif note=='f' : degnote=65 elif note=='g' : degnote=67 elif note=='a' : degnote=69 elif note=='b' : degnote=71 elif note=='C' : degnote=48 elif note=='D' : degnote=50 elif note=='E' : degnote=52 elif note=='F' : degnote=53 elif note=='G' : degnote=55 elif note=='A' : degnote=57 elif note=='B' : degnote=59 else : degnote=-1 if degnote != -1 : degnote=degnote+mod if note=="P" or note=="p" : degnote=0 return degnote def decode(degnote): d=degnote itest=0 ioctave=0 if d>35 and d<48 : d=d+12 ioctave=-1 elif d>23 and d<36 : d=d+24 ioctave=-2 elif d>71 and d<84 : d=d-12 ioctave=1 elif d>83 and d<96 : d=d-24 ioctave=2 degnote=d if d==49 or d==51 or d==54 or d==56 or d==58 or d==61 or d==63 or d==66 or d==68 or d==70 : degnote=degnote-1 itest=1 if degnote==60 : note="c" elif degnote==62 : note="d" elif degnote==64 : note="e" elif degnote==65 : note="f" elif degnote==67 : note="g" elif degnote==69 : note="a" elif degnote==71 : note="b" elif degnote==48 : note="C" elif degnote==50 : note="D" elif degnote==52 : note="E" elif degnote==53 : note="F" elif degnote==55 : note="G" elif degnote==57 : note="A" elif degnote==59 : note="B" elif degnote==0 : note="p" else : note="" if itest==1 : note=note+"#" if ioctave==-1 : note=note+"," elif ioctave==-2 : note=note+",," elif ioctave==1 : note=note+"'" elif ioctave==2 : note=note+"''" return note def decodedegree(degree) : tabla="" for i in range(256) : tabla=tabla+decode(degree[i]) if degree[i]==1 : tabla[i]="|" i=256 return tabla def decodedurnote(d) : durnote="1" if d==.125 : durnote="/8" elif d==.250 : durnote="/4" elif d==.5 : durnote="/2" elif d==.750 : durnote="3/4" elif d==1.5 : durnote="3/2" elif d==1 : durnote="1" elif d==2 : durnote="2" elif d==3 : durnote="3" elif d==4 : durnote="4" elif d==0 : durnote="0" return durnote def decodedegree(degree) : tabla="" for i in range(256) : tabla=tabla+decode(degree[i]) if degree[i]==1 : tabla[i]="|" i=256 return tabla def decodebemol(degnote): d=degnote itest=0 ioctave=0 if d>35 and d<48 : d=d+12 ioctave=-1 elif d>23 and d<36 : d=d+24 ioctave=-2 elif d>71 and d<84 : d=d-12 ioctave=1 elif d>83 and d<96 : d=d-24 ioctave=2 degnote=d if d==47 or d==49 or d==51 or d==54 or d==56 or d==58 or d==61 or d==63 or d==66 or d==68 or d==70 : degnote=degnote+1 itest=1 if degnote==60 : note="C" elif degnote==62 : note="D" elif degnote==64 : note="E" elif degnote==65 : note="F" elif degnote==67 : note="G" elif degnote==69 : note="A" elif degnote==71 : note="B" elif degnote==48 : note="c" elif degnote==50 : note="d" elif degnote==52 : note="e" elif degnote==53 : note="f" elif degnote==55 : note="g" elif degnote==57 : note="a" elif degnote==59 : note="b" else : note="" if itest==1 : note=note+"-" if ioctave==-1 : note=note+"," elif ioctave==-2 : note=note+",," elif ioctave==1 : note=note+"'" elif ioctave==2 : note=note+"''" return note def decodedegreebemol(degree) : tabla="" for i in range(256) : tabla=tabla+decodebemol(degree[i]) if degree[i]==1 : tabla[i]="|" i=256 return tabla def decodegrille(grille) : deg=[] for i in range(256) : deg.append(-1) basse="" acc="" tab="" tabla="" grille=grille+" " for i in range(len(grille)) : l1=grille[i] if l1==" " : deg=codeaccord(acc,"") tab=decodedegree(deg) tab=basse+tab basse="" tab="["+tab+"]" tabla=tabla+tab+" " acc="" elif l1=="/" : basse=acc acc="" else : acc=acc+l1 return tabla def gamme(ton,mode) : itest=0 deg=[] if ton=="" : ton="c" if mode=="" : mode="maj" if mode=="maj" : tabla="|C,D,E,F,G,A,B,|CDEFGAB|cdefgab|cc'd'e'f'g'a'b'|c''" elif mode=="min" : tabla="|C,D,E-,F,G,A,B,|CDE-FGAB|cde-fgabc|c'd'e-'f'g'a'b'|c''" elif mode=="har" : tabla="|C,D,E-,F,G,A-,B,|CDE-FGA-B|cde-fga-b|cc'd'e-'f'g'a-'b'|c''" elif mode=="mel" : tabla="|C,D,E-,F,G,A,B,|CDE-FGAB|cde-fgab|cc'd'e-'f'g'a'b'|c''" elif mode=="pen" : tabla="|C,D,E,G,A,|DDEGA|cdega|c'd'e'g'a'|" elif mode=="blu" : tabla="|C,D,D#,E,G,A#,B,|CDD#EGAA#|cDd#egaA#|c'd'd#'e'g'a'a#'|" elif mode=="ton" : tabla="|C,D,E,F#,G#,A#,|CDEF#G#A#|cdef#g#a#|c'd'e'f#'g#'a#'|c''" elif mode=="demi" or mode=="dem" : tabla="|C,D,D#,F,F#,G#,A,B,|CDD#FF#G#AB|cdd#f#gab|c'dd'e#'f'g#'a'b'|c''" elif mode=="chro" or mode=="chr" : tabla="|C,C#,D,D#,E,F,F#,G,G#,A,A#,B,|C#Dd#EfF#GG#AA#Bc|c#dd#eff#gg#aa#b|C'c#'d'd#'e'f'f#'g'g#'a'a#'b'|c''" else : tabla="" idemiton=0 tona=ton l=len(ton) if ton[l-1:l]=="," or ton[l-1:l]=="'" : if ton[l-1:l]=="," : idemiton=-12 else : idemiton=12 ton=ton[0:l-1] ton=ton.lower() deg=voix(tabla) if ton=="f" or ton=="b-" or ton=="e-" or ton=="a-" or ton=="d-" or ton=="g-" : itest=1 tabla=gammebemol(tona,mode) elif ton=="c#" : deg=transpo(deg,1) elif ton=="d" : deg=transpo(deg,2) elif ton=="d#" : deg=transpo(deg,3) elif ton=="e" : deg=transpo(deg,4) elif ton=="f" : deg=transpo(deg,5) elif ton=="f#" : deg=transpo(deg,6) elif ton=="g" : deg=transpo(deg,7) elif ton=="g#" : deg=transpo(deg,8) elif ton=="a" : deg=transpo(deg,9) elif ton=="a#" : deg=transpo(deg,10) elif ton=="b" : deg=transpo(deg,11) if idemiton != 0 : deg=transpo(deg,idemiton) if itest==0 : tabla=decodedegree(deg) prov="" for i in range(len(tabla)) : l1=tabla[i] if i1 : if accord[1]=="#" or accord[1]=="-" or accord[1]=="'" or accord[1]=="," : suite=accord[2:l] ton=accord[0:2] if l>2 : if accord[2]=="#" or accord[2]=="-" or accord[2]=="'" or accord[2]=="," : suite=accord[3:l] ton=accord[0:3] if suite=="" : suite=accord[1:l] ton=accord[0] tona=code(ton) tierce=tona+4 quinte=tona+7 sept=tona+10 octave=tona+12 l=len(suite) if suite=="dim" : tierce=tona+3 quinte=tona+6 elif suite=="dim7" : tierce=tona+3 quinte=tona+6 sept=tona+9 elif suite=="sus4" : tierce=tona+5 elif suite=="sus2" : tierce=tona+2 elif suite=="m75b" : tierce=tona+3 quinte=tona+6 for i in range(l) : c=suite[i] if c=="m" : tierce=tona+3 elif c=="7" : sept=tona+10 elif c=="M" : sept=tona+11 if l>0 : deg[0]=tona deg[1]=tierce deg[2]=quinte if l==0 or suite=="sus2" or suite=="sus4" : deg[0]=tona deg[1]=tierce deg[2]=quinte deg[3]=octave else : deg[0]=tona deg[1]=tierce deg[2]=quinte deg[3]=sept if renver=="1" : deg[1]=deg[1]-12 elif renver=="2" : deg[2]=deg[2]-12 elif renver=="3" : deg[3]=deg[3]-12 return deg def codearpege(accord,motif) : deg=[] for i in range(256) : deg.append(-1) deg=codeaccord(accord,"0") degree=[] for i in range(256) : degree.append(-1) k=0 if motif=="" : motif="0 1 2 3" l=len(motif) for i in range(l) : pos=motif[i] if pos=="0" or pos=="1" or pos=="2" or pos=="3" : degree[k]=deg[int(pos)] k=k+1 return degree def noteaccord(accord,renver,motif) : if renver != "" : deg=codeaccord(accord,renver) else : deg=codearpege(accord,motif) tab=decodedegree(deg) return tab def notegrille(grille,renver,motif) : note="" accord="" grille=grille+" " for i in range(len(grille)) : l1=grille[i] if l1==" " : note=note+noteaccord(accord,renver,motif)+" " accord="" else : accord=accord+l1 return note def accordgrille(grille,renver,motif,rythme,intervalle) : note=notegrille(grille,renver,motif) note="["+note acc="" for i in range(len(note)) : l1=note[i] if l1==" " : acc=acc+"] [" elif l1 != "," : acc=acc+l1 acc=acc+"]" accord=tablaaccord(acc,rythme,intervalle) return accord def mouve(tablainter) : mouvetablainter=[] for i in range(256) : mouvetablainter.append(" ") j=0 tablainter=" "+tablainter+" " itest=0 for i in range(len(tablainter)) : inter=tablainter[i] if inter=="S" or inter=="T" or inter=="Q" or inter=="V" or inter=="X" or inter=="s" or inter=="t" or inter=="v" or inter=="x" : mouve=tablainter[i-1] if mouve=="+" : itest=1 inter=decodeinter(codeinter(inter)-1) if mouve=="-" : inter=decodeinter(codeinter(inter)+1) itest=1 mouve=tablainter[i+1] if mouve=="+" : itest=1 inter=decodeinter(codeinter(inter)+1) if mouve=="-" : itest=1 inter=decodeinter(codeinter(inter)-1) if itest==1 : mouve=tablainter[i-2] if mouve=="+" : inter=decodeinter(codeinter(inter)-1) if mouve=="-" : inter=decodeinter(codeinter(inter)+1) mouve=tablainter[i+2] if mouve=="+" : inter=decodeinter(codeinter(inter)+1) if mouve=="-" : inter=decodeinter(codeinter(inter)-1) mouvetablainter[j]=inter j=j+1 itest=0 # print("mouvetablainter",mouvetablainter[j]) return mouvetablainter def mouveinter(tablainter,ton) : mouvetablainter=[] for i in range(256) : mouvetablainter.append(" ") j=0 tablainter=" "+tablainter+" " itest=0 for i in range(len(tablainter)) : inter=tablainter[i] if inter=="S" or inter=="T" or inter=="Q" or inter=="V" or inter=="X" or inter=="s" or inter=="t" or inter=="v" or inter=="x" : mouve=tablainter[i-1] if mouve=="+" : itest=1 inter=decodeinter(codeinter(inter)-1) if mouve=="-" : inter=decodeinter(codeinter(inter)+1) itest=1 mouve=tablainter[i+1] if mouve=="+" : itest=1 inter=decodeinter(codeinter(inter)+1) if mouve=="-" : itest=1 inter=decodeinter(codeinter(inter)-1) if itest==1 : mouve=tablainter[i-2] if mouve=="+" : inter=decodeinter(codeinter(inter)-1) if mouve=="-" : inter=decodeinter(codeinter(inter)+1) mouve=tablainter[i+2] if mouve=="+" : inter=decodeinter(codeinter(inter)+1) if mouve=="-" : inter=decodeinter(codeinter(inter)-1) mouvetablainter[j]=inter j=j+1 itest=0 # print("mouvetablainter",mouvetablainter[j]) suiteinter=ton for j in range(3) : # print(mouvetablainter[j]) suiteinter=suiteinter+mouvetablainter[j] # print(suiteinter) tabla=decodetabinter(suiteinter) #print("suite inter décodée",tabla) return tabla def gammemotif(ton,mode,motif) : deg=[] for i in range(256) : deg.append(-1) tab=gamme(ton,mode) deg=voix(tab) #deg=codeaccord(accord,"0") degree=[] for i in range(256) : degree.append(-1) k=0 if motif=="" : motif="1 2 3 4 5 6 7 8" l=len(motif) for i in range(l) : pos2=motif[i:i+1] pos=motif[i] if pos2=="10" or pos2=="11" or pos2=="12" or pos2=="13" or pos2=="14" or pos2=="15" or pos2=="16" or pos2=="17" or pos2=="18" or pos2=="19" or pos2=="20" or pos2=="21" or pos2=="22" or pos2=="23" or pos2=="24" : degree[k]=deg[int(pos)-1] i=i+1 elif pos=="1" or pos=="2" or pos=="3" or pos=="4" or pos=="5" or pos=="6" or pos=="7" or pos=="8" or pos=="9" : degree[k]=deg[int(pos)-1] elif pos=="0" : degree[k]=0 elif pos=="+" : degree[k]=degree[k]+1 elif pos=="-" : degree[k]=degree[k]-1 elif pos==" " : k=k+1 if ton=="c" or ton=="g" or ton=="d" or ton=="a" or ton=="e" or ton=="b" : tab=decodedegree(degree) else : tab=decodedegreebemol(degree) return tab def tablanuance(tab,nuance) : if nuance=="" : return tab notestabla=[] for i in range(0,256) : notestabla.append("") notesnuance=[] for i in range(0,256) : notesnuance.append("") notestabla=notes(tab) nuance=normaliser(nuance) nuance=nuance+" " k=0 prov="" for i in range(len(nuance)) : l1=nuance[i] if l1==" " : notesnuance[k]=prov k=k+1 prov="" else : prov=prov+l1 for i in range(256) : if notesnuance[i] != "" : nuance=notesnuance[i] if nuance[0:1]=="!" : k=0 else : k=int(nuance[0])-1 nuance=nuance[1:len(nuance)] notestabla[k]=nuance+notestabla[k] tabla="" for i in range(256) : tabla=tabla+notestabla[i] return tabla def mesuretabla(tab,deb,fin) : k=0 itest=0 ideb=int(deb)-1 ifin=int(fin)-1 mesu="1" for i in range(0,len(tab)): if ord(tab[i])==124 : k=k+1 if k==ideb and itest==0 : mesu=tab[i:len(tab)] itest=1 if k==ifin : mesu=mesu[0:i] return mesu def transpo(degree,idemiton) : if idemiton=="" : idemiton=0 idemiton=int(idemiton) for k in range(0,256) : if degree[k]>0 : degree[k]=degree[k]+idemiton return degree def anharmgamme(ton,mode) : gammeanharm="" ton=ton.upper() arma=armature(ton,mode) gamme="" if ton=="C" or ton=="C#" or ton=="C-" : gamme="c,d,e,f,g,a,b,cdefgabCDEFGABC'D'E'F'G'A'B'" elif ton=="D" or ton=="D-" : gamme="d,e,f,g,a,b,cdefgabCDEFGABC'D'" elif ton=="E" or ton=="E-" : gamme="e,f,g,a,b,cdefgabCDEFGABC'D'E'" elif ton=="F" or ton=="F#" : gamme="f,g,a,b,cdefgabCDEFGABC'D'E'F'" elif ton=="g" or ton=="G-" : gamme="g,a,b,cdefgabCDEFGABC'D'E'F'G'" elif ton=="A" or ton=="A-" : gamme="a,b,cdefgabCDEFGABC'D'E'F'G'A'" elif ton=="B" or ton=="B-" : gamme="b,cdefgabCDEFGABC'D'E'F'G'A'B'" for i in range(len(gamme)) : l1=gamme[i] gammeanharm=gammeanharm+l1 for j in range(len(arma)) : a1=arma[j] if l1.lower()==a1 : gammeanharm=gammeanharm+arma[j+1:j+2] j=len(arma)-1 return gammeanharm def anharmtabla(tabla,arma) : tablaanharm="" tabla=tabla+" " for i in range(len(tabla)-1) : l1=tabla[i] tablaanharm=tablaanharm+l1 if tabla[i+1]=="+" or tabla[i+1]=="-" or tabla[i+1]=="0" or tabla[i+1]=="#" or tabla[i+1]=="b" : i=i+1 else : for j in range(len(arma)) : a1=arma[j] if l1.lower()==a1.lower() : tablaanharm=tablaanharm+arma[1:2] j=len(arma)-1 return tablaanharm def armature(ton,mode) : l=len(ton) if ton[l-1]=="," or ton[l-1]=="'" : ton=ton[0:l-1] ton=ton.upper() arma="" if mode=="maj" : if ton=="C" : return "" elif ton=="G" : arma="f#" elif ton=="D" : arma="f#c#" elif ton=="A" : arma="f#c#g#" elif ton=="E" : arma="f#c#g#d#" elif ton=="B" : arma="f#c#g#d#a#" elif ton=="F#" : arma="f#c#g#d#a#e#" elif ton=="C#" : arma="f#c#g#d#a#e#b#" elif ton=="F" : arma="b-" elif ton=="B-" : arma="b-e-" elif ton=="E-" : arma="b-e-a-" elif ton=="A-" : arma="b-e-a-d-" elif ton=="D-" : arma="b-e-a-d-g-" elif ton=="G-" : arma="b-e-a-d-g-c-" elif ton=="C-" : arma="b-e-a-d-g-c-f-" else : arma="" if mode=="mel" : if ton=="C" : arma="e-" "" elif ton=="G" : arma="b-f#" elif ton=="D" : arma="f0c#" elif ton=="A" : arma="f#c0g#" elif ton=="E" : arma="f#c#g0d#" elif ton=="B" : arma="f#c#g#d0a#" elif ton=="F#" : arma="f#c#g#d#a0e#" elif ton=="C#" : arma="f#c#g#d#a#e0b#" elif ton=="F" : arma="a-b-" elif ton=="B-" : arma="d-b-e-" elif ton=="E-" : arma="g-b-e-a-" elif ton=="A-" : arma="c-b-e-a-d-" elif ton=="D-" : arma="f-b-e-a-d-g-" elif ton=="G-" : arma="b-e-a0d-g-c-" elif ton=="C-" : arma="b-e-a-d0g-c-f-" else : arma="" if mode=="har" : if ton=="C" : arma="a-e-" "" elif ton=="G" : arma="e-b-f#" elif ton=="D" : arma="f0b-c#" elif ton=="A" : arma="c0e0g#" elif ton=="E" : arma="f#d#g0b0" elif ton=="B" : arma="f#c#d0g0a#" elif ton=="F#" : arma="f#c#g#d0a0e#" elif ton=="C#" : arma="f#c#g#d0a0e#b#" elif ton=="F" : arma="d-a-b-" elif ton=="B-" : arma="g-d-b-e-" elif ton=="E-" : arma="c-g-b-e-a-" elif ton=="A-" : arma="f-c-b-e-a-d-" elif ton=="D-" : arma="f-e-a0d-g-" elif ton=="G-" : arma="e-a0d-g-c-" elif ton=="C-" : arma="f-e-a--d0g-c-f-" else : arma="" if mode=="min" or mode=="nat" : if ton=="C" : arma="a-e-b-" "" elif ton=="G" : arma="e-b-f0" elif ton=="D" : arma="f0b-c0" elif ton=="A" : arma="c0e0g0" elif ton=="E" : arma="f#d0g0b0" elif ton=="B" : arma="f#c#d0g0a0" elif ton=="F#" : arma="f#c#g#d0a0e0" elif ton=="C#" : arma="f#c#g#d0a0e#b0" elif ton=="F" : arma="d-a-b-e-" elif ton=="B-" : arma="g-d-b-e-a-" elif ton=="E-" : arma="c-g-b-e-a-d-" elif ton=="A-" : arma="f-c-b-e-a-d-g-" elif ton=="D-" : arma="f-e-a0d-g-c-" elif ton=="G-" : arma="e-a0d-g-c-f-" elif ton=="C-" : arma="f-e-a--d0g-c-f-b-" else : arma="" return arma def transpotabla(tab,idemiton) : deg=voix(tab) dur=durvoix(tab) idemiton=int(idemiton) deg=transpo(deg,idemiton) tabla=decodedegree(deg) #print("Tablature transposée de ",idemiton,"demitons",tabla) #tabla=decodedegreebemol(deg) #print("Tablature transposée avec des bémols ",tabla) return tabla def tablamotif(tabla,motif) : if motif=="" : return tabla tab=tablarep(tabla) deg=codemotifvoix(tab,motif) ton="c" if ton=="c" or ton=="g" or ton=="d" or ton=="a" or ton=="e" or ton=="b" : tab=decodedegree(deg) else : tab=decodedegreebemol(deg) return tab def tablainter(tabla,inter) : if inter=="" : return tabla n=int(inter) if n<2 or n>4 : return tabla k=0 sim="" tab="" for i in range(len(tabla)) : note=tabla[i] l1=tabla[i] n1=ord(l1) if n1>64 and n1<72 : k=k+1 elif n1>96 and n1<104 : k=k+1 if k==n : sim="["+sim+note+"]" tab=tab+sim sim="" k=0 else : sim=sim+note print("tablature avec notes simultanées",tab) return tab def tablarep(tabla) : imes=0 tab="" tabla=tabla+" " for i in range(len(tabla)-1) : l1=tabla[i] l2=tabla[i:i+2] if l1=="|" : imes=imes+1 l1="" elif l1==":" : l1="" if l2=="|:" : ideb=i+2 elif l2==":|" : ifin=i rep=tabla[ideb:ifin] tab=tab+rep i=i+1 elif l1 != " " : tab=tab+l1 return tab def tablapara(abctabla) : prov="" abcpara="" for i in range(len(abctabla)) : l1=abctabla[i] l2=abctabla[i:i+2] if l2=="V:" : abcpara=prov prov=prov+l1 mesu="4/4" tempo="120" ton="C" instru="2" for i in range(len(abcpara)) : l2=abcpara[i:i+2] if l2=="M:" : mesu=abcpara[i+2:i+6] if l2=="K:" : ton=abcpara[i+2:i+4] if l2=="Q:" : tempo=abcpara[i+6:i+9] l14=abcpara[i:i+14] if l14=="%MIDI program " : instru=abcpara[i+15:i+19] para="v1k:"+mesu+"t:"+tempo+"t:"+tempo+"i:"+instru+"h:"+ton return para def tablaabc(abctabla) : prov="" for i in range(len(abctabla)) : l2=abctabla[i:i+2] if l2=="V:" : prov=abctabla[i+3:i+len(abctabla)] abctabla=prov ton=" " tablaabc=" " abctabla=abctabla+" " alt="" itest=0 for i in range(len(abctabla)) : l1=abctabla[i] ton=abctabla[i] if ton=="!" and itest==1 : ton="" itest=0 if ton=="!" : itest=1 if itest==1 : ton="" if i64 and ord(l1)<72 : k=k+1 elif ord(l1)>95 and ord(l1)<104 : k=k+1 abcnote[k]=abcnote[k]+l1 nu="" nuance=nuance+" " nuance=normaliser(nuance) for i in range(0,len(nuance)) : l1=nuance[i] if l1==" " : n2=nu[1:2] if n2=="0" or n2=="1" or n2=="2" or n2=="3" or n2=="4" or n2=="5" or n2=="6" or n2=="7" or n2=="8" or n2=="9" : inote=int(nu[0:2]) nu=nu[2:len(nu)] else : inote=int(nu[0:1]) nu=nu[1:len(nu)] if abcnote[inote] != "" : abcnote[inote]=nu+abcnote[inote] nu="" else : nu=nu+l1 abctabla="" for i in range(256) : abctabla=abctabla+abcnote[i] return abctabla def tablarythme(tab,rythme) : if rythme=="" : return tab notestabla=[] for i in range(0,256) : notestabla.append("") notesnuance=[] for i in range(0,256) : notesnuance.append("") notesrythme=[] for i in range(0,256) : notesrythme.append("") tab=oterrythme(tab) notestabla=notes(tab) rythme=normaliser(rythme) rythme=rythme+" " k=0 prov="" for i in range(20) : prov=prov+rythme rythme=prov prov="" provnuance="" for i in range(len(rythme)) : l1=rythme[i] if l1=="1" : l1="" if l1==" " : notesrythme[k]=prov notesnuance[k]=provnuance k=k+1 prov="" provnuance="" else : n1=l1.lower() if n1=="p" or n1=="f" or n1=="m" or n1=="!" : provnuance=provnuance+l1 l1="" prov=prov+l1 nuance="" for i in range(256) : rythme=notesrythme[i] nuance=notesnuance[i] if notestabla[i] != " " : notestabla[i]=nuance+notestabla[i]+rythme tabla="" for i in range(256) : tabla=tabla+notestabla[i] return tabla def motifmelodie(motif,trans,melodie) : if motif=="" : return melodie deb="" fin="" prov="" for i in range(len(motif)) : l1=motif[i] if l1==" " : l1="" elif l1=="[" or l1=="." : deb=deb+l1 elif l1=="]" : fin=fin+l1 else : prov=prov+l1 deb=deb+" " fin=fin+" " motif=prov notestabla=[] for i in range(256) : notestabla.append(" ") mesure=" " if trans=="" : t=0 else : t=int(trans) if t<0 : melodie=tablainverse(melodie) t=-t prov="" for k in range(t+1) : prov=prov+melodie melodie=prov notestabla=notes(melodie) mesure="" for k in range(t+1) : for i in range(len(motif)) : j=k+int(motif[i])-1 mesure=mesure+deb[i]+notestabla[j]+fin[i] return mesure def notes(tabla) : icro=0 provcro="" inuance=0 provnuance="" itest=0 provnote="" tabla=tabla+"p " notestabla=[] for i in range(256) : notestabla.append(" ") notesprov=[] for i in range(256) : notesprov.append(" ") j=0 for i in range(len(tabla)) : note=tabla[i] if note=="[" : icro=1 itest=1 provcro="" elif note=="]" : icro=0 notestabla[j]=provnuance+provcro+"]" j=j+1 itest=1 note="" provnuance="" provcro="" if icro==1 : provcro=provcro+note note="" if note=="!" and inuance==0 : inuance=1 provnuance="!" note="" elif inuance==1 and note != "!" : provnuance=provnuance+note note="" if inuance==1 and note=="!" : provnuance=provnuance+"!" itest=1 note="" inuance=0 if i