On connait les fonctions winsound et playsound pour lire les .wav
On les a utilisé pour construire l'application key.txt du clavier sonoreFichier key.txt du clavier sonore
Les applications winsound et playsound ne permettent pas de mixer les sons.
De plus, le module winsound ne fonctionne pas dans tous les environnements de python.
C'est pourquoi on a utilisé le module pygame pour créer les applications playnote, playtabla et playaccord.
keymixer.txt ressemble au clavier sonore key.txt, mais il permet de plaquer et d'arpéger les accords constitutifs des tonalités majeures, mineurs harmoniques et mineurs mélodiques dans toutes les tonalités.
Pour exécuter le code keymixer.txt sur votre PC, vous devez installer les modules keyboard, playsound et pygame avec pip install
Vous devez aussi copier le fichier moduleabc.txt dans le même répertoire que le fichier keymixer.txt et le renommer moduleabc.py
Enfin, vous placerez dans ce répertoire le sous répertoire de nom wav dans lequel vous aurez décompressé le fichier notes.zip des .wav des notes de 2 gammes chromatiques.
Vous lancerez l'application par python keymixer.txt
Par défaut, le ton est celui de Do et le mode est le mode majeur.
La touche "=" permet de choisir le volume sonore des sons des touches
La touche "!" permet de choisir un mode parmi les modes maj, harm et mel.
Les touches 0 1 2 3 4 5 6 7 8 9 * - transposent la tonalité de la tonalité courante de 0 1 2 3...demi-tons.
On les trouve sur le pavé numérique ou sur la ligne en haut du clavier.
La ligne au bas du clavier contient une octave de la tonalité courante.
La ligne a z e r t y u contient les arpèges des accords constitutifs de la tonalité courante.
La ligne q s d f g h j k contient les accords constitutifs plaqués.
Les touches de fonctions F1 F2...F12 contiennent les 12 notes de la gamme chromatique courante.
la touche ":" permet de lire le nom de la notes de la touche du piano qui vient d'être appuyée.
Les notes jouées sont écrites dans le fichier test.txt
Vous pouvez vous inspirer du code ci-dessous, si vous voulez construire un clavier sonore en python.
import pygame from pygame import mixer pygame.init() pygame.mixer.init() 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" sound = pygame.mixer.Sound(fic) sound.set_volume(0.2) sound.play() #winsound.PlaySound(fic, winsound.SND_FILENAME) return tradnote def playaccord(trans,n1,n2,n3,n4) : tradnote1="" tradnote2="" tradnote3="" tradnote4="" n1=trans+n1 note1=str(n1) if n1>29 and n1<54 : fic1="wav/"+note1+".wav" sound = pygame.mixer.Sound(fic1) sound.set_volume(0.2) sound.play() tradnote1=trad(trans,note1) n2=trans+n2 if n2>29 and n2<54 : note2=str(n2) fic2="wav/"+note2+".wav" sound = pygame.mixer.Sound(fic2) sound.set_volume(0.2) sound.play() tradnote2=trad(trans,note2) n3=trans+ n3 if n3>29 and n3<54 : note3=str(n3) fic3="wav/"+note3+".wav" sound = pygame.mixer.Sound(fic3) sound.set_volume(0.2) sound.play() tradnote3=trad(trans,note3) n4=trans+ n3 if n4>29 and n4<54 : note4=str(n4) fic4="wav/"+note4+".wav" sound = pygame.mixer.Sound(fic4) sound.set_volume(0.2) sound.play() tradnote4=trad(trans,note4) tradnote=tradnote1+tradnote2+tradnote3+tradnote4 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" sound = pygame.mixer.Sound(fic) sound.set_volume(0.2) sound.play() #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="" tierce=34 sixte=39 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("Vous venez de jouer ",tradnote) if keyboard.is_pressed('!'): print("Entrez maj harm ou mel") mode=input() if mode != "harm" and mode != "mel" : mode="" if mode=="harm" or mode=="mel" : tierce=33 else : tierce=34 if mode=="harm" : sixte=38 else : sixte=39 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'): if mode=="harm" or mode=="mel" : notetabla=playtabla(trans,"c e- g C") else : notetabla=playtabla(trans,"c e g C") tabla=tabla+notetabla elif keyboard.is_pressed('z'): if mode=="harm" : notetabla=playtabla(trans,"d f a- D") else : notetabla=playtabla(trans,"d f a D") tabla=tabla+notetabla elif keyboard.is_pressed('e'): if mode=="harm" or mode=="mel" : notetabla=playtabla(trans,"e- g b E") else : notetabla=playtabla(trans,"e g b E") tabla=tabla+notetabla elif keyboard.is_pressed('r'): if mode=="harm" : notetabla=playtabla(trans,"f a- C F") else : notetabla=playtabla(trans,"f a C F") tabla=tabla+notetabla elif keyboard.is_pressed('t'): notetabla=playtabla(trans,"g b D G") tabla=tabla+notetabla elif keyboard.is_pressed('y'): if mode=="harm" : notetabla=playtabla(trans,"a- C E- A") elif mode=="mel" : notetabla=playtabla(trans,"a C E- A") else : notetabla=playtabla(trans,"a C E A") tabla=tabla+notetabla elif keyboard.is_pressed('u'): notetabla=playtabla(trans,"b D F B") tabla=tabla+notetabla elif keyboard.is_pressed('i'): if mode=="harm" or mode=="mel" : notetabla=playtabla(trans,"C E- G C") else : notetabla=playtabla(trans,"C E G C") tabla=tabla+notetabla elif keyboard.is_pressed('q'): tradnote=playaccord(trans,30,tierce,37,42) tabla=tabla+tradnote elif keyboard.is_pressed('s'): tradnote=playaccord(trans,32,35,sixte,44) tabla=tabla+tradnote elif keyboard.is_pressed('d'): tradnote=playaccord(trans,tierce,37,41,46) tabla=tabla+tradnote elif keyboard.is_pressed('f'): tradnote=playaccord(trans,35,sixte,42,47) tabla=tabla+tradnote elif keyboard.is_pressed('g'): tradnote=playaccord(trans,37,41,44,49) tabla=tabla+tradnote elif keyboard.is_pressed('h'): tradnote=playaccord(trans,sixte,42,tierce+12,51) tabla=tabla+tradnote elif keyboard.is_pressed('j'): tradnote=playaccord(trans,41,44,47,53) tabla=tabla+tradnote elif keyboard.is_pressed('k'): tradnote=playaccord(trans,42,tierce+12,49,42) tabla=tabla+tradnote elif keyboard.is_pressed('w'): tradnote=playnote(trans,30) tabla=tabla+tradnote elif keyboard.is_pressed('x'): tradnote=playnote(trans,32) tabla=tabla+tradnote elif keyboard.is_pressed('c'): tradnote=playnote(trans,tierce) tabla=tabla+tradnote elif keyboard.is_pressed('v'): tradnote=playnote(trans,35) tabla=tabla+tradnote elif keyboard.is_pressed('b'): tradnote=playnote(trans,37) tabla=tabla+tradnote elif keyboard.is_pressed('n'): tradnote=playnote(trans,sixte) tabla=tabla+tradnote elif keyboard.is_pressed(','): tradnote=playnote(trans,41) tabla=tabla+tradnote elif keyboard.is_pressed(';'): tradnote=playnote(trans,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)