Talsyntes:____"För Folk I Tiden"

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.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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:~$
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

Ingen av de klippta varianterna ska installeras. Det räcker att köra ~/bin/talsyntes-klippt3.sh start när r15 redan är installerad.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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. :)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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:

Kod: Markera allt

mplayer --
Hans Linde
Inlägg: 3375
Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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:~$
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

Här

http://ubuntu-se.org/phpBB3/viewtopic.p ... 80#p250376

Visst var det så att det blev två Mplayer installerat.
Det blev en konflikt eller något?? ::)
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

8.10 -iso på skrivbordet och bränns till CD nu.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Konservburk »

Hans Linde skrev:Här

http://ubuntu-se.org/phpBB3/viewtopic.p ... 80#p250376

Visst var det så att det blev två Mplayer installerat.
Det blev en konflikt eller något?? ::)
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

Re: Talsyntes:____"För Folk I Tiden"____[HÖGTRYCKSTRÅD]

Inlägg av Hans Linde »

Så vad gör vi ?
Vi kanske ska över scaletempo ändå,eller?
Det verkar var mer problem en jag minns. ::)
Skriv svar

Återgå till "Experimentverkstad"