summaryrefslogtreecommitdiffstats
path: root/tools/gentalkclips.sh
diff options
context:
space:
mode:
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