Exemples d'applications en langage python pour le piano

Les exemples de cette page sont construits à partir du moduleabc.py, en les adaptant au traitement des tablatures pour piano.

Pour pouvoir exécuter ces exemples sur votre PC, vous devez installer une version de python supérieure à la version 3.9, puis copier le code des exemples ci-dessous.

Les fonctions utilisées sont placées dans le fichier module.txt

Fichier module abc.txt

Vous copierez le fichier moduleabc.txt que vous placerez dans le fichier moduleabc.py

Dans un répertoire où se trouve le fichier moduleabc.py, que nous nommerons abcpiano, vous téléchargerez les applications abc2midi.exe et midi2abc pour pouvoir traiter les fichiers .abc et .mid

Téléchargez le fichier abc2midi.exe

Téléchargez le fichier midi2abc.exe

Exemples d'applications qui utilisent des fonctions du moduleabc pour le piano

Vous placerez les sources .txt des exemples dans le répertoire abcpiano, que vous exécuterez avec la commande python.

Exemple abcpiano.txt pour la construction d'un fichier test.abc

L'application abcpiano.txt permet de saisir les tablatures main droite et main gauche, pour les jouer séparément ou ensemble.

Fichier de l'application abcpiano.txt

Si vous n'arrivez pas à copier le fichier abcpiano.txt dans votre répertoire abcpiano, copiez le code ci-dessous et placez le dans un fichier abcpiano.txt du répertoire abcpiano.

Code de l'application abcpiano.txt

from moduleabc import motifmelodie from moduleabc import gamme from moduleabc import gammebemol from moduleabc import tablarythme from moduleabc import abc from moduleabc import normaliser from moduleabc import abcpara from moduleabc import tab print("Entrez la main droite ou tapez gamme ou return") tab1=input() if tab1=="gamme" : print("Entrez un ton") ton=input() print("Entrez un mode") mode=input() ton=ton.upper() if ton=="C" or ton=="G" or ton=="D" or ton=="A" or ton=="E" or ton=="B" or ton=="C#" or ton=="F#" : tab1=gamme(ton,mode) else : tab1=gammebemol(ton,mode) if tab1 != "" : print("Entrez un motif de tablature pour la main droite") motif=input() print("Entrez une translation") trans=input() tab1=motifmelodie(motif,trans,tab1) print("Tablature avec motif",tab1) print("Entrez un rythme sous la forme !f!2 1/4 1/4 !p!/2 par exemple ou return") rythme=input() tab1=tablarythme(tab1,rythme) print("tablature avec rythme et nuances") tab(tab1) print("Entrez la main gauche ou tapez gamme ou return") tab2=input() if tab2=="gamme" : print("Entrez un ton") ton=input() print("Entrez un mode") mode=input() ton=ton.upper() if ton=="C" or ton=="G" or ton=="D" or ton=="A" or ton=="E" or ton=="B" or ton=="C#" or ton=="F#" : tab2=gamme(ton,mode) else : tab2=gammebemol(ton,mode) if tab2 != "" : print("Entrez un motif de tablature pour la main gauche") motif=input() print("Entrez une translation") trans=input() tab2=motifmelodie(motif,trans,tab2) print("Tablature avec motif",tab2) print("Entrez un rythme sous la forme !f!2 1/4 1/4 !p!/2 par exemple ou return") rythme=input() tab2=tablarythme(tab2,rythme) print("tablature avec rythme et nuances") tab(tab2) abcparam=abcpara() fichier = open("test.abc", "w") fichier.write(abcparam) fichier.close() if tab1 =="" : tab1="P" else : abctab1=abc(tab1) print("voix1 ",abctab1) fichier = open("test.abc", "a") fichier.write("V:1\n") fichier.write(abctab1) fichier.close() if tab2 != "" : abctab2=abc(tab2) print("voix2 ",abctab2) fichier = open("test.abc", "a") fichier.write("\nV:2\n") fichier.write("%%MIDI transpose -24\n") fichier.write(abctab2) fichier.close()

Les tablatures sont entrées au clavier en notation tab

Une entrée vide par la touche return vous permet de choisir une gamme dans toutes les tonalités, en entrant un ton et un mode.

Les modes sont mag harm mel chr...

Vous remarquez que l'on utilise la fonction motifmelodie pour choisir un motif de notes pour les tablatures main droite et main gauche, avec ou sans rythme

La fonction tablarythme vous permet de changer le rythme des tablatures.

Enfin, la fonction abc transforme les tablatures main droite et main gauche en langage abc pour les copier dans le fichier test.abc à la liste des paramètres abcparam construite par la fonction abcpara.

Il vous reste à entrer lacommande abc2midi test qui construira le fichier test1.mid de votre exemple.

L'application abclire.txt

Copiez lefichier abclire.abc dans le répertoire abc et lancez la commande python abclire.txt

Fichier abclire.txt

