On peut jouer des fichier .wav en utilisant le module winsound de python.
Exemple d'application en python pour jouer des .wav
On peut aussi utiliser la fonction playsound de winsound, pour créer un clavier sonore.
Enfin, on peut utiliser le module pygame pour mixer les fichiers .wav et jouer des accords en appuyant sur des touches
L'application keymixer.txt pour le clavier sonore avec pygameLe logitiel key.txt du clavier sonore permet de jouer des notes dans tous les tons et dans les modes majeurs, mineurs harmoniques et mineurs mélodiques.
On associe une note de musique à une touche du clavier.
Le fichier .wav de la note est joué quand on appuie sur une touche.
Les touches F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 et F12 correspondent aux 12 notes d'une gamme chromatique.
Les touches 0 1 2 3 4 5 6 7 8 9 * - du clavier numérique permettent de jouer des intervalles de musique ainsi que des changements de ton.
La touche 0 correspond au ton de Do majeur.
La touche 1 correspond à une transposition d'un demi-ton et à l'intervalle s=[do do#]
La touche 2 correspond à une transposition d'un ton et à l'indervalle S=[do ré]
La ligne 1 2 3 4 5 6 7 8 9 0 du clavier correspond à une gamme chromatique.
Les lignes azert... et qsdfg...correspondent à des gammes majeures dans la tonalité choisie par une touche du clavier numérique.
La ligne wxcvb...correspond à la gamme de Do majeur et elle n'est pas transtosée par appui sur une touche du clavier numérique.
Les notes jouées sont écrites dans le fichier test.txt en notation anglo-saxonne c c# d d#...
Les intervalles choisis par les touches du clavier numérique sont écrits sous la forme s S t T Q v V x X 7 et 7M
La touche 0 permet d'écrire un espace entre les suites d'intervalles.
Le code de l'application clavier sonore est placé dans le fichier key.txt
Fichier key.txt du code du clavier sonore
Pour exécuter le clavier sonore sur votre PC, vous devez installer une version du langage python ainsi que les modules winsound et keyboard.
Ces modules s'installent en utilisant pip install.
Il faut aussi placer le module moduleabc.py dans le même répertoire que le fichier key.txt
Pour cela, copiez le fichier moduleabc.txt en utilisant le lien ci-dessous et renommez-le moduleabc.txt
Vous devez aussi télécharger les fichiers .wav des notes de 2 octaves, que vous placerez dans un sous répertoire wav du répertoire où vous avez téléchargé key.txt
Page des fichiers .wav des notesLancez l'application sous DOS par la commande python key.txt
On vous propose de choisir un mode parmi les modes majeurs, mineurs harmonique et mélodiques ainsi que le mode blues majeur.
La touche esc permet de terminer l'application.
Les notes que l'on entend en appuyant sur les touches du clavier numérique sont écrites dans la chaîne de caractère grille en suite d'intervalles comme T pour la touche 4 , Q pour la touche 5...
Cela permet d'écrire les accords comme des suites d'intervalles, comme Ttt par exemple, pour un accord de septième de dominante.
On choisit la tonique en appuyant sur une touche du clavier qui se place au début de l'accord comme GTtt pour Sol sept.
Les notes autres que les intervalles sont écrites dans la chaîne tabla.
Pour comprendre le fonctionnement du clavier sonore, lisez les instructions ci-dessous :
import winsound import keyboard from moduleabc import normaliser from moduleabc import tradtabnote from moduleabc import trad def playnote(trans,n) : tradnote="" ton=trans+n if ton<30 or ton>53 : return "" note=str(ton) tradnote=trad(trans,ton) fic="wav/"+note+".wav" winsound.PlaySound(fic, winsound.SND_FILENAME) return tradnote def playtabla(trans,tabla) : prov="" for i in range(len(tabla)) : note=tabla[i] l1=note.lower() if l1=="c" or l1=="d" or l1=="e" or l1=="f" or l1=="g" or l1=="a" or l1=="b" : note=" "+note prov=prov+note tabla=prov normaliser(tabla) print("tabla",tabla) tabla=tabla+" " tabnote="" notetabla="" for i in range(len(tabla)) : l1=tabla[i] if l1==" " : note=tradtabnote(trans,tabnote) if note==" " or note=="" : note="1" n=int(note) if n>29 and n<54 : fic="wav/"+note+".wav" winsound.PlaySound(fic, winsound.SND_FILENAME) notetabla=notetabla+note+" " tabnote="" else : tabnote=tabnote+l1 return notetabla print("Tapez sur la touche ESC pour terminer") mode="" trans=0 tabla="" tradnote="" grille="" while True: try: if keyboard.is_pressed('esc'): fichier = open("test.txt", "w") fichier.write(tabla) fichier.write(grille) fichier.close() print('Fin du programme') break if keyboard.is_pressed('!'): print("Entrez un mode comme harm mel blues ou return pour le mode majeur") mode=input() if mode != "harm" or mode != "mel" or mode != "blues" : mode="" if keyboard.is_pressed('F1'): tradnote=playnote(trans,30) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F2'): tradnote=playnote(trans,31) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F3'): tradnote=playnote(trans,32) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F4'): tradnote=playnote(trans,33) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F5'): tradnote=playnote(trans,34) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F6'): tradnote=playnote(trans,35) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F7'): tradnote=playnote(trans,36) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F8'): tradnote=playnote(trans,37) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F9'): tradnote=playnote(trans,38) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F10'): tradnote=playnote(trans,39) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F11'): tradnote=playnote(trans,40) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('F12'): tradnote=playnote(trans,41) grille=grille+tradnote tabla=tabla+tradnote elif keyboard.is_pressed('0'): grille=grille+" " trans=0 playnote(trans,30) elif keyboard.is_pressed('1'): grille=grille+"s" trans=1 playnote(trans,30) elif keyboard.is_pressed('2'): grille=grille+"S" trans=2 playnote(trans,30) elif keyboard.is_pressed('3'): grille=grille+"t" trans=3 playnote(trans,30) elif keyboard.is_pressed('4'): grille=grille+"T" trans=4 playnote(trans,30) elif keyboard.is_pressed('5'): grille=grille+"Q" trans=5 playnote(trans,30) elif keyboard.is_pressed('6'): grille=grille+"v" trans=6 playnote(trans,30) elif keyboard.is_pressed('7'): grille=grille+"V" trans=7 playnote(trans,30) elif keyboard.is_pressed('8'): grille=grille+"x" trans=8 playnote(trans,30) elif keyboard.is_pressed('9'): grille=grille+"X" trans=9 playnote(trans,30) elif keyboard.is_pressed('*'): grille=grille+"7" trans=10 playnote(trans,30) elif keyboard.is_pressed('-'): grille=grille+"7M" trans=11 playnote(trans,30) elif keyboard.is_pressed('a'): tradnote=playnote(trans,42) tabla=tabla+tradnote elif keyboard.is_pressed('z'): tradnote=playnote(trans,44) tabla=tabla+tradnote elif keyboard.is_pressed('e'): if mode=="" : tradnote=playnote(trans,46) if mode=="harm" or mode=="mel" or mode=="blues" : tradnote=playnote(trans,45) tabla=tabla+tradnote elif keyboard.is_pressed('r'): if mode=="blues" : tradnote=playnote(trans,46) if mode=="" or mode=="harm" or mode=="mel" : tradnote=playnote(trans,47) tabla=tabla+tradnote elif keyboard.is_pressed('t'): tradnote=playnote(trans,49) tabla=tabla+tradnote elif keyboard.is_pressed('y'): if mode=="" or mode=="mel" or mode=="blues" : tradnote=playnote(trans,51) if mode=="harm" : tradnote=playnote(trans,50) tabla=tabla+tradnote elif keyboard.is_pressed('u'): if mode=="" or mode=="mel" or mode=="harm" : tradnote=playnote(trans,53) if mode=="blues" : tradnote=playnote(trans,52) tabla=tabla+tradnote elif keyboard.is_pressed('i'): tradnote=playnote(trans,54) tabla=tabla+tradnote elif keyboard.is_pressed('q'): tradnote=playnote(trans,30) tabla=tabla+tradnote elif keyboard.is_pressed('s'): tradnote=playnote(trans,32) tabla=tabla+tradnote elif keyboard.is_pressed('d'): if mode=="" : tradnote=playnote(trans,34) if mode=="harm" or mode=="mel" or mode=="blues" : tradnote=playnote(trans,33) tabla=tabla+tradnote elif keyboard.is_pressed('f'): if mode=="blues" : tradnote=playnote(trans,34) if mode=="" or mode=="harm" or mode=="mel" : tradnote=playnote(trans,35) tabla=tabla+tradnote elif keyboard.is_pressed('g'): tradnote=playnote(trans,37) tabla=tabla+tradnote elif keyboard.is_pressed('h'): if mode=="" or mode=="mel" or mode=="blues" : tradnote=playnote(trans,39) if mode=="harm" : tradnote=playnote(trans,38) tabla=tabla+tradnote elif keyboard.is_pressed('j'): if mode=="" or mode=="mel" or mode=="harm" : tradnote=playnote(trans,41) if mode=="blues" : tradnote=playnote(trans,40) tabla=tabla+tradnote elif keyboard.is_pressed('k'): tradnote=playnote(trans,42) tabla=tabla+tradnote elif keyboard.is_pressed('w'): tradnote=playnote(0,30) tabla=tabla+tradnote elif keyboard.is_pressed('x'): tradnote=playnote(0,32) tabla=tabla+tradnote elif keyboard.is_pressed('c'): if mode=="" : tradnote=playnote(0,34) if mode=="harm" or mode=="mel" or mode=="blues" : tradnote=playnote(0,33) tabla=tabla+tradnote elif keyboard.is_pressed('v'): if mode=="blues" : tradnote=playnote(0,34) if mode=="" or mode=="harm" or mode=="mel" : tradnote=playnote(0,35) tabla=tabla+tradnote elif keyboard.is_pressed('b'): tradnote=playnote(0,37) tabla=tabla+tradnote elif keyboard.is_pressed('n'): if mode=="" or mode=="mel" or mode=="blues" : tradnote=playnote(0,39) if mode=="harm" : tradnote=playnote(0,38) tabla=tabla+tradnote elif keyboard.is_pressed(','): if mode=="" or mode=="mel" or mode=="harm" : tradnote=playnote(0,41) if mode=="blues" : tradnote=playnote(0,40) tabla=tabla+tradnote elif keyboard.is_pressed(';'): tradnote=playnote(0,42) tabla=tabla+tradnote except: break fichier = open("test.txt", "r") tabla=fichier.readline() grille=fichier.readline() fichier.close() print("tabla",tabla) print("grille",grille) trans="" notetabla=playtabla(trans,tabla) print("notetabla",notetabla) print("Entrez le nombre de demi-tons de la transposition") trans=input() notetabla=playtabla(trans,tabla) print("notetabla",notetabla)La fonction playnote lit le fichier .wav qui correspond à la touche pressée.
La fonction tradnote renvoie le code de la note frappée, en notation anglo-saxonne.
Il est ajouté dans la chaîne tabla.
Le code des intervalles qui correspondent aux touches du pavé numérique est placé dans la chaîne grille.