|
1 | 1 | #!/bin/sh |
| 2 | +#rhvoiceplay.sh |
| 3 | +#Depends: dash, rhvoice, aplay |
| 4 | + |
| 5 | +sname="RHVoicePlay" |
| 6 | +sversion="0.20180702" |
| 7 | + |
| 8 | +echo "$sname $sversion" >&2 |
2 | 9 |
|
3 | | -fhlp="false" |
4 | | -tspeaker="aleksandr" |
5 | 10 | tln=0 |
| 11 | +tspeaker="aleksandr" |
| 12 | +fhlp="false" |
6 | 13 | while getopts ":l:s:h" opt |
7 | 14 | do |
8 | 15 | case $opt in |
|
18 | 25 | esac |
19 | 26 | done |
20 | 27 | shift "$(($OPTIND - 1))" |
| 28 | + |
21 | 29 | text="$1" |
22 | 30 | if [ "x$text" = "x" -o "x$fhlp" = "xtrue" ] |
23 | 31 | then |
24 | 32 | echo "Usage:" |
25 | | - echo "$0 [options] book.txt" |
| 33 | + echo "$0 [options] book.txt|-|string" |
26 | 34 | echo "Options:" |
27 | | - echo " -l N line begin [N=0-100] (default = 0)" |
28 | | - echo " -s str RHVoice speaker (default = aleksandr)" |
| 35 | + echo " -l N line begin [N=0-100] (only .txt, default = 0)" |
| 36 | + echo " -s str RHVoice speaker (RHVoice >=0.5, default = aleksandr)" |
29 | 37 | echo " -h help" |
30 | 38 | exit 0 |
31 | 39 | fi |
32 | 40 |
|
33 | 41 | if [ ! "$(command -v RHVoice)" -a ! "$(command -v RHVoice-client)" ] |
34 | 42 | then |
35 | | - echo "WARNING! RHVoice not found" |
| 43 | + echo "WARNING! RHVoice not found" >&2 |
36 | 44 | exit 1 |
37 | 45 | fi |
38 | 46 |
|
39 | | -text="$1" |
40 | | -textsize=$(zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | wc -l) |
41 | | -echo "$text: $textsize" |
42 | | -tln=$(($tln*$textsize/100)) |
43 | | -i=$tln |
44 | | -if [ "$(command -v RHVoice)" ] |
| 47 | +if [ ! "$(command -v aplay)" ] |
| 48 | +then |
| 49 | + echo "WARNING! aplay not found" >&2 |
| 50 | + exit 1 |
| 51 | +fi |
| 52 | + |
| 53 | +if [ -f "$text" ] |
| 54 | +then |
| 55 | + textsize=$(zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | wc -l) |
| 56 | + echo "$text: $textsize" >&2 |
| 57 | + tln=$(($tln*$textsize/100)) |
| 58 | + i=$tln |
| 59 | + if [ "$(command -v RHVoice)" ] |
| 60 | + then |
| 61 | + zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | sed -e "1,${tln}d" | while read tline; do p=$((10000*$i/$textsize)); p1=$(($p/100)); p2=$(($p-$p1*100)); printf "%02d.%02d: " $p1 $p2; echo "$tline"; echo "$tline" | RHVoice | aplay - 2>/dev/null; (( i++ )); done |
| 62 | + else |
| 63 | + zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | sed -e "1,${tln}d" | while read tline; do p=$((10000*$i/$textsize)); p1=$(($p/100)); p2=$(($p-$p1*100)); printf "%02d.%02d: " $p1 $p2; echo "$tline"; echo "$tline" | RHVoice-client -s "$tspeaker" | aplay - 2>/dev/null; (( i++ )); done |
| 64 | + fi |
| 65 | +elif [ "x$text" = "x-" ] |
45 | 66 | then |
46 | | - zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | sed -e "1,${tln}d" | while read tline; do p=$((10000*$i/$textsize)); p1=$(($p/100)); p2=$(($p-$p1*100)); printf "%02d.%02d: " $p1 $p2; echo "$tline"; echo "$tline" | RHVoice | aplay - 2>/dev/null; (( i++ )); done |
| 67 | + if [ "$(command -v RHVoice)" ] |
| 68 | + then |
| 69 | + while read tline; do printf ": "; echo "$tline"; echo "$tline" | RHVoice | aplay - 2>/dev/null; done |
| 70 | + else |
| 71 | + while read tline; do printf ": "; echo "$tline"; echo "$tline" | RHVoice-client -s "$tspeaker" | aplay - 2>/dev/null; done |
| 72 | + fi |
47 | 73 | else |
48 | | - zcat "$text" | sed -e 's/[\.\?\!\…]/&\n/g' | sed -e '/^$/d' | sed -e "1,${tln}d" | while read tline; do p=$((10000*$i/$textsize)); p1=$(($p/100)); p2=$(($p-$p1*100)); printf "%02d.%02d: " $p1 $p2; echo "$tline"; echo "$tline" | RHVoice-client -s "$tspeaker" | aplay - 2>/dev/null; (( i++ )); done |
| 74 | + if [ "$(command -v RHVoice)" ] |
| 75 | + then |
| 76 | + echo "$text" |
| 77 | + echo "$text" | RHVoice | aplay - 2>/dev/null |
| 78 | + else |
| 79 | + echo "$text" |
| 80 | + echo "$text" | RHVoice-client -s "$tspeaker" | aplay - 2>/dev/null |
| 81 | + fi |
49 | 82 | fi |
0 commit comments