BASH   13

saywx

Guest on 25th July 2022 05:07:40 AM

  1. #!/bin/bash
  2. # pass wx cond and convert to speach
  3. # by n5tm
  4.  
  5. args=("$@")
  6.  
  7. SOUND_VAR_DIR=/var/lib/asterisk/sounds
  8. ETC_DIR=/etc/asterisk/local
  9.  
  10. # parse each character into wx_value.gsm audio file
  11. parseStr(){
  12.         string=$1
  13.         INT=${1%.*}
  14.         DEC=${1##*.}
  15.         digit="digit-"
  16.         unset chars
  17.         declare -a chars
  18.         while read -N 1
  19.         do
  20.                 chars[${#chars[@]}]="$REPLY"
  21.         done <<<"$string"x
  22.         unset chars[$((${#chars[@]} - 1))]
  23.         unset chars[$((${#chars[@]} - 1))]
  24.  
  25.         echo "Array: ${chars[@]}"
  26.  
  27.         echo "Array length: ${#chars[@]}"
  28.         INT=${string%.*}
  29.         DEC=${string##*.}      
  30.  
  31.         if [ ${INT} -lt 20 ]; then
  32.                 cat ${SOUND_VAR_DIR}/digits/${INT}.gsm >> ${ETC_DIR}/wx_value.gsm
  33.                 if [[ $string == *"."* ]]; then
  34.                         if [ ${#DEC} -gt 1 ]; then
  35.                            cat ${SOUND_VAR_DIR}/point.gsm ${SOUND_VAR_DIR}/digits/${DEC:0:1}.gsm >>  ${ETC_DIR}/wx_value.gsm
  36.                            cat ${SOUND_VAR_DIR}/digits/${DEC:1:1}.gsm >>  ${ETC_DIR}/wx_value.gsm
  37.                         else
  38.                            cat ${SOUND_VAR_DIR}/point.gsm ${SOUND_VAR_DIR}/digits/${DEC}.gsm >>  ${ETC_DIR}/wx_value.gsm
  39.                         fi
  40.                 fi
  41.  
  42.         else
  43.            if [ ${INT} -lt 100 ]; then
  44.                 if [ ${INT} -gt 20 ]; then
  45.                     DECADE=$((INT/10*10))
  46.                     MODULO=$((INT%10))
  47.                     cat ${SOUND_VAR_DIR}/digits/${DECADE}.gsm >> ${ETC_DIR}/wx_value.gsm       
  48.                     if [ ${MODULO} != 0 ]; then
  49.                         cat ${SOUND_VAR_DIR}/digits/${MODULO}.gsm >> ${ETC_DIR}/wx_value.gsm
  50.                     fi
  51.                     if [[ $string == *"."* ]]; then
  52.                         cat ${SOUND_VAR_DIR}/point.gsm ${SOUND_VAR_DIR}/digits/${DEC}.gsm >>  ${ETC_DIR}/wx_value.gsm
  53.                     fi
  54.        
  55.                 else
  56.  
  57.                     for ((i=0; i < ${#chars[@]}; i++));
  58.                         do
  59.                                 echo "${digit} '${chars[i]}'"
  60.                                 if [ "${chars[i]}" = "." ]; then
  61.                                         digit_file=${SOUND_VAR_DIR}/point.gsm
  62.                                 else
  63.                                         digit_file=${SOUND_VAR_DIR}/digits/${chars[i]}.gsm
  64.  
  65.                                 fi
  66.                                 echo $digit_file
  67.                                 cat ${digit_file} >> ${ETC_DIR}/wx_value.gsm
  68.                         done
  69.                 fi
  70.             fi 
  71.         fi     
  72. }
  73.  
  74. # main starts here
  75. # first arg is temperature
  76. # initialize wx_value.gsm with "temperature is currently"
  77. echo number of Arguments: $#
  78.  
  79. cat ${SOUND_VAR_DIR}/wx/temperature.gsm ${SOUND_VAR_DIR}/is-currently.gsm > ${ETC_DIR}/wx_value.gsm
  80. parseStr ${args[0]}   # add temp digits
  81. cat ${SOUND_VAR_DIR}/degrees.gsm >> ${ETC_DIR}/wx_value.gsm    #add degrees to end
  82. cat ${ETC_DIR}/wx_value.gsm > ${ETC_DIR}/cur_temp.gsm    # copy to cur_temp.gsm
  83.  
  84. # next wind direction
  85. wind_dir=${args[2]}
  86. cat ${SOUND_VAR_DIR}/wind.gsm ${SOUND_VAR_DIR}/letters/at.gsm > ${ETC_DIR}/wind_at.gsm
  87.  
  88. echo "arg[2]" $wind_dir
  89. case "${wind_dir}" in
  90.         'north') cat ${SOUND_VAR_DIR}/north.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  91.         'north north east') cat ${SOUND_VAR_DIR}/north.gsm ${SOUND_VAR_DIR}/wx/northeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm  ;;
  92.         'north east') cat ${SOUND_VAR_DIR}/wx/northeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  93.         'east north east') cat ${SOUND_VAR_DIR}/east.gsm ${SOUND_VAR_DIR}/wx/northeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  94.         'east') cat ${SOUND_VAR_DIR}/east.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  95.         'east south east') cat ${SOUND_VAR_DIR}/east.gsm ${SOUND_VAR_DIR}/wx/southeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  96.         'south east')  cat ${SOUND_VAR_DIR}/wx/southeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  97.         'south south east') cat ${SOUND_VAR_DIR}/south.gsm ${SOUND_VAR_DIR}/wx/southeast.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  98.         'south') cat ${SOUND_VAR_DIR}/south.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  99.         'south south west') cat ${SOUND_VAR_DIR}/south.gsm ${SOUND_VAR_DIR}/wx/southwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  100.         'south west')  cat ${SOUND_VAR_DIR}/wx/southwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  101.         'west south west') cat ${SOUND_VAR_DIR}/west.gsm ${SOUND_VAR_DIR}/wx/southwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  102.         'west') cat ${SOUND_VAR_DIR}/west.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  103.         'west north west') cat ${SOUND_VAR_DIR}/west.gsm ${SOUND_VAR_DIR}/wx/northwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  104.         'north west') cat ${SOUND_VAR_DIR}/wx/northwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  105.         'north north west') cat ${SOUND_VAR_DIR}/north.gsm ${SOUND_VAR_DIR}/wx/northwest.gsm ${ETC_DIR}/wind_at.gsm > ${ETC_DIR}/wind_dir.gsm ;;
  106. esac
  107.  
  108. # initialize wx_value.gsm with "wind.gsm" + "wind_dir.gsm"
  109. cat ${ETC_DIR}/wind_dir.gsm > ${ETC_DIR}/wx_value.gsm
  110. parseStr ${args[1]%.*}   # add wind digits strip decimal fraction
  111. cat ${SOUND_VAR_DIR}/miles-per-hour.gsm >> ${ETC_DIR}/wx_value.gsm    #add mph to end
  112. cat ${ETC_DIR}/wx_value.gsm > ${ETC_DIR}/cur_wind.gsm    # copy to cur_wind.gsm
  113. # add gusts
  114. cat ${SOUND_VAR_DIR}/wx/gusting-to.gsm > ${ETC_DIR}/wx_value.gsm
  115. echo gusts to: ${args[5]}
  116. parseStr ${args[5]%.*}
  117. cat ${ETC_DIR}/wx_value.gsm >> ${ETC_DIR}/cur_wind.gsm
  118.  
  119. # check rainfall
  120. echo rainfall today: ${args[3]}
  121. if [ "${args[3]}" = "0.00" ]; then
  122.         cat ${SOUND_VAR_DIR}/silence/1.gsm > ${ETC_DIR}/rain_today.gsm
  123. else
  124.         cat ${SOUND_VAR_DIR}/rainfall.gsm ${SOUND_VAR_DIR}/digits/today.gsm > ${ETC_DIR}/wx_value.gsm
  125.         parseStr ${args[3]}
  126.         cat ${ETC_DIR}/wx_value.gsm ${SOUND_VAR_DIR}/wx/inches.gsm > ${ETC_DIR}/rain_today.gsm
  127. fi
  128.  
  129. #  concat temp pharse to end of node-id into node-id-long
  130. cat ${ETC_DIR}/node-id.gsm ${SOUND_VAR_DIR}/repeater.gsm \
  131. ${SOUND_VAR_DIR}/silence/1.gsm ${ETC_DIR}/cur_temp.gsm \
  132. ${SOUND_VAR_DIR}/silence/1.gsm ${ETC_DIR}/cur_wind.gsm \
  133. ${SOUND_VAR_DIR}/silence/1.gsm ${ETC_DIR}/rain_today.gsm \
  134. > ${ETC_DIR}/node-id-long.gsm

Raw Paste


Login or Register to edit or fork this paste. It's free.