Advertisement
AntonioVillanueva

professeur de télégraphie

Oct 30th, 2023 (edited)
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.72 KB | None | 0 0
  1. #Antonio Villanueva Segura cw python linux
  2. #pip install sounddevice
  3. #pip install pynput
  4. #sudo apt-get install libportaudio2
  5.  
  6. import numpy as np
  7. import sounddevice as sd
  8.  
  9. import random
  10. import time
  11. import threading
  12. from pynput import keyboard
  13.  
  14. TONE=900 #Hz
  15. LIGNE=3 #Durée d'une ligne
  16. POINT=1 #Durée d'un point
  17. SPACE=1#Espace entre les symboles
  18. SPACE_MOTS=7 #Espace entre les mots
  19. VITESSE=0.1
  20.  
  21. correcte=0
  22. incorrecte=0
  23. erreur=True #répéter la lettre erreur
  24.  
  25. #dictionnaire de type clé (lettre), valeur (code cw)
  26. cw_dict = {
  27.     'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
  28.     'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
  29.     'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
  30.     'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
  31.     'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
  32.     'Z': '--..',
  33.     '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....',
  34.     '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----',
  35.     '+': '.-.-.', '=': '-...-', ',': '--..--', '.': '.-.-.-', '?': '..--..',
  36.     '/': '-..-.', '(': '-.--.', ')': '-.--.-', '&': '.-...',
  37.     ':': '---...', ';': '-.-.-.', "'": '.----.', '-': '-....-',
  38.     '_': '..--.-', '"': '.-..-.', '$': '...-..-', '!': '-.-.--',
  39.     '@': '.--.-.'
  40. }
  41.  
  42.  
  43. touche=""
  44. press=False
  45.  
  46. def on_press(key):
  47.     """ touche enfoncée """
  48.     global touche
  49.     global press
  50.     """
  51.     if key == keyboard.Key.enter:
  52.         press=True
  53.         enter=True
  54.     else:
  55.     """
  56.  
  57.     try:
  58.         touche =format(key.char)
  59.         press=True
  60.     except AttributeError:
  61.         print("Erreur ".format(key))
  62.         touche=""
  63.  
  64. def on_release(key):
  65.     """touche relachee """
  66.     global press
  67.  
  68.     press=False
  69.  
  70.     if key == keyboard.Key.esc:
  71.         # Stop listener
  72.         return False
  73.        
  74. def cw_aleatoire(cw):
  75.     """ renvoie une clé aléatoire dans le dictionnaire"""
  76.     lettre=""
  77.     while (not lettre.isalpha()):
  78.         lettre=random.choice(list(cw.keys()))
  79.     return lettre
  80.  
  81.  
  82. def playSound(t):
  83.     """ joue un son de freq TONE et d'une durée t"""
  84.     # Génère une tonalité sinusoïdale de la fréquence et de la durée spécifiées
  85.     sin = np.linspace(0, t, int(t * 44100), endpoint=False)
  86.     audio_data = 0.5 * np.sin(2 * np.pi * TONE * sin)
  87.  
  88.     # jouer le son
  89.     sd.play(audio_data, 44100)
  90.  
  91.     # Attends la fin du son
  92.     sd.wait()
  93.  
  94.  
  95. def playChar(c,cw_dict):
  96.     """ joue la lettre """
  97.     lettre= cw_dict[c]
  98.     for s in lettre:
  99.         if s=='.':
  100.             playSound(POINT*VITESSE)
  101.         else:
  102.             playSound(LIGNE*VITESSE)
  103.         time.sleep(SPACE*VITESSE)
  104.  
  105. def charCw (c,cw_dict):
  106.     """ montre le code cw d'une lettre """
  107.     lettre= cw_dict[c]
  108.     print (" ( ",end="")
  109.     for s in lettre:
  110.         if s=='.':
  111.             print ('.',end="")
  112.         else:
  113.             print ('_',end="")
  114.         print(' ',end="")
  115.     print (" ) ",end="")       
  116.  
  117.    
  118. def run():
  119.     global press
  120.     global touche
  121.     global correcte
  122.     global incorrecte
  123.     global erreur
  124.     #boucle de fil principal
  125.     lettre=cw_aleatoire(cw_dict)
  126.     while True:
  127.  
  128.         if not erreur:#Repeter si erreur
  129.             lettre=cw_aleatoire(cw_dict)
  130.  
  131.         playChar(lettre,cw_dict)
  132.        
  133.         #attend qu'on appuie sur une touche
  134.        
  135.         while not press:
  136.             pass
  137.  
  138.    
  139.         """
  140.         #attend qu'on relache la touche    
  141.         while  press:
  142.             pass       
  143.         """
  144.         charCw(lettre,cw_dict)
  145.         if lettre==touche.upper():
  146.             print (" OK",end="")
  147.             correcte+=1
  148.             erreur=False
  149.         else:
  150.             print (" erreur, la lettre était ",lettre,end="")
  151.             incorrecte+=1
  152.             erreur=True #Repeter lettre    
  153.         print (" ( correctes = ",correcte," ,incorrectes =",incorrecte," )")
  154.  
  155.    
  156.    
  157. if __name__ == '__main__':
  158.  
  159.     print ("professeur de CW")
  160.     #fil de lecture des touches
  161.     with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
  162.        
  163.         fil = threading.Thread(target=run)
  164.         fil.start()
  165.         fil.join()
  166.         listener.join()
  167.  
  168.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement