Vous êtes ici : Accueil Actualités Générer du morse.

Générer du morse.

Voici un court exemple permettant de générer du morse à partir de fichiers sonores libres et de quelques lignes de Python.

Après une actu présentant le module pyknon (sur les fichiers MIDI), on reste sur le domaine du son avec une utilisation de pygame pour générer un code morse sonore.

Comme souvent, Wikipédia propose un article très complet sur ce qu'est l'alphabet Morse. Il propose également de télécharger les sons pour chaque lettre et chaque chiffre. A partir ce des fichiers, et de ces règles, il est possible de créer un petit script python pour décoder une phrase.

Voici d'abord les quelques règles à connaître, résumées par une image de l'encyclopédie en ligne :

http://upload.wikimedia.org/wikipedia/commons/thumb/8/8e/International_Morse_Code-fr.svg/330px-International_Morse_Code-fr.svg.png

Voici maintenant le code python :

#!/usr/bin/python
#-*- coding: utf-8 -*-


import sys
import pygame
import time


CODE = {'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': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.'
}
CODE_KEYS = CODE.keys()


BASE_TIME_UNIT = 0.2
LETTER_TIME_SEP, LETTER_CHAR_SEP = 3 * BASE_TIME_UNIT, ' '
WORD_TIME_SEP, WORD_CHAR_SEP = 7 * BASE_TIME_UNIT, '      '
PATH = 'morse_sound_files/'


def print_char(char):
print CODE[char.upper()],
sys.stdout.flush()
def print_unknow_letter():
print '?',
sys.stdout.flush()
def print_word_sep():
print WORD_CHAR_SEP,
time.sleep(WORD_TIME_SEP)


def main():
while True:
# Demander le message à afficher
message = raw_input('message (q for exit): ')

# Vérifier les conditions de sortie
if message.lower() in ('q', 'quit', 'exit', '\\q', ''):
sys.exit(0)

# Initialiser Pygame
pygame.init()

# Écriture des caractères
for char in message:
char = char.upper()
if char in ' -_':
print_word_sep()
elif char in CODE_KEYS:
print_char(char)
pygame.mixer.music.load(PATH + char + '_morse_code.ogg')
pygame.mixer.music.play()
time.sleep(LETTER_TIME_SEP)
else:
print_unknow_letter()
time.sleep(LETTER_TIME_SEP)
print ''


if __name__ == "__main__":
main()

On pourrait encore améliorer le code en proposant de rajouter le support de la ponctuation ou des lettres accentuées, voire en remplaçant l'utilisation des fichiers sonores par deux sons : un pour le tiret et un pour le point, ce qui permettrait d'utiliser encore mieux le dictionnaire des codes morses.

On pourrait également en générer un fichier sonore.

Mots-clés associés : ,

Spinner