Si vous n'arrivez pas à téléchargez abclire.txt, copiez son code ci-dessous et placez le dans un fichier abclire.txt du répertoire abcpiano.

Code de l'application abclire.txt

from moduleabc import mesuretabla from moduleabc import lire from moduleabc import tab from moduleabc import abc print("Entrez un nom de fichier abc ou return") ficabc=input() if ficabc=="" : ficabc="test.abc" fichier = open(ficabc, "r") abctab=fichier.read() fichier.close() abcparam="" abctab1="" abctab2="" ideb=0 ideb2=0 for i in range(len(abctab)) : l3=abctab[i:i+3] if l3=="V:1" : ideb=i+3 abcparam=abctab[0:i] if l3=="V:2" : ideb2=i if ideb2 != 0 : abctab1=abctab[ideb:ideb2] abctab2=abctab[ideb2+3:len(abctab)] if ideb2==0 : abctab1=abctab[ideb:len(abctab)] abctab2="z" prov1="" prov2="" for i in range(len(abctab1)) : l1=abctab1[i] if l1=="\n" : l1="" prov1=prov1+l1 abctab1=prov1 for i in range(len(abctab2)) : l1=abctab2[i] if l1=="\n" : l1="" prov2=prov1+l1 abctab2=prov2 print("main droite",abctab1) print("Entrez la mesure début pour la main droite") deb=input() print("Entrez la mesure fin pour la main droite") fin=input() abctab1=mesuretabla(abctab1,deb,fin) tab1=lire(abctab1) #print("mesures",deb,fin,tab1) print("main droite choisie :") tab(abctab1) print("main gauche",abctab2) print("Entrez la mesure début pour la main gauche") deb=input() print("Entrez la mesure fin pour la main gauche") fin=input() abctab2=mesuretabla(abctab2,deb,fin) tab2=lire(abctab2) #print("mesures",deb,fin,tab2) print("main gauche choisie :") tab(abctab2) fichier = open("test.abc", "w") fichier.write(abcparam) fichier.close() if abctab1 != "" : fichier = open("test.abc", "a") fichier.write("V:1\n") fichier.write(abctab1) fichier.close() if abctab2 != "" : fichier = open("test.abc", "a") fichier.write("\nV:2\n") # fichier.write("%%MIDI transpose -24\n") fichier.write(abctab2) fichier.close()

Commencez en créant un fichier fic.abc à partir d'un fichier fic.mid par la commande midi2abc fic.mid >fic.abc

La fonction lire transforme un fichier abc en langage de tablature tab.

Vous pouvez alors modifier cette tablature, choisir un ensemble de ses mesures...

La tablature modifiée sera transformée en fichier test.abc que vous pourrez transformer en test1.mid par la commande abc2midi test.abc

L'application abclire peut servir pour écouter et afficher un morceau mesures par mesures pour pouvoir le travailler mains séparées ou mains ensemble.

L'application abcmesure.txt

Copiez lefichier abcmesure.abc dans le répertoire abc et lancez la commande python abcmesure.txt

Fichier abcmesure.txt

Si vous n'arrivez pas à téléchargez abcmesure.txt, copiez son code ci-dessous et placez le dans un fichier abclire.txt du répertoire abcpiano.

Code de l'application abcmesure.txt

from moduleabc import mesuretabla from moduleabc import lire from moduleabc import tab from moduleabc import abc print("Entrez un nom de fichier abc ou return") ficabc=input() if ficabc=="" : ficabc="test.abc" fichier = open(ficabc, "r") abctab=fichier.read() fichier.close() abcparam="" abctab1="" abctab2="" ideb=0 ideb2=0 for i in range(len(abctab)) : l3=abctab[i:i+3] if l3=="V:1" : ideb=i+3 abcparam=abctab[0:i] if l3=="V:2" : ideb2=i if ideb2 != 0 : abctab1=abctab[ideb:ideb2] abctab2=abctab[ideb2+3:len(abctab)] if ideb2==0 : abctab1=abctab[ideb:len(abctab)] abctab2="z" print("main droite",abctab1) print("Entrez la mesure début pour la main droite") deb=input() print("Entrez la mesure fin pour la main droite") fin=input() abctab1=mesuretabla(abctab1,deb,fin) print("main droite choisie",abctab1) print("main gauche",abctab2) print("Entrez la mesure début pour la main gauche") deb=input() print("Entrez la mesure fin pour la main gauche") fin=input() abctab2=mesuretabla(abctab2,deb,fin) print("main gauche choisie",abctab2) fichier = open("test.abc", "w") fichier.write(abcparam) fichier.close() if abctab1 != "" : fichier = open("test.abc", "a") fichier.write("V:1\n") fichier.write(abctab1) fichier.close() if abctab2 != "" : fichier = open("test.abc", "a") fichier.write("\nV:2\n") # fichier.write("%%MIDI transpose -24\n") fichier.write(abctab2) fichier.close()

L'application abctabacc.txt

