Sida 32 av 98
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:43
av Konservburk
Hans Linde skrev: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.
Om jag får till det som jag vill så ska det gå att trycka på en "restart"-tangent för att böja om meningen med de nya inställningarna.
Så dynamiskt som du egentligen vill ha det är vad jag vet helt omöjligt om man inte ändrar i mbrolas källkod... vi har inte tillgång till den.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:43
av Hans Linde
Ja, r6 fixar det.

Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:46
av Hans Linde
Restart av en mening är faktiskt bättre än paus.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 20:50
av Konservburk
Du kan fundera på om skalorna är bra... eller om de bör huggas något, och isf hur mycket. Det kanske t.o.m. är någon som behöver utvidgas?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 14 okt 2008, 21:07
av Hans Linde
först...
Det är speed, volume o freq, som jag kan ha en uppfattning ang skalas värde.
Jag återkommer om det.
Jag började tänka efter vad det är för "resa" vi gjort.
vi är nu inne på Mbrola-spåret bla pga röstens tydlighet.
Är våra möjlighet att justera rösternas egenskaper
vid högre hastigheter den samma den samma,
jämfört med Festival (mm som vi provat)?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 11:57
av Hans Linde
Jag har varit i kontakt med diverse universite och företag, och avvaktar svar.
Det verkar inte omöjligt att komma över bättre röster,
men vi får se och de passar i din "maskin".
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 12:15
av Hans Linde
Jag har också gjort lite till på Scaletempo.
Det är alltså de yttre skalvärden som jag tycker är tillräckliga.
Jag har då valt att gå något utanför "okay".
--
081015 12:00 utvärdering av Mbrola/Scaletempo skalor.
speed -40 - +70
freq -60 - +60
volum behåll skala
Övriga tillsvidare ingen kommentar.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 12:43
av Hans Linde
Jaghar nu igen gjortettförsök med Scaletempo skalorna,
ochjag får ge ddig rätt att det troligen går att finna en förbättring,
med hjälp av det. Fast att leta och justera på det viset som nu erbjuds
som kommer jag ingen vart. Utanblir för uttröttad för att kunna jämföra
variationerna. Jag kan inte tro att jag kan komma till någon slutsats
utan att lyssna och justera samtidigt är möjligt.
Eftersomproblemet är ganska likt, även om det är värre på Festival-rösterna,
så om det var lättare att åstkomman en "testbänk" med det så kanjag "jobba" med det.
Det måste iaf bli ett värde som vi använder för alla röster och tex graderas
efterr hastighet. Att en användare ska "trixa" med dettaser jag som uteslutet.
Mao om du kan åstakomma ettannat sätt att testa hoppas jag
kunna bidra mera.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 16:53
av Konservburk
Hans Linde skrev:Jaghar nu igen gjortettförsök med Scaletempo skalorna,
ochjag får ge ddig rätt att det troligen går att finna en förbättring,
med hjälp av det. Fast att leta och justera på det viset som nu erbjuds
som kommer jag ingen vart. Utanblir för uttröttad för att kunna jämföra
variationerna. Jag kan inte tro att jag kan komma till någon slutsats
utan att lyssna och justera samtidigt är möjligt.
Eftersomproblemet är ganska likt, även om det är värre på Festival-rösterna,
så om det var lättare att åstkomman en "testbänk" med det så kanjag "jobba" med det.
Det måste iaf bli ett värde som vi använder för alla röster och tex graderas
efterr hastighet. Att en användare ska "trixa" med dettaser jag som uteslutet.
Mao om du kan åstakomma ettannat sätt att testa hoppas jag
kunna bidra mera.
Jag har fixat till så att det blir mer "lätt-testat" nu...
* Inställningsvärdet registreras i
r7 utan att du behöver stänga inställningsfönstret. Det gäller dock bara för alla skalningsinställningar. Listinställningsfönster måste du fortfarande stänga för att värdet ska ändras. Och du måste fortfande alltid starta om uppspelningen för att ändringarna ska märkas.
* Jag har lagt till
~/bin/talsyntes.sh loop (F4) som automatiskt startar om uppläsningen hela tiden tills du stannar den med stop-kommandot.
* Jag har även lagt till
~/bin/talsyntes.sh list (F6) som visar en lista över vilka inställningsvärden du har valt, samt vad dessa motsvarar efter omskalning. Det verkliga värdet kan vara bra att veta ifall du hittar någon bra inställning. Då slipper du leta reda på den igen om vi senare ändrar på skalan.
För att det ska bli enkelt att testa olika inställningsvärden gör du alltså så här:
* Markera en kort text (ett par ord).
* Starta uppläsnings loopen:
~/bin/talsyntes.sh loop (F4).
* Öppna ett eller flera inställingsfönster och börja ändra värden.
Eftesom jag blev tvungen att ändra en del i
~/.talsyntes så är det bäst att du kör
~/bin/talsyntes uninstall det första du gör så att inget gammalt ligger kvar och stör.
Kod: Markera allt
#!/bin/sh
# r7
case "$-" in *i*) return ;; esac
export LC_ALL=C
#exec 2>&-
APP="Talsyntes"
DIR=~/".talsyntes"
SCRIPT="$DIR/talsyntes.sh"
DATA_DIR="$DIR/data"
VOICES_DIR="$DIR/voices"
SETTINGS_DIR="$DIR/settings"
mkdir -p "$DATA_DIR" "$VOICES_DIR" "$SETTINGS_DIR"
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
get_dialog() {
cat "$SETTINGS_DIR"/dialog 2>&- ||
which zenity 2>&- ||
which Xdialog 2>&- ||
echo "$0: missing zenity or Xdialog" >&2
}
case "$1" in
stop|start)
pkill -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer
;;
pause)
find "$DIR" -name mplayer.\*.fifo -type p -exec sh -c 'echo pause >{}' \;
;;
list)
dialog="$(get_dialog)"
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" | grep "$*$" |
while read pid
do pkill -P "${pid%% *}" "${dialog##*/}"
done
;;
*)
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
grep -q "$*$" && exit
;;
esac
create_dialog() {
dialog="$(get_dialog)"
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" --print-partial \
--min-value -100 --max-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 --no-wrap --text "$2"
;;
*Xdialog)
set -- --stdout --fixed-font --msgbox "$2" 0 0
;;
esac
;;
*) return ;;
esac
LC_ALL=sv_SE.UTF-8 "${dialog:-:}" --title "$APP" "$@"
}
metacity_info() {
echo '
KEY="/apps/metacity/global_keybindings"
CMD="/apps/metacity/keybinding_commands"
PREFIX="run_command_"
SUFFIX=""
'
}
compiz_info() {
echo '
KEY="/apps/compiz/general/allscreens/options"
CMD="/apps/compiz/general/allscreens/options"
PREFIX="run_command"
SUFFIX="_key"
'
}
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)
}
'
}
get_speed() {
2>&- scale_mapping 5 1 0.2 <"$SETTINGS_DIR"/speed || echo 1.0
}
get_freq() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/freq || echo 1.0
}
get_volume() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/volume || echo 1.0
}
get_rate() {
2>&- scale_mapping 1000 16000 48000 <"$SETTINGS_DIR"/rate || echo 16000
}
get_scale() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/scale || echo 1.0
}
get_stride() {
2>&- scale_mapping 1 60 400 <"$SETTINGS_DIR"/stride || echo 60
}
get_overlap() {
2>&- scale_mapping 0 0.2 1 <"$SETTINGS_DIR"/overlap || echo 0.2
}
get_search() {
2>&- scale_mapping 0 14 200 <"$SETTINGS_DIR"/search || echo 14
}
get_method() {
2>&- cat "$SETTINGS_DIR"/method || echo tempo
}
get_accel() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/accel || echo 1.0
}
get_voice() {
2>&- readlink "$SETTINGS_DIR"/voice
}
find -L "$SETTINGS_DIR" -maxdepth 1 -name voice -type l -exec rm {} \;
ls "$VOICES_DIR"/[a-z][a-z][1-9]:* >/dev/null 2>&- &&
test -x "$SCRIPT" &&
test -x "$DIR/mbrola" ||
set install
cd "$DIR"
case "$1" in
loop)
while "$SCRIPT" start ; do :; done
;;
start)
xclip -o | grep -q . || exit
test -h "$SETTINGS_DIR/voice" || exec "$SCRIPT" adjust voice
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_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
speed="$(get_speed)"
freq="$(get_freq)"
volume="$(get_volume)"
rate="$(get_rate)"
scale="$(get_scale)"
stride="$(get_stride)"
overlap="$(get_overlap)"
search="$(get_search)"
method="$(get_method)"
accel="$(get_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}"
xclip -o |
espeak -v mb-"${voice%:*}" |
"$DIR/mbrola" -e \
-t "${speed:-1}" \
-f "${freq:-1}" \
-v "${volume:-1}" \
-l "${rate:-16000}" \
"$VOICES_DIR/$voice" - -.wav |
mplayer -really-quiet -input file="$FIFO" $scaletempo -demuxer audio -
;;
list)
cd "$SETTINGS_DIR"
list=$(
echo "Nuvarande inställningar"
echo
for option in \
voice speed freq rate volume accel \
scale stride overlap search method dialog
do if test -h "$option"
then
setting=$(readlink "$option")
setting="${setting##*/}" && value=""
else
setting="$(cat $option 2>&-)"
value="$(get_$option)"
fi
test "$option" = dialog &&
setting="${value##*/}" && value=""
test "$option" = method &&
setting="${setting:-tempo}" && value=""
printf "%s:\t\t%s\t\t%s\n" \
"$option" "${setting:-0}" "${value:+(}$value${value:+)}"
done #| sort
)
create_dialog info "$list"
exit
;;
reset)
cd "$SETTINGS_DIR"
case "$2" in
'')
create_dialog question "Återställ standardinställningarna?" || exit
rm -f \
dialog speed freq volume rate scale stride overlap search method accel
;;
dialog|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 voice dialog |
create_dialog list radio "Välj inställning" speed
)
test $# -gt 1 && exec "$SCRIPT" "$@" || exit
exit
esac
value=$(cat "$SETTINGS_DIR/$2" 2>&-)
case "$2" in
voice)
case "$3" in
'')
voice=$(readlink "$SETTINGS_DIR"/voice)
voice=$(
ls "$VOICES_DIR"/[a-z][a-z][1-9]:* 2>&- |
create_dialog list radio "Välj röst" "^${voice#../}$"
) && test -n "$voice" && voice="$VOICES_DIR/$voice"
;;
*)
voice=$(ls "$VOICES_DIR/$3":* 2>&-)
;;
esac &&
ln -sf "$voice" "$SETTINGS_DIR"/voice
exit
;;
dialog)
case "$3" in
'')
value=$(
which zenity Xdialog 2>&- |
create_dialog list radio "Välj dialogrutesystem" "${value:-zenity}"
) && echo "$value" >"$SETTINGS_DIR/$2"
;;
zenity|Xdialog)
echo "$3" >"$SETTINGS_DIR/$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" >"$SETTINGS_DIR/$2"
;;
tempo|pitch|both|none)
echo "$3" >"$SETTINGS_DIR/$2"
;;
esac
exit
;;
*) exit
;;
esac
case "$3" in
'')
{ create_dialog scale "$title" "${value:-0}" || echo "$value"; } |
while read value
do test -n "$value" && echo "$value" >"$SETTINGS_DIR/$2"
done
;;
*)
echo "$3" |
awk -vvalue="$value" '{
value = ($1) ? value + $1 : 0
value = (value < 100) ? value : 100
value = (value > -100) ? value : -100
print(value)
}' >"$SETTINGS_DIR/$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"
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_DIR"/[a-z][a-z][1-9]:* 2>&-
cd "$DATA_DIR"
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%%:*}" >"$VOICES_DIR/$voice" 2>&- ||
unzip -p "${file##*/}" "${voice%%:*}/${voice%%:*}" \
>"$VOICES_DIR/$voice"
fi
echo $progress
done |
create_dialog progress "Hämtar Röster..."
bind_key() {
eval $("$1"_info)
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 loop"
bind_key "$wm" "F5" "$SCRIPT adjust"
bind_key "$wm" "F6" "$SCRIPT list"
bind_key "$wm" "F7" "$SCRIPT reset"
bind_key "$wm" "F8" "$SCRIPT uninstall"
bind_key "$wm" "F9" "$SCRIPT install"
bind_key "$wm" "F1" "<Control>$SCRIPT voice"
bind_key "$wm" "F2" "<Control>$SCRIPT speed"
bind_key "$wm" "F3" "<Control>$SCRIPT freq"
bind_key "$wm" "F4" "<Control>$SCRIPT rate"
bind_key "$wm" "F5" "<Control>$SCRIPT volume"
bind_key "$wm" "F6" "<Control>$SCRIPT accel"
bind_key "$wm" "F7" "<Control>$SCRIPT scale"
bind_key "$wm" "F8" "<Control>$SCRIPT stride"
bind_key "$wm" "F9" "<Control>$SCRIPT overlap"
bind_key "$wm" "F10" "<Control>$SCRIPT search"
bind_key "$wm" "F11" "<Control>$SCRIPT method"
bind_key "$wm" "F12" "<Control>$SCRIPT dialog"
done
create_dialog info "$APP installerad"
exec "$SCRIPT" voice
;;
uninstall)
create_dialog question "Avinstallera $APP?" || exit
unbind_keys() {
eval $("$1"_info)
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"
create_dialog info "$APP avinstallerad"
;;
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: 15 okt 2008, 17:03
av Hans Linde
Kul
Jag ska titta på med en gång.
Jag har varit i kontakt med ett 20tal personer/företag till, men det är ingen
så resulterat i något avgörande än, men det verkar värt att
fortsätta.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 17:16
av Hans Linde
Burr!
Den där "uninstall" var som en "självmordbombare" i mjukvaruversion.
Efter alla den svett.
den kommer jag ha mardrömmar om.

Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 17:24
av Hans Linde
installation flyter på, men slut resultatet uteblir.
Fel
Barnprocessen felar.
alla F-tangenter ger sådan fel ref till ny kopplad-funktion.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 17:43
av Konservburk
Hans Linde skrev:Fel
Barnprocessen felar.
alla F-tangenter ger sådan fel ref till ny kopplad-funktion.
Är det bara tangentkopplingarna som stular? Eller fungerar ingenting alls?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:16
av Hans Linde
Nja det blir ju samma sak ur min-nivå.
Jag har inte kör terminal kommadon. Ska jag?
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:21
av Konservburk
Hans Linde skrev:Nja det blir ju samma sak ur min-nivå.
Jag har inte kör terminal kommadon. Ska jag?
Om inte bindningarna fungerar direkt så är det bäst att försöka från terminalen. Då märker man om det blir något helt galet fel med en massa felmeddelanden, eller om det fungerar som det ska... och isf är det åter igen tangentbindningarna som inte riktigt vill.
Kod: Markera allt
~/bin/talsyntes.sh adjust
~/bin/talsyntes.sh start
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:21
av Hans Linde
Då har jag kör i terminal
loop
list
de funkar fint.
Jag trycker också F1 "stop" och rösten tystnar. Dock kommer samma felmeddelande upp.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:26
av Hans Linde
Även
start
adust
funkar fint via terminal.
De här terminal kommando är lite för kraftfull för min smak

.
Det är lätt att fixa fel. Men om jag
gör fel, då känns det oåterkallerligt.
Så därför "provar inte gärna något i terminal, på den PC vi jobbar.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:30
av Konservburk
Hans Linde skrev:Då har jag kör i terminal
loop
list
de funkar fint.
Jag trycker också F1 "stop" och rösten tystnar. Dock kommer samma felmeddelande upp.
Jag har klantat mig ordentligt ser jag. Tanken var att flytta några av kommandona till ctrl-Fn för att få mer plats. Men jag har av misstag lagt ctrl-koden famför kommandot istället för framför tangenten.
r8: buggfix
Kod: Markera allt
#!/bin/sh
# r8
case "$-" in *i*) return ;; esac
export LC_ALL=C
#exec 2>&-
APP="Talsyntes"
DIR=~/".talsyntes"
SCRIPT="$DIR/talsyntes.sh"
DATA_DIR="$DIR/data"
VOICES_DIR="$DIR/voices"
SETTINGS_DIR="$DIR/settings"
mkdir -p "$DATA_DIR" "$VOICES_DIR" "$SETTINGS_DIR"
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
get_dialog() {
cat "$SETTINGS_DIR"/dialog 2>&- ||
which zenity 2>&- ||
which Xdialog 2>&- ||
echo "$0: missing zenity or Xdialog" >&2
}
case "$1" in
stop|start)
pkill -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer
;;
pause)
find "$DIR" -name mplayer.\*.fifo -type p -exec sh -c 'echo pause >{}' \;
;;
list)
dialog="$(get_dialog)"
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" | grep "$*$" |
while read pid
do pkill -P "${pid%% *}" "${dialog##*/}"
done
;;
*)
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
grep -q "$*$" && exit
;;
esac
create_dialog() {
dialog="$(get_dialog)"
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" --print-partial \
--min-value -100 --max-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 --no-wrap --text "$2"
;;
*Xdialog)
set -- --stdout --fixed-font --msgbox "$2" 0 0
;;
esac
;;
*) return ;;
esac
LC_ALL=sv_SE.UTF-8 "${dialog:-:}" --title "$APP" "$@"
}
metacity_info() {
echo '
KEY="/apps/metacity/global_keybindings"
CMD="/apps/metacity/keybinding_commands"
PREFIX="run_command_"
SUFFIX=""
'
}
compiz_info() {
echo '
KEY="/apps/compiz/general/allscreens/options"
CMD="/apps/compiz/general/allscreens/options"
PREFIX="run_command"
SUFFIX="_key"
'
}
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)
}
'
}
get_speed() {
2>&- scale_mapping 5 1 0.2 <"$SETTINGS_DIR"/speed || echo 1.0
}
get_freq() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/freq || echo 1.0
}
get_volume() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/volume || echo 1.0
}
get_rate() {
2>&- scale_mapping 1000 16000 48000 <"$SETTINGS_DIR"/rate || echo 16000
}
get_scale() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/scale || echo 1.0
}
get_stride() {
2>&- scale_mapping 1 60 400 <"$SETTINGS_DIR"/stride || echo 60
}
get_overlap() {
2>&- scale_mapping 0 0.2 1 <"$SETTINGS_DIR"/overlap || echo 0.2
}
get_search() {
2>&- scale_mapping 0 14 200 <"$SETTINGS_DIR"/search || echo 14
}
get_method() {
2>&- cat "$SETTINGS_DIR"/method || echo tempo
}
get_accel() {
2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/accel || echo 1.0
}
get_voice() {
2>&- readlink "$SETTINGS_DIR"/voice
}
find -L "$SETTINGS_DIR" -maxdepth 1 -name voice -type l -exec rm {} \;
ls "$VOICES_DIR"/[a-z][a-z][1-9]:* >/dev/null 2>&- &&
test -x "$SCRIPT" &&
test -x "$DIR/mbrola" ||
set install
cd "$DIR"
case "$1" in
loop)
while "$SCRIPT" start ; do :; done
;;
start)
xclip -o | grep -q . || exit
test -h "$SETTINGS_DIR/voice" || exec "$SCRIPT" adjust voice
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_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
speed="$(get_speed)"
freq="$(get_freq)"
volume="$(get_volume)"
rate="$(get_rate)"
scale="$(get_scale)"
stride="$(get_stride)"
overlap="$(get_overlap)"
search="$(get_search)"
method="$(get_method)"
accel="$(get_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}"
xclip -o |
espeak -v mb-"${voice%:*}" |
"$DIR/mbrola" -e \
-t "${speed:-1}" \
-f "${freq:-1}" \
-v "${volume:-1}" \
-l "${rate:-16000}" \
"$VOICES_DIR/$voice" - -.wav |
mplayer -really-quiet -input file="$FIFO" $scaletempo -demuxer audio -
;;
list)
cd "$SETTINGS_DIR"
list=$(
echo "Nuvarande inställningar"
echo
for option in \
voice speed freq rate volume accel \
scale stride overlap search method dialog
do if test -h "$option"
then
setting=$(readlink "$option")
setting="${setting##*/}" && value=""
else
setting="$(cat $option 2>&-)"
value="$(get_$option)"
fi
test "$option" = dialog &&
setting="${value##*/}" && value=""
test "$option" = method &&
setting="${setting:-tempo}" && value=""
printf "%s:\t\t%s\t\t%s\n" \
"$option" "${setting:-0}" "${value:+(}$value${value:+)}"
done #| sort
)
create_dialog info "$list"
exit
;;
reset)
cd "$SETTINGS_DIR"
case "$2" in
'')
create_dialog question "Återställ standardinställningarna?" || exit
rm -f \
dialog speed freq volume rate scale stride overlap search method accel
;;
dialog|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 voice dialog |
create_dialog list radio "Välj inställning" speed
)
test $# -gt 1 && exec "$SCRIPT" "$@" || exit
exit
esac
value=$(cat "$SETTINGS_DIR/$2" 2>&-)
case "$2" in
voice)
case "$3" in
'')
voice=$(readlink "$SETTINGS_DIR"/voice)
voice=$(
ls "$VOICES_DIR"/[a-z][a-z][1-9]:* 2>&- |
create_dialog list radio "Välj röst" "^${voice#../}$"
) && test -n "$voice" && voice="$VOICES_DIR/$voice"
;;
*)
voice=$(ls "$VOICES_DIR/$3":* 2>&-)
;;
esac &&
ln -sf "$voice" "$SETTINGS_DIR"/voice
exit
;;
dialog)
case "$3" in
'')
value=$(
which zenity Xdialog 2>&- |
create_dialog list radio "Välj dialogrutesystem" "${value:-zenity}"
) && echo "$value" >"$SETTINGS_DIR/$2"
;;
zenity|Xdialog)
echo "$3" >"$SETTINGS_DIR/$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" >"$SETTINGS_DIR/$2"
;;
tempo|pitch|both|none)
echo "$3" >"$SETTINGS_DIR/$2"
;;
esac
exit
;;
*) exit
;;
esac
case "$3" in
'')
{ create_dialog scale "$title" "${value:-0}" || echo "$value"; } |
while read value
do test -n "$value" && echo "$value" >"$SETTINGS_DIR/$2"
done
;;
*)
echo "$3" |
awk -vvalue="$value" '{
value = ($1) ? value + $1 : 0
value = (value < 100) ? value : 100
value = (value > -100) ? value : -100
print(value)
}' >"$SETTINGS_DIR/$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"
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_DIR"/[a-z][a-z][1-9]:* 2>&-
cd "$DATA_DIR"
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%%:*}" >"$VOICES_DIR/$voice" 2>&- ||
unzip -p "${file##*/}" "${voice%%:*}/${voice%%:*}" \
>"$VOICES_DIR/$voice"
fi
echo $progress
done |
create_dialog progress "Hämtar Röster..."
bind_key() {
eval $("$1"_info)
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 loop"
bind_key "$wm" "F5" "$SCRIPT adjust"
bind_key "$wm" "F6" "$SCRIPT list"
bind_key "$wm" "F7" "$SCRIPT reset"
bind_key "$wm" "F8" "$SCRIPT uninstall"
bind_key "$wm" "F9" "$SCRIPT install"
bind_key "$wm" "<Control>F1" "$SCRIPT voice"
bind_key "$wm" "<Control>F2" "$SCRIPT speed"
bind_key "$wm" "<Control>F3" "$SCRIPT freq"
bind_key "$wm" "<Control>F4" "$SCRIPT rate"
bind_key "$wm" "<Control>F5" "$SCRIPT volume"
bind_key "$wm" "<Control>F6" "$SCRIPT accel"
bind_key "$wm" "<Control>F7" "$SCRIPT scale"
bind_key "$wm" "<Control>F8" "$SCRIPT stride"
bind_key "$wm" "<Control>F9" "$SCRIPT overlap"
bind_key "$wm" "<Control>F10" "$SCRIPT search"
bind_key "$wm" "<Control>F11" "$SCRIPT method"
bind_key "$wm" "<Control>F12" "$SCRIPT dialog"
done
create_dialog info "$APP installerad"
exec "$SCRIPT" voice
;;
uninstall)
create_dialog question "Avinstallera $APP?" || exit
unbind_keys() {
eval $("$1"_info)
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"
create_dialog info "$APP avinstallerad"
;;
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: 15 okt 2008, 18:33
av Hans Linde
En av Professorerna på Sth Universitet hörde just av sig och trodde att det skulle finnas
"tillgängliga" röster av kvalite på KTH
http://www.speech.kth.se/info/
o
Thesaurus Lex
http://www.thesauruslex.com/thesmeny.htm.
Detta och 5 andra spår tycker jag har varit värda att följa upp.
Det blir imorgon.
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Postat: 15 okt 2008, 18:35
av Hans Linde