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.
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.
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 29 okt 2008, 20:00
Hans Linde skrev: Det är tyst
Då får vi klippa lite mer (och om det börjar låta får vi klippa lite mindre tills vi hittar felet):
Kod: Markera allt
#!/bin/sh
# r15-klipp3
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
#case "$1" in
#start)
# pgrep -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer |
# while read pid
# do kill $(ps -oppid= "$pid") "$pid"
# done
#;;
#*)
# ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
# grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
# grep -q "$*$" && exit
#;;
#esac
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_amplit() {
2>&- scale_mapping 0 100 200 <"$SETTINGS_DIR"/amplit || echo 100
}
get_wordgap() {
2>&- scale_mapping -50 0 50 <"$SETTINGS_DIR"/wordgap || echo 0
}
get_pitch() {
2>&- scale_mapping 0 50 99 <"$SETTINGS_DIR"/pitch || echo 50
}
get_espeed() {
2>&- scale_mapping 80 170 370 <"$SETTINGS_DIR"/espeed || echo 170
}
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
}
cd "$DIR"
case "$1" in
start)
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
TMP="$(mktemp)"
trap 'rm -f "$FIFO" "$TMP"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
amplit="$(get_amplit)"
wordgap="$(get_wordgap)"
pitch="$(get_pitch)"
espeed="$(get_espeed)"
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 |
awk -F'[ \t\n]*[?.,!][ \t\n]' '{
gsub("\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]","")
gsub("[ \t](and|or)[ \t\n]","\n&")
for(i=1;i<=NF;i++) {
printf(" %s ", $i)
if(i==NF || match($(i+1),"[ \t]")) {
printf("\n")
}
}
}' >"$TMP"
line=$(cat "$DIR"/line 2>&-)
test -s "$TMP" &&
if cmp -s "$TMP" "$DIR"/text
then :
else mv "$TMP" "$DIR"/text && line=1
fi
test "${line:-1}" -gt $(wc -l <"$DIR"/text) ||
test "${line:-1}" -lt 1 && line=1
sed -n "${line:-1},\$p" "$DIR"/text |
while read sentence
do echo "${line:-1}) $sentence"
echo "$sentence" |
espeak \
-a "${amplit:-100}" \
-g "${wordgap:-0}" \
-p "${pitch:-50}" \
-s "${espeed:-170}" \
-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 -
line=$(expr "${line:-1}" + 1)
echo "$line" >"$DIR"/line
done
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 29 okt 2008, 21:00
Den ny "talsyntes.sh" är installerad och körde igen iterminal och blev det tyst .
hans@hans-ubuntu:~$ ~/bin/talsyntes.sh install
1) ~/bin/talsyntes.sh
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$ ~/bin/talsyntes.sh install
1) ~/bin/talsyntes.sh install
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 29 okt 2008, 21:05
Ingen av de klippta varianterna ska installeras. Det räcker att köra ~/bin/talsyntes-klippt3.sh start när r15 redan är installerad.
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 29 okt 2008, 21:12
Fler varianter...
Mycket klippt:
Kod: Markera allt
#!/bin/sh
# r15-klipp4
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"
get_voice() {
2>&- readlink "$SETTINGS_DIR"/voice
}
cd "$DIR"
case "$1" in
start)
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
TMP="$(mktemp)"
trap 'rm -f "$FIFO" "$TMP"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
xclip -o |
awk -F'[ \t\n]*[?.,!][ \t\n]' '{
gsub("\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]","")
gsub("[ \t](and|or)[ \t\n]","\n&")
for(i=1;i<=NF;i++) {
printf(" %s ", $i)
if(i==NF || match($(i+1),"[ \t]")) {
printf("\n")
}
}
}' >"$TMP"
line=$(cat "$DIR"/line 2>&-)
test -s "$TMP" &&
if cmp -s "$TMP" "$DIR"/text
then :
else mv "$TMP" "$DIR"/text && line=1
fi
test "${line:-1}" -gt $(wc -l <"$DIR"/text) ||
test "${line:-1}" -lt 1 && line=1
sed -n "${line:-1},\$p" "$DIR"/text |
while read sentence
do echo "${line:-1}) $sentence"
echo "$sentence" |
espeak \
-a "${amplit:-100}" \
-g "${wordgap:-0}" \
-p "${pitch:-50}" \
-s "${espeed:-170}" \
-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 -
line=$(expr "${line:-1}" + 1)
echo "$line" >"$DIR"/line
done
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Något mindre klippt:
Kod: Markera allt
#!/bin/sh
# r15-klipp5
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
case "$1" in
start)
pgrep -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer |
while read pid
do kill $(ps -oppid= "$pid") "$pid"
done
;;
*)
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
grep -q "$*$" && exit
;;
esac
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_amplit() {
2>&- scale_mapping 0 100 200 <"$SETTINGS_DIR"/amplit || echo 100
}
get_wordgap() {
2>&- scale_mapping -50 0 50 <"$SETTINGS_DIR"/wordgap || echo 0
}
get_pitch() {
2>&- scale_mapping 0 50 99 <"$SETTINGS_DIR"/pitch || echo 50
}
get_espeed() {
2>&- scale_mapping 80 170 370 <"$SETTINGS_DIR"/espeed || echo 170
}
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
}
cd "$DIR"
case "$1" in
start)
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
TMP="$(mktemp)"
trap 'rm -f "$FIFO" "$TMP"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
xclip -o |
awk -F'[ \t\n]*[?.,!][ \t\n]' '{
gsub("\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]","")
gsub("[ \t](and|or)[ \t\n]","\n&")
for(i=1;i<=NF;i++) {
printf(" %s ", $i)
if(i==NF || match($(i+1),"[ \t]")) {
printf("\n")
}
}
}' >"$TMP"
line=$(cat "$DIR"/line 2>&-)
test -s "$TMP" &&
if cmp -s "$TMP" "$DIR"/text
then :
else mv "$TMP" "$DIR"/text && line=1
fi
test "${line:-1}" -gt $(wc -l <"$DIR"/text) ||
test "${line:-1}" -lt 1 && line=1
sed -n "${line:-1},\$p" "$DIR"/text |
while read sentence
do echo "${line:-1}) $sentence"
echo "$sentence" |
espeak \
-a "${amplit:-100}" \
-g "${wordgap:-0}" \
-p "${pitch:-50}" \
-s "${espeed:-170}" \
-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 -
line=$(expr "${line:-1}" + 1)
echo "$line" >"$DIR"/line
done
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 29 okt 2008, 21:19
b
Senast redigerad av 1
Hans Linde , redigerad totalt 30 gånger.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 29 okt 2008, 21:28
b
Senast redigerad av 1
Hans Linde , redigerad totalt 30 gånger.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 05:30
hans@hans-ubuntu:~$ ~/bin/talsyntes.sh install
hans@hans-ubuntu:~$ ~/bin/talsyntes.sh start
1) ~/bin/talsyntes.sh
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
hans@hans-ubuntu:~$
hans@hans-ubuntu:~$ ~/bin/talsyntes-klipp3.sh start
1) ~/bin/talsyntes-klipp
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
hans@hans-ubuntu:~$ ~/bin/talsyntes-klipp4.sh start
1) ~/bin/talsyntes-klipp
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
hans@hans-ubuntu:~$ ~/bin/talsyntes-klipp5.sh start
1) ~/bin/talsyntes-klipp
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
--------------------
klipp3 är tyst
klipp4 o klipp5 talar
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 13:15
Hans Linde skrev: klipp3 är tyst
klipp4 o klipp5 talar
Då fortsätter vi inringningen av problemet:
Kod: Markera allt
#!/bin/sh
# r15-klipp7
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
case "$1" in
start)
pgrep -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer |
while read pid
do kill $(ps -oppid= "$pid") "$pid"
done
;;
*)
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
grep -q "$*$" && exit
;;
esac
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_amplit() {
2>&- scale_mapping 0 100 200 <"$SETTINGS_DIR"/amplit || echo 100
}
get_wordgap() {
2>&- scale_mapping -50 0 50 <"$SETTINGS_DIR"/wordgap || echo 0
}
get_pitch() {
2>&- scale_mapping 0 50 99 <"$SETTINGS_DIR"/pitch || echo 50
}
get_espeed() {
2>&- scale_mapping 80 170 370 <"$SETTINGS_DIR"/espeed || echo 170
}
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
}
cd "$DIR"
case "$1" in
start)
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
TMP="$(mktemp)"
trap 'rm -f "$FIFO" "$TMP"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
# amplit="$(get_amplit)"
# wordgap="$(get_wordgap)"
# pitch="$(get_pitch)"
# espeed="$(get_espeed)"
# 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 |
awk -F'[ \t\n]*[?.,!][ \t\n]' '{
gsub("\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]","")
gsub("[ \t](and|or)[ \t\n]","\n&")
for(i=1;i<=NF;i++) {
printf(" %s ", $i)
if(i==NF || match($(i+1),"[ \t]")) {
printf("\n")
}
}
}' >"$TMP"
line=$(cat "$DIR"/line 2>&-)
test -s "$TMP" &&
if cmp -s "$TMP" "$DIR"/text
then :
else mv "$TMP" "$DIR"/text && line=1
fi
test "${line:-1}" -gt $(wc -l <"$DIR"/text) ||
test "${line:-1}" -lt 1 && line=1
sed -n "${line:-1},\$p" "$DIR"/text |
while read sentence
do echo "${line:-1}) $sentence"
echo "$sentence" |
espeak \
-a "${amplit:-100}" \
-g "${wordgap:-0}" \
-p "${pitch:-50}" \
-s "${espeed:-170}" \
-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 -
line=$(expr "${line:-1}" + 1)
echo "$line" >"$DIR"/line
done
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Kod: Markera allt
#!/bin/sh
# r15-klipp8
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
case "$1" in
start)
pgrep -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer |
while read pid
do kill $(ps -oppid= "$pid") "$pid"
done
;;
*)
ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
grep -q "$*$" && exit
;;
esac
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_amplit() {
2>&- scale_mapping 0 100 200 <"$SETTINGS_DIR"/amplit || echo 100
}
get_wordgap() {
2>&- scale_mapping -50 0 50 <"$SETTINGS_DIR"/wordgap || echo 0
}
get_pitch() {
2>&- scale_mapping 0 50 99 <"$SETTINGS_DIR"/pitch || echo 50
}
get_espeed() {
2>&- scale_mapping 80 170 370 <"$SETTINGS_DIR"/espeed || echo 170
}
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
}
cd "$DIR"
case "$1" in
start)
find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
FIFO="$DIR/mplayer.$$.fifo"
TMP="$(mktemp)"
trap 'rm -f "$FIFO" "$TMP"' EXIT
test -p "$FIFO" || mkfifo "$FIFO"
if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
then shift
else voice="$(get_voice)"
fi
voice="${voice##*/}"
amplit="$(get_amplit)"
wordgap="$(get_wordgap)"
pitch="$(get_pitch)"
espeed="$(get_espeed)"
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 |
awk -F'[ \t\n]*[?.,!][ \t\n]' '{
gsub("\\u[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]","")
gsub("[ \t](and|or)[ \t\n]","\n&")
for(i=1;i<=NF;i++) {
printf(" %s ", $i)
if(i==NF || match($(i+1),"[ \t]")) {
printf("\n")
}
}
}' >"$TMP"
line=$(cat "$DIR"/line 2>&-)
test -s "$TMP" &&
if cmp -s "$TMP" "$DIR"/text
then :
else mv "$TMP" "$DIR"/text && line=1
fi
test "${line:-1}" -gt $(wc -l <"$DIR"/text) ||
test "${line:-1}" -lt 1 && line=1
sed -n "${line:-1},\$p" "$DIR"/text |
while read sentence
do echo "${line:-1}) $sentence"
echo "$sentence" |
espeak \
-a "${amplit:-100}" \
-g "${wordgap:-0}" \
-p "${pitch:-50}" \
-s "${espeed:-170}" \
-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 -
line=$(expr "${line:-1}" + 1)
echo "$line" >"$DIR"/line
done
;;
*)
exec "$SCRIPT" start "$@"
;;
esac
Jag gissar att klipp7 är tyst och att klipp8 låter.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 15:11
hans@hans-ubuntu:~$ ~/bin/talsyntes-klipp7.sh start
1) ~/bin/talsyntes-klipp
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$ ~/bin/talsyntes-klipp8.sh start
1) ~/bin/talsyntes-klipp
mplayer: could not connect to socket
mplayer: No such file or directory
hans@hans-ubuntu:~$
Jag gissar att klipp7 är tyst och att klipp8 låter.
Riktigt.
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 15:20
Hans Linde skrev: Jag gissar att klipp7 är tyst och att klipp8 låter.
Riktigt.
Slutsats: Din mplayer stödjer inte scaletempo.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 15:37
Det verkar bekant. jag minns inte nu, men var det inte så att den Mplayer som följde i Ubuntu-CDn var en äldre version.
Hmmm.... jag finner ingenstans, vilken Mplayer version det är.
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 15:42
Hans Linde skrev: Det verkar bekant. jag minns inte nu, men var det inte så att den Mplayer som följde i Ubuntu-CDn var en äldre version.
Det stämmer. Även den som följer med 8.10 är en äldre version.
Hans Linde skrev: Hmmm.... jag finner ingenstans, vilken Mplayer version det är.
Det talar mplayer om när man startar den från en terminal:
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 15:44
hans@hans-ubuntu:~$ mplayer --
MPlayer 1.0rc2-4.2.3 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (Family: 15, Model: 4, Stepping: 3)
CPUflags: MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
'--' indicates no more options, but no filename was given on the command line.
hans@hans-ubuntu:~$
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 15:45
Hans Linde skrev: MPlayer 1.0rc2-4.2.3 (C) 2000-2007 MPlayer Team
1.0rc2 är en för gammal version.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 15:48
Hmm...8.10 slangas ner nu, men det går väll inte att uppgrader, utan det kräv nyintallation.
Dvs tricks med bookmarks, email , adressbook och en trave filer/foldrar.
Finns det en genväg eller ska jag bara vänta till ett annat tillfälle?
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 15:54
Hans Linde skrev: Hmm...8.10 slangas ner nu, men det går väll inte att uppgrader, utan det kräv nyintallation.
Dvs tricks med bookmarks, email , adressbook och en trave filer/foldrar.
Det ska gå att uppgradera utan att installera om. Man ska inte ens behöva ladda ner den nya cd-skivan.
Hans Linde skrev: Finns det en genväg eller ska jag bara vänta till ett annat tillfälle?
Det hjälper inte att uppgradera till 8.10 eftersom det är samma version av mplayer även där.
Du måste för hand intstallera en mplayer som stödjer scaletempo. Det var så vi gjorde förra gången, vilket jag tycker är onödigt komplicerat i förhållande till det mervärde man får ut av det.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 15:56
8.10 -iso på skrivbordet och bränns till CD nu.
Konservburk
Inlägg: 5919 Blev medlem: 07 apr 2007, 22:28
Inlägg
av Konservburk » 30 okt 2008, 15:58
Nja. Det där var den filen som gick bra att installera på i386. Den ersätter den vanliga mplayer-1.0rc2 med en som stödjer scaletempo. Problemet var att den inte fungerade med amd64. Vi försökte då med att bygga en egen, vilket ledde till att det blev två versioner installerade, den egna och den vanliga. Egentligen inget fel med det, eftersom den egna hade förkörsrätt. Men det var något annat som strulade, och det slutade med att jag hittade .deb-filer även för amd64.
Hans Linde
Inlägg: 3375 Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar
Inlägg
av Hans Linde » 30 okt 2008, 16:03
Så vad gör vi ?
Vi kanske ska över scaletempo ändå,eller?
Det verkar var mer problem en jag minns.