Skip to content

Instantly share code, notes, and snippets.

@19wolf
Last active August 22, 2018 18:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 19wolf/591660e0b23b4193d235ed562ed48bbb to your computer and use it in GitHub Desktop.
Save 19wolf/591660e0b23b4193d235ed562ed48bbb to your computer and use it in GitHub Desktop.
#!/bin/bash
if [ -z $1 ]
then
echo "Usage: morse.sh <string in quotes> <words per minute (optional) > <beep frequency (optional)>"
exit 1
fi
if [ -z $2 ]
then
WORDS_PER_MINUTE=25
else
WORDS_PER_MINUTE=$2
fi
if [ -z $3 ]
then
FREQ=600 # The frequency we want beep to use, 600-800 is typical
else
FREQ=$3
fi
DOT_LENGTH=$((1200 / $WORDS_PER_MINUTE ))
MESSAGE=$(echo $1 | awk '$1=$1 {print toupper($0)}' FS= OFS=";");
MESSAGE=$(echo $MESSAGE | awk '$1=$1' FS=' ' OFS='WORD');
MESSAGE=$(echo $MESSAGE | sed 's/0/ZERO/; s/1/ONE/; s/2/TWO/; s/3/THREE/; s/4/FOUR/; s/5/FIVE/; s/6/SIX/; s/7/SEVEN/; s/8/EIGHT/; s/9/NINE/;');
#echo $MESSAGE # for debugging
DOT() {
beep -f $FREQ -l $DOT_LENGTH -D $DOT_LENGTH;
}
DASH() {
# A dash is 3 dots
beep -f $FREQ -l $(( DOT_LENGTH * 3 )) -D $DOT_LENGTH;
}
LETTER() {
# The space between letters is one dash
beep -f 1 -l $(( DOT_LENGTH * 3 ))
}
WORD() {
#Space between words is 7 dots
beep -f 1 -l $(( DOT_LENGTH * 7 ))
}
A() {
DOT; DASH;
LETTER;
}
B() {
DASH; DOT; DOT; DOT;
LETTER;
}
C() {
DASH; DOT; DASH; DOT;
LETTER;
}
D() {
DASH; DOT; DOT;
LETTER;
}
E() {
DOT;
LETTER;
}
F() {
DOT; DOT; DASH; DOT;
LETTER;
}
G() {
DASH; DASH; DOT;
LETTER;
}
H() {
DOT; DOT; DOT; DOT;
LETTER;
}
I() {
DOT; DOT;
LETTER;
}
J() {
DOT; DASH; DASH; DASH;
LETTER;
}
K() {
DASH; DOT; DASH;
LETTER;
}
L() {
DOT; DASH; DOT; DOT;
LETTER;
}
M() {
DASH; DASH;
LETTER;
}
N() {
DASH; DOT;
LETTER;
}
O() {
DASH; DASH; DASH;
LETTER;
}
P() {
DOT; DASH; DASH; DOT;
LETTER;
}
Q() {
DASH; DASH; DOT; DASH;
LETTER;
}
R() {
DOT; DASH; DOT;
LETTER;
}
S() {
DOT; DOT; DOT;
LETTER;
}
T() {
DASH;
LETTER;
}
U() {
DOT; DOT; DASH;
LETTER;
}
V() {
DOT; DOT; DOT; DASH;
LETTER;
}
W() {
DOT; DASH; DASH;
LETTER;
}
X() {
DASH; DOT; DOT; DASH;
LETTER;
}
Y() {
DASH; DOT; DASH; DASH;
LETTER;
}
Z() {
DASH; DASH; DOT; DOT;
LETTER;
}
ZERO() {
DASH; DASH; DASH; DASH; DASH;
LETTER;
}
ONE() {
DOT; DASH; DASH; DASH; DASH;
LETTER;
}
TWO() {
DOT; DOT; DASH; DASH; DASH;
LETTER;
}
THREE() {
DOT; DOT; DOT; DASH; DASH;
LETTER;
}
FOUR() {
DOT; DOT; DOT; DOT; DASH;
LETTER;
}
FIVE() {
DOT; DOT; DOT; DOT; DOT;
LETTER;
}
SIX() {
DASH; DOT; DOT; DOT; DOT;
LETTER;
}
SEVEN() {
DASH; DASH; DOT; DOT; DOT;
LETTER;
}
EIGHT() {
DASH; DASH; DASH; DOT; DOT;
LETTER;
}
NINE() {
DASH; DASH; DASH; DOT;
LETTER;
}
eval $MESSAGE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment