diff --git a/text2morse.bash b/text2morse.bash new file mode 100644 index 0000000..dbe2491 --- /dev/null +++ b/text2morse.bash @@ -0,0 +1,66 @@ +#!/bin/bash +# copyright by moshix 2024 +# text to morse +# pass it an input text file + +# Check if a file name is provided +if [ "$#" -ne 1 ]; then + echo "Usage: $0 filename" + exit 1 +fi + +# Morse code definitions +declare -A 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]="-----" +) + + +beep_morse() { + local char="$1" + case "$char" in + ".") + # Dot: Short beep + beep -l 100 -f 800 + #echo -n "$char" + ;; + "-") + # Dash: Longer beep + beep -l 300 -f 800 + ;; + esac + # Pause between parts of the same letter + sleep 0.1 +} + +# Read the file +while IFS= read -r line; do + # Convert line to uppercase (Morse is case-insensitive) + line=$(echo "$line" | tr '[:lower:]' '[:upper:]') + # Process each character + for (( i=0; i<${#line}; i++ )); do + char="${line:$i:1}" + if [[ ${morse[$char]+_} ]]; then + # Translate character to Morse and beep + for (( j=0; j<${#morse[$char]}; j++ )); do + echo -n "${morse[$char]} " + #beep_char="${morse[$char]:$j:1}" + #beep_morse "$beep_char" + done + # Pause between letters + sleep 0.1 + fi + done + # Pause between lines + echo -e "\n" + sleep 0.3 +done < "$1" +echo " "