Sida 37 av 98

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 20:46
av Konservburk
Hans Linde skrev:Loop vill inte. :'(
Jag ska se om jag ska se om bindningen har försvunnit.
Försök från terminalen så att vi kan utesluta problem med tangentbindningarna:

Kod: Markera allt

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

Kod: Markera allt

~/bin/talsyntes.sh start && echo ja || echo nej

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 20:49
av Hans Linde
Inget på loop

Med det andra hördes.

i386c@i386c-ubuntu:~$ ~/bin/talsyntes.sh loop
i386c@i386c-ubuntu:~$
i386c@i386c-ubuntu:~$ ~/bin/talsyntes.sh start && echo ja || echo nej
mplayer: could not connect to socket
mplayer: No such file or directory
ja
i386c@i386c-ubuntu:~$

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 20:58
av Konservburk
Hans Linde skrev:Inget på loop
Du kan faktiskt testa den exakta loop-koden löst, för den är väldigt enkel...

Kod: Markera allt

while ~/bin/talsyntes.sh start ; do :; done

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:04
av Konservburk
Jag fick just en idé om vad som skulle kunna tänkas gå fel. Även om det här inte skulle hjälpa för ditt loop-problem så rättar r11 hur som helst till en bugg som skulle kunna ställa till problem:

Kod: Markera allt

#!/bin/bash
# r11
case "$-" in *i*) return ;; esac
export LC_ALL=C
#exec 2>&-
APP="Talsyntes"
DIR=~/".talsyntes"
SCRIPT="$DIR/talsyntes.sh"
DATA_DIR="$DIR/data"
VOICES_DIR="$DIR/voices"
SETTINGS_DIR="$DIR/settings"

mkdir -p "$DATA_DIR" "$VOICES_DIR" "$SETTINGS_DIR"

if test "x$SCRIPT" != "x$0" && cp -f "$0" "$SCRIPT" 2>&-
then
   iconv -f utf-8 -t iso8859-1 "$0" >/dev/null 2>&- ||
   iconv -f iso8859-1 -t utf-8 "$0" >"$SCRIPT"
   chmod +x "$SCRIPT" && exec "$SCRIPT" "$@"
fi
get_dialog() {
   cat "$SETTINGS_DIR"/dialog 2>&- ||
   which zenity 2>&- ||
   which Xdialog 2>&- ||
   echo "$0: missing zenity or Xdialog" >&2
}
case "$1" in
stop|start|loop|reset)
   pkill -P $(pgrep -u"$(id -u)" -d, "${SCRIPT##*/}") mplayer
;;
pause)
   find "$DIR" -name mplayer.\*.fifo -type p -exec sh -c 'echo pause >{}' \;
;;
list)
   dialog="$(get_dialog)"
   ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
   grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" | grep "$*$" |
   while read pid
   do pkill -P "${pid%% *}" "${dialog##*/}"
   done
;;
*)
   ps -opid=,ppid=,args= $(pgrep -u"$(id -u)" "${SCRIPT##*/}") |
   grep -vE "(^|[[:blank:]]+)$$([[:blank:]]+|$)" |
   grep -q "$*$" && exit
;;
esac

create_dialog() {
   dialog="$(get_dialog)"
   case "$1" in
   list)
      type="$2"
      title="$3"
      while read item
      do echo "$item" | grep -qE "($4)" && default=true || default=false
         case "$dialog" in
         *zenity)
            set "$@" "$default" "${item##*/}"
         ;;
         *Xdialog)
            set "$@" "${item##*/}" "${item##*/}"
            "$default" && set "$@" on || set "$@" off
         ;;
         esac
      done
      shift 4
      case "$dialog" in
      *zenity)
         set -- --width 400 --height 400 --list \
            --"$type"list --text "$title" --column "" --column "" "$@"
      ;;
      *Xdialog)
         set -- --stdout --separator "|" --no-tags \
            --"$type"list "$title" 400x400 0 "$@"
      ;;
      esac
   ;;
   scale)
      case "$dialog" in
      *zenity)
         set -- --scale --text "$2" --print-partial \
            --min-value -100 --max-value 100 --value "$3"
      ;;
      *Xdialog)
         set -- --stdout --rangebox "$2" 10 60 -100 100 "$3"
      ;;
      esac
   ;;
   progress)
      case "$dialog" in
      *zenity)
         set -- --width 300 --progress --auto-close --text "$2"
      ;;
      *Xdialog)
         set -- --stdout --gauge "$2" 5 60
      ;;
      esac
   ;;
   question)
      case "$dialog" in
      *zenity)
         set -- --question --text "$2"
      ;;
      *Xdialog)
         set -- --stdout --yesno "$2" 10 60
      ;;
      esac
   ;;
   info)
      case "$dialog" in
      *zenity)
         set -- --info --no-wrap --text "$2"
      ;;
      *Xdialog)
         set -- --stdout --fixed-font --msgbox "$2" 0 0
      ;;
      esac
   ;;
   *) return ;;
   esac
   LC_ALL=sv_SE.UTF-8 "${dialog:-:}" --title "$APP" "$@"
}
metacity_info() {
   echo '
      KEY="/apps/metacity/global_keybindings"
      CMD="/apps/metacity/keybinding_commands"
      PREFIX="run_command_"
      SUFFIX=""
   '
}
compiz_info() {
   echo '
      KEY="/apps/compiz/general/allscreens/options"
      CMD="/apps/compiz/general/allscreens/options"
      PREFIX="run_command"
      SUFFIX="_key"
   '
}
scale_mapping() {
   awk -vmin="$1" -vdef="$2" -vmax="$3" -vbend="${4:-1}" '
      function f(x)
      {
         factor = (a != b) ? 2*a*b*log(a/b)/(a-b) : (a+b)
         return factor * log(x) * x / (x^2-1) - ((a < b) ? a : b) / bend
      }
      BEGIN {
         a = (max - def)
         b = (def - min)
         if (max < min) { a = -a; b = -b; }
         x0=2; x1=3; y0=f(x0); y1=f(x1); lim=1e-4
         while( x1>1 && ( (x1-x0)>lim || (x0-x1)>lim) ) {
            y1 = f(x1); x2 = x1 - (x1 - x0) * y1 / (y1 - y0)
            x0 = x1; x1 = x2; y0 = y1;
         }
         incl = (x1>1) ? x1 : 1
      }
      {
         expo = $1 / 100
         if (incl != 1) expo = (incl^expo - 1/incl^expo) / (incl - 1/incl)
         expo = (expo + 1) / 2
         if (a != b) expo = ((a / b)^(2 * expo) - 1) / ((a / b)^2 - 1)
         printf("%f\n", min + (max - min) * expo)
      }
   '
   return 0
}
get_speed() {
   2>&- scale_mapping 5 1 0.2 <"$SETTINGS_DIR"/speed || echo 1.0
}
get_freq() {
   2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/freq || echo 1.0
}
get_volume() {
   2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/volume || echo 1.0
}
get_rate() {
   2>&- scale_mapping 1000 16000 48000 <"$SETTINGS_DIR"/rate || echo 16000
}
get_scale() {
   2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/scale || echo 1.0
}
get_stride() {
   2>&- scale_mapping 1 60 400 <"$SETTINGS_DIR"/stride || echo 60
}
get_overlap() {
   2>&- scale_mapping 0 0.2 1 <"$SETTINGS_DIR"/overlap || echo 0.2
}
get_search() {
   2>&- scale_mapping 0 14 200 <"$SETTINGS_DIR"/search || echo 14
}
get_method() {
   2>&- cat "$SETTINGS_DIR"/method || echo tempo
}
get_accel() {
   2>&- scale_mapping 0.2 1 5 <"$SETTINGS_DIR"/accel || echo 1.0
}
get_voice() {
   2>&- readlink "$SETTINGS_DIR"/voice
}

find -L "$SETTINGS_DIR" -maxdepth 1 -name voice -type l -exec rm {} \;
ls "$VOICES_DIR"/[a-z][a-z][1-9]:* >/dev/null 2>&- &&
test -x "$SCRIPT" &&
test -x "$DIR/mbrola" ||
set install

