#!/bin/bash
# Skrypt sayit (tylko dla systemu macOS) wykorzystuje polecenie say
# do odczytywania podanego tekstu.

dosay="`which say` --quality=127"
format="`which fmt` -w 70"

voice="Zosia"       # Ustawienie polskiego głosu.
rate=""        # Domyślna szybkość mówienia.

demovoices()
{
   # Odtworzenie próbki każdego dostępnego głosu.

   voicelist=$( say -v \? | grep "pl_" | cut -c1-12 | 
       sed 's/ /_/;s/ //g;s/_$//')

   if [ "$1" = "list" ] ; then
     echo Dostępne głosy: $(echo $voicelist | sed 's/ /, /g;s/_/ /g') | $format
     echo "PORADA: wpisz \"$(basename $0) demo\" aby usłyszeć wszystkie głosy."
     exit 0
   fi

   for name in $voicelist ; do
     myname=$(echo $name | sed 's/_/ /')
     echo "Głos: $myname"
     $dosay -v "$myname" "Cześć! Mam na imię $myname. Tak brzmi mój głos."
   done

   exit 0
}

usage()
{
   echo "Użycie: sayit [-v głos] [-r szybkość] [-f plik] tekst"
   echo "   lub: sayit demo"
   exit 0
}

while getopts "df:r:v:" opt; do
  case $opt in
    d ) demovoices list    ;;
    f ) input="$OPTARG"    ;;
    r ) rate="-r $OPTARG"  ;;
    v ) voice="$OPTARG"    ;;
  esac
done

shift $(($OPTIND - 1))

if [ $# -eq 0 -a -z "$input" ] ; then
  $dosay "Hej, nie podałeś żadnych argumentów"
  echo "Błąd: brak argumentów. Podaj nazwę pliku lub tekst."
  exit 0
fi

if [ "$1" = "demo" ] ; then
  demovoices
fi

if [ ! -z "$input" ] ; then
  $dosay $rate -v "$voice" -f $input
else
  $dosay $rate -v "$voice" "$*"
fi
exit 0
