Talsyntes:____"För Folk I Tiden"
Kategoriregler
Varning! Det som diskuteras här är inte alltid enkelt och det kan hända att vissa installationer/modifieringar kan göra ditt system oanvändbart. Inget för nybörjare. Gör alltid backup av känslig data innan du experimenterar.
Varning! Det som diskuteras här är inte alltid enkelt och det kan hända att vissa installationer/modifieringar kan göra ditt system oanvändbart. Inget för nybörjare. Gör alltid backup av känslig data innan du experimenterar.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
- 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.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
- 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.
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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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:- Typsnittet är fel även här. ska jag leta upp de kommandon som fixade det? ( är det samma +)
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.Hans Linde skrev:- Det här är en Scaletempo övning och det behöver en funktionsbeskrivning. F7-12 påverkar inte rösten
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Vissa tangentbindningar fungerar med compiz, men andra fungerar inte?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.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
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.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Jag provar lite till med Scaletempo.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
angående Zenity avvaktar jag på dina instruktioner.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.

Jag vill skriva en siffra -9 _0_9 ( -9 -- 9) för att ställa in värdet.

-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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?

Vad det nu kan bero på..


Jag försvinner för en simtur, om det inte är något omgående som önskas?
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Klar tecken.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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: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.
Å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: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
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.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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
* 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
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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".
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".
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
Hmm...jag minns inte vad vi hade för något som skulle förbättras nu.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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".Hans Linde skrev:Hmm...jag minns inte vad vi hade för något som skulle förbättras nu.
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.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.
- Konservburk
- Inlägg: 5919
- Blev medlem: 07 apr 2007, 22:28
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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
-
- Inlägg: 3375
- Blev medlem: 06 sep 2008, 07:46
- OS: Crunchbang
- Utgåva: Vet inte/ingen utgåva passar
Re: Talsyntes/Festival/Scaletempo/Ubuntu-AMD64
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.
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.