cd "$DIR"
case "$1" in
stop|pause)
;;
loop)
   while "$SCRIPT" start ; do :; done
;;
start)
   #xclip -o | grep -q . || exit
   test -h "$SETTINGS_DIR/voice" || exec "$SCRIPT" adjust voice
   find "$DIR" -name mplayer.\*.fifo -type p -exec rm -f {} \;
   FIFO="$DIR/mplayer.$$.fifo"
   trap 'rm -f "$FIFO"' EXIT
   test -p "$FIFO" || mkfifo "$FIFO"
   if voice=$(ls "$VOICES_DIR/$2":* 2>&-)
   then shift
   else voice="$(get_voice)"
   fi
   voice="${voice##*/}"
   speed="$(get_speed)"
   freq="$(get_freq)"
   volume="$(get_volume)"
   rate="$(get_rate)"
   scale="$(get_scale)"
   stride="$(get_stride)"
   overlap="$(get_overlap)"
   search="$(get_search)"
   method="$(get_method)"
   accel="$(get_accel)"

   scaletempo="$scaletempo${scaletempo+:}scale=${scale:-1}"
   scaletempo="$scaletempo${scaletempo+:}stride=${stride:-60}"
   scaletempo="$scaletempo${scaletempo+:}overlap=${overlap:-0.20}"
   scaletempo="$scaletempo${scaletempo+:}search=${search:-14}"
   scaletempo="$scaletempo${scaletempo+:}speed=${method:-tempo}"
   scaletempo="-af scaletempo=$scaletempo -speed ${accel:-1}"

   xclip -o |
   espeak -v mb-"${voice%:*}" |
   "$DIR/mbrola" -e \
      -t "${speed:-1}" \
      -f "${freq:-1}" \
      -v "${volume:-1}" \
      -l "${rate:-16000}" \
      "$VOICES_DIR/$voice" - -.wav |
   mplayer -really-quiet -input file="$FIFO" $scaletempo -demuxer audio -
;;
list)
   cd "$SETTINGS_DIR"
   list=$(
      echo "Nuvarande inställningar"
      echo
      for option in \
         voice speed freq rate volume accel \
         scale stride overlap search method dialog
      do if test -h "$option"
         then
            setting=$(readlink "$option")
            setting="${setting##*/}" && value=""
         else
            setting="$(cat $option 2>&-)"
            value="$(get_$option)"
         fi
         test "$option" = dialog &&
         setting="${value##*/}" && value=""
         test "$option" = method &&
         setting="${setting:-tempo}" && value=""
         printf "%s:\t\t%s\t\t%s\n" \
            "$option" "${setting:-0}" "${value:+(}$value${value:+)}"
      done #| sort
   )
   create_dialog question "$list"
   exit
;;
reset)
   cd "$SETTINGS_DIR"
   case "$2" in
   '')
      create_dialog question "Återställ standardinställningarna?" || exit
      rm -f \
         dialog speed freq volume rate scale stride overlap search method accel
   ;;
   dialog|speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
      rm -f "$2"
   ;;
   esac
   pkill -9 "${SCRIPT##*/}"
