blob: 4e58801205b1ab8b750c3c96b1cde77787992489 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
#!/bin/sh
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# Copyright 2006 Jonas Häggqvist, some parts Copyright 2004 Daniel Gudlat
#
# All files in this archive are subject to the GNU General Public License.
# See the file COPYING in the source tree root for full license agreement.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
# Include voicecommon.sh from the same dir as this script
# Any settings from voicecommon can be overridden if added below the following
# line.
source `dirname $0`'/voicecommon.sh'
####################
# General settings #
####################
# These settings can be overridden by passing a file with definitions as
# the fourth parameter to this script
# which TTS engine to use. Available: festival, flite, espeak
TTS_ENGINE=festival
# which encoder to use, available: lame, speex, vorbis (only lame will produce
# functional voice clips at this point)
ENCODER=lame
# Where to save temporary files
TEMPDIR=/tmp
# List of IDs to send to voicefont
VOICEFONTIDS=voicefontids
###################
# End of settings #
###################
TARGET_ID="$4"
createvoicefile() {
RLANG="$1"
$GENLANG -e=$ENGLISH -o -t=$TARGET $LANG_FILE > $VOICEFONTIDS
$VOICEFONT "$VOICEFONTIDS" "$TARGET_ID" "$TEMPDIR/" "./$RLANG.voice"
rm -f $VIOCEFONTIDS
}
deletefiles() {
# XXX: might be unsafe depending on the value of TEMPDIR
rm -f "${TEMPDIR}"/LANG_*
rm -f "${TEMPDIR}"/VOICE_*
rm -f "${TEMPDIR}"/NOT_USED_*
}
generateclips() {
ROCKBOX_DIR="$1"
RLANG="$2"
TARGET="$3"
GENLANG="$ROCKBOX_DIR"/tools/genlang
ENGLISH="$ROCKBOX_DIR"/apps/lang/english.lang
LANG_FILE="$ROCKBOX_DIR"/apps/lang/$RLANG.lang
$GENLANG -e=$ENGLISH -o -t=$TARGET $LANG_FILE |(
i=0
while read line; do
case `expr $i % 3` in
0)
# String ID no.
NUMBER=`echo $line |cut -b 2-`
;;
1)
# String ID
ID=`echo $line |cut -b 5-`
;;
2)
# String
STRING=`echo $line |cut -b 8-`
# xxx: Should the hash include encoder/tts options?
POOL_FILE=${POOL}/`echo "$STRING" |md5sum|cut -b-32`-${RLANG}.mp3
if [ -n "$POOL" ]; then
# we have a common pool of snippets, check that first
# for available mp3 sounds, and if it is available copy
# (symlink!) it over
if [ -f "$POOL_FILE" ]; then
echo "Re-using $ID from pool (${POOL_FILE})"
if [ ! -e "$TEMPDIR/$ID".mp3 ]; then
# only do this if not present
cp -f "$POOL_FILE" "$TEMPDIR/$ID".mp3
fi
fi
fi
# only make an mp3 if not already present
if [ ! -e "$TEMPDIR/$ID".mp3 ]; then
# Now generate the file
voice "$STRING" "$TEMPDIR/$ID".wav
if [ -n "$POOL" ]; then
# create it in the pool, symlink it back
encode "$TEMPDIR/$ID".wav "$POOL_FILE"
cp -f "$POOL_FILE" "$TEMPDIR/$ID".mp3
else
encode "$TEMPDIR/$ID".wav "$TEMPDIR/$ID".mp3
fi
fi
;;
esac
i=`expr $i + 1`
done
)
}
if [ -z "$4" ]; then
echo "Usage: $0 rockboxdirectory language target targetid [settingsfile]";
exit 32
else
if [ ! -d "$1" ] || [ ! -f "$1/tools/genlang" ]; then
echo "Error: $1 is not a Rockbox directory"
exit 33
fi
# Check for valid language
if [ ! -f "$1/apps/lang/$2.lang" ]; then
echo "Error: $2 is not a valid language"
exit 34
fi
if [ ! -z "$5" ]; then
if [ -f "$5" ]; then
# Read settings from file
. "$5"
else
echo "Error: $5 does not exist"
exit 36
fi
fi
# XXX: check for valid $TARGET?
fi
VOICEFONT=`dirname $0`/voicefont
if [ ! -x $VOICEFONT ]; then
echo "Error: $VOICEFONT does not exist or is not executable"
exit 35
fi
init_tts
init_encoder
generateclips "$1" "$2" "$3"
stop_tts
createvoicefile "$2"
deletefiles
|