1
0
Fork 0
forked from len0rd/rockbox

Remove deprecated shellscripts

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15647 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonas Häggqvist 2007-11-16 20:07:23 +00:00
parent 1b2561b0d9
commit a16ad96b1b
3 changed files with 0 additions and 606 deletions

View file

@ -1,152 +0,0 @@
#!/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

View file

@ -1,153 +0,0 @@
#!/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

View file

@ -1,301 +0,0 @@
#!/bin/sh
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# Copyright (c) 2006 Jonas Häggqvist
#
# 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.
#
# A selection of functions common to creating voicefiles for Rockbox.
#
# You may wish to change some of the settings below.
#####################
# Program locations #
#####################
# Leave any you're not using untouched, enter full path if the program is
# not found
# the festival main executable
FESTIVAL_BIN=festival
# the festival_client binary
FESTIVAL_CLIENT=festival_client
# The flite executable
FLITE_BIN=flite
# The eSpeak executable
ESPEAK_BIN=espeak
# The lame executable
LAME_BIN=lame
# The speexenc executable
SPEEX_BIN=speexenc
# The oggenc executable
VORBIS_BIN=oggenc
# Tools directory
TOOLSDIR=`dirname $0`
# The wavtrim executable
WAVTRIM=$TOOLSDIR/wavtrim
# The SAPI5 script directory
if [ -f "`which cygpath`" ]; then
SAPI5DIR=`cygpath $TOOLSDIR -a -w`
fi
#####################
# Festival settings #
#####################
# If you're not using festival, leave untouched
# whether to start the Festival server locally (Y/N)
FESTIVAL_START=Y
# the host of the Festival server
# this is set to localhost automatically when FESTIVAL_START is Y
FESTIVAL_HOST=localhost
# the port of the Festival server
FESTIVAL_PORT=1314
# where to log the Festival client output
FESTIVAL_LOG=/dev/null
# other options to the festival server
FESTIVAL_OPTS=""
##################
# Flite settings #
##################
# If you're not using flite, leave untouched
FLITE_OPTS=""
###################
# eSpeak settings #
###################
# If you're not using eSpeak, leave untouched
ESPEAK_OPTS=""
####################
# Wavtrim settings #
####################
# The maximum sample value that will be treated as silence by the wavtrim tool.
# The value is expressed as an absolute 16 bit integer sample value (0 dB equals
# 32767).
#
# 500 is a good guess - at least for Festival
NOISEFLOOR='500'
#####################
# Encoding settings #
#####################
# where to log the encoder output
ENC_LOG=/dev/null
# Suggested: --vbr-new -t --nores -S
# VBR, independent frames, silent mode
LAME_OPTS="--vbr-new -t --nores -S"
# Suggested:
# XXX: suggest a default
SPEEX_OPTS=""
# Suggested: -q0 --downmix
# Low quality, mono
VORBIS_OPTS="-q0 --downmix"
###################
# End of settings #
###################
# Check if executables exist and perform any necessary initialisation
init_tts() {
case $TTS_ENGINE in
festival)
# Check for festival_client
if [ ! -f "`which $FESTIVAL_CLIENT`" ]; then
echo "Error: $FESTIVAL_CLIENT not found"
exit 4
fi
# Check for, and start festival server if specified
if [ X$FESTIVAL_START = XY ]; then
if [ ! -f "`which $FESTIVAL_BIN`" ]; then
echo "Error: $FESTIVAL_BIN not found"
exit 3
fi
FESTIVAL_HOST='localhost'
$FESTIVAL_BIN $FESTIVAL_OPTS --server 2>&1 > /dev/null &
FESTIVAL_SERVER_PID=$!
sleep 3
if [ `ps | grep -c "^\ *$FESTIVAL_SERVER_PID"` -ne 1 ]; then
echo "Error: Festival not started"
exit 9
fi
fi
# Test connection to festival server
output=`echo -E "Rockbox" | $FESTIVAL_CLIENT --server \
$FESTIVAL_HOST --otype riff --ttw --output \
/dev/null 2>&1`
if [ $? -ne 0 ]; then
echo "Error: Couldn't connect to festival server at" \
"$FESTIVAL_HOST ($output)"
exit 8
fi
;;
flite)
# Check for flite
if [ ! -f "`which $FLITE_BIN`" ]; then
echo "Error: $FLITE_BIN not found"
exit 5
fi
;;
espeak)
# Check for espeak
if [ ! -f "`which $ESPEAK_BIN`" ]; then
echo "Error: $ESPEAK_BIN not found"
exit 5
fi
;;
sapi5)
# Check for SAPI5
cscript /B $SAPI5DIR/sapi5_init_tts.vbs
if [ $? -ne 0 ]; then
echo "Error: SAPI 5 not available"
exit 5
fi
;;
*)
echo "Error: no valid TTS engine selected: $TTS_ENGINE"
exit 2
;;
esac
if [ ! -x $WAVTRIM ]; then
echo "Error: $WAVTRIM is not available"
exit 11
fi
}
# Perform any necessary shutdown for TTS engine
stop_tts() {
case $TTS_ENGINE in
festival)
if [ X$FESTIVAL_START = XY ]; then
# XXX: This is probably possible to do using festival_client
kill $FESTIVAL_SERVER_PID > /dev/null 2>&1
fi
;;
esac
}
# Check if executables exist and perform any necessary initialisation
init_encoder() {
case $ENCODER in
lame)
# Check for lame binary
if [ ! -f "`which $LAME_BIN`" ]; then
echo "Error: $LAME_BIN not found"
exit 6
fi
;;
speex)
# Check for speexenc binary
if [ ! -f "`which $SPEEX_BIN`" ]; then
echo "Error: $SPEEX_BIN not found"
exit 7
fi
;;
vorbis)
# Check for vorbis encoder binary
if [ ! -f "`which $VORBIS_BIN`" ]; then
echo "Error: $VORBIS_BIN not found"
exit 10
fi
;;
*)
echo "Error: no valid encoder selected: $ENCODER"
exit 1
;;
esac
}
# Encode file $1 with ENCODER and save the result in $2, delete $1 if specified
encode() {
INPUT=$1
OUTPUT=$2
if [ ! -f "$INPUT" ]; then
echo "Warning: missing input file: \"$INPUT\""
else
echo "Action: Encode $OUTPUT with $ENCODER"
case $ENCODER in
lame)
$LAME_BIN $LAME_OPTS "$WAV_FILE" "$OUTPUT" >>$ENC_LOG 2>&1
;;
speex)
$SPEEX_BIN $SPEEX_OPTS "$WAV_FILE" "$OUTPUT" >>$ENC_LOG 2>&1
;;
vorbis)
$VORBIS_BIN $VORBIS_OPTS "$WAV_FILE" -o "$OUTPUT" >>$ENC_LOG 2>&1
esac
if [ ! -f "$OUTPUT" ]; then
echo "Warning: missing output file \"$OUTPUT\""
fi
fi
}
# Generate file $2 containing $1 spoken by TTS_ENGINE, trim silence
voice() {
TO_SPEAK=$1
WAV_FILE=$2
if [ ! -f "$WAV_FILE" ] || [ X$OVERWRITE_WAV = XY ]; then
if [ "${TO_SPEAK}" = "" ]; then
touch "$WAV_FILE"
else
case $TTS_ENGINE in
festival)
echo "Action: Generate $WAV_FILE with festival"
echo -E "$TO_SPEAK" | $FESTIVAL_CLIENT \
--server $FESTIVAL_HOST \
--otype riff --ttw --output "$WAV_FILE" 2>"$WAV_FILE"
;;
espeak)
echo "Action: Generate $WAV_FILE with eSpeak"
echo $ESPEAK_BIN $ESPEAK_OPTS -w "$WAV_FILE"
echo -E "$TO_SPEAK" | $ESPEAK_BIN $ESPEAK_OPTS -w "$WAV_FILE"
;;
flite)
echo "Action: Generate $WAV_FILE with flite"
echo -E "$TO_SPEAK" | $FLITE_BIN $FLITE_OPTS -o "$WAV_FILE"
;;
sapi5)
cscript /B "$SAPI5DIR\sapi5_voice.vbs" ""$TO_SPEAK"" "$WAV_FILE"
;;
esac
fi
fi
trim "$WAV_FILE"
}
# Trim wavefile $1
trim() {
WAVEFILE="$1"
echo "Action: Trim $WAV_FILE"
$WAVTRIM "$WAVEFILE" $NOISEFLOOR
}