;;
adjust)
   case "$2" in '')
      set "$1" $(
         printf "%s\n" speed freq volume rate \
            scale stride overlap search method accel voice dialog |
         create_dialog list radio "Välj inställning" speed
      )
      test $# -gt 1 && exec "$SCRIPT" "$@" || exit
   esac
   value=$(cat "$SETTINGS_DIR/$2" 2>&-)
   case "$2" in
   voice)
      case "$3" in
      '')
         voice=$(readlink "$SETTINGS_DIR"/voice)
         voice=$(
            ls "$VOICES_DIR"/[a-z][a-z][1-9]:* 2>&- |
            create_dialog list radio "Välj röst" "^${voice#../}$"
         ) && test -n "$voice" && voice="$VOICES_DIR/$voice"
      ;;
      *)
         voice=$(ls "$VOICES_DIR/$3":* 2>&-)
      ;;
      esac &&
      ln -sf "$voice" "$SETTINGS_DIR"/voice
      exit
   ;;
   dialog)
      case "$3" in
      '')
         value=$(
            which zenity Xdialog 2>&- |
            create_dialog list radio "Välj dialogrutesystem" "${value:-zenity}"
         ) && echo "$value" >"$SETTINGS_DIR/$2"
      ;;
      zenity|Xdialog)
         echo "$3" >"$SETTINGS_DIR/$2"
      ;;
      esac
      exit
   ;;
   speed) title="Uppläsningshastighet" ;;
   freq) title="Röstläge" ;;
   volume) title="Uppläsningsvolym" ;;
   rate) title="Rösttäthet" ;;
   scale|stride|overlap|search|accel) title="scaletempo: $2" ;;
   method)
      case "$3" in
      '')
         value=$(
            printf "%s\n" tempo pitch both none |
            create_dialog list radio "scaletempo: $2" "${value:-tempo}"
         ) && echo "$value" >"$SETTINGS_DIR/$2"
      ;;
      tempo|pitch|both|none)
         echo "$3" >"$SETTINGS_DIR/$2"
      ;;
      esac
      exit
   ;;
   *) exit
   ;;
   esac
   case "$3" in
   '')
      { create_dialog scale "$title" "${value:-0}" || echo "$value"; } |
      while read value
      do test -n "$value" && echo "$value" >"$SETTINGS_DIR/$2"
      done
   ;;
   *)
      echo "$3" |
      awk -vvalue="$value" '{
         value = ($1) ? value + $1 : 0
         value = (value < 100) ? value : 100
         value = (value > -100) ? value : -100
         print(value)
      }' >"$SETTINGS_DIR/$2"
   ;;
   esac
;;
install)
   URL="http://tcts.fpms.ac.be/synthesis/mbrola"
   TMP=$(mktemp)
   trap 'rm -f "$TMP"' EXIT
   wget -qO- "$URL"/mbrcopybin.html |
   sed -n '
      s|.*"\(bin/[^"]*.zip\)"[^>]*>[^<]*LINUX i386.*|\1 (0.3Mb)|p
      s|.*"\(dba/[^/]*/[^"]*\)"[^>]*>\([^:]*:\s*[^<]*\).*|\1\t\2|p
   ' >"$TMP"
   voices=$(
      cd /usr/share/espeak-data/voices/mb &&
      echo mb-[a-z][a-z][1-9] |
      sed 's/mb-//g;s/\(.\)\s\(.\)/\1|\2/g'
   )
   voices=$(
      grep -E "/($voices)/" <"$TMP" | cut -f2 |
      create_dialog list check "Välj språk" '^(sw|us|en)[[:digit:]]:' |
      sed 's/:[^|]*//g'
   )
   test -n "$voices" || exit
   rm -f "$VOICES_DIR"/[a-z][a-z][1-9]:* 2>&-
   cd "$DATA_DIR"
   grep -E "(^bin|/$voices/)" <"$TMP" |
   awk '{
      size[NR]=size[NR-1]+substr($NF,2,length($NF)-4)
      $NF=""
      voice[NR]=$0
   } END {
      for(i=1; i<=NR; i++) {
         print(100*size[i]/size[NR],voice[i])
      }
   }' |
   while read progress file voice
   do test -f "${file##*/}" ||
      wget -q "$URL/$file" 2>&1
      if test -z "$voice"
      then
         unzip -p "${file##*/}" mbrola-linux-i386 >"$DIR"/mbrola
         chmod +x "$DIR"/mbrola
      else
         unzip -p "${file##*/}" "${voice%%:*}" >"$VOICES_DIR/$voice" 2>&- ||
         unzip -p "${file##*/}" "${voice%%:*}/${voice%%:*}" \
            >"$VOICES_DIR/$voice"
      fi
      echo $progress
   done |
   create_dialog progress "Hämtar Röster..."
   bind_key() {
      eval $("$1"_info)
      gconftool-2 -a "$KEY" |
      awk '$1~/^'"$PREFIX"'[0-9]+'"$SUFFIX"'$/ && $3~/^'"$2"'$/{print($1)}' |
      while read binding
      do gconftool-2 -u "$KEY/$binding"
      done
      ID=$(
         gconftool-2 -a "$KEY" |
         sed -n "s/^\s*$PREFIX\([0-9]\+\)$SUFFIX\s*=\s*/\1\t/p" |
         sort -n |
         awk '{if($1-prev>1)exit;prev=$1}END{print(prev+1)}'
      )
      gconftool-2 \
         -s -t str "$KEY/$PREFIX${ID:-1}$SUFFIX" "$2" \
         -s -t str "$CMD/${PREFIX#run_}${ID:-1}" "$3"
   }
   for wm in metacity compiz ; do
      bind_key "$wm" "F1" "$SCRIPT stop"
      bind_key "$wm" "F2" "$SCRIPT pause"
      bind_key "$wm" "F3" "$SCRIPT start"
      bind_key "$wm" "F4" "$SCRIPT loop"
      bind_key "$wm" "F5" "$SCRIPT adjust"
      bind_key "$wm" "F6" "$SCRIPT list"
      bind_key "$wm" "F7" "$SCRIPT reset"
      bind_key "$wm" "F8" "$SCRIPT uninstall"
      bind_key "$wm" "F9" "$SCRIPT install"
      bind_key "$wm" "<Control>F1" "$SCRIPT voice"
      bind_key "$wm" "<Control>F2" "$SCRIPT speed"
      bind_key "$wm" "<Control>F3" "$SCRIPT freq"
      bind_key "$wm" "<Control>F4" "$SCRIPT rate"
      bind_key "$wm" "<Control>F5" "$SCRIPT volume"
      bind_key "$wm" "<Control>F6" "$SCRIPT accel"
      bind_key "$wm" "<Control>F7" "$SCRIPT scale"
      bind_key "$wm" "<Control>F8" "$SCRIPT stride"
      bind_key "$wm" "<Control>F9" "$SCRIPT overlap"
      bind_key "$wm" "<Control>F10" "$SCRIPT search"
      bind_key "$wm" "<Control>F11" "$SCRIPT method"
      bind_key "$wm" "<Control>F12" "$SCRIPT dialog"
   done
   create_dialog info "$APP installerad"
   exec "$SCRIPT" voice
