summaryrefslogtreecommitdiff
path: root/tools/gentalkclips.sh
diff options
context:
space:
mode:
authorJonas Häggqvist <rasher@rasher.dk>2006-11-03 21:47:52 +0000
committerJonas Häggqvist <rasher@rasher.dk>2006-11-03 21:47:52 +0000
commitda071d0d7c0067be55b2a6177ef01ee1ec5e88b8 (patch)
treeef33236850e37dd5595a53cb767f54311ccf4a9c /tools/gentalkclips.sh
parentb403c6007ac1db68f3732952a12fbebe1ad7a6ea (diff)
Voice update, most useful for non-Windows systems. Voice file building using Festival, Flite or eSpeak from the configure script. Compressing with Speex and Vorbis possible, but won't create useable voicefiles. Adds voicefont.c and wavtrim.c by Jörg Hohensohn. Also includes a script to generate talk clips.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11426 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools/gentalkclips.sh')
-rwxr-xr-xtools/gentalkclips.sh152
1 files changed, 152 insertions, 0 deletions
diff --git a/tools/gentalkclips.sh b/tools/gentalkclips.sh
new file mode 100755
index 0000000000..8da3b37704
--- /dev/null
+++ b/tools/gentalkclips.sh
@@ -0,0 +1,152 @@
+#!/bin/sh
+# __________ __ ___.
+# Open \______ \ ____ ____ | | _\_ |__ _______ ___
+# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+# \/ \/ \/ \/ \/
+# $Id$
+#
+# Copyright (c) 2004 Daniel Gudlat
+# - http://www.rockbox.org/tracker/task/2131
+# Copyright (c) 2006 Jonas Häggqvist
+# - This version, only dirwalk and the following comments remains
+#
+# 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.
+#
+# Note: You may wish to change some of the settings below.
+#
+# A script to automatically generate audio clips containing the names of all
+# folders in a directory tree for use with the "Talkbox" feature available to
+# users of the Rockbox open source firmware for Archos MP3 players and
+# recorders as well as several other devices. Talkbox permits the device to
+# speak the names of the folders as one navigates the directory structure on
+# the device, thus permitting "eyes-free" use for those for whom the usual
+# visual navigation is difficult or simply inadvisable.
+#
+# Audio clips are captured and stored in wave format, then converted into MP3
+# format by a third party application (lame). If you execute the script,
+# passing it the top level of your music file hierarchy as an argument while
+# your device is connected to your PC, then the resulting audio clips will be
+# generated and stored in the correct location for use with the Talkbox
+# feature. Alternatively, if you mirror your music folder structure from your
+# PC to your Archos device, you can just run the script on the PC and then
+# update the files on your Archos with your usual synchronization routine.
+#
+# NOTE: If you don't already have them installed, you may obtain the Festival
+# text to speech system and several voices at:
+#
+# http://www.cstr.ed.ac.uk/projects/festival.html
+# http://festvox.org/festival/
+#
+# The most pleasant freely available Festival voice I know of is the slt_arctic
+# voice from HST at http://hts.ics.nitech.ac.jp/
+#
+# Known bugs
+# - This script generates talk clips for all files, Rockbox only uses talk clips
+# for music files it seems.
+
+# 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 #
+####################
+
+# 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)
+ENCODER=lame
+# whether to overwrite existing mp3 files or only create missing ones (Y/N)
+OVERWRITE_TALK=N
+# whether, when overwriting mp3 files, also to regenerate all the wav files
+OVERWRITE_WAV=N
+# whether to remove the intermediary wav files after creating the mp3 files
+REMOVE_WAV=Y
+# whether to recurse into subdirectories
+RECURSIVE=Y
+# whether to strip extensions from filenames
+STRIP_EXTENSIONS=Y
+
+###################
+# End of settings #
+###################
+
+strip_extension() {
+ TO_SPEAK=$1
+ # XXX: add any that needs adding
+ for ext in mp3 ogg flac mpc sid; do
+ TO_SPEAK=`echo "$TO_SPEAK" |sed "s/\.$ext//i"`
+ done
+}
+
+# Walk directory $1, creating talk files if necessary, descend into
+# subdirecotries if specified
+dirwalk() {
+ if [ -d "$1" ]; then
+ for i in "$1"/*; do
+ # Do not generate talk clip for talk(.wav) files
+ if [ `echo "$i" | grep -c "\.talk$"` -ne 0 ] || \
+ [ `echo "$i" | grep -c "\.talk\.wav$"` -ne 0 ]; then
+ echo "Notice: Skipping file \"$i\""
+ continue
+ fi
+
+ TO_SPEAK=`basename "$i"`
+ if [ X$STRIP_EXTENSIONS = XY ]; then
+ strip_extension "$TO_SPEAK"
+ fi
+
+ if [ -d "$i" ]; then
+ # $i is a dir:
+ SAVE_AS="$i"/_dirname.talk
+ WAV_FILE="$SAVE_AS".wav
+
+ # If a talk clip already exists, only generate a new one if
+ # specified
+ if [ ! -f "$SAVE_AS" ] || [ X$OVERWRITE_TALK = XY ]; then
+ voice "$TO_SPEAK" "$WAV_FILE"
+ encode "$WAV_FILE" "$SAVE_AS"
+ fi
+
+ # Need to be done lastly, or all variables will be dirty
+ if [ X$RECURSIVE = XY ]; then
+ dirwalk "$i"
+ fi
+ else
+ # $i is a file:
+ SAVE_AS="$i".talk
+ WAV_FILE="$SAVE_AS".wav
+
+ # If a talk clip already exists, only generate a new one if
+ # specified
+ if [ ! -f "$i.talk" ] || [ X$OVERWRITE_TALK != XY ]; then
+ voice "$TO_SPEAK" "$WAV_FILE"
+ encode "$WAV_FILE" "$SAVE_AS"
+ fi
+ fi
+ # Remove wav file if specified
+ if [ X$REMOVEWAV = XY ]; then
+ rm -f "$WAV_FILE"
+ fi
+ done
+ else
+ echo "Warning: $1 is not a directory"
+ fi
+}
+
+init_tts
+init_encoder
+if [ $# -gt 0 ]; then
+ dirwalk "$*"
+else
+ dirwalk .
+fi
+stop_tts