Sida 31 av 98
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:40
av Hans Linde
Vad nu?
- Typsnittet är fel även här. ska jag leta upp de kommandon som fixade det? ( är det samma +)
- Det här är en Scaletempo övning och det behöver en funktionsbeskrivning. F7-12 påverkar inte rösten
vid en "snabb-test".
- vi har en provat ut en revsion på "r4-temat" som funkar på i386C än.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:45
av Hans Linde
- vi har en provat ut en revsion på "r4-temat" som funkar på i386C än.
Hmm... det där var nog inte rätt, vid närmare eftertanke. Det blir samma sak
fast jag har inte reset o röst-valet på F-tang.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:50
av Konservburk
Hans Linde skrev:- Typsnittet är fel även här. ska jag leta upp de kommandon som fixade det? ( är det samma +)
Det är nog samma ja. Jag har tänkt mig att det ska byggas in. Men först ska jag undersöka hur det är med zenity.
Hans Linde skrev:- Det här är en Scaletempo övning och det behöver en funktionsbeskrivning. F7-12 påverkar inte rösten
Om du ska använda scaletempo hjälper det inte att öka farten med den vanliga mbrola-parametern. Du måste ändra på
accel och/eller
scale för att de andra scaletempo-parametrarna ska ha någon effekt.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:50
av Konservburk
Hans Linde skrev:- vi har en provat ut en revsion på "r4-temat" som funkar på i386C än.
Hmm... det där var nog inte rätt, vid närmare eftertanke. Det blir samma sak
fast jag har inte reset o röst-valet på F-tang.
Vissa tangentbindningar fungerar med compiz, men andra fungerar inte?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:55
av Hans Linde
Okay då väntar jag med det här:
iconv -f utf-8 -t iso8859-1 ~/bin/talsyntes.sh > ~/bin/talsyntes2.sh
chmod +x ~/bin/talsyntes2.sh
~/bin/talsyntes2.sh adjust
Jag tror att det var kommadot som fixade typsnittsproblemet.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:55
av Hans Linde
Jag provar lite till med Scaletempo.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 13:56
av Hans Linde
angående Zenity avvaktar jag på dina instruktioner.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 14:18
av Hans Linde
Se man på. Det blev tid över för en utökning av "önskelistan".
Jag vill skriva en siffra -9 _0_9 ( -9 -- 9) för att ställa in värdet.

Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 14:25
av Hans Linde
Jag har försummat mitt "hälsoprogram" den senaste tid.
Vad det nu kan bero på..
Jag försvinner för en simtur, om det inte är något omgående som önskas?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 15:53
av Hans Linde
Klar tecken.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 17:50
av Hans Linde
Jag har nu gjort en djupdykning i Scaletempo "redigering".
Det är just det. Scaletempo erbjuder flera justeringar,
men de förändrar ljud endast till viss del, för att sedan
helt förstöra den.
Det är viktigt att vet att jag inte är ljudtekniker
eller har konskap om Scaletempo, utan endast utgått
får det information som jag kommit till del här.
Det här är noteringarna jag gjort under test.
-------
081014 16:30 Scaletempo test
F1-F4 justeras för högst hörbara hastighet.
Hast +70
Läge -30
Tät 0
Den rösten tas till Scaletempo.
pitch:
accel 0-20
F8-10 ingen skillnad
gate ?? påverkar hastighet, inte kvalite.
tempo:
accel -10
F7-10 som "gate"
pitch o tempo:
ingen justering
Slutsats- jag kan inte förbättra rösten med Scaletempo, även om den ändra på flera saker.
-------------
Du sa tidigare att du inte kunde utvädera Scaletempo pga att du inte kunde
lyssna vid de hastigheter som jag vill ut till.
Jag har inte lyckats göra några betydande förbättring vid något rösthastighet.
Därför undra jag förståss om jag gör något helt fel.
De justeringar som kan göras från "adjust" F4 är av stort värde.
Den noterade hastigheten är att betrakta som ett ändläge för funktion (hörbarhet), men det
förlora kvaliten innan hastigheten har uppnåtts.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 19:37
av Konservburk
Hans Linde skrev:Jag har nu gjort en djupdykning i Scaletempo "redigering".
Det är just det. Scaletempo erbjuder flera justeringar,
men de förändrar ljud endast till viss del, för att sedan
helt förstöra den.
Det är viktigt att vet att jag inte är ljudtekniker
eller har konskap om Scaletempo, utan endast utgått
får det information som jag kommit till del här.
Grejen är att scaletempo har många parametrar som delvis beror av varandra, dvs ingenting verkar hända om man inte har höjt/sänkt någon annan parameter tillräckligt mycket.
Hans Linde skrev:Det här är noteringarna jag gjort under test.
-------
081014 16:30 Scaletempo test
F1-F4 justeras för högst hörbara hastighet.
Hast +70
Läge -30
Tät 0
Den rösten tas till Scaletempo.
pitch:
accel 0-20
F8-10 ingen skillnad
Åter igen... när du testar med scaletempo så bör du (åtminstone till att börja med) ha mbrola-parametrarna inställda på standardvärdet, dvs 0. För att öka farten med scaletemo så höjer du antingen
scale eller
accel eller båda två. När du gjort det så ska de andra parametrarna börja märkas av.
Hans Linde skrev:pitch o tempo:
ingen justering
Slutsats- jag kan inte förbättra rösten med Scaletempo, även om den ändra på flera saker.
De här inställningarna märks inte alls av när många av parametrarna ligger nära standardvärdet. Men i vissa lägen blir det stor skillnad... om du sätter allting till 0,
~/bin/talsyntes.sh reset och sendan ändrar på enbart
accel till ungefär 20. Jämför därefter
tempo med
pitch så hör du att det i vissa lägen faktiskt blir stor skillnad.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 19:42
av Konservburk
r5:
* Jag har lagt in zenity-dialoger. Förhoppningsvis strular det mindre än vad Xdialog har gjort.
* Det går numera att köra
~/bin/talsyntes.sh uninstall för att rensa upp.
* Jag har gjort ett försök att automatiskt laga trasig teckenkodning, men jag vet inte om det faktiskt fungerar som jag hade tänkt mig.
Kod: Markera allt
#!/bin/sh
# r5
case "$-" in *i*) return ;; esac
export LC_ALL=C
#exec 2>&-
APP="Talsyntes"
DIR=~/".talsyntes"
SCRIPT="$DIR/talsyntes.sh"
mkdir -p "$DIR/data" "$DIR/voices"
if test "x$SCRIPT" != "x$0" && cp -f "$0" "$SCRIPT" 2>&-
then
iconv -f utf-8 -t iso8859-1 "$0" >/dev/null 2>&- ||
iconv -f iso8859-1 -t utf-8 "$0" >"$SCRIPT"
chmod +x "$SCRIPT" && exec "$SCRIPT" "$@"
fi
create_dialog() {
DIALOG=$(
cat dialog 2>&- ||
which zenity 2>&- ||
which Xdialog 2>&- ||
echo "$0: missing zenity or Xdialog" >&2
)
case "$1" in
list)
type="$2"
title="$3"
while read item
do echo "$item" | grep -qE "($4)" && default=true || default=false
case "$DIALOG" in
*zenity)
set "$@" "$default" "${item##*/}"
;;
*Xdialog)
set "$@" "${item##*/}" "${item##*/}"
"$default" && set "$@" on || set "$@" off
;;
esac
done
shift 4
case "$DIALOG" in
*zenity)
set -- --width 400 --height 400 --list \
--"$type"list --text "$title" --column "" --column "" "$@"
;;
*Xdialog)
set -- --stdout --separator "|" --no-tags \
--"$type"list "$title" 400x400 0 "$@"
;;
esac
;;
scale)
case "$DIALOG" in
*zenity)
set -- --scale --text "$2" --min-value -100 --value "$3"
;;
*Xdialog)
set -- --stdout --rangebox "$2" 10 60 -100 100 "$3"
;;
esac
;;
progress)
case "$DIALOG" in
*zenity)
set -- --width 300 --progress --auto-close --text "$2"
;;
*Xdialog)
set -- --stdout --gauge "$2" 5 60
;;
esac
;;
question)
case "$DIALOG" in
*zenity)
set -- --question --text "$2"
;;
*Xdialog)
set -- --stdout --yesno "$2" 10 60
;;
esac
;;
info)
case "$DIALOG" in
*zenity)
set -- --info --text "$2"
;;
*Xdialog)
set -- --stdout --msgbox "$2" 10 60
;;
esac
;;
*) return ;;
esac
LC_ALL=sv_SE.UTF-8 "${DIALOG:-:}" --title "$APP" "$@"
}
find -L "$DIR" -maxdepth 1 -name voice -type l -exec rm {} \;
ls "$DIR"/voices/[a-z][a-z][1-9]:* >/dev/null 2>&- &&
test -x "$SCRIPT" &&
test -x "$DIR/mbrola" ||
set install
cd "$DIR"
case "$1" in
stop)
pkill -P $(pgrep -d, "${SCRIPT##*/}") mplayer
;;
pause)
find "$DIR" -name mplayer.\*.fifo -type p -exec sh -c 'echo pause >{}' \;
;;
start)
test -h "$DIR/voice" || exec "$SCRIPT" adjust voice
"$SCRIPT" stop
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
trap 'rm -f "$FIFO"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls voices/"$2":* 2>&-)
then shift
else voice="$(readlink voice)"
fi
voice="${voice#voices/}"
scale_mapping() {
awk -vmin="$1" -vdef="$2" -vmax="$3" -vbend="${4:-1}" '
function f(x)
{
factor = (a != b) ? 2*a*b*log(a/b)/(a-b) : (a+b)
return factor * log(x) * x / (x^2-1) - ((a < b) ? a : b) / bend
}
BEGIN {
a = (max - def)
b = (def - min)
if (max < min) { a = -a; b = -b; }
x0=2; x1=3; y0=f(x0); y1=f(x1); lim=1e-4
while( x1>1 && ( (x1-x0)>lim || (x0-x1)>lim) ) {
y1 = f(x1); x2 = x1 - (x1 - x0) * y1 / (y1 - y0)
x0 = x1; x1 = x2; y0 = y1;
}
incl = (x1>1) ? x1 : 1
}
{
expo = $1 / 100
if (incl != 1) expo = (incl^expo - 1/incl^expo) / (incl - 1/incl)
expo = (expo + 1) / 2
if (a != b) expo = ((a / b)^(2 * expo) - 1) / ((a / b)^2 - 1)
printf("%f\n", min + (max - min) * expo)
}
'
}
speed=$(2>&- scale_mapping 5 1 0.2 <speed)
freq=$(2>&- scale_mapping 0.2 1 5 <freq)
volume=$(2>&- scale_mapping 0.2 1 5 <volume)
rate=$(2>&- scale_mapping 1000 16000 48000 <rate)
scale=$(2>&- scale_mapping 0.2 1 5 <scale)
stride=$(2>&- scale_mapping 1 60 400 <stride)
overlap=$(2>&- scale_mapping 0 0.2 1 <overlap)
search=$(2>&- scale_mapping 0 14 200 <search)
method=$(2>&- cat <method)
accel=$(2>&- scale_mapping 0.2 1 5 <accel)
scaletempo="$scaletempo${scaletempo+:}scale=${scale:-1}"
scaletempo="$scaletempo${scaletempo+:}stride=${stride:-60}"
scaletempo="$scaletempo${scaletempo+:}overlap=${overlap:-0.20}"
scaletempo="$scaletempo${scaletempo+:}search=${search:-14}"
scaletempo="$scaletempo${scaletempo+:}speed=${method:-tempo}"
scaletempo="-af scaletempo=$scaletempo -speed ${accel:-1}"
speed="$2"
freq="$3"
volume="$4"
rate="$5"
xclip -o |
espeak -v mb-"${voice%:*}" |
"$DIR/mbrola" -e \
-t "${speed:-1}" \
-f "${freq:-1}" \
-v "${volume:-1}" \
-l "${rate:-16000}" \
"$DIR/voices/$voice" - -.wav |
mplayer -really-quiet -input file="$FIFO" $scaletempo -demuxer audio -
;;
reset)
case "$2" in
'')
rm -f speed freq volume rate scale stride overlap search method accel
;;
speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
rm -f "$2"
;;
esac
;;
adjust)
case "$2" in '')
set "$1" $(
printf "%s\n" \
speed freq volume rate scale stride overlap search method accel |
create_dialog list radio "Välj inställnig" speed
) || exit
esac
value=$(cat "$2" 2>&-)
case "$2" in
voice)
case "$3" in
'')
voice=$(readlink voice)
voice=$(
ls voices/[a-z][a-z][1-9]:* 2>&- |
create_dialog list radio "Välj röst" "${voice:-^$}"
) && test -n "$voice" && voice="voices/$voice"
;;
*)
voice=$(ls "voices/$2":*) 2>&-
;;
esac &&
ln -sf "$voice" voice
exit
;;
dialog)
case "$3" in
'')
value=$(
which zenity Xdialog |
create_dialog list radio "Välj dialogrutesystem" "${value:-^$}"
) && echo "$value" >"$2"
;;
zenity|Xdialog)
echo "$3" >"$2"
;;
esac
exit
;;
speed) title="Uppläsningshastighet" ;;
freq) title="Röstläge" ;;
volume) title="Uppläsningsvolym" ;;
rate) title="Rösttäthet" ;;
scale|stride|overlap|search|accel) title="scaletempo: $2" ;;
method)
case "$3" in
'')
value=$(
printf "%s\n" tempo pitch both none |
create_dialog list radio "scaletempo: $2" "${value:-tempo}"
) && echo "$value" >"$2"
;;
tempo|pitch|both|none)
echo "$3" >"$2"
;;
esac
exit
;;
*) exit
;;
esac
case "$3" in
'')
value=$(create_dialog scale "$title" "${value:-0}") &&
echo "$value" >"$2"
;;
*)
echo "$3" |
awk -vvalue="$value" '{
value = ($1) ? value + $1 : 0
value = (value < 100) ? value : 100
value = (value > -100) ? value : -100
print(value)
}' >"$2"
;;
esac
;;
install)
URL="http://tcts.fpms.ac.be/synthesis/mbrola"
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT
wget -qO- "$URL"/mbrcopybin.html |
sed -n '
s|.*"\(bin/[^"]*.zip\)"[^>]*>[^<]*LINUX i386.*|\1 (0.3Mb)|p
s|.*"\(dba/[^/]*/[^"]*\)"[^>]*>\([^:]*:\s*[^<]*\).*|\1\t\2|p
' >"$TMP"
cd "$DIR"
voices=$(
cd /usr/share/espeak-data/voices/mb &&
echo mb-[a-z][a-z][1-9] |
sed 's/mb-//g;s/\(.\)\s\(.\)/\1|\2/g'
)
voices=$(
grep -E "/($voices)/" <"$TMP" | cut -f2 |
create_dialog list check "Välj språk" '^(sw|us|en)[[:digit:]]:' |
sed 's/:[^|]*//g'
)
test -n "$voices" || exit
rm -f voices/[a-z][a-z][1-9]:* 2>&-
cd data
grep -E "(^bin|/$voices/)" <"$TMP" |
awk '{
size[NR]=size[NR-1]+substr($NF,2,length($NF)-4)
$NF=""
voice[NR]=$0
} END {
for(i=1; i<=NR; i++) {
print(100*size[i]/size[NR],voice[i])
}
}' |
while read progress file voice
do test -f "${file##*/}" ||
wget -q "$URL/$file" 2>&1
if test -z "$voice"
then
unzip -p "${file##*/}" mbrola-linux-i386 >"$DIR"/mbrola
chmod +x "$DIR"/mbrola
else
unzip -p "${file##*/}" "${voice%%:*}" >"$DIR/voices/$voice" 2>&- ||
unzip -p "${file##*/}" "${voice%%:*}/${voice%%:*}" \
>"$DIR/voices/$voice"
fi
echo $progress
done |
create_dialog progress "Hämtar Röster..."
bind_key() {
eval $("$SCRIPT" "_$1")
gconftool-2 -a "$KEY" |
awk '$1~/^'"$PREFIX"'[0-9]+'"$SUFFIX"'$/ && $3~/^'"$2"'$/{print($1)}' |
while read binding
do gconftool-2 -u "$KEY/$binding"
done
ID=$(
gconftool-2 -a "$KEY" |
sed -n "s/^\s*$PREFIX\([0-9]\+\)$SUFFIX\s*=\s*/\1\t/p" |
sort -n |
awk '{if($1-prev>1)exit;prev=$1}END{print(prev+1)}'
)
gconftool-2 \
-s -t str "$KEY/$PREFIX${ID:-1}$SUFFIX" "$2" \
-s -t str "$CMD/${PREFIX#run_}${ID:-1}" "$3"
}
for wm in metacity compiz
do bind_key "$wm" "F1" "$SCRIPT stop"
bind_key "$wm" "F2" "$SCRIPT pause"
bind_key "$wm" "F3" "$SCRIPT start"
bind_key "$wm" "F4" "$SCRIPT adjust"
bind_key "$wm" "F5" "$SCRIPT volume"
bind_key "$wm" "F6" "$SCRIPT rate"
bind_key "$wm" "F7" "$SCRIPT scale"
bind_key "$wm" "F8" "$SCRIPT stride"
bind_key "$wm" "F9" "$SCRIPT overlap"
bind_key "$wm" "F10" "$SCRIPT search"
bind_key "$wm" "F11" "$SCRIPT method"
bind_key "$wm" "F12" "$SCRIPT accel"
done
create_dialog info "$APP installerad"
exec "$SCRIPT" voice
;;
uninstall)
create_dialog question "Avinstallera $APP?" || exit
unbind_keys() {
eval $("$SCRIPT" "_$1")
gconftool-2 -a "$CMD" |
grep -F "$SCRIPT" |
sed -n 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/p' |
while read binding
do gconftool-2 -u "$CMD/${PREFIX#run_}$binding"
gconftool-2 -u "$KEY/$PREFIX$binding$SUFFIX"
done
}
unbind_keys metacity
unbind_keys compiz
rm -rf "$DIR"
;;
_metacity)
echo '
KEY="/apps/metacity/global_keybindings"
CMD="/apps/metacity/keybinding_commands"
PREFIX="run_command_"
SUFFIX=""
'
;;
_compiz)
echo '
KEY="/apps/compiz/general/allscreens/options"
CMD="/apps/compiz/general/allscreens/options"
PREFIX="run_command"
SUFFIX="_key"
'
;;
voice|dialog|speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
exec "$SCRIPT" adjust "$@"
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:14
av Hans Linde
Okay , jag ska göra ett nytt försök med Scaletempo.
Föresten skrev jag gate, ska vara scale.
(min handstil är sämre än läsförmågan="acceleradanalfabetism")
Ur terminal:
i386c@i386c-ubuntu:~$ ~/bin/talsyntes.sh
mplayer: could not connect to socket
mplayer: No such file or directory
i386c@i386c-ubuntu:~$
och det pratas en stund.
Jag provar tangenterna.
Det funkar bra.
Fönstren är tydligare.
Tab-funktion är annorlunda och i övrigt ok (men något mindre logisk än Dialog (synn))
Typsnitt är korrekt.
Slutbetyg, "mycket väl godkänt".
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:16
av Hans Linde
Hmm...jag minns inte vad vi hade för något som skulle förbättras nu.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:20
av Konservburk
Hans Linde skrev:Hmm...jag minns inte vad vi hade för något som skulle förbättras nu.
Planen är nog att jag ska försöka med "hugga upp i meningar"-metoden igen. Jag vet inte hur svårt det blir, eller om det ens är möjligt... men jag har tänkt mig att det ska finnas en "starta om nuvarade mening"-funktion, samt "hoppa till förra/nästa mening".
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:22
av Hans Linde
Det är det ett fel.
Det sker ingen reglering.
Dvs F4 adjust, välj "speed" eller "freq", men det är ingen skillnad på rösten ,
när man startar om.
Har inte tittat på de andra i adjust.
F5 för volume , samma fel.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:27
av Konservburk
Hans Linde skrev:Det är det ett fel.
Det sker ingen reglering.
Dvs F4 adjust, välj "speed" eller "freq", men det är ingen skillnad på rösten ,
när man startar om.
Har inte tittat på de andra i adjust.
F5 för volume , samma fel.
Hoppsan... jag har visst haft sönder speed,freq,rate och volume när jag ordnade med zenity. Men jag ser var felet är, så det behövs ingen felsökning den här gången.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:28
av Konservburk
r6: buggfix
Kod: Markera allt
#!/bin/sh
# r6
case "$-" in *i*) return ;; esac
export LC_ALL=C
#exec 2>&-
APP="Talsyntes"
DIR=~/".talsyntes"
SCRIPT="$DIR/talsyntes.sh"
mkdir -p "$DIR/data" "$DIR/voices"
if test "x$SCRIPT" != "x$0" && cp -f "$0" "$SCRIPT" 2>&-
then
iconv -f utf-8 -t iso8859-1 "$0" >/dev/null 2>&- ||
iconv -f iso8859-1 -t utf-8 "$0" >"$SCRIPT"
chmod +x "$SCRIPT" && exec "$SCRIPT" "$@"
fi
create_dialog() {
DIALOG=$(
cat dialog 2>&- ||
which zenity 2>&- ||
which Xdialog 2>&- ||
echo "$0: missing zenity or Xdialog" >&2
)
case "$1" in
list)
type="$2"
title="$3"
while read item
do echo "$item" | grep -qE "($4)" && default=true || default=false
case "$DIALOG" in
*zenity)
set "$@" "$default" "${item##*/}"
;;
*Xdialog)
set "$@" "${item##*/}" "${item##*/}"
"$default" && set "$@" on || set "$@" off
;;
esac
done
shift 4
case "$DIALOG" in
*zenity)
set -- --width 400 --height 400 --list \
--"$type"list --text "$title" --column "" --column "" "$@"
;;
*Xdialog)
set -- --stdout --separator "|" --no-tags \
--"$type"list "$title" 400x400 0 "$@"
;;
esac
;;
scale)
case "$DIALOG" in
*zenity)
set -- --scale --text "$2" --min-value -100 --value "$3"
;;
*Xdialog)
set -- --stdout --rangebox "$2" 10 60 -100 100 "$3"
;;
esac
;;
progress)
case "$DIALOG" in
*zenity)
set -- --width 300 --progress --auto-close --text "$2"
;;
*Xdialog)
set -- --stdout --gauge "$2" 5 60
;;
esac
;;
question)
case "$DIALOG" in
*zenity)
set -- --question --text "$2"
;;
*Xdialog)
set -- --stdout --yesno "$2" 10 60
;;
esac
;;
info)
case "$DIALOG" in
*zenity)
set -- --info --text "$2"
;;
*Xdialog)
set -- --stdout --msgbox "$2" 10 60
;;
esac
;;
*) return ;;
esac
LC_ALL=sv_SE.UTF-8 "${DIALOG:-:}" --title "$APP" "$@"
}
find -L "$DIR" -maxdepth 1 -name voice -type l -exec rm {} \;
ls "$DIR"/voices/[a-z][a-z][1-9]:* >/dev/null 2>&- &&
test -x "$SCRIPT" &&
test -x "$DIR/mbrola" ||
set install
cd "$DIR"
case "$1" in
stop)
pkill -P $(pgrep -d, "${SCRIPT##*/}") mplayer
;;
pause)
find "$DIR" -name mplayer.\*.fifo -type p -exec sh -c 'echo pause >{}' \;
;;
start)
test -h "$DIR/voice" || exec "$SCRIPT" adjust voice
"$SCRIPT" stop
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
trap 'rm -f "$FIFO"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls voices/"$2":* 2>&-)
then shift
else voice="$(readlink voice)"
fi
voice="${voice#voices/}"
scale_mapping() {
awk -vmin="$1" -vdef="$2" -vmax="$3" -vbend="${4:-1}" '
function f(x)
{
factor = (a != b) ? 2*a*b*log(a/b)/(a-b) : (a+b)
return factor * log(x) * x / (x^2-1) - ((a < b) ? a : b) / bend
}
BEGIN {
a = (max - def)
b = (def - min)
if (max < min) { a = -a; b = -b; }
x0=2; x1=3; y0=f(x0); y1=f(x1); lim=1e-4
while( x1>1 && ( (x1-x0)>lim || (x0-x1)>lim) ) {
y1 = f(x1); x2 = x1 - (x1 - x0) * y1 / (y1 - y0)
x0 = x1; x1 = x2; y0 = y1;
}
incl = (x1>1) ? x1 : 1
}
{
expo = $1 / 100
if (incl != 1) expo = (incl^expo - 1/incl^expo) / (incl - 1/incl)
expo = (expo + 1) / 2
if (a != b) expo = ((a / b)^(2 * expo) - 1) / ((a / b)^2 - 1)
printf("%f\n", min + (max - min) * expo)
}
'
}
speed=$(2>&- scale_mapping 5 1 0.2 <speed)
freq=$(2>&- scale_mapping 0.2 1 5 <freq)
volume=$(2>&- scale_mapping 0.2 1 5 <volume)
rate=$(2>&- scale_mapping 1000 16000 48000 <rate)
scale=$(2>&- scale_mapping 0.2 1 5 <scale)
stride=$(2>&- scale_mapping 1 60 400 <stride)
overlap=$(2>&- scale_mapping 0 0.2 1 <overlap)
search=$(2>&- scale_mapping 0 14 200 <search)
method=$(2>&- cat <method)
accel=$(2>&- scale_mapping 0.2 1 5 <accel)
scaletempo="$scaletempo${scaletempo+:}scale=${scale:-1}"
scaletempo="$scaletempo${scaletempo+:}stride=${stride:-60}"
scaletempo="$scaletempo${scaletempo+:}overlap=${overlap:-0.20}"
scaletempo="$scaletempo${scaletempo+:}search=${search:-14}"
scaletempo="$scaletempo${scaletempo+:}speed=${method:-tempo}"
scaletempo="-af scaletempo=$scaletempo -speed ${accel:-1}"
speed="${speed:-$2}"
freq="${freq:-$3}"
volume="${volume:-$4}"
rate="${rate:-$5}"
xclip -o |
espeak -v mb-"${voice%:*}" |
"$DIR/mbrola" -e \
-t "${speed:-1}" \
-f "${freq:-1}" \
-v "${volume:-1}" \
-l "${rate:-16000}" \
"$DIR/voices/$voice" - -.wav |
mplayer -really-quiet -input file="$FIFO" $scaletempo -demuxer audio -
;;
reset)
case "$2" in
'')
rm -f speed freq volume rate scale stride overlap search method accel
;;
speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
rm -f "$2"
;;
esac
;;
adjust)
case "$2" in '')
set "$1" $(
printf "%s\n" \
speed freq volume rate scale stride overlap search method accel |
create_dialog list radio "Välj inställnig" speed
) || exit
esac
value=$(cat "$2" 2>&-)
case "$2" in
voice)
case "$3" in
'')
voice=$(readlink voice)
voice=$(
ls voices/[a-z][a-z][1-9]:* 2>&- |
create_dialog list radio "Välj röst" "${voice:-^$}"
) && test -n "$voice" && voice="voices/$voice"
;;
*)
voice=$(ls "voices/$2":*) 2>&-
;;
esac &&
ln -sf "$voice" voice
exit
;;
dialog)
case "$3" in
'')
value=$(
which zenity Xdialog |
create_dialog list radio "Välj dialogrutesystem" "${value:-^$}"
) && echo "$value" >"$2"
;;
zenity|Xdialog)
echo "$3" >"$2"
;;
esac
exit
;;
speed) title="Uppläsningshastighet" ;;
freq) title="Röstläge" ;;
volume) title="Uppläsningsvolym" ;;
rate) title="Rösttäthet" ;;
scale|stride|overlap|search|accel) title="scaletempo: $2" ;;
method)
case "$3" in
'')
value=$(
printf "%s\n" tempo pitch both none |
create_dialog list radio "scaletempo: $2" "${value:-tempo}"
) && echo "$value" >"$2"
;;
tempo|pitch|both|none)
echo "$3" >"$2"
;;
esac
exit
;;
*) exit
;;
esac
case "$3" in
'')
value=$(create_dialog scale "$title" "${value:-0}") &&
echo "$value" >"$2"
;;
*)
echo "$3" |
awk -vvalue="$value" '{
value = ($1) ? value + $1 : 0
value = (value < 100) ? value : 100
value = (value > -100) ? value : -100
print(value)
}' >"$2"
;;
esac
;;
install)
URL="http://tcts.fpms.ac.be/synthesis/mbrola"
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT
wget -qO- "$URL"/mbrcopybin.html |
sed -n '
s|.*"\(bin/[^"]*.zip\)"[^>]*>[^<]*LINUX i386.*|\1 (0.3Mb)|p
s|.*"\(dba/[^/]*/[^"]*\)"[^>]*>\([^:]*:\s*[^<]*\).*|\1\t\2|p
' >"$TMP"
cd "$DIR"
voices=$(
cd /usr/share/espeak-data/voices/mb &&
echo mb-[a-z][a-z][1-9] |
sed 's/mb-//g;s/\(.\)\s\(.\)/\1|\2/g'
)
voices=$(
grep -E "/($voices)/" <"$TMP" | cut -f2 |
create_dialog list check "Välj språk" '^(sw|us|en)[[:digit:]]:' |
sed 's/:[^|]*//g'
)
test -n "$voices" || exit
rm -f voices/[a-z][a-z][1-9]:* 2>&-
cd data
grep -E "(^bin|/$voices/)" <"$TMP" |
awk '{
size[NR]=size[NR-1]+substr($NF,2,length($NF)-4)
$NF=""
voice[NR]=$0
} END {
for(i=1; i<=NR; i++) {
print(100*size[i]/size[NR],voice[i])
}
}' |
while read progress file voice
do test -f "${file##*/}" ||
wget -q "$URL/$file" 2>&1
if test -z "$voice"
then
unzip -p "${file##*/}" mbrola-linux-i386 >"$DIR"/mbrola
chmod +x "$DIR"/mbrola
else
unzip -p "${file##*/}" "${voice%%:*}" >"$DIR/voices/$voice" 2>&- ||
unzip -p "${file##*/}" "${voice%%:*}/${voice%%:*}" \
>"$DIR/voices/$voice"
fi
echo $progress
done |
create_dialog progress "Hämtar Röster..."
bind_key() {
eval $("$SCRIPT" "_$1")
gconftool-2 -a "$KEY" |
awk '$1~/^'"$PREFIX"'[0-9]+'"$SUFFIX"'$/ && $3~/^'"$2"'$/{print($1)}' |
while read binding
do gconftool-2 -u "$KEY/$binding"
done
ID=$(
gconftool-2 -a "$KEY" |
sed -n "s/^\s*$PREFIX\([0-9]\+\)$SUFFIX\s*=\s*/\1\t/p" |
sort -n |
awk '{if($1-prev>1)exit;prev=$1}END{print(prev+1)}'
)
gconftool-2 \
-s -t str "$KEY/$PREFIX${ID:-1}$SUFFIX" "$2" \
-s -t str "$CMD/${PREFIX#run_}${ID:-1}" "$3"
}
for wm in metacity compiz
do bind_key "$wm" "F1" "$SCRIPT stop"
bind_key "$wm" "F2" "$SCRIPT pause"
bind_key "$wm" "F3" "$SCRIPT start"
bind_key "$wm" "F4" "$SCRIPT adjust"
bind_key "$wm" "F5" "$SCRIPT volume"
bind_key "$wm" "F6" "$SCRIPT rate"
bind_key "$wm" "F7" "$SCRIPT scale"
bind_key "$wm" "F8" "$SCRIPT stride"
bind_key "$wm" "F9" "$SCRIPT overlap"
bind_key "$wm" "F10" "$SCRIPT search"
bind_key "$wm" "F11" "$SCRIPT method"
bind_key "$wm" "F12" "$SCRIPT accel"
done
create_dialog info "$APP installerad"
exec "$SCRIPT" voice
;;
uninstall)
create_dialog question "Avinstallera $APP?" || exit
unbind_keys() {
eval $("$SCRIPT" "_$1")
gconftool-2 -a "$CMD" |
grep -F "$SCRIPT" |
sed -n 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/p' |
while read binding
do gconftool-2 -u "$CMD/${PREFIX#run_}$binding"
gconftool-2 -u "$KEY/$PREFIX$binding$SUFFIX"
done
}
unbind_keys metacity
unbind_keys compiz
rm -rf "$DIR"
;;
_metacity)
echo '
KEY="/apps/metacity/global_keybindings"
CMD="/apps/metacity/keybinding_commands"
PREFIX="run_command_"
SUFFIX=""
'
;;
_compiz)
echo '
KEY="/apps/compiz/general/allscreens/options"
CMD="/apps/compiz/general/allscreens/options"
PREFIX="run_command"
SUFFIX="_key"
'
;;
voice|dialog|speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
exec "$SCRIPT" adjust "$@"
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:36
av Hans Linde
Planen är nog att jag ska försöka med "hugga upp i meningar"-metoden igen. Jag vet inte hur svårt det blir, eller om det ens är möjligt... men jag har tänkt mig att det ska finnas en "starta om nuvarade mening"-funktion, samt "hoppa till förra/nästa mening".
Det blir nog bra om du får det att fungera.
Mitt önskemål om dynamisk-justering är ett kliv bort, men om du tittar på det du sa kanske det här passar in i "övningen".
Nu måste man trycka "stop" för att justera något och justera något kommer man alltid att behöva någon gång.
Då skulle det vara bra om programmet kunde starta där det slutade. Det blir ju en "sorts pause" på sätt och vis.
.......Det där hade jag tänkt förklara , men det blev så krångligt, så jag hoppas du ser alternativ o vändningar själv...
Poäng är iaf att jag inte behöver börja om, eller hålla reda på hur långt i text jag läst.