Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/bash
- # rtttl.sh -- Nokia Composer RTTTL Player
- # Requirement: SOX Play ($ sudo apt install sox libsox-fmt-all)
- # Usage: rtttl.sh "Cola:d=4,o=5,b=125:8f#6,8f#6,8f#6,8f#6,g6,8f#6,e6,8e6,8a6,f#6,d6,2p"
- # Usage: rtttl.sh "16e2 16d2 8#f1 8#g1 16c#2 16b1 8d1 8e1 16b1 16a1 8#c1 8e1 16a1"
- a=${*//,/ }
- d=4
- o=1
- b=63
- if [[ "$a" == *:* ]]; then
- a="${a#*:}"
- for field in ${a%%:*}; do
- case "$field" in
- d=*) d="${field#d=}" ;;
- o=*) o="${field#o=}" ;;
- b=*) b="${field#b=}" ;;
- esac
- done
- a="${a#*:}"
- fi
- play="/usr/bin/play -n "
- for token in $a; do
- if [[ "$token" =~ ^([0-9]*)?(\.?)(#?)([a-gp-])(#?)([0-9]*)$ ]]; then
- dur=$(( $( [[ -n "${BASH_REMATCH[2]}" ]] && echo 360000 || echo 240000 ) / $b / ${BASH_REMATCH[1]:-$d} ))
- dur=$(echo "scale=3; $dur/1000" | bc)
- #echo "(DUR $dur)"
- if [[ ${BASH_REMATCH[4]} == '-' ]] || [[ ${BASH_REMATCH[4]} == 'p' ]]; then
- play="${play} trim 0 ${dur} ':' "
- else
- note="${BASH_REMATCH[4]}${BASH_REMATCH[3]}${BASH_REMATCH[5]}$(( ${BASH_REMATCH[6]:-$o} % 5 + 5))"
- play="${play} synth ${dur} sin '${note^^}' ':' "
- fi
- fi
- done
- play="${play} trim 0 0"
- echo "echo d=$d,o=$o,b=$b; $play"
- eval $play
Advertisement