Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Antonio Villanueva Segura cw python linux
- #pip install sounddevice
- #pip install pynput
- #sudo apt-get install libportaudio2
- import numpy as np
- import sounddevice as sd
- import random
- import time
- import threading
- from pynput import keyboard
- TONE=900 #Hz
- LIGNE=3 #Durée d'une ligne
- POINT=1 #Durée d'un point
- SPACE=1#Espace entre les symboles
- SPACE_MOTS=7 #Espace entre les mots
- VITESSE=0.1
- correcte=0
- incorrecte=0
- erreur=True #répéter la lettre erreur
- #dictionnaire de type clé (lettre), valeur (code cw)
- cw_dict = {
- 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
- 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
- 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
- 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
- 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
- 'Z': '--..',
- '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
- '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----',
- '+': '.-.-.', '=': '-...-', ',': '--..--', '.': '.-.-.-', '?': '..--..',
- '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...',
- ':': '---...', ';': '-.-.-.', "'": '.----.', '-': '-....-',
- '_': '..--.-', '"': '.-..-.', '$': '...-..-', '!': '-.-.--',
- '@': '.--.-.'
- }
- touche=""
- press=False
- def on_press(key):
- """ touche enfoncée """
- global touche
- global press
- """
- if key == keyboard.Key.enter:
- press=True
- enter=True
- else:
- """
- try:
- touche =format(key.char)
- press=True
- except AttributeError:
- print("Erreur ".format(key))
- touche=""
- def on_release(key):
- """touche relachee """
- global press
- press=False
- if key == keyboard.Key.esc:
- # Stop listener
- return False
- def cw_aleatoire(cw):
- """ renvoie une clé aléatoire dans le dictionnaire"""
- lettre=""
- while (not lettre.isalpha()):
- lettre=random.choice(list(cw.keys()))
- return lettre
- def playSound(t):
- """ joue un son de freq TONE et d'une durée t"""
- # Génère une tonalité sinusoïdale de la fréquence et de la durée spécifiées
- sin = np.linspace(0, t, int(t * 44100), endpoint=False)
- audio_data = 0.5 * np.sin(2 * np.pi * TONE * sin)
- # jouer le son
- sd.play(audio_data, 44100)
- # Attends la fin du son
- sd.wait()
- def playChar(c,cw_dict):
- """ joue la lettre """
- lettre= cw_dict[c]
- for s in lettre:
- if s=='.':
- playSound(POINT*VITESSE)
- else:
- playSound(LIGNE*VITESSE)
- time.sleep(SPACE*VITESSE)
- def charCw (c,cw_dict):
- """ montre le code cw d'une lettre """
- lettre= cw_dict[c]
- print (" ( ",end="")
- for s in lettre:
- if s=='.':
- print ('.',end="")
- else:
- print ('_',end="")
- print(' ',end="")
- print (" ) ",end="")
- def run():
- global press
- global touche
- global correcte
- global incorrecte
- global erreur
- #boucle de fil principal
- lettre=cw_aleatoire(cw_dict)
- while True:
- if not erreur:#Repeter si erreur
- lettre=cw_aleatoire(cw_dict)
- playChar(lettre,cw_dict)
- #attend qu'on appuie sur une touche
- while not press:
- pass
- """
- #attend qu'on relache la touche
- while press:
- pass
- """
- charCw(lettre,cw_dict)
- if lettre==touche.upper():
- print (" OK",end="")
- correcte+=1
- erreur=False
- else:
- print (" erreur, la lettre était ",lettre,end="")
- incorrecte+=1
- erreur=True #Repeter lettre
- print (" ( correctes = ",correcte," ,incorrectes =",incorrecte," )")
- if __name__ == '__main__':
- print ("professeur de CW")
- #fil de lecture des touches
- with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
- fil = threading.Thread(target=run)
- fil.start()
- fil.join()
- listener.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement