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: var finns programmen?

Inlägg 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:

Kod: Markera allt

~/bin/talsyntes.sh loop
Testa även detta:

Kod: Markera allt

~/bin/talsyntes.sh start && echo ja || echo nej
Hans Linde
Inlägg: 3375
Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

Inlägg av Hans Linde »

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

Re: Talsyntes: var finns programmen?

Inlägg av Hans Linde »

;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D

Nu påbörjar jag Scaletempo testen.
Hans Linde
Inlägg: 3375
Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

Inlägg av Konservburk »

Nu känner jag mig tvingad att ordna något enkelt sätt att importera de där listorna ;D
Hans Linde
Inlägg: 3375
Blev medlem: 06 sep 2008, 07:46
OS: Crunchbang
Utgåva: Vet inte/ingen utgåva passar

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

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

Re: Talsyntes: var finns programmen?

Inlägg 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. ;D

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

Re: Talsyntes: var finns programmen?

Inlägg 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.
Skriv svar

Återgå till "Experimentverkstad"