Como converter texto para código morse na prática
Escrever em código morse com scripts python simples
A maioria das pessoas tenta ferramentas online ou apps prontos quando quer converter texto para código morse. Isso funciona para textos curtos, mas logo você percebe que a solução não serve mais. A primeira vez que isso me deu problema foi quando precisei converter uma mensagem de testes de 300 caracteres em formato binário puro para um sistema de radiocomunicação embutido. O codificador online simplesmente travou. Resolvi com um script próprio, e desde então quase nunca uso gerador externo. A lógica básica é uma tabela de mapeamento entre caracteres e sequências de pontos e traços. O padrão internacional (ITU-R M.1677) define que cada letra e dígito tem sua representação fixa. Por exemplo, a letra A vira ponto-trave, B vira traço-ponto-ponto-ponto, e o número 5 vira cinco pontos seguidos. Não tem segredo matemático nisso. O trabalho real começa quando você precisa lidar com espaçamento.
O erro mais comum que eu vejo em qualquer tutorial por aí é a falta de atenção aos espaços entre as letras e palavras. Código morse convencional usa três unidades de espaço entre letras e sete entre palavras. Se você não separar corretamente, a mensagem fica ilegível. Eu já perdi tempo decodificando manualmente uma sequência que estava errada só porque o conversor colou tudo junto. A solução é simples: adicione um separador explícito no seu código. Para escrever em código morse de forma confiável, o caminho mais direto é criar uma função que itere sobre cada caractere da string. Você consulta uma tabela hash ou dicionário que contenha todas as 26 letras, os 10 dígitos e os sinais de pontuação mais usados. Se o caractere for espaço, você retorna o separador de palavras. Se for outro caractere, retorna o separador de letras. Qualquer coisa fora do conjunto válido você ignora ou substitui por um marcador de erro.
Aqui está um exemplo mínimo em Python que eu costumo usar como base: MORSE = {"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": "-----", " ": "/"}
def para_morse(texto):
return " ".join(MORSE.get(c.upper(), "") for c in texto if c.upper() in MORSE)
👉 Clique no botão abaixo para saber mais sobre o assunto!
Esse código produz saída limpa, mas é apenas o ponto de partida. Se você precisa gerar áudio, o próximo passo é mapear a duração de cada símbolo. A convenção padrão diz que um ponto dura uma unidade, um traço dura três unidades, e o espaço entre símbolos de uma mesma letra também dura uma unidade. O espaço entre letras são três unidades, e entre palavras sete unidades. Traduzindo isso para tempo real a 20 palavras por minuto, cada unidade fica em torno de 60 milissegundos. Você ajusta essa velocidade conforme a necessidade, mas manter esse ratio é essencial para que a mensagem seja entendida por qualquer operador treinado. Outro problema que muita gente não considera é a codificação de caracteres especiais. Acentos, cedilha e caracteres Unicode não fazem parte do conjunto padrão do código morse. Em situações reais, você tem duas opções: transliterar o caractere para o mais próximo do alfabeto latino ou usar o código internacional de sinais para palavras, que é ainda menos conhecido. Eu recomendo transliterar e deixar claro no documento o que foi alterado, porque na prática ninguém quer perder tempo com exceções unicode num sistema que nasceu no século dezenove.
Se você quer ir além do básico e gerar um arquivo de áudio WAV diretamente, biblioteca como pydub ou scipy fazem isso sem complicação. Você calcula o tempo de cada segmento, adiciona silenziadores entre letras e palavras, e exporta. No meu caso, eu fiz um gerador que saía com frequências de 600Hz e duty cycle de 50%, que é o padrão usado em transmissores de amador. Resultado: o áudio ficou claramente diferenciável mesmo em ruído moderado, e a velocidade de 15 WPM se mostrou confortável para teste sem perda de caracteres. A principal limitação dessa abordagem é que código morse, por si só, não escala bem para textos longos. A densidade de informação é baixa comparada a qualquer codificação moderna como UTF-8 ou mesmo base64. Um texto de mil caracteres pode virar uma sequência morse que leva mais de oito minutos para ser transmitida no padrão de velocidade operacional. Se o seu objetivo é compressão ou transmissão eficiente de dados, considere usar morse apenas como camada final de representação, empacotando os dados em formatos binários primeiro.
Para quem precisa de algo pronto e confiável, existem bibliotecas como morse em JavaScript, morse em C e implementações em Rust também. Mas a maior parte dessas bibliotecas ignora o espaçamento correto ou não oferecem controle fino de timing. Eu recomendo escrever sua própria implementação com base no padrão ITU e depois testar com um decodificador de referência, como o software KMM ou similares. A validação cruzada evita surpresas quando o sistema vai para campo.