;;
uninstall)
   create_dialog question "Avinstallera $APP?" || exit
   unbind_keys() {
      eval $("$1"_info)
      gconftool-2 -a "$CMD" |
      grep -F "$SCRIPT" |
      sed -n 's/[^0-9]*\([0-9]\+\)[^0-9]*/\1/p' |
      while read binding
      do gconftool-2 -u "$CMD/${PREFIX#run_}$binding"
         gconftool-2 -u "$KEY/$PREFIX$binding$SUFFIX"
      done
   }
   unbind_keys metacity
   unbind_keys compiz
   rm -rf "$DIR"
   create_dialog info "$APP avinstallerad"
;;
voice|dialog|speed|freq|volume|rate|scale|stride|overlap|search|method|accel)
   exec "$SCRIPT" adjust "$@"
;;
*)
   exec "$SCRIPT" start "$@"
;;
esac

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:05
av Hans Linde
Det loop-ade.

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:10
av Hans Linde
;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D ;D

Nu påbörjar jag Scaletempo testen.

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:36
av Hans Linde
För att utvärdera var hastighetgränsen för mig
var med us3 med Accel/Scale som jag tror att
du föreslog. Började jag så efter reset.
Sedan justerade jag lite på frekvensen (Rösttäthet).
Men Search, Overlap, Stride märkes ingen.
Ska prova pitch/tempo nu.

voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: 11 (17707.227613)
volume: -67 (0.472542)
accel: 40 (1.436820)
scale: 39 (1.420849)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: tempo
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:41
av Hans Linde
Det här var intressant.
Se skillnaden.

voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -43 (9867.984477)
volume: -67 (0.472542)
accel: 70 (2.238985)
scale: 70 (2.238985)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: pitch
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:46
av Hans Linde
Både Tempo o Pitch sänkte

voice: us3: American English Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -38 (10579.860631)
volume: -67 (0.472542)
accel: 40 (1.436820)
scale: 40 (1.436820)
stride: -2 (58.829297)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: both
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:49
av Hans Linde
Tempo o pitch

voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -40 (10295.913574)
volume: -67 (0.472542)
accel: 50 (1.623649)
scale: 51 (1.645552)
stride: -6 (56.535840)
overlap: 13 (0.227646)
search: 11 (15.646820)
method: both
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:53
av Hans Linde
voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -61 (7230.409128)
volume: -67 (0.472542)
accel: 74 (2.427015)
scale: 74 (2.427015)
stride: 0 (60.000000)
overlap: 0 (0.200000)
search: 0 (14.000000)
method: pitch
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 21:57
av Hans Linde
voice: sw1: Swedish Male
speed: 0 (1.000000)
freq: 0 (1.0)
rate: 28 (20675.434566)
volume: -67 (0.472542)
accel: 46 (1.542392)
scale: 44 (1.505211)
stride: 0 (60.000000)
overlap: -1 (0.198007)
search: -1 (13.860628)
method: tempo
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:01
av Konservburk
Nu känner jag mig tvingad att ordna något enkelt sätt att importera de där listorna ;D

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:04
av Hans Linde
Nuvarande inställningar

voice: sw2: Swedish Female
speed: 0 (1.000000)
freq: 0 (1.0)
rate: -61 (7230.409128)
volume: -67 (0.472542)
accel: 80 (2.774768)
scale: 80 (2.774768)
stride: 1 (60.592496)
overlap: 3 (0.206072)
search: 0 (14.000000)
method: pitch
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:11
av Hans Linde
voice: sw2: Swedish Female
speed: 83 (0.334885)
freq: 16 (1.139546)
rate: -24 (12550.254574)
volume: -66 (0.481158)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: none
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:15
av Hans Linde
voice: sw1: Swedish Male
speed: 73 (0.420677)
freq: 19 (1.169311)
rate: 16 (18530.481962)
volume: -66 (0.481158)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: none
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:26
av Hans Linde
Jag måste säga att jag hjärtlig less på den struf jag valt,
men nu vill det inte spela den igen ( ,efter ca 500ggr).
Så jag tar bort en bokstav i börja och då funkar det.
jag vill inte byte eftersom dåblir det svårare att utvärdera omdömmet.

Det blir ett fel du får fundera på. Det är rimligen ingen praktisk-fel iaf.
Vem fan lyssnar på mening 500ggr, är det då "man har blivit Linux-nörd"?? :-[

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:35
av Hans Linde
Det gjorde ju inget. Rösten var us3.
Jag blir lite trötta 1t knatte o fnatte rabblande. >:(
Om det blir tjänst där man ska tolka walt disney, så kan ju säga till
den tjänten kanske jag kan få. eller?? :-\ (lika sannolikt som en
röst från KTH) :'(

voice: us3: American English Male
speed: 74 (0.412029)
freq: -8 (0.937698)
rate: 30 (21061.471541)
volume: 1 (1.008033)
accel: 0 (1.0)
scale: 0 (1.0)
stride: 0 (60)
overlap: 0 (0.2)
search: 0 (14)
method: tempo
dialog: zenity

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:38
av Konservburk
Hans Linde skrev:Jag måste säga att jag hjärtlig less på den struf jag valt,
men nu vill det inte spela den igen ( ,efter ca 500ggr).
Så jag tar bort en bokstav i börja och då funkar det.
jag vill inte byte eftersom dåblir det svårare att utvärdera omdömmet.

Det blir ett fel du får fundera på. Det är rimligen ingen praktisk-fel iaf.
Vem fan lyssnar på mening 500ggr, är det då "man har blivit Linux-nörd"?? :-[
Jag hade ett liknande problem för ett tag sedan som hade att göra med speaker-test -twav. ;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

Re: Talsyntes: var finns programmen?

Postat: 16 okt 2008, 22:40
av Hans Linde
Nu gjorde jag inga Frekvens justeringar under SCaletempo-delen
kanske jag ska göra. Hmmm...
Okay jag tar det jussterade värdena och justerar frekvensens för sw1, sw2, us3.
Föresten tyckte jag att us3 hade dubbla stavelser ibland......men.