Copiez lefichier abctabacc.abc dans le répertoire abc et lancez la commande python abctabacc.txt

Fichier abctabacc.txt

Si vous n'arrivez pas à téléchargez abctabacc.txt, copiez son code ci-dessous et placez le dans un fichier abctabacc.txt du répertoire abcpiano.

Code de l'application abctabacc.txt

from moduleabc import tabacc from moduleabc import motifmelodie from moduleabc import tablarythme from moduleabc import abc from moduleabc import normaliser from moduleabc import abcpara from moduleabc import tab print("Entrez une tablature pour la main droite ou return") tab1=input() if tab1 != "" : print("Entrez un motif de tablature pour la main droite") motif=input() print("Entrez une translation") trans=input() tab1=motifmelodie(motif,trans,tab1) print("Tablature avec motif",tab1) print("Entrez un rythme sous la forme !f![2 1/4 1/4] !p!/2 par exemple ou return") rythme=input() tab1=tablarythme(tab1,rythme) print("tablature avec rythme et nuances") tab(tab1) print("Entrez une grille d'accords pour la main gauche ou return") suitenomacc=input() if suitenomacc=="" : print("On utilise la notation anglosaxonne pour les accords comme F G7 Cm par exemple") suitenomacc="F G7 Cm" tabla=tabacc(suitenomacc) print("tabla",tabla) tab2=tabla if tab2 != "" : print("Entrez un motif de tablature pour la main gauche") motif=input() print("Entrez une translation") trans=input() tab2=motifmelodie(motif,trans,tab2) print("Tablature avec motif",tab2) print("Entrez un rythme sous la forme !f!2 1/4 1/4 !p!/2 par exemple ou return") rythme=input() tab2=tablarythme(tab2,rythme) print("tablature avec rythme et nuances") tab(tab2) abcparam=abcpara() fichier = open("test.abc", "w") fichier.write(abcparam) fichier.close() if tab1 =="" : tab1="P" else : abctab1=abc(tab1) print("voix1 ",abctab1) fichier = open("test.abc", "a") fichier.write("V:1\n") fichier.write(abctab1) fichier.close() if tab2 != "" : abctab2=abc(tab2) print("voix2 ",abctab2) fichier = open("test.abc", "a") fichier.write("\nV:2\n") fichier.write("%%MIDI transpose -24\n") fichier.write(abctab2) fichier.close()

On voit que l'on peut entrer une mélodie pour la main droite et une grille d'accords pour la main gauche.

La fonction tablarythme permet de plaquer les accords en utilisant les crochets [ ]

L'application abcmouve.txt

Copiez lefichier abc.abc dans le répertoire abc et lancez la commande python abcmouve.txt

Fichier abcmouve.txt

Si vous n'arrivez pas à téléchargez abcmouve.txt, copiez son code ci-dessous et placez le dans un fichier abcmouve.txt du répertoire abcpiano.

Code de l'application abcmouve.txt

from moduleabc import motifmelodie from moduleabc import tablarythme from moduleabc import abc from moduleabc import normaliser from moduleabc import abcpara from moduleabc import mouve from moduleabc import decodetabinter print("Entrez une suite d'intervalles avec déplacements") suiteinter=input() mouvetablainter=[] for i in range(256) : mouvetablainter.append(" ") mouvetablainter=mouve(suiteinter) print("Entrez un ton") ton=input() 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) tab1=tabla if tab1 != "" : print("Entrez un motif de tablature pour la main droite") motif=input() print("Entrez une translation") trans=input() tab1=motifmelodie(motif,trans,tab1) print("Tablature avec motif",tab1) print("Entrez un rythme sous la forme !f!2 1/4 1/4 !p!/2 par exemple ou return") rythme=input() tab1=tablarythme(tab1,rythme) print("tablature avec rythme et nuances") tab(tab1) print("Entrez la main gauche ou tabez gamme ou return") tab2=input() if tab2 != "" : print("Entrez un motif de tablature pour la main gauche") motif=input() print("Entrez une translation") trans=input() tab2=motifmelodie(motif,trans,tab2) print("Tablature avec motif",tab2) print("Entrez un rythme sous la forme !f!2 1/4 1/4 !p!/2 par exemple ou return") rythme=input() tab2=tablarythme(tab2,rythme) print("tablature avec rythme et nuances") tab(tab2) abcparam=abcpara() fichier = open("test.abc", "w") fichier.write(abcparam) fichier.close() if tab1 =="" : tab1="P" else : abctab1=abc(tab1) print("voix1 ",abctab1) fichier = open("test.abc", "a") fichier.write("V:1\n") fichier.write(abctab1) fichier.close() if tab2 != "" : abctab2=abc(tab2) print("voix2 ",abctab2) fichier = open("test.abc", "a") fichier.write("\nV:2\n") fichier.write("%%MIDI transpose -24\n") fichier.write(abctab2) fichier.close()

Retour dans la page index du site studyvoxmusi