Sida 37 av 98
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 20:46
av Konservburk
Hans Linde skrev:Loop vill inte.
Jag ska se om jag ska se om bindningen har försvunnit.
Försök från terminalen så att vi kan utesluta problem med tangentbindningarna:
Testa även detta:
Kod: Markera allt
~/bin/talsyntes.sh start && echo ja || echo nej
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 20:49
av Hans Linde
Inget på loop
Med det andra hördes.
i386c@i386c-ubuntu:~$ ~/bin/talsyntes.sh loop
i386c@i386c-ubuntu:~$
i386c@i386c-ubuntu:~$ ~/bin/talsyntes.sh start && echo ja || echo nej
mplayer: could not connect to socket
mplayer: No such file or directory
ja
i386c@i386c-ubuntu:~$
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 20:58
av Konservburk
Hans Linde skrev:Inget på loop
Du kan faktiskt testa den exakta loop-koden löst, för den är väldigt enkel...
Kod: Markera allt
while ~/bin/talsyntes.sh start ; do :; done
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:04
av Konservburk
Jag fick just en idé om vad som skulle kunna tänkas gå fel. Även om det här inte skulle hjälpa för ditt loop-problem så rättar
r11 hur som helst till en bugg som skulle kunna ställa till problem:
Kod: Markera allt
#!/bin/bash
# r11
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|loop|reset)
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)
}
'
return 0
}
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
stop|pause)
;;
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 question "$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
pkill -9 "${SCRIPT##*/}"
;;
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
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: var finns programmen?
Postat: 16 okt 2008, 21:05
av Hans Linde
Det loop-ade.
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:10
av Hans Linde
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:36
av Hans Linde
För att utvärdera var hastighetgränsen för mig
var med us3 med Accel/Scale som jag tror att
du föreslog. Började jag så efter reset.
Sedan justerade jag lite på frekvensen (Rösttäthet).
Men Search, Overlap, Stride märkes ingen.
Ska prova pitch/tempo nu.
voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: 11 (17707.227613)
volume: -67 (0.472542)
accel: 40 (1.436820)
scale: 39 (1.420849)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: tempo
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:41
av Hans Linde
Det här var intressant.
Se skillnaden.
voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -43 (9867.984477)
volume: -67 (0.472542)
accel: 70 (2.238985)
scale: 70 (2.238985)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: pitch
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:46
av Hans Linde
Både Tempo o Pitch sänkte
voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -38 (10579.860631)
volume: -67 (0.472542)
accel: 40 (1.436820)
scale: 40 (1.436820)
stride: -2 (58.829297)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: both
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:49
av Hans Linde
Tempo o pitch
voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -40 (10295.913574)
volume: -67 (0.472542)
accel: 50 (1.623649)
scale: 51 (1.645552)
stride: -6 (56.535840)
overlap: 13 (0.227646)
search: 11 (15.646820)
method: both
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:53
av Hans Linde
voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -61 (7230.409128)
volume: -67 (0.472542)
accel: 74 (2.427015)
scale: 74 (2.427015)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: pitch
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 21:57
av Hans Linde
voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: 28 (20675.434566)
volume: -67 (0.472542)
accel: 46 (1.542392)
scale: 44 (1.505211)
stride: 0 (60.000000)
overlap: -1 (0.198007)
search: -1 (13.860628)
method: tempo
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:01
av Konservburk
Nu känner jag mig tvingad att ordna något enkelt sätt att importera de där listorna

Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:04
av Hans Linde
Nuvarande inställningar
voice: sw2: Swedish Female
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -61 (7230.409128)
volume: -67 (0.472542)
accel: 80 (2.774768)
scale: 80 (2.774768)
stride: 1 (60.592496)
overlap: 3 (0.206072)
search: 0 (14.000000)
method: pitch
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:11
av Hans Linde
voice: sw2: Swedish Female
speed: 83 (0.334885)
freq: 16 (1.139546)
rate: -24 (12550.254574)
volume: -66 (0.481158)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: none
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:15
av Hans Linde
voice: sw1: Swedish Male
speed: 73 (0.420677)
freq: 19 (1.169311)
rate: 16 (18530.481962)
volume: -66 (0.481158)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: none
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:26
av Hans Linde
Jag måste säga att jag hjärtlig less på den struf jag valt,
men nu vill det inte spela den igen ( ,efter ca 500ggr).
Så jag tar bort en bokstav i börja och då funkar det.
jag vill inte byte eftersom dåblir det svårare att utvärdera omdömmet.
Det blir ett fel du får fundera på. Det är rimligen ingen praktisk-fel iaf.
Vem fan lyssnar på mening 500ggr, är det då "man har blivit
Linux-nörd"??

Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:35
av Hans Linde
Det gjorde ju inget. Rösten var us3.
Jag blir lite trötta 1t knatte o fnatte rabblande.
Om det blir tjänst där man ska tolka walt disney, så kan ju säga till
den tjänten kanske jag kan få. eller??

(lika sannolikt som en
röst från KTH)
voice: us3: American English Male
speed: 74 (0.412029)
freq: -8 (0.937698)
rate: 30 (21061.471541)
volume: 1 (1.008033)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: tempo
dialog: zenity
Re: Talsyntes: var finns programmen?
Postat: 16 okt 2008, 22:38
av Konservburk
Hans Linde skrev:Jag måste säga att jag hjärtlig less på den struf jag valt,
men nu vill det inte spela den igen ( ,efter ca 500ggr).
Så jag tar bort en bokstav i börja och då funkar det.
jag vill inte byte eftersom dåblir det svårare att utvärdera omdömmet.
Det blir ett fel du får fundera på. Det är rimligen ingen praktisk-fel iaf.
Vem fan lyssnar på mening 500ggr, är det då "man har blivit
Linux-nörd"??

Jag hade ett liknande problem för ett tag sedan som hade att göra med
speaker-test -twav.
Här är
r12 som kan importerar de där listorna. Det är bara att klistra in listan i
import-fönstret så ska inställningarna sättas utifrån listan så fort fönstret stängs:
Kod: Markera allt
#!/bin/bash
# r12
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|loop|reset)
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
;;
edit)
case "$dialog" in
*zenity)
set -- --text-info --editable
;;
*Xdialog)
set -- --editbox /dev/null 30 50
;;
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)
}
'
return 0
}
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
stop|pause)
;;
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 question "$list"
;;
import)
cd "$SETTINGS_DIR"
create_dialog edit |
while read option setting real_value
do case "${option%:}" in
voice)
"$SCRIPT" voice "${setting%:}"
;;
speed|freq|rate|volume|accel|scale|stride|overlap|search|method|dialog)
echo "$setting" >"${option%:}"
;;
esac
done
exec "$SCRIPT" list
;;
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
pkill -9 "${SCRIPT##*/}"
;;
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
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 import"
bind_key "$wm" "F8" "$SCRIPT reset"
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: var finns programmen?
Postat: 16 okt 2008, 22:40
av Hans Linde
Nu gjorde jag inga Frekvens justeringar under SCaletempo-delen
kanske jag ska göra. Hmmm...
Okay jag tar det jussterade värdena och justerar frekvensens för sw1, sw2, us3.
Föresten tyckte jag att us3 hade dubbla stavelser ibland......men.