pax_global_header00006660000000000000000000000064125574443310014522gustar00rootroot0000000000000052 comment=c3de3654b25dc85d411eae426f04f73665cb2ff2 gespeaker-0.8.6/000077500000000000000000000000001255744433100135035ustar00rootroot00000000000000gespeaker-0.8.6/.gitignore000077500000000000000000000002311255744433100154720ustar00rootroot00000000000000# Compiled source # ################### *.pyc build/ # Language translations # ######################### *.mo # Backup files # ################ *.glade~ gespeaker-0.8.6/.tx/000077500000000000000000000000001255744433100142145ustar00rootroot00000000000000gespeaker-0.8.6/.tx/config000066400000000000000000000002131255744433100154000ustar00rootroot00000000000000[main] host = https://www.transifex.com [gespeaker.gespeaker] file_filter = po/.po source_file = po/gespeaker.pot source_lang = en gespeaker-0.8.6/README000066400000000000000000000040301255744433100143600ustar00rootroot00000000000000Gespeaker - A GTK frontend for espeak Author: Fabio Castelli (Muflone) Website: http://www.muflone.com/gespeaker/ Source code: https://github.com/muflone/gespeaker =============================== LICENSE ======================================= Copyright: 2009-2015 Fabio Castelli License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ============================ INTRODUCTION ===================================== Gespeaker is a free GTK+ frontend for espeak. It allows you to play a text in many languages with settings for voice, pitch, volume and speed. The text readed can also be recorded to WAV file for future listening. Since version 0.6 it supports the speech synthesizer MBROLA for a better speech experience. ============================ INSTALLATION ===================================== The following dependencies are needed to let Gespeaker work: - python2: all the whole code is written for Python 2.x - espeak: main speaking system - librsvg: needed for SVG loading - pygtk: needed for all the UI related code - python-dbus-common: needed by dbus interface - python2-xdg: needed to store configuration - alsa-utils: needed for aplay player Optionall you can install the following to enhance the speech - mbrola: for enhanced mbrola voices support - mbrola-voices (like mbrola-it3, mbrola-en1 and so on) The installation is pretty simple, just to execute from the sources directory: python2 setup.py build sudo python2 setup.py install This will install all the required files in their places. =============================================================================== gespeaker-0.8.6/create-translations.sh000077500000000000000000000004441255744433100200260ustar00rootroot00000000000000#!/bin/bash LOCALEDIR="locale" [ -d "$LOCALEDIR" ] && rm -rf "$LOCALEDIR" mkdir "$LOCALEDIR" for FILEPO in po/*.po; do ( FILEMO=$(basename "$FILEPO" .po) mkdir -p "$LOCALEDIR/$FILEMO/LC_MESSAGES" msgfmt --output-file="$LOCALEDIR/$FILEMO/LC_MESSAGES/gespeaker.mo" "$FILEPO" ) done gespeaker-0.8.6/data/000077500000000000000000000000001255744433100144145ustar00rootroot00000000000000gespeaker-0.8.6/data/gespeaker.desktop000066400000000000000000000012361255744433100177570ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Name=Gespeaker Comment=A GTK frontend for espeak Type=Application Comment[ar]=واجهة رسومية بإستخدام GTK لبرنامج espeak Comment[bg]=GTK обвивка за espeak Comment[de]=Ein GTK-Frontend für espeak Comment[en]=A GTK frontend for espeak Comment[es]=Interfaz en GTK para espeak Comment[fr]=Une interface GTK pour espeak Comment[it]=Un'interfaccia in GTK per espeak Comment[pl]=Frontend GTK dla espeak Comment[tr]=Espeak için bir GTK önyüzü Comment[vi]=Sử dụng GTK cho espeak Exec=/usr/bin/gespeaker Icon=/usr/share/gespeaker/data/icons/gespeaker.svg Terminal=false Categories=AudioVideo;Audio;Player;GTK; gespeaker-0.8.6/data/icons/000077500000000000000000000000001255744433100155275ustar00rootroot00000000000000gespeaker-0.8.6/data/icons/alsalogo.png000066400000000000000000000051161255744433100200410ustar00rootroot00000000000000PNG  IHDR~)bsRGBcPLTEdBECuzuެ܆hph)+*ŝRVPҼ585`d`V tRNS@fbKGDH pHYs  tIME#RtEXtCommentdrc@gnu.org)d 8IDATx͜ ,WP7]?@B6w:i|1Z!|>eq1 8Kb)͉P,+c#bYUw]WWYF<82er$4 ?],;F='/>0X۪{F*!T?>~wqh6?_Uhx׍fo x! 2L"R nIhٽ'%+-Ϻ"_EW@'$/5(u }3 LVBO#`/ʻOJ^V{иk,fl>&@NR"\^v 3Jm~xCUpI8fI ֩il6ks%na * ݬZR0C"ԩT\lg.HZ匐Ŕw JzEPyv;EsZOu|2q HSJfp?b}hkoFmi7H,`BD-z\}*C\>y@#5Ǧn^(Ȱ"/ HG8pD^\N;ls"2P$!??~CG@cGÞN PK ›"ffl y9@\!HUO E \ b' FvJ 6&h~BV@\R~o"~ lB_٬3hO ==ר.v>("2@!1+e6I~}X A"=.Z-;O`~9!lI<gC"h۰9fX"|a@ c&chBp_*4m͔#`-Bn'\$+>ɟK"5᣿> ܌AA'[A,(#2"y K x&8BqD A% 0`(s$ o_đ m/v(2$*~Yܻȁg}@bAt#Cs&JX_ A’b>`RU}R1Q0 @3ڜbC!!#'W B@ "MNyAĺC;S AMNQܫAEFQ@0$&"r>HR{=wT%n9hlij$6B3É@DDT*"#^A ]-Չ3Wwb p0  ˥jc<p| 6\=r?‚&A |1#GbȞpHܠ K{!Kbp?7[:o߀ yiy82|Ös(ZA:yUZc96r>-Dex߸wcC*"mQc(˞;tҪod"Ob*Py\qÏcfLpW3KdPv5`4Oƞb*v3L$ġs0d9T,-;Rw6m`!eom}cQ^./|SsE"0/g3_5{k\/j\ߵR}Z2YjU@M6#g2Yxhַ@_ug] ¼ BñڭXO9ja[W9q<*~fx|޻~,"+FX,cEX1K;x>:=JzJ}O|\ J€땇ycr_z"v_@S8MLV)k]kM* @B׆5W8N4p+JrCJcc'Hhh?H~TM.|{lFloj_ku#i6@ݞ)t~Wl*~.xooO2@W3\d!z8d.|]X*:G2`f UndՈrsvVѼ)SbŴ,U ]Zk1o*,*PUآ;N]lFGۯȗ]*LN~sS8uFv'TZc5V4bMh0!'UN9K&T 07;ucdVqy`UDOm \ _vmnRч)T&JVc5b*Hئ @Y\$H _/˳) "YwI=}Y7˟v-cMc+VvBN,a1,OQsX![YTqQBj[-Nj*fVk-rg1)у|SoR_9ޒXyxŲtubm=+_~hmLBύ37{> BSKhMUu5HV/ʕ9T$-ȁC)+@<Ú!=Du!&*k "*>Reࠫd#UC ];:+Zz~yv%ye-gXYפj)ǣG!0e./"՗byuwHq["Ajh[1RoϞ钡,hD w[+x3|O)lIJW(WFTj VLm k,ERPJ9"w(ՍUp|}O"l"n`k-i`w3 \ Њ<3/RPb1uzh{])H]h`#Q$F[>ZtXkdt}fH8+rڴN p zZ[l]MZ ,U5B W]$jm˃UcِR@7eң;;IENDB`gespeaker-0.8.6/data/icons/gespeaker.svg000066400000000000000000000471341255744433100202270ustar00rootroot00000000000000 image/svg+xml gespeaker-0.8.6/data/icons/palogo.png000066400000000000000000000141631255744433100175230ustar00rootroot00000000000000PNG  IHDRFFq.sRGBbKGD pHYs``f3tIME#-nIDATx\y}kwvfwgfKSHZ!i%# q!'86SNc;RP88Ta2\ @VJ+ 'C{i53{}{7ݳPHJlu}usRwxeWp1Nw `/\k6bj8YT{d" Jew%oТz=G{CC#6llCsS3Q^^pc#5\՞u1t:Coo/?iI_ א LnY{-gšC ?@ 6s҂Gyeej~ZYf}ͅ](qybff ḥ~܂~yk %Y Pq<4IY ybJKJ@fd\ҁy8t}/Y`JTTvӉp$B7\Ot1 |~6eGV9s}}}k|bqqQ3ظqb5ÄGa (MHEjA*A,yV8Xyۃ8!S8HjEUXL&.-ύƛLK  gtz ,!fp֛$Gpw?mXJ%3ᆪJDdrA`DkZo{솇:Sh{.VH锦ӹԈPPig?x%PT^/⺝_W:/` IQb8ĂnVWiDd)2G[Df%\@:_e/=;GxŏcA[χ$I*QJHđH$1ekmڬ=#c*fKkQq79\8[E1 t"ú]`0zDx6P)T4ƴ·1Վxdtt2)8'4'ZhL[*șwse1߉AyŜGfۧ((fآS_2; oS 4`byi]^ms?ɘyѼm G Rk?(nzIԮޚS6O9݂s#CC-5kn6_:q ,p'sW LIJ'!zѸΜay :H ^/J[!XL3 l >7^X'_~ZD^ zCq48ǦVEC谡\ްū́xn7O7eKϡIGP?ge5 FsO|U f.R޲ vg}更-6g!?[1Q^h{uv3s _w3\Ŭ C Q1GYC-E-BdчRyqSE(Xt2~FpypNp& S!'1uxi#35+oDO@LVJqQ8ڕ jNo%cObвpYkVes839΂sM}IJk}'@[+[{())A~~lyFq0Sੂ5ϸ;wyeVlOrf^dQ |UŊm@a10Uoki[Mw1}t3CFg (McD+[ު-^͑¥ppWTV+χ<,<:@h\tg3&m 2dup*?Z~pp<PRVZmS0zbsig20<8k% W`\::U_,% Ufedlּgc$tl^ j`A &,X(K2(:.˗l,)(⑹Ekwchlq8O(+t &V[3Ъz_P%ꀲPp_ N@ 8*S&>9nV3д]3o0魂 BSc#1fi^P(TO_B 4PbALSGp K4L X@Z [jWgZ]B@ݭuT.kAss3>A.h[J@Rf R:7!ؼj @^8B-OupϱPJQXZgi4MTIWT& ,2(҈s(qԲ h!7x_\"Pp`/<fjCWt2.KXp8@(0Y|3bӫG&3I"A)|&r0qPT!DVpp=PѲIy܀ +9ߎKjQPRt2鉋H7,Dq5`OLcKyx^0wgtd-S LKNagv &jvD!2= L(So~=M}eд H)Exz eP1K!TaroI*8@/ca,.[w R.˨+opP(0(‘(Eeڕ RJ(b }_Ŏ҆u!D3 :%FMv4ݪYu#( ų <T"bٴ:;hhh@ÎMG}M>ڏςh|7lnFU3Am6c`5}B(*Z6z卲 kw1L!,DIM 38:@26JuEN'`X Ic>/ݲ}U!~!掯㩱La 5(1Jޅ p B :~|t%-mUbs % Y6b,[L|s:x1+m`)H i ݋3QX7ޭFXpY$C ز _gx;j`"k |v&-ҹkut "Ά ڏXh Vn[u<LJ^@_]{ Ji$*$l 4wVsO` YFa-3>lY4pG ;x FPG^?yhx^8wxH%㩪G yZ݋Y@T eL}T]oy$>|hiWr٦!Qfω:#-x6-C}Wl?$ppem߃w> ilz-P e(՘A F[05|G^7L w޿r\yZH)=` )I- Ԫ{]xIԷ pzpv^I2U`d=h>$lnNصXev+h;E ED<`Ϡ*J+6fbbpiy@OEE9vHf ޽j3JTO-$8޺)2U9‚/Tc+'.BlٲT o$Iu$I ׇfx=^LLNh蓺lZ3 -'Q.%Urb<2@a4`ijmt׭[Ap)ZG)}Rko?L*pB|K$:;Te=Ywap\(g)OiB>d2}p855(/.+^pՐRJfWAVEfmt "VDdatafxxF4$x j4(jBjBjPPxPPjEx.\2Za 4j4m (%BN 64xBEmh(P(_ \LBmj4N\\mv\vx{B(_4jxxh Evh*L<6XBxP_E2a4*{ \x*RRN*N(  4{%B(%{v$(E(d T\oB2Z(o(\%T$Rm 0Zr EJ \Ps F(t4f\PPx(P*ZPj 4" f8&SF# ')+)2! lﳫzXڙ2;߬?[051*OfOl@QV y@(zQ_ (|+?YDskM >&CSzTG|%%7"9 h9E0; ,!0".  S TXr $6tR{n :#$):3K>LII@:81eVل'sޛpǮŷⶍ:ׄݿ]}Tcl-.6#8P8` HR#4*`XES^e)w%*BB*XLe5D\d$M oQ 3 [%bb 3 X7  | /\hd\^ت-v$' a7")$@*3+>F{D*;26\4H, U!#1&ɢ^Ի(,PE])) V_+.E.$" x `EB7 )>Z jY+PA~HclEUO&Q/~7 0WQ(g g  ImQ Fڧ JH D n/"(p1:NA=40->&-1!ptkm:qB3" #w%Wa;m \ bs<W| Doegoff?/T&;^08x.-TiE+6H97j04S#>#za.1 6xoh>1WE G Z&F.+6M92*F'F$Nz_܅-&{e:Ҵ/)C[Zjx~ &^(1z:})k/f? b8~Q-4e 1JM-w^0U5k/kZO.9+Fl S5 } e] 4(gE  h  5%+<0+l#oO4  \ҳ٬&9 W UE _Yim{a T)KVtV0}12w%6B+<\ B|_3mLm R ,mj]"Cv(a]:N ~  9 - Q V YPk]hH ) 0 aYJR^;p~< f"I bz vcao^~gg& /RTRk!x d*wHX2 >F.lH5'/wMYG :  #qZnzz@1gRm&>:Bzr45&B/f>0VQ#SZ v'IPP 8: zA .VsN2.Iio{+ f-d},i: D{ ]}64K8UiD-{?a~2 Z e},_fp{(+IXO!V5 +||`.9m.P,^vM  =J:9M , `B!@ @ Y  l_qZ$m%(W{/48<94]V^(qHDf i"7.r wg:3zM1Q&vb 1$[[    cI  r~cVX$sY"aK[i@eh(6',fLA|.\Zy3u l>tmq-e1K L / ( 3  iv "N$w K:Kr -ma\V =$6" tL#n$%$ !m!'+&($""@#= "Yݡݒ _ߕ0"!ޘߩ9 XBP G y  C w W e; J;(w7'#0"6j)A @v M_gI(Wa-8 q d PR,L T :n| 3 %173 [ e,-G!0$#plx@܋mqeO)+ 3#\    ~^)i> vQ@ .AO&Xrg(qNn7G~_[E0On~a0\hPnUNMS  Y -[E;F h a*TgcW*!!X r $o ~~L7R AOsut 4I _) |Kto S  )7PJ OiN6C Z O|br+;cZbb>G+,N*wr #9fl+[,`Y9@# ZRy Q4^MMg m` N [ t  ; 3 %B]Yf4cL=<^tLY% eB *|3Ta1{ < V"x,f}v\9|=\( k-m?VY.eFUzrv <oN9!k)N>,'%,  p (  R t  = ,At.^WO*yjGU(%#^/O eD< Z[Ap5Dr< I 3\ Q fJ T# BZSs}pm`/XC.92c`']J@8*1Kau'Mj g+rH) H }Xx|!Bn0(yUcI&DBl 9 R ('f>2nr| h   + x"0 [WRR8Onlf$8NY'q<)m  t5wO8/*3OevGf~! w:yI$[ `nt0IVp9"yx2B4FnQn1 3 s  ^05>b U  <*~=-Qfp52 <~0[hO?zI|Ncg9 3ST$=l.yT@5+2I_r8Yre'm>D+#ZgpFmck/Fy<^dwf` s  M % , ~ -  =,>+ 5CN\)M,"Ur/xGo@N{ ^1.dZ%>SDr8 \#rP:, &;Ql*Kr u?U-k _vs'?LvL%rEB5CiWv  V  jM.?b J  a/%l>4qB; 1 j"IZpO@lQwRiqA5WU&Cl*sJ/.GYy)Op,-  L S-c  Scf'6HmCix11<1T .  \ - P 8Wn # k *vL JP#S# %UM^O  @ru""Yb+p\RF6#"1Gbr 0I_wsI}S5@2DF*|FowS-`5l{5t \ <  ' / c v  f2(E:?S>}Ac!fGT>,GvP\z M:._Fv]Rl?j\RG<24;ALYi|!8P`rqS1hP1h_dv}gSV0bx!arvOJ-:m@'J8,  = R : Z /B}3ld77sl-&DKfCsI|gLQwi0|-^{^ypZRUckfW=x[5sj]QIJNV`hs+>Pfu}lZC* jS6+^pz6dCh`T~W>xW3TJz6 ~ dW|onAFWyOyz^Z&e`@ bIswzkMJt=A5(.9>5'r\<~pbXVX[chpv4Xx)6=@A>9-zW2s?cF) Bv +\"E^nvv<i|0Iu}CSa*&)q7\,%x!-`( `!Mv'-e5(>OmeR$x5YRGESeqcKM 7;:xDzz+V?rBs4_ +H_tgBH X89(r+@Ap:8s!?z^NDUK$ N : ,}%X(!W|bd?0UKeRD1)=,_iSN-VgYl0c&WVXjXnZE2%"*9Nd},WN"]5i#Jo_&=Ju o!Y<oU /\k%}w8 p" i 3 y |  y9uM=pf;b)l"oqyk =APv=B~AGBK0#+ ulCR8"Ag*lE.x O8?c3H^yL@" vjvUV=e Hs5{\R *  s ){  f/ iXh[}j,'13&SAc^S-Fi f K f " " =Fe)IrUl6c$c#C!S>8 ?L<~piHiOW1|}  P k - b L   L@PQ>3dA`-qt 5=z1 I W)Dw*s,{n_10& m X`!|T CE)} Dk^.W%urC } Z % Z] ~ IB4cr%o7Z^`U}p x }Sp ? L"3vjS$!/   ]  ^97!j"#$|##1#! :Y Ww)W9޻ܘI3D߿r4. q ! m ; D!H E > cf^l51F.I p4$Xiyv _T ) t-qjienNug _qcfj "$]mFG rCja- /HH?f4E Lk n%)+---$- -+*,)2% K{bޣEҸэбvmG@Gliq< v   i  dx:KwTwFpNu E   {I6 DnEC !B HjeoOnY8!CIM= r}`G' NV y$" 4bA)[X]$[P~*sv!'.5C8.98520!.+*& G xn۠y}ϊdHQYuQۢ(& c* 7RY!yQ%/7IxVTh D 'P- O z @rgF|O8 r<rA5R}Jl*Cq_.P UUy7BY @m@x C<Z]m N$-;8A3FPG)F?8;3+&%/"F'K1k {G(k~ͫѿ"H  k$"8 :U 8@M^kV4{>e g >w\s"#:SM+y3&^rY<xn/<3uJlqT}5*@x% Iz / 5g xoOhg `$\W@0A8$5DL~QTTOF>0(' %o*b vx *nh %5FOZ `pZJRB[0*+&"uBiԤ&^/rTSn$*%"y~ 5 FG `#Empe FzsS381XKY_\#S=+,(k)$OP߫r (#Sab/c|G$;*#U%V1 pk\\+6Ku d+}e> z5sFZsib%[DdrrFY'[h5 L G`i_ =TlA(k nHk WZh% M a:eJl"إݻ,;qG1U|[WN;(%w'"z=l7 !l5خM0^_-VF #R'h!'8)rIh VI=ebkQ_ +-w?N^1v~0n1G)=0L_0o_`h$5D|%x{sW?5_T'e uZ `Y;\ H [OsS6پ߱t+R9 DDQVRI5q%#$6MKX!y1a6P׌ų Q|"$  W,*1O$\yQeY8 ;lH=*m/UuJgfQ#dZJ8s/) onD,=KT\^rTYH w ]-EX '5jZ%3>KQOHr7@&"&# 0ud zNNHYlOp6GV#p) RN6 Wcj b[-ua a 6)J.yN4vPS&*-PrH B)t q` !9O:nb8qu/o 3Yv)B #rnc6@PS(1Ye 8%~,5;94(S G)FUEhvec 9 v ^ G B 7u#*= 9 (K_6 Z`BUw}NA)0&4{[;K*a{J{8u"a>3?E l l  Rv3  * ;^<$KE"(/0-&35l/x  pYn~ n#8 [: OPxmp 6 `qVOR1 l^Ak[G_EFB%0N/boK<5ga.Oy59SfxY?dLK Y~:?   SiWh"}WRs\[6a(d#"" dIj `EMTEEx>"0 ;V;S  t 9 8h_z\.,P Dft _rH,ijYXj a*stEL{`*gLKmAIn\>w,O uSk: 6rB;]Xp 1 ^ ,*{-pO  m 6 MdE+'ew,_N7sD ?VXw 56N}YUl1iWzSNu gyZqHl"UKePURcn(Dm=QB( rJWB^`;?&\&D e  ' /  w3g%j g % wUe% 6 (v]cE06qS#[|^bZj(96c3l*7+7albNcDcVMP*Zj j+lE>NE~h~:Kw]{tkSPMUQa/1#=GLi8m 8 g 2  V^W-M*4s q +Z+w ud.L9$X}| q,zBqjz3~w`Z`ZVwo[\| [SPsI3LEPr/-i@Iu Sp."| [jI#!Qir : & \*~v :q  /lHxs^i f0p5geoT^B$lvfg$ Dv"IJ^duk{"cbgT$J`Z\./X'b@9f\.34r-f@3?_^ H Z  Fp* KzX E Zpdp>]H-_"Qb3eObWj-.&@9FQs1zf [ w,p~zfQ=:Yt&5RKe$gB&@4 |j ,q+EOyWG)moDhS g w wa; K Z>?)m_KM3g*o# ML9r,+F/{?4cH!2,,Bi(SgCWACo&C:)5s O fyF2BoG`ko}^W{[5Vh6~# w "|e"~sf ( Y U X oy  : TxG.3T;(_=E#ez6E DWCyp/iI=Jt]qkjv%" j"2L{ s%|6]e NFQc* 4aQeW(a}X  fCqV(WY>A4: 5   Z U 0   d U F b ( &0O,0 3Qzy}Stdc7 @mSugXFjZD-?-5clqx<v]'GL?v5]+dgxxF4$x j4(jBjBjPPxPPjEx.\2Za 4j4m (%BN 64xBEmh(P(_ \LBmj4N\\mv\vx{B(_4jxxh Evh*L<6XBxP_E2a4*{ \x*RRN*N(  4{%B(%{v$(E(d T\oB2Z(o(\%T$Rm 0Zr EJ \Ps F(t4f\PPx(P*ZPj 4" f1Rn ( d r  er>BCy=xeuGdg1[:=Z[|WPNSlIk+'=C7ig!*~)%)Pw)4T[u  M!!%8W U \"vQ%,G*@W lR+pyL[Xܴ]cPݪ:ܓP p!kf d aA>\]?.A4bH6y4Zpt8IK9is9J-DE&MlNk'smDDJl \ m p @BKpIYPdU:BS'Hssr(4"-.) < > T:**$ &H25)$aY &7D $)NBxL `Ҭ#>Bpg y8YM $n  ]  a3b& 38D2zy}#g{'Bi ]A N([~%+CQ#qB]oC ) "9 M2^R3!~N _`OYhEuc'6n9*2,%i&bd}/m5=0(u"Y'4:/n8.b*5;JE{2R`ܛ:cTՁʠ:q2   }a D! +0{t=QJD n 8DS;FY&1wJdtQ742EK ?)_c < jY !2! f  +I- _ tmKcCYmz y+66V-E1 y 13-%!)G67) Eк.0?R?T k'̴ͥݱjӳ3T o& g   R&F T oeunHaK?U=^;fA 2Q@gI@rE^De0<\09qty Z U x^fwcJD.a9  y k|h|Z&3w4>,%m:.2S,)%_! '3a6*lp ?գτH )0rM]VԶ>֟8<ۇ؃>)d  X `q, 7Wb (Gsc  wHfgx 8?1vqVD3y|?TL/@2Ir{y[  Y $.!cE7PkVP) dZ nxoT y'22)C  #.]0J+$$!|'23{&  TTcӟ )J-7*d1ֳ̽ފ~Voޕ]oG.a؍LH{(\ r 1O WB^ h/;iybG):#-Jz7.`Up,]\WjG}^[g.Ym(]Q : T k 2EYt[ |:-"8O  io L-1*DR74$)80+.% #,2)F.f ݠҴ!- lXi w[ߙ5.mZӡPc{92:  d I }LUZ bmb s[B .EZhke d>'F]]aTi &i j*O 8cQfhgE'p  ~nR2rAY;.3e{ yqXMC)M ~ sg''  PA5 (o.+&!"(+!#) OGbN$\/xo&2۶ٰ(Y_UB[#Sw& 0 &  r 9  D P F 6j07.`gB]AtU%2g#FHOG-)<@?=X`^J et5jwLA"NW`Lkw0$f|tZ{b N3 _ uaSF ). n)5*['#J # {b ' KRY rPm޹ݸ9`DIU _2M v42Vv.O,b!  L YX'(vDh>sab3,Z_,%g %";zT:n/2K#Ra-?"rXRNz/   p | )+k |o"$"  &Yw 9K 4HD!ޱܐCx ){B( M ! ]v  K-SJoK5"i79)1nH~&<@A5?lW"(685456Cv;N~hhO$/I?sw/(\weg9ok6+ b b  m 9 . / [ 0 F 'iw5#[  ="3ߙ@!qu(g^9]wa;0 L zr 2Tqq4m6m*X}!,. <VxT8Rhw~ita1e >c$%(JVTC1r 5  ' n    &wuPx  jwhG ]dtdXh4&F ]F>2ey\T$~ *[NL8{^du-\It&7[y 8h'-% 9Wtd}1w3bRsQq]SUBE( j  a X mAU :AnQ4>4U ,r*Uz uZ8 6T5z 4rHz$ii% L8 OIqsaD) -@X[OJE@8,&.6Y{@}"Q>6uW"yS%W!5:S2C}u2l.6i i>!r}*)qS>iBeg*qP%:)%2:6:CWCq-iFiW6_C}eK%i_6K2.\T.>yF.yFHcll:-PP\_6.i%->S**P-K:i6>\P->_2l*\!F lS2.yKl\q!z6aH}\-WaP!u: u\u%\ud-qKi2K Cd"_>q>q*d}%ild}Kd>Yg>mTKW>r yi2WFW \"q:>qi2C_Cai -m'BF\F\;d% )d}\}_y-PPq CF 3-\\ )60'|Kq5JWzj!5i*iC6NHy WP\%q_\!CyL*ma6qHK_y@2gCP!%iWKu6! dy=ToPC\>SCzt%_._6};Wi}m dNa  o\l\iS%:SrHJ%lu!THS\lq\}u}d2my;t6Wml"-yyCF5KFrPT [J!)*5de*>%HWq2S;^SjPS-z"%TP":*Fo!iH5>5%F\)!C)a>262 lW-q.W2K! y\i:%gW@r6KPYP:Ka g)-%eB*H}\>C@yP Kiqu6 qK :l2_Kg.z}5.B)Qz*q:8mP-% *HK\>i}-Pd}dl\ :\i_2:*dW2P>62\CBm%g Pu *5F:e"}u'-ur'__azK6[[F_C[T \2!H[6C6dCWKW >2"dugr-::C-u}T- %m6KC d*W\23B>C_grHSCTyS.yBWWK>}6_"z65! K}}6KHWq\y}qq- umKydH0q8\-oW}l%J KYc u};\t_e*i@ u -di6}: WK:a!"> [Q!V.}CK 7v.!% pX]o\cL|q\(:'0>IV}#G'|f BO7=5*DS(  ]CNk^p! &k|o(bE# [#54kV`9  w{w N%uMA-LU'~l07/I+#xeyk2PI(J|g&*$/oH3 []@nO0i?B;d!4)Ip..^P  "  -f f 1MT(g~]c^V/'qSDuF,|f o L  t  d JR+"3Moo?|Yqpa)X#<hXW=y BgR->j(CHo,* *.,F5-|I  /} Yg$: ""e!C ZT Ff!=>ߏ6e<=ho! zf<99  h .ulS7To4I;  o @ xV(#B`pl dyYuU,dWoJ<:r JY(7K\r{C}43N! %&~&%!8h hrb'_U(pZٹؒD$?5`O2 q.T   w # &g~)p^it$q!<.F,q5kCJ]U$nH9Q0  jqZV`YMR xn ,!f`S `#c$h$ L 8 U pSܓ#6B4QjOAW߀6 C_%p  * P y CyqkjiIYsuV%O u9>~,!= +f- n,e|@r=IL('LfN:YgP!E+[KSV]8wv$ Rg&q'2%\!("#Y"  !$&9"  L'-80'& ڲڦw,9_ޣٖoکx*29 g : mYdf B;@ :| l jW5b_2f%6"(E^pt.<(kfaWi/v`PWD 5 (  !#$%[-#W$ #Z!<۰%&5,ut<35RdocM(S3 c  ) c  O%IL4 ~: ^ y 3e;QVbxdN=Q :&e!L Q g - @B0E$gx]t{V 2i[/)&(9!")"XF8[ *$(T-}+$ _,8+P.>`;3t/D4#{] ҭ7gI%Z"ݙ }".x/?-"7 Z^ tW9 BrEcpUPovv S Y;`4Sw7u%7%?MV1M X G RQL %e$(@/ W"0j+ 2Y)-1 $4ӿ4ed$m2TaAW-\5s u L =t"f F G|q 0}L z   &CLhKHcE2:>iX  DG,8f"5 >v H"z`*RP OdMN.C_"Y Z/n qyat#)K&|SSc\)a8,[jC=4.AؘVeP7`m{@T/,& _QM `   W K\1^ \ 7 d ]*T_ 8?a\9b'Wi (D(}:X bzPg$A $"rOq1@:1 "_i M\ x {^R^ZD}."( o%/"A)}-%3sۍ]KDB??7e$T6}:u { E9 }  )P q ! a < ?wc~/^ '}SW^=i5~m_=JNC7! ]4-)d:.KSWr#lm/xw/3NSJA: q3b$ DN )(9 L$s  G(D4Q&vP1)rjwT^(9LF,\ZE1DO,hkXf e n p  a _ z  0Dz}=,0Iz |Sb.m g"5a&[2Ki%f^1.&~fcGK $x$pR{Aw1"H yK H|% w Qy CFp@ z(+j| *, HbxNrb%lO'n!,j  <"HSF V r Y ] / :  f9)TNo1O:M9RF&SpSvZ@Q~WuF (1 '* \=36Ji$9 .0tLO!5e|j /Fv2 3 x+ M.2",1T<!c*-.+lڜ#0!tMX1EUR}b^3LY9k.l * {m ; D # [ ;L]7nc^*}`2x[>>  lhkx8MQ{)1fjx+?jj;^7Z38KR1euB jZ Z !$ es Z 2f9LLL(%A';ׯ5#);z yXdq}S=' AvF Q,  z(^|\Z H"sgm ln![M!FKZs|C8BFJS''_H`ey\dC|]`_uq~"za#A+qHpFuK +m 1ch6 dp{ ?%4O -v #+g!Ԩ;)_%[l]4^ruSjF 'r' <r _aK  3z8p}  a R iCW%U,p&8"F\V}b{~9QM=.4XKdT=Ah23%$Ayyl2p+f~;rTec~@gV 14JwIp4]1_BO  | a & 0@ [ 5  =c/ _ePD#Dv !=)zYGb :QSP>9GOjz K f,% 9SzGE|E*BU!$PB`X[:B|0Sq6Z2WnW1)V"3Jr + OP Z+!? y D $<]dk(3HQ'g?]xHvkSoK }  *  q J}I # `aJ-RS#^V a! -c"^R;qU,t(b Vz / Iu= # DSO~N< a<i:^FiNXV!EqloPi"Lbtf>S$-XnA0F~--"0m~& =SGMVP<2 bc<%dSuA),; K4q z xSR ( GL 2 Afs { < b o RML+V}B&+%` YH4W-3Z? <*VlH;5HbCCIsxe&H]W)UyVX)-7* Pa_bqxY[w~I#2ff7'^!!A%R0WZ>O_+Ega b^ bAX>JRPv / |.N #$n  / hIveHXN}!yW 370 True vertical True True _File True True gtk-new True True True gtk-open True True True gtk-save-as True True True gtk-media-record True True True True gtk-quit True True True True _Edit True True gtk-cut True True True gtk-copy True True True gtk-paste True True True True gtk-media-play True True True gtk-media-pause True False True True gtk-stop True False True True True gtk-revert-to-saved True True True gtk-preferences True True True True _Help True True gtk-about True True True False 0 True True True True gtk-new False True True True True gtk-open False True True True True gtk-save-as False True True False True True True True gtk-media-record False True True False True True True True gtk-revert-to-saved False True False 1 True 7 vertical True vertical True 0 <b>Insert text to play</b> True False 3 0 30 True True 1 0 0 422 42.200000000000003 379.80000000000001 422 0 0 26 2.6000000000000001 23.400000000000002 26 automatic automatic in True True 2 False 1 0 True True 0 1 <b>Base settings</b> True 2 gtk-media-play 100 True True True True False False end 1 True False True True True gtk-media-pause False False end 0 False False 3 1 True 2 2 3 80 True 0 12 _Language: True GTK_FILL GTK_EXPAND True 3 True gtk-no False 0 True 1 1 1 2 True 0 12 Voice: 1 2 GTK_FILL GTK_EXPAND True _Male True True False True True True 0 Fem_ale True True False True True radioVoiceMale 1 True 0 6 Varia_nt: True cboVariants False 2 True 3 1 2 1 2 False 2 True True True True True 4 2 True 0 12 Dela_y: True hscDelay 3 4 GTK_FILL True 0 12 Spee_d: True hscSpeed 2 3 GTK_FILL True 0 12 _Volume: True hscVolume 1 2 GTK_FILL 80 True 0 12 P_itch: True hscPitch GTK_FILL True True 10 0 100 1 10 0 0 1 2 3 4 True True discontinuous 170 80 390 1 10 0 0 1 2 2 3 True True discontinuous 100 0 200 1 10 0 0 1 2 1 2 True True 50 0 99 1 10 0 0 1 2 True <b>Advanced settings</b> True label_item False False 3 2 True 2 False 3 gespeaker-0.8.6/data/ui/preferences.glade000066400000000000000000001070141255744433100203330ustar00rootroot00000000000000 5 Preferences False center-on-parent dialog False True vertical True True 4 True 6 vertical True 0 0 6 <b>Audio player</b> True False False 0 True 9 True 0 0.30000001192092896 40 multimedia-player False False 0 True vertical True False False 0 True 2 8 True False 0 Co_mmand: True txtPlayerCommand False 0 True False True 1 gtk-apply True True True True 2 2 1 1 1 True 0 <b>Welcome message</b> True False False 5 2 True 12 True vertical Speak _welcome text on program start True True False True True True 0 _Use custom welcome message True True False True True 1 True 2 6 True False Custom mess_age: True txtWelcomeText False 0 True False True 1 2 3 True 0 <b>Saving preferences</b> True False False 5 4 True 12 True vertical _Save voice settings automatically True True False True True True 0 Save main window s_ize True True False True True 1 5 True 0 <b>Recording</b> True False False 5 6 True 12 True vertical Single track _record True True False True True True 0 7 True 0 <b>Other settings</b> True False False 5 8 True 12 True vertical Enable te_xt wrapping True True False True True 0 Load voice _variants True True False True True 1 9 True General False tab True 6 vertical True 0 <b>Mbrola application</b> True False 2 0 True 3 True gtk-no False 0 True 0 6 Main program mbrola 1 True Package mbrola not installed True 2 False 3 1 True 0 <b>Mbrola voices available</b> True False 2 2 True True True 0 Mbrola voices path: False 6 0 True select-folder 1 1 6 0 gtk-refresh True True True True False 1 False 4 3 True True automatic automatic in True True 4 True 0 XX languages of YY detected False 4 5 1 True Mbrola voices 1 False tab True 6 vertical 5 True 0 <b>Available plugins</b> True False 2 0 True True all automatic automatic in True True False 1 True 7 True gtk-about True True True True 0 gtk-preferences True True True True 1 False 2 2 True Plugins 2 False tab 1 True end gtk-cancel True True True True False False 0 gtk-ok True True True True False False 1 False end 0 gespeaker-0.8.6/doc/000077500000000000000000000000001255744433100142505ustar00rootroot00000000000000gespeaker-0.8.6/doc/README000066400000000000000000000021511255744433100151270ustar00rootroot00000000000000Gespeaker is a GTK+ frontend for eSpeak and mbrola. Copyright 2009-2015 Fabio Castelli License: GPL-2+ (please see the copyright file) Description: Gespeaker allows to play a text in many languages with settings for voice, pitch, volume, speed and word gap. Since version 0.6 it can use mbrola package and voices to obtain a more realistic text reading experience. Requirements: Python >= 2.4 eSpeak (program + voices) Python bindings for GTK2 (python-gtk2) Python bindings for Glade and libglade support (python-glade2) Python bindings for gObject (python-gobject) Python bindings for SVG (python-rsvg) ALSA (aplay) or Pulseaudio server (paplay) Support for mbrola: If mbrola package and mbrola voices are available then the program could use them. Just enable them from the preferences dialog. Personal configuration User's configuration will be kept under ~/.gespeaker Please report any bugs in Gespeaker to the author: Fabio Castelli Homepage: Website: http://www.muflone.com/gespeaker/ Source code: https://github.com/muflone/gespeaker gespeaker-0.8.6/doc/changelog000066400000000000000000000150541255744433100161270ustar00rootroot00000000000000gespeaker (0.8.6) all; urgency=low * New Greek translation by osar1 * New Chinese translation by Dolores Li * New Dutch translation by Heimen Stoffels * New Catalan translation by Adolfo Jayme Barrientos * Updated default language for all translations -- Fabio Castelli Sun, 26 Jul 2015 23:38:13 +0200 gespeaker (0.8.5) all; urgency=low * Updated German translation -- Fabio Castelli Sat, 4 Oct 2014 13:41:37 +0200 gespeaker (0.8.4) all; urgency=low * Updated translations -- Fabio Castelli Sat, 6 Sep 2014 19:42:04 +0200 gespeaker (0.8.3) all; urgency=low * Updated translations * New Arabic translation by M I * New Vietnamese translation by Anh Phan * New Turkish translation by Necdet Yücel -- Fabio Castelli Sun, 31 Aug 2014 00:38:49 +0200 gespeaker (0.8.2) all; urgency=low * Removed the plugins amsn, emesene, kopete, pidgin, telepathy. They were moved to another source repository for separated maintenance and versioning * Added handlepaths to EspeakFrontend.py * If the specified MBROLA folder doesn't exist fallback to the default path -- Fabio Castelli Thu, 11 Jul 2013 09:55:28 +0100 * Switch to the new mbrola and espeak versions -- Fabio Castelli Sat, 22 Jun 2013 17:14:32 +0100 * New german translation by Heinrich Schwietering -- Fabio Castelli Sun, 7 Dic 2010 18:14:44 +0100 * New faroese translation by Gunleif Joensen. * Fixed handling of broken symlinks for amsn and emesene plugins -- Fabio Castelli Sun, 17 Oct 2010 20:48:43 +0200 gespeaker (0.8.1) all; urgency=low * New bulgarian translation by Svetoslav Stefanov. * User configuration moved in XDG_CONFIG_HOME instead of previous hardcoded folder (sorry for your saved settings). http://live.gnome.org/GnomeGoals/XDGConfigFolders http://ploum.frimouvy.org/?207-modify-your-application-to-use-xdg-folders * New plugins architecture * Moved dbus, save voice settings, save window size, welcome message in external plugins. * New command-line features * Stop previous play on quit (moved on external plugin) http://code.google.com/p/gespeaker/issues/detail?id=24 * New plugins: debug, save window position * New plugins minimal configuration in preferences dialog * New Telepathy, Pidgin, Emesene, Kopete and aMSN plugins http://developer.pidgin.im/wiki/DbusHowto -- Fabio Castelli Sat, 26 Jun 2010 18:48:21 +0200 gespeaker (0.8) all; urgency=low * Moved translators from .po files to doc/translators * New polish translation by Andrey J. * New DBUS interface to interact from external apps * Fixed minimum words gap from 5 to 0 in main UI http://code.google.com/p/gespeaker/issues/detail?id=20 -- Fabio Castelli Sat, 12 Jun 2010 14:13:40 +0100 gespeaker (0.7) all; urgency=low * New handlepaths module to reflect the changed directory structure. -- Fabio Castelli Sun, 6 Dec 2009 13:40:00 +0100 gespeaker (0.6) all; urgency=low * Fixed audio testing localized string. * An error message is now shown if the audio player is not found instead of quietly ignore the error. * New spanish translation provided by David Prieto. * New mbrola support with more realistic voices. * Added mbrola voices to languages list. * Tabbed preferences dialog for new mbrola support. * Moved language, voice type and variants to base settings and pitch, volume, speed and gap sliders to advanced settings upon suggestion of frandavid100. * Added automatic txt extension on saving text file. * Added automatic wav extension on saving WAVE file. This was causing weird noises on playing the recorded track if it wasn't a .wav filename. -- Fabio Castelli Sat, 18 Jul 2009 11:42:00 +0100 gespeaker (0.5) all; urgency=low * Added an extender separator for settings to allow maximum usage of the window with the text. * Added filters for load/save text dialogs. * Added support for recording the audio track to wave. * Added a statusbar showing the active record mode. * Added preferences dialog. * Added preferences save and reload for welcome message, window size, voice settings and expander status. * Added support for audio frontend: ALSA (aplay), PulseAudio (paplay) and user customized player command, with audio command test. * Added voice variants by scanning /usr/share/espeak-data/voices/!v folder for extra voice variants. * Fixed stock icon for DialogFileOpenSave. -- Fabio Castelli Fri, 30 Jun 2009 18:48:50 +0100 gespeaker (0.4) all; urgency=medium * Added SubprocessWrapper.Popen to wrap subprocess.Popen in order to support python versions prior to 2.6 which don't have the delete argument on object creation. * Added TempfileWrapper.NamedTemporaryFile to wrap tempfile's Popen object in order to support python versions prior to 2.6 which don't have terminate and send_signal methods. Actually no more used, left for future usage. * Now gespeaker works with python version 2.4 and higher. * Temporary file for output to speech is created at program start so new temporary files are no longer created after each play. * Included pause and resume features. * New icon and logo, kindly provided by MIX. * New french translation provided by Emmanuel. -- Fabio Castelli Fri, 20 Jun 2009 18:55:40 +0100 gespeaker (0.3) all; urgency=low * Added support for voice type (male/female) via +12 for female voice. * Removed escaped text substitution with a more secure temporary file with the text to play. * Substituted direct shell piping with more secure subprocess' piping. * Better control of external calls, now both espeak and player execution are polled for exitcode and terminated if requested. * Added documentation and artists parameters to DialogAbout. -- Fabio Castelli Thu, 18 Jun 2009 01:21:30 +0100 gespeaker (0.2) * Changed UI layout according to Gnome HIG specifications http://library.gnome.org/devel/hig-book/stable/design-window.html.en * Fixed DialogAbout.set_icon_from_file icon usage, which was wrongly hardcoded. * Symlinked copyright file to /usr/share/doc/gespeaker/copyright -- Fabio Castelli Sun, 14 Jun 2009 22:06:20 +0100 gespeaker (0.1-1) * Initial release -- Fabio Castelli Sat, 13 Jun 2009 23:00:00 +0100 gespeaker-0.8.6/doc/copyright000066400000000000000000000432161255744433100162110ustar00rootroot00000000000000Copyright 2009-2015 Fabio Castelli License: GPL-2+ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. gespeaker-0.8.6/doc/dbus/000077500000000000000000000000001255744433100152055ustar00rootroot00000000000000gespeaker-0.8.6/doc/dbus/examples.html000066400000000000000000000043311255744433100177120ustar00rootroot00000000000000 gespeaker dbus interface - Interfaces
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Examples

Usage examples in various languages.

Examples

Shell — Examples with the shell Python — Examples in python


Prev  Up  Next
/org/gtk/gespeaker/voice  Home  Examples with the shell
gespeaker-0.8.6/doc/dbus/examples_shell.html000066400000000000000000000221641255744433100211050ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/espeak
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Shell examples

Manage gespeaker through shell commands.
All DBus commands are sent with dbus-send utility from the dbus package.

To shorten typing the commands and to avoid repetitions the following variable is assumed:

OPTIONS="--print-reply --session --dest=org.gtk.gespeaker"

It will be used this way:

dbus-send $OPTIONS <interface> <method> [arguments]

Get Gespeaker version

Retrieve the application version number

dbus-send $OPTIONS /org/gtk/gespeaker org.gtk.gespeaker.get_version

Returns: string "0.8"

Get temporary filename

Read the temporary filename

dbus-send $OPTIONS /org/gtk/gespeaker org.gtk.gespeaker.get_tempfilename

Returns: string "/tmp/gespeakerCLPQQ"

Set new text and play it at once

dbus-send $OPTIONS /org/gtk/gespeaker/ui org.gtk.gespeaker.ui.play_text string:"Hello world"

Set new text and play it with multiple steps

Clear previous text

dbus-send $OPTIONS /org/gtk/gespeaker/text org.gtk.gespeaker.text.clear

Add new text at the end

dbus-send $OPTIONS /org/gtk/gespeaker/text org.gtk.gespeaker.text.append string:"world"

Add some other text at the begin

dbus-send $OPTIONS /org/gtk/gespeaker/text org.gtk.gespeaker.text.prepend string:"Hello "

Play the whole text

dbus-send $OPTIONS /org/gtk/gespeaker/espeak org.gtk.gespeaker.espeak.play

Replace the text

dbus-send $OPTIONS /org/gtk/gespeaker/text org.gtk.gespeaker.text.replace string:"Hello again"

Play it again

dbus-send $OPTIONS /org/gtk/gespeaker/espeak org.gtk.gespeaker.espeak.play

Get and set voices

List all available voices

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.list_all_voices

Returns: array [
  string "afrikaans"
  string "albanian"
  ...
]

List all availale mbrola voices

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.list_mbrola_voices

Returns: array [
  string "english-mb-en1"
  string "french-mbrola-4"
  string "italian-mbrola-3"
  ...
]

Get the number of available voices

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.get_voices_count

Returns: int32 59

Get the index of the currently selected voice

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.get_voice

Returns: int32 31

Set the current voice by its index

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.set_voice int32:32

Returns: boolean true

Get the name of the requested voice

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.get_voice_name int32:32

Returns: string "italian-mbrola-3"

Set the current voice by its name

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.set_voice_by_name string:english

Returns: boolean true

Get the short name of the requested voice

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.get_voice_short int32:32

Returns: string "mb-it3"

Returns if the requested voice is a mbrola

dbus-send $OPTIONS /org/gtk/gespeaker/voice org.gtk.gespeaker.voice.get_voice_is_mbrola int32:32

Returns: boolean true


Prev  Up  Next
Examples  Home  Python Examples
gespeaker-0.8.6/doc/dbus/gespeaker.devhelp2000066400000000000000000000103231255744433100206050ustar00rootroot00000000000000 gespeaker-0.8.6/doc/dbus/index.html000066400000000000000000000056301255744433100172060ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/voice
org.gtk.gespeaker
  gespeaker dbus interfaces  Next

Gespeaker DBus API Reference Manual

Copyright Fabio Castelli 2010

Last revision: 2010-05-09
Abstract
This reference describes the DBus interfaces for Gespeaker.

Table of Contents
Available interfaces — All the available DBus interfaces to interact with Gespeaker
org/gtk/gespeaker — General information about running gespeaker instance
org/gtk/gespeaker/text — Manage the text to play
org/gtk/gespeaker/ui — Manage the user interface
org/gtk/gespeaker/espeak — Manage the espeak engine
org/gtk/gespeaker/voice — Manage the espeak and mbrola voices
Examples — Usage examples with various languages
Shell — Examples with the shell
Python — Examples in python


     Next
     Available Interfaces
gespeaker-0.8.6/doc/dbus/interfaces.html000066400000000000000000000047641255744433100202310ustar00rootroot00000000000000 gespeaker dbus interface - Interfaces
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Available interfaces

The available dbus interfaces.

Interfaces

org/gtk/gespeaker — General information about running gespeaker instance org/gtk/gespeaker/text — Manage the text to play org/gtk/gespeaker/ui — Manage the user interface org/gtk/gespeaker/espeak — Manage the espeak engine org/gtk/gespeaker/voice — Manage the espeak and mbrola voices


Prev  Up  Next
Index  Home  /org/gtk/gespeaker
gespeaker-0.8.6/doc/dbus/org.gtk.gespeaker.espeak.html000066400000000000000000000104061255744433100226630ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/espeak
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Interface /org/gtk/gespeaker/espeak

Manage the espeak engine.


org.gtk.gespeaker.espeak.is_playing

bool org.gtk.gespeaker.espeak.is_playing()

Returns: A boolean which represents if espeak is currently running
The is_playing method returns if espeak is currently running.

org.gtk.gespeaker.espeak.pause

void org.gtk.gespeaker.espeak.pause()

Returns: None
The pause method pauses the current espeak play.

org.gtk.gespeaker.espeak.play

void org.gtk.gespeaker.espeak.play()

Returns: None
The play method plays the current text with espeak.

org.gtk.gespeaker.espeak.stop

void org.gtk.gespeaker.espeak.stop()

Returns: None
The stop method stops the current espeak play.


Prev  Up  Next
/org/gtk/gespeaker/ui  Home  /org/gtk/gespeaker/voice
gespeaker-0.8.6/doc/dbus/org.gtk.gespeaker.html000066400000000000000000000065321255744433100214210ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Interface /org/gtk/gespeaker

General information about running gespeaker instance.


org.gtk.gespeaker.get_tempfilename

QString org.gtk.gespeaker.get_tempfilename()

Returns: A string for the temporary filename
The get_tempfilename method returns the filename used for text buffering for espeak.

org.gtk.gespeaker.get_version

QString org.gtk.gespeaker.get_version()

Returns: A string for the application's version
The get_version method returns the application's version for the current instance.


Prev  Up  Next
Available Interfaces  Home  /org/gtk/gespeaker/text
gespeaker-0.8.6/doc/dbus/org.gtk.gespeaker.text.html000066400000000000000000000160301255744433100223760ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/text
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Interface /org/gtk/gespeaker/text

Manage the text to play.


org.gtk.gespeaker.text.append

void org.gtk.gespeaker.text.append(QString text)

text The text string to append
Returns: None
The append method adds a text at the end of the textbox.

org.gtk.gespeaker.text.clear

void org.gtk.gespeaker.text.clear()

Returns: None
The clear method clears the text in the textbox.

org.gtk.gespeaker.text.copy

void org.gtk.gespeaker.text.copy()

Returns: None
The copy method copies in the clipboard the selected text from the textbox.

org.gtk.gespeaker.text.cut

void org.gtk.gespeaker.text.cut()

Returns: None
The cut method cuts in the clipboard the selected text from the textbox.

org.gtk.gespeaker.text.insert

void org.gtk.gespeaker.text.insert(QString text)

text: The text string to insert
Returns: None
The insert method adds a text at the current position in the textbox.

org.gtk.gespeaker.text.paste

void org.gtk.gespeaker.text.paste()

Returns: None
The paste method pastes in the textbox the text from the clipboard.

org.gtk.gespeaker.text.prepend

void org.gtk.gespeaker.text.prepend(QString text)

text: The text string to prepend
Returns: None
The prepend method adds a text to the begin of the textbox.

org.gtk.gespeaker.text.replace

void org.gtk.gespeaker.text.replace(QString text)

text The text string to write
Returns: None
The replace method replaces the text in the textbox.


Prev  Up  Next
/org/gtk/gespeaker  Home  /org/gtk/gespeaker/ui
gespeaker-0.8.6/doc/dbus/org.gtk.gespeaker.ui.html000066400000000000000000000207511255744433100220340ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/ui
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Interface /org/gtk/gespeaker/ui

Manage the user interface.


org.gtk.gespeaker.ui.hide

void org.gtk.gespeaker.ui.hide()

Returns: None
The hide method hides the main window.

org.gtk.gespeaker.ui.new

void org.gtk.gespeaker.ui.new(bool confirm)

confirm: Ask confirmation before clearing the existing text
Returns: None
The new method clears the text in the textbox.

org.gtk.gespeaker.ui.open

void org.gtk.gespeaker.ui.open(QString filename)

filename: The filename where to save the text in the textbox
Returns: None
The open method loads in the textbox the text from the requested filename.

org.gtk.gespeaker.ui.play_text

void org.gtk.gespeaker.ui.play_text(QString text)

text: The text to replace and play
Returns: None
The play_text method replaces the text in the textbox and plays it.

org.gtk.gespeaker.ui.quit

void org.gtk.gespeaker.ui.quit()

Returns: None
The quit method closes the application.

org.gtk.gespeaker.ui.record

void org.gtk.gespeaker.ui.record(QString filename)

filename: The filename where to save the recorded voice
Returns: None
The record method activates the recording for the next play.

org.gtk.gespeaker.ui.reset

void org.gtk.gespeaker.ui.reset(bool confirm)

confirm: Ask confirmation before reset the default settings
Returns: None
The reset method restores the default settings.

org.gtk.gespeaker.ui.save

void org.gtk.gespeaker.ui.save(QString filename)

filename: The filename where to save the text in the textbox
Returns: None
The save method saves the current text in the requested filename.

org.gtk.gespeaker.ui.show

void org.gtk.gespeaker.ui.show()

Returns: None
The show method shows the main window.

org.gtk.gespeaker.ui.unrecord

void org.gtk.gespeaker.ui.unrecord()

Returns: None
The unrecord method disables the recording.


Prev  Up  Next
/org/gtk/gespeaker/text  Home  /org/gtk/gespeaker/espeak
gespeaker-0.8.6/doc/dbus/org.gtk.gespeaker.voice.html000066400000000000000000000411531255744433100225230ustar00rootroot00000000000000 gespeaker dbus interface - /org/gtk/gespeaker/voice
org.gtk.gespeaker
Prev  gespeaker dbus interfaces  Next

Interface /org/gtk/gespeaker/voice

Manage the espeak and mbrola voices.

Methods

int org.gtk.gespeaker.voice.int.get_delay() int org.gtk.gespeaker.voice.int.get_pitch() int org.gtk.gespeaker.voice.int.get_speed() int org.gtk.gespeaker.voice.int.get_voice() bool org.gtk.gespeaker.voice.get_voice_is_mbrola(int index) QString org.gtk.gespeaker.voice.get_voice_name(int index) QString org.gtk.gespeaker.voice.get_voice_short(int index) QString org.gtk.gespeaker.voice.get_voice_type() int org.gtk.gespeaker.voice.get_voices_count() int org.gtk.gespeaker.voice.get_volume() QStringList org.gtk.gespeaker.voice.list_all_voices() QStringList org.gtk.gespeaker.voice.list_mbrola_voices() bool org.gtk.gespeaker.voice.set_delay(int delay) bool org.gtk.gespeaker.voice.set_pitch(int pitch) bool org.gtk.gespeaker.voice.set_speed(int speed) bool org.gtk.gespeaker.voice.set_voice(int voice) bool org.gtk.gespeaker.voice.set_voice_by_name(QString name) bool org.gtk.gespeaker.voice.set_voice_type(QString voice_type) bool org.gtk.gespeaker.voice.set_volume(int volume)

org.gtk.gespeaker.voice.get_delay

int org.gtk.gespeaker.voice.get_delay()

Returns: An integer for the current voice delay
The get_delay method returns the voice delay between words.

org.gtk.gespeaker.voice.get_pitch

int org.gtk.gespeaker.voice.get_pitch()

Returns: An integer for the current pitch
The get_pitch method returns the voice pitch.

org.gtk.gespeaker.voice.get_speed

int org.gtk.gespeaker.voice.get_speed()

Returns: An integer for the current voice speed
The get_speed method returns the voice speed.

org.gtk.gespeaker.voice.get_voice

int org.gtk.gespeaker.voice.get_voice()

Returns: An integer for the index of the currently selected voice
The get_voice method returns an index for the currently selected voice.

org.gtk.gespeaker.voice.get_voice_is_mbrola

bool org.gtk.gespeaker.voice.get_voice_is_mbrola(int index)

index: The index of the voice to check
Returns: True if the voice is a mbrola voice, False if the voice is not mbrola or is not a valid voice index.
The get_voice_is_mbrola method check if the requested voice is a mbrola voice.

org.gtk.gespeaker.voice.get_voice_name

QString org.gtk.gespeaker.voice.get_voice_name(int index)

index: The index of the voice to check
Returns: A string for the voice name
The get_voice_name method return the name of the requested voice.

org.gtk.gespeaker.voice.get_voice_short

QString org.gtk.gespeaker.voice.get_voice_short(int index)

index: The index of the voice to check
Returns: A string for the voice short name
The get_voice_short method return the short name of the requested voice.

org.gtk.gespeaker.voice.get_voice_type

QString org.gtk.gespeaker.voice.get_voice_type()

Returns: A string as following: disabled for mbrola voices which doesn't support type, male for non-mbrola male voice, female for non-mbrola female voice
The get_voice_type method return the type of the selected voice.

org.gtk.gespeaker.voice.get_voices_count

int org.gtk.gespeaker.voice.get_voices_count()

Returns: The number of the available voices
The get_voices_count method returns the number of the available voices.

org.gtk.gespeaker.voice.get_volume

int org.gtk.gespeaker.voice.get_volume()

Returns: An integer for the current volume
The get_volume method returns the current volume.

org.gtk.gespeaker.voice.list_all_voices

QStringList org.gtk.gespeaker.voice.list_all_voices()

Returns: A string list with all the available voices
The list_all_voices method returns the list with all the available voice names.

org.gtk.gespeaker.voice.list_mbrola_voices

QStringList org.gtk.gespeaker.voice.list_mbrola_voices()

Returns: A string list with all the available mbrola voices
The list_mbrola_voices method returns the list with all the available mbrola voice names.

org.gtk.gespeaker.voice.set_delay

bool org.gtk.gespeaker.voice.set_delay(int delay)

delay: The new delay to assign
Returns: True if the delay was assigned or False if it wasn't assigned
The set_delay method assign the new value for delay between words. Valid values are between 0 and 100.

org.gtk.gespeaker.voice.set_pitch

bool org.gtk.gespeaker.voice.set_pitch(int pitch)

pitch: The new pitch to assign
Returns: True if the pitch was assigned or False if it wasn't assigned
The set_pitch method assign the new value for voice pitch. Valid values are between 0 and 99.

org.gtk.gespeaker.voice.set_speed

bool org.gtk.gespeaker.voice.set_speed(int speed)

speed: The new delay to assign
Returns: True if the delay was assigned or False if it wasn't assigned
The set_speed method assign the new value for voice speed. Valid values are between 80 and 390.

org.gtk.gespeaker.voice.set_voice

bool org.gtk.gespeaker.voice.set_voice(int voice)

voice: Index of the new voice to choose
Returns: True if the voice was chosen or False if it wasn't chosen
The set_voice method changes the active voice using a voice index. Valid values are between 0 and the value returned by org.gtk.gespeaker.voice.get_voices_count() method.

org.gtk.gespeaker.voice.set_voice_by_name

bool org.gtk.gespeaker.voice.set_voice_by_name(QString voice)

voice: A string with the name of the new voice to choose
Returns: True if the voice was chosen or False if it wasn't chosen
The set_voice_by_name method changes the active voice using a voice name.

org.gtk.gespeaker.voice.set_voice_type

bool org.gtk.gespeaker.voice.set_voice_type(QString voice_type)

voice_type: A string with the voice type: it must be male or female
Returns: True if the voice type was chosen or False if it wasn't chosen
The set_voice_type method changes the voice type for the active non-mbrola voice.

org.gtk.gespeaker.voice.set_volume

bool org.gtk.gespeaker.voice.set_volume(int volume)

volume: The new volume to assign
Returns: True if the volume was assigned or False if it wasn't assigned
The set_volume method assign the new value for volume. Valid values are between 0 and 200.


Prev  Up  Next
/org/gtk/gespeaker/espeak  Home  Examples
gespeaker-0.8.6/doc/dbus/style.css000066400000000000000000000007411255744433100170610ustar00rootroot00000000000000.table_title { width: 100%; } .methods { background-color: #d0e0f0; width: 100%; } .table_parameters { background-color: #ffecce; border-width: 0; width: 100%; } .method_definition { white-space: pre; font-family: monospace; margin-left: 20pt; } .method_parameters { font-style: italic; } .parameter { font-family: monospace; font-weight: bold; } .fixed, .method_name { font-family: monospace; } .title { font-weight: bold; line-height: 20pt; }gespeaker-0.8.6/doc/translators000066400000000000000000000013241255744433100165470ustar00rootroot00000000000000English: Fabio Castelli (Muflone) Italian: Fabio Castelli (Muflone) French: Emmanuel Spanish: David Prieto Adolfo Jayme Barrientos Polish: Andrey J. Bulgarian: Svetoslav Stefanov Faroese: Gunleif Joensen German: Heinrich Schwietering Ettore Atalan Arabic: M I Turkish: Necdet Yücel Vietnamese: Anh Phan gespeaker-0.8.6/gespeaker000077500000000000000000000001001255744433100153660ustar00rootroot00000000000000#!/bin/bash cd /usr/share/gespeaker/src env python gespeaker.py gespeaker-0.8.6/man/000077500000000000000000000000001255744433100142565ustar00rootroot00000000000000gespeaker-0.8.6/man/gespeaker.1000066400000000000000000000016371255744433100163150ustar00rootroot00000000000000.\" $Id: gespeaker.1 0.7 2009-12-06 14:12 muflone $ .\" .\" Copyright (c) 2009 Fabio Castelli .TH GESPEAKER "1" "December 06, 2009" .SH NAME .B Gespeaker \- A GTK+ frontend for eSpeak and mbrola .SH SYNOPSIS gespeaker .SH DESCRIPTION .PP .B Gespeaker is a GTK+ frontend for eSpeak and mbrola. It allows to play a text in many languages with settings for voice, pitch, volume, speed and word gap. .PP Since version 0.6 it can use mbrola package and voices to obtain a more realistic text reading experience. .PP If mbrola was installed then the voices path must be selected from the mbrola voices tab on the preferences page. .SH FILES Personal settings will be kept under ~/.gespeaker .SH AUTHORS .B Gespeaker was written by Fabio Castelli .SH HOMEPAGE International project: http://code.google.com/p/gespeaker/ Italian project: http://ubuntrucchi.wordpress.com/progetti-projects/gespeaker/ gespeaker-0.8.6/plugins/000077500000000000000000000000001255744433100151645ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_dbus/000077500000000000000000000000001255744433100174775ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_dbus/__init__.py000066400000000000000000000040731255744433100216140ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'DBUS' PLUGIN_VERSION = '0.2' PLUGIN_DESCRIPTION = 'DBUS interfaces' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = 'http://www.ubuntutrucchi.it/' from plugins import GespeakerPlugin, register_plugin import dbus import dbus.mainloop.glib from dbus_service import GespeakerDBUSService from dbus_text import GespeakerDBUSServiceText from dbus_ui import GespeakerDBUSServiceUI from dbus_espeak import GespeakerDBUSServiceEspeak from dbus_voice import GespeakerDBUSServiceVoice from dbus_cmdline import parseArgs class GespeakerPlugin_DBUS(GespeakerPlugin): def load(self): "Plugin load" GespeakerPlugin.load(self) dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) def unload(self): "Plugin unload" pass def reload(self): "Plugin reload" pass def on_uiready(self, ui): GespeakerDBUSService(ui) GespeakerDBUSServiceText(ui) GespeakerDBUSServiceUI(ui) GespeakerDBUSServiceEspeak(ui) GespeakerDBUSServiceVoice(ui) parseArgs() plugin = GespeakerPlugin_DBUS( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_dbus/dbus_cmdline.py000066400000000000000000000325401255744433100225050ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import sys from optparse import OptionParser, OptionGroup import handlepaths bus = None actionDone = False options = {} interfaces = { '/org/gtk/gespeaker': 'org.gtk.gespeaker', '/org/gtk/gespeaker/text': 'org.gtk.gespeaker.text', '/org/gtk/gespeaker/ui': 'org.gtk.gespeaker.ui', '/org/gtk/gespeaker/espeak': 'org.gtk.gespeaker.espeak', '/org/gtk/gespeaker/voice': 'org.gtk.gespeaker.voice' } def parseArgs(): "Parse command line arguments" parser = OptionParser(usage='usage: %prog [options]') parser.add_option('-t', '--tempfilename', action='store_true', help='show temporary filename location') parser.add_option('-V', '--version', action='store_true', help='show version number of the running instance') parser.add_option('--ping', action='store_true', help='ping if is running') parser.add_option('--server', action='store_true', help='execute an instance if it not running') parser.add_option('--async', action='store_true', help='use async methods if possible') group = OptionGroup(parser, 'Playing control') parser.add_option_group(group) group.add_option('-y', '--playing', action='store_true', help='check if engine is actually playing') group.add_option('-p', '--play', action='store_true', help='play the current text') group.add_option('-u', '--pause', action='store_true', help='pause the current playing') group.add_option('-s', '--stop', action='store_true', help='stop the current playing') group.add_option('--record', action='store', type='string', help='record the next play in a wave file') group.add_option('--unrecord', action='store_true', help='disable the recording for the the next play') group = OptionGroup(parser, 'Main window control') parser.add_option_group(group) group.add_option('-H', '--hide', action='store_true', help='hide main window') group.add_option('-S', '--show', action='store_true', help='show main window') group.add_option('-Q', '--quit', action='store_true', help='quit running instance') group.add_option('-W', '--window', action='store', type='string', help='execute window actions') group.add_option('--set-opacity', action='store', type='int', dest='opacity', help='set window opacity') group.add_option('--set-position', action='store', type='string', dest='position', help='set window position') group.add_option('--set-size', action='store', type='string', dest='size', help='set window size') group = OptionGroup(parser, 'Text handling') parser.add_option_group(group) group.add_option('-N', '--new', action='store_true', help='clear the whole text') group.add_option('-C', '--clear', action='store_true', help='clear the whole text') group.add_option('-c', '--copy', action='store_true', help='copy the selected text') group.add_option('-x', '--cut', action='store_true', help='cut the selected text') group.add_option('-v', '--paste', action='store_true', help='paste the text from the clipboard') group.add_option('-o', '--open', action='store', type='string', help='open a text file') group.add_option('-e', '--save', action='store', type='string', help='save the current text in a text file') group.add_option('--play-text', action='store', type='string', help='replace the whole text and play it') group.add_option('--append', action='store', type='string', help='insert the text at the end') group.add_option('--insert', action='store', type='string', help='insert the text at the current position') group.add_option('--prepend', action='store', type='string', help='insert the text at the begin') group.add_option('--replace', action='store', type='string', help='replace the whole text') group = OptionGroup(parser, 'Get voices information') parser.add_option_group(group) group.add_option('--get-voice', action='store_true', help='return the index of the selected voice') group.add_option('--get-voices-count', action='store_true', dest='count', help='return the list of all available voices') group.add_option('--is-mbrola', action='store', type='int', help='return True if the voice is a mbrola') group.add_option('--get-voice-name', action='store', type='int', dest='name', help='return the name of the voice') group.add_option('--get-voice-short', action='store', type='int', dest='short', help='return the short name of the voice') group.add_option('--get-voice-type', action='store_true', dest='type', help='return the type of the selected voice') group.add_option('--list-all-voices', action='store_true', dest='list_all', help='return the list of all available voices') group.add_option('--list-mbrola-voices', action='store_true', dest='list_mbrola', help='return the list of all available mbrola voices') group = OptionGroup(parser, 'Get voices information') parser.add_option_group(group) group.add_option('--set-voice', action='store', type='int', help='set the active voice by its index') group.add_option('--set-voice-name', action='store', type='string', help='set the active voice by its name') group.add_option('--set-voice-type', action='store', type='string', help='set the active voice type') group = OptionGroup(parser, 'Get voice settings') parser.add_option_group(group) group.add_option('--get-delay', action='store_true', help='get voice delay') group.add_option('--get-pitch', action='store_true', help='get voice pitch') group.add_option('--get-speed', action='store_true', help='get voice speed') group.add_option('--get-volume', action='store_true', help='get voice volume') group = OptionGroup(parser, 'Set voice settings') parser.add_option_group(group) group.add_option('-R', '--reset', action='store_true', help='reset the default settings') group.add_option('--set-delay', action='store', type='int', dest='delay', help='set voice delay') group.add_option('--set-pitch', action='store', type='int', dest='pitch', help='set voice pitch') group.add_option('--set-speed', action='store', type='int', dest='speed', help='set voice speed') group.add_option('--set-volume', action='store', type='int', dest='volume', help='set voice volume') global options (options, args) = parser.parse_args() # Check for mutual exclusive options mutex = lambda option1, option2: parser.error( 'options --%s and --%s are mutually exclusive' % (option1, option2)) if options.hide and options.show: mutex('hide', 'show') if options.play and options.pause: mutex('play', 'pause') if options.play and options.stop: mutex('play', 'stop') if options.pause and options.stop: mutex('pause', 'stop') if options.position is not None and 'x' not in options.position: parser.error('option --set_position needs position like LEFTxTOP') if options.size is not None and 'x' not in options.size: parser.error('option --set_size needs size like WIDTHxHEIGHT') # Create connection to DBUS global bus bus = dbus.SessionBus() # Check for single instance if options.server: try: if callMethod('', 'ping', str)==1: # Already running, exit sys.exit(0) except dbus.exceptions.DBusException: options.async = True global actionDone actionDone = False # Interface /org/freedesktop/gespeaker if options.ping is not None: callMethod('', 'ping', str) if options.tempfilename is not None: callMethod('', 'get_tempfilename', str) if options.version is not None: callMethod('', 'get_version', str) # Interface /org/freedesktop/gespeaker/text if options.append is not None: callMethod('/text', 'append', None, options.append) if options.clear is not None: callMethod('/text', 'clear') if options.copy is not None: callMethod('/text', 'copy') if options.cut is not None: callMethod('/text', 'cut') if options.insert is not None: callMethod('/text', 'insert', None, options.insert) if options.paste is not None: callMethod('/text', 'paste') if options.prepend is not None: callMethod('/text', 'prepend', None, options.prepend) if options.replace is not None: callMethod('/text', 'replace', None, options.replace) # Interface /org/freedesktop/gespeaker/ui if options.hide is not None: callMethod('/ui', 'hide') if options.position is not None: callMethod('/ui', 'set_position', str, options.position) if options.size is not None: callMethod('/ui', 'set_size', str, options.size) if options.new is not None: callMethod('/ui', 'new', None, False) if options.open is not None: callMethod('/ui', 'open', None, options.open) if options.play_text is not None: callMethod('/ui', 'play_text', None, options.play_text) if options.quit is not None: callMethod('/ui', 'quit') if options.record is not None: callMethod('/ui', 'record', None, options.record) if options.reset is not None: callMethod('/ui', 'reset', None, False) if options.save is not None: callMethod('/ui', 'save', None, options.save) if options.opacity is not None: callMethod('/ui', 'set_opacity', str, options.opacity) if options.show is not None: callMethod('/ui', 'show') if options.unrecord is not None: callMethod('/ui', 'unrecord') if options.window is not None: callMethod('/ui', 'set_window', str, options.window) # Interface /org/freedesktop/gespeaker/espeak if options.playing is not None: callMethod('/espeak', 'is_playing', str) if options.play is not None: callMethod('/espeak', 'play') if options.pause is not None: callMethod('/espeak', 'pause') if options.stop is not None: callMethod('/espeak', 'stop') # Interface /org/freedesktop/gespeaker/voice if options.get_delay is not None: callMethod('/voice', 'get_delay', str) if options.get_pitch is not None: callMethod('/voice', 'get_pitch', str) if options.get_speed is not None: callMethod('/voice', 'get_speed', str) if options.get_voice is not None: callMethod('/voice', 'get_voice', str) if options.is_mbrola is not None: callMethod('/voice', 'get_voice_is_mbrola', str, options.is_mbrola) if options.name is not None: callMethod('/voice', 'get_voice_name', str, options.name) if options.short is not None: callMethod('/voice', 'get_voice_short', str, options.short) if options.type is not None: callMethod('/voice', 'get_voice_type', str) if options.count is not None: callMethod('/voice', 'get_voices_count', str) if options.get_volume is not None: callMethod('/voice', 'get_volume', str) if options.list_all is not None: callMethod('/voice', 'list_all_voices', voices_list) if options.list_mbrola is not None: callMethod('/voice', 'list_mbrola_voices', voices_list) if options.delay is not None: callMethod('/voice', 'set_delay', str, options.delay) if options.pitch is not None: callMethod('/voice', 'set_pitch', str, options.pitch) if options.speed is not None: callMethod('/voice', 'set_speed', str, options.speed) if options.set_voice is not None: callMethod('/voice', 'set_voice', str, options.set_voice) if options.set_voice_name is not None: callMethod('/voice', 'set_voice_by_name', str, options.set_voice_name) if options.set_voice_type is not None: callMethod('/voice', 'set_voice_type', str, options.set_voice_type) if options.volume is not None: callMethod('/voice', 'set_volume', str, options.volume) # Quit application if a command line action was done if actionDone and not options.server: sys.exit(0) def voices_list(voices): "Format the voices list" return [str(voice) for voice in voices] def callMethod(interface, methodName, result=None, *args): "Call a DBUS method and optionally print the result" global actionDone interface = '/org/gtk/gespeaker%s' % interface gespeakerService = bus.get_object('org.gtk.gespeaker', interface) method = gespeakerService.get_dbus_method(methodName, interfaces[interface]) if len(args) == 0: if options.async: return_value = method(reply_handler=async_call, error_handler=async_error) else: return_value = method() elif len(args) == 1: if options.async: return_value = method(args[0], reply_handler=async_call, error_handler=async_error) else: return_value = method(args[0]) # Print result if result: print '[dbus_cmdline] %s: %s' % (methodName, result(return_value)) # Don't close if it's running in async mode if not options.async: actionDone = True return return_value def async_call(r=None): print 'reply: ', r def async_error(e=None): print 'error: ', e gespeaker-0.8.6/plugins/plugin_dbus/dbus_espeak.py000066400000000000000000000036511255744433100223430ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import dbus.service class GespeakerDBUSServiceEspeak(dbus.service.Object): "Class for espeak engine" def __init__(self, gespeakerUI): self.gespeakerUI = gespeakerUI bus_name = dbus.service.BusName('org.gtk.gespeaker', bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, '/org/gtk/gespeaker/espeak') @dbus.service.method(dbus_interface='org.gtk.gespeaker.espeak') def play(self): "Play the current text" self.gespeakerUI.proxy['espeak.play'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.espeak') def stop(self): "Stop the current playing" self.gespeakerUI.proxy['espeak.stop'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.espeak') def pause(self): "Pause/restore the current play" self.gespeakerUI.proxy['espeak.pause'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.espeak', out_signature='b') def is_playing(self): "Return if espeak is actually playing" return self.gespeakerUI.proxy['espeak.is_playing']() gespeaker-0.8.6/plugins/plugin_dbus/dbus_service.py000066400000000000000000000033161255744433100225310ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import dbus.service import handlepaths class GespeakerDBUSService(dbus.service.Object): "Class for general information" def __init__(self, gespeakerUI): self.gespeakerUI = gespeakerUI bus_name = dbus.service.BusName('org.gtk.gespeaker', bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, '/org/gtk/gespeaker') @dbus.service.method(dbus_interface='org.gtk.gespeaker', out_signature='s') def get_version(self): "Return the current version" return handlepaths.APP_VERSION @dbus.service.method(dbus_interface='org.gtk.gespeaker', out_signature='s') def get_tempfilename(self): "Return the temporary filename" return self.gespeakerUI.tempFilename @dbus.service.method(dbus_interface='org.gtk.gespeaker', out_signature='i') def ping(self): "Return always 1" return 1 gespeaker-0.8.6/plugins/plugin_dbus/dbus_text.py000066400000000000000000000052051255744433100220540ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import dbus.service class GespeakerDBUSServiceText(dbus.service.Object): "Class for text handling" def __init__(self, gespeakerUI): self.gespeakerUI = gespeakerUI bus_name = dbus.service.BusName('org.gtk.gespeaker', bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, '/org/gtk/gespeaker/text') @dbus.service.method(dbus_interface='org.gtk.gespeaker.text', in_signature='s') def replace(self, text): "Replace the current text" self.gespeakerUI.proxy['text.set'](text, 0) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text', in_signature='s') def insert(self, text): "Insert the specified text at the cursor" self.gespeakerUI.proxy['text.set'](text, 1) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text', in_signature='s') def prepend(self, text): "Insert the specified text at the begin" self.gespeakerUI.proxy['text.set'](text, 2) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text', in_signature='s') def append(self, text): "Insert the specified text at the end" self.gespeakerUI.proxy['text.set'](text, 3) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text') def clear(self): "Clear the text" self.gespeakerUI.proxy['ui.new'](None, False) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text') def cut(self): "Cut selected text" return self.gespeakerUI.proxy['text.cut'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text') def copy(self): "Copy selected text" return self.gespeakerUI.proxy['text.copy'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.text') def paste(self): "Paste text from the clipboard" return self.gespeakerUI.proxy['text.paste'](None, None) gespeaker-0.8.6/plugins/plugin_dbus/dbus_ui.py000066400000000000000000000101531255744433100215030ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import dbus.service class GespeakerDBUSServiceUI(dbus.service.Object): "Class for UI handling" def __init__(self, gespeakerUI): self.gespeakerUI = gespeakerUI bus_name = dbus.service.BusName('org.gtk.gespeaker', bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, '/org/gtk/gespeaker/ui') @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='b') def new(self, confirm=True): "Clear the text with the confirm if requested" self.gespeakerUI.proxy['ui.new'](None, confirm) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def open(self, filename=None): "Open a text file with the dialog if filename was not provided" self.gespeakerUI.proxy['ui.open'](None, filename) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def save(self, filename=None): "Save the current text in a text file with the dialog if filename was not provided" self.gespeakerUI.proxy['ui.save'](None, filename) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def record(self, filename=None): "Record the voice in a wave file with dialog if filename was not provided" return self.gespeakerUI.proxy['ui.record'](None, filename) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui') def unrecord(self): "Disable recording" return self.gespeakerUI.proxy['ui.unrecord']() @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='b') def reset(self, confirm=True): "Reset the default settings with confirm if requested" self.gespeakerUI.proxy['ui.reset'](None, confirm) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui') def quit(self): "Close the application" self.gespeakerUI.proxy['ui.quit'](None, None) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui') def hide(self): "Hide the window" self.gespeakerUI.proxy['ui.set_window']('hide') @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='i', out_signature='s') def set_opacity(self, opacity): "Set window opacity" return self.gespeakerUI.proxy['ui.set_window']('set-opacity', opacity) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def set_position(self, position): "Set the window position" return self.gespeakerUI.proxy['ui.set_position'](position) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def set_size(self, size): "Set the window size" return self.gespeakerUI.proxy['ui.set_size'](size) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s', out_signature='s') def set_window(self, action): "Show the window" return self.gespeakerUI.proxy['ui.set_window'](action) @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui') def show(self): "Show the window" self.gespeakerUI.proxy['ui.set_window']('show') @dbus.service.method(dbus_interface='org.gtk.gespeaker.ui', in_signature='s') def play_text(self, text): "Replace the current text and play it" self.gespeakerUI.proxy['text.set'](text, 0) self.gespeakerUI.proxy['espeak.stop'](None, None) self.gespeakerUI.proxy['espeak.play'](None, None) gespeaker-0.8.6/plugins/plugin_dbus/dbus_voice.py000066400000000000000000000143401255744433100221750ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import dbus import dbus.service class GespeakerDBUSServiceVoice(dbus.service.Object): "Class for voice settings" def __init__(self, gespeakerUI): self.gespeakerUI = gespeakerUI bus_name = dbus.service.BusName('org.gtk.gespeaker', bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, '/org/gtk/gespeaker/voice') @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='as') def list_all_voices(self): "Return the list of available voices" return [language[0] for language in self.gespeakerUI.listLanguages] @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='as') def list_mbrola_voices(self): "Return the list of mbrola voices" mbrolaVoices = [] for index in range(len(self.gespeakerUI.listLanguages)): if self.gespeakerUI.listLanguages[index][2]: mbrolaVoices.append(self.gespeakerUI.listLanguages[index][0]) return mbrolaVoices @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='s') def get_voice_name(self, index): "Return the name of specified voice" return self.gespeakerUI.listLanguages[index][0] @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='s') def get_voice_short(self, index): "Return the short-name of specified voice" return self.gespeakerUI.listLanguages[index][1] @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def get_voice_is_mbrola(self, index): "Return if the specified voice is mbrola" return self.gespeakerUI.listLanguages[index][2] @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_voices_count(self): "Return the number of available voices" return len(self.gespeakerUI.listLanguages) @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_voice(self): "Return the index of current voice" return self.gespeakerUI.cboLanguages.get_active() @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def set_voice(self, voice): "Set the current voice" if voice in range(0, self.get_voices_count()): self.gespeakerUI.cboLanguages.set_active(voice) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='s', out_signature='b') def set_voice_by_name(self, voice): "Set the current voice by its name" voices = self.list_all_voices() if voice in voices: self.gespeakerUI.cboLanguages.set_active(voices.index(voice)) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='s') def get_voice_type(self): "Get the current voice type" if self.gespeakerUI.radioVoiceMale.get_property('sensitive'): return self.gespeakerUI.radioVoiceMale.get_active() and 'male' or 'female' else: return 'disabled' @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='s', out_signature='b') def set_voice_type(self, voice_type): "Set the current voice type" if voice_type in ('male', 'female') and \ self.gespeakerUI.radioVoiceMale.get_property('sensitive'): if voice_type == 'male': self.gespeakerUI.radioVoiceMale.set_active(True) else: self.gespeakerUI.radioVoiceFemale.set_active(True) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_pitch(self): "Return the current pitch" return self.gespeakerUI.hscPitch.get_value() @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def set_pitch(self, pitch): "Set the current pitch" if pitch in range(0, 100): self.gespeakerUI.hscPitch.set_value(pitch) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_volume(self): "Return the current volume" return self.gespeakerUI.hscVolume.get_value() @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def set_volume(self, volume): "Set the current volume" if volume in range(0, 201): self.gespeakerUI.hscVolume.set_value(volume) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_speed(self): "Return the current speed" return self.gespeakerUI.hscSpeed.get_value() @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def set_speed(self, speed): "Set the current speed" if speed in range(80, 391): self.gespeakerUI.hscSpeed.set_value(speed) return True else: return False @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', out_signature='i') def get_delay(self): "Return the current delay" return self.gespeakerUI.hscDelay.get_value() @dbus.service.method(dbus_interface='org.gtk.gespeaker.voice', in_signature='i', out_signature='b') def set_delay(self, delay): "Set the current delay" if delay in range(0, 101): self.gespeakerUI.hscDelay.set_value(delay) return True else: return False gespeaker-0.8.6/plugins/plugin_dbus/icon.svg000066400000000000000000000267161255744433100211640ustar00rootroot00000000000000 image/svg+xml Konversation application icon March 2006 Andreas Nilsson http://tango-project.org konversation chat irc gespeaker-0.8.6/plugins/plugin_debug/000077500000000000000000000000001255744433100176305ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_debug/__init__.py000066400000000000000000000050461255744433100217460ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Debug' PLUGIN_VERSION = '0.2' PLUGIN_DESCRIPTION = 'Debug interface' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = '' from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_Debug(GespeakerPlugin): def __init__(self, name, version, description, author, icon, website): "Module initialization" GespeakerPlugin.__init__(self, name, version, description, author, icon, website) self.logger('__init__("%s", "%s", "%s", "%s", "%s", "%s")' % ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR, PLUGIN_DESCRIPTION, PLUGIN_ICON, PLUGIN_WEBSITE)) def load(self): "Plugin load" GespeakerPlugin.load(self) self.logger('load()') def unload(self): "Plugin unload" GespeakerPlugin.unload(self) self.logger('unload()') def reload(self): "Plugin reload" GespeakerPlugin.reload(self) self.logger('reload()') def configure(self): "Plugin custom configuration" GespeakerPlugin.configure(self) self.logger('configure()') def update_ui(self): "Update UI for changes" GespeakerPlugin.update_ui(self) self.logger('update_ui()') def on_uiready(self, ui): self.logger('on_uiready(%s)' % ui) def on_closing(self): self.logger('on_closing()') def on_closed(self): self.logger('on_closed()') def on_shown(self): self.logger('on_shown()') def on_hidden(self): self.logger('on_hidden()') def on_terminate(self): self.logger('on_terminate()') plugin = GespeakerPlugin_Debug( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_debug/icon.svg000066400000000000000000001415251255744433100213110ustar00rootroot00000000000000 image/svg+xml Patrick Niklaus SchemeP gespeaker-0.8.6/plugins/plugin_stoponquit/000077500000000000000000000000001255744433100207675ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_stoponquit/__init__.py000066400000000000000000000030211255744433100230740ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Stop on quit' PLUGIN_VERSION = '0.1' PLUGIN_DESCRIPTION = 'Terminate previous play on quit' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = '' from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_StopOnQuit(GespeakerPlugin): def on_uiready(self, ui): self.ui = ui def on_closed(self): if self.ui.checkIfPlaying(): self.logger('interrupting previous play') self.ui.stopPlaying() plugin = GespeakerPlugin_StopOnQuit( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_stoponquit/icon.svg000066400000000000000000000205221255744433100224410ustar00rootroot00000000000000 image/svg+xml Stop Process December 2006 Jakub Steiner Andreas Nilsson stop halt gespeaker-0.8.6/plugins/plugin_voicesettings/000077500000000000000000000000001255744433100214305ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_voicesettings/__init__.py000066400000000000000000000043711255744433100235460ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Save voice settings' PLUGIN_VERSION = '0.1' PLUGIN_DESCRIPTION = 'Save voice settings on close' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = '' import Settings from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_SaveVoiceSettings(GespeakerPlugin): def on_uiready(self, ui): self.ui = ui def on_closing(self): # Save voice settings if SaveVoiceSettings is set if Settings.get('SaveVoiceSettings'): self.logger('Save voice settings') Settings.set('VoiceVolume', int(self.ui.hscVolume.get_value())) Settings.set('VoicePitch', int(self.ui.hscPitch.get_value())) Settings.set('VoiceSpeed', int(self.ui.hscSpeed.get_value())) Settings.set('VoiceDelay', int(self.ui.hscDelay.get_value())) Settings.set('VoiceTypeMale', self.ui.radioVoiceMale.get_active()) # Save language only if different from defaultLanguageIndex active = self.ui.cboLanguages.get_active() if not active is None: language = self.ui.cboLanguages.get_model()[active][0] language = self.ui.listLanguages[self.ui.cboLanguages.get_active()][0] Settings.set('VoiceLanguage', language) plugin = GespeakerPlugin_SaveVoiceSettings( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_voicesettings/icon.svg000066400000000000000000000213151255744433100231030ustar00rootroot00000000000000 image/svg+xml Volume Control multimedia sound volume knob control mixer Jakub Steiner http://jimmac.musichall.cz gespeaker-0.8.6/plugins/plugin_welcome/000077500000000000000000000000001255744433100201755ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_welcome/__init__.py000066400000000000000000000034731255744433100223150ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Welcome message' PLUGIN_VERSION = '0.1' PLUGIN_DESCRIPTION = 'Play welcome message on startup' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '' PLUGIN_WEBSITE = '' import Settings from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_Welcome(GespeakerPlugin): def on_uiready(self, ui): # Play welcome message if PlayWelcomeText is set if Settings.get('PlayWelcomeText'): if Settings.get('UseCustomWelcome'): # Play customized welcome message message = Settings.get('WelcomeText') else: # Play default welcome message message = Settings.default('WelcomeText') self.logger('Play welcome message: %s' % message) ui.proxy['text.set'](message, 0) ui.proxy['espeak.play'](None, None) plugin = GespeakerPlugin_Welcome( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_windowposition/000077500000000000000000000000001255744433100216365ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_windowposition/__init__.py000066400000000000000000000036411255744433100237530ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Save window position' PLUGIN_VERSION = '0.1' PLUGIN_DESCRIPTION = 'Save window position on close and restore it on startup' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = '' import Settings from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_SaveWindowPosition(GespeakerPlugin): def on_uiready(self, ui): self.ui = ui # Restore window size left = Settings.get('MainWindowLeft') top = Settings.get('MainWindowTop') self.logger('Load window position (%d,%d)' % (left, top)) self.ui.set_position('%dx%d' % (left, top)) def on_closing(self): # Save window size sizes = self.ui.winMain.get_position() self.logger('Save window position (%d,%d)' % (sizes[0], sizes[1])) Settings.set('MainWindowLeft', sizes[0]) Settings.set('MainWindowTop', sizes[1]) plugin = GespeakerPlugin_SaveWindowPosition( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_windowposition/icon.svg000066400000000000000000000346741255744433100233250ustar00rootroot00000000000000 image/svg+xml Patrick Niklaus State gespeaker-0.8.6/plugins/plugin_windowsize/000077500000000000000000000000001255744433100207445ustar00rootroot00000000000000gespeaker-0.8.6/plugins/plugin_windowsize/__init__.py000066400000000000000000000037421255744433100230630ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## PLUGIN_NAME = 'Save window size' PLUGIN_VERSION = '0.1' PLUGIN_DESCRIPTION = 'Save window size on close and restore it on startup' PLUGIN_AUTHOR = 'Fabio Castelli' PLUGIN_ICON = '%s/icon.svg' % __path__[0] PLUGIN_WEBSITE = '' import Settings from plugins import GespeakerPlugin, register_plugin class GespeakerPlugin_SaveWindowSize(GespeakerPlugin): def on_uiready(self, ui): self.ui = ui # Restore window size width = Settings.get('MainWindowWidth') height = Settings.get('MainWindowHeight') self.logger('Load window size (%dx%d)' % (width, height)) self.ui.winMain.set_default_size(width, height) def on_closing(self): # Save window size sizes = self.ui.winMain.get_size() self.logger('Save window size (%dx%d)' % (sizes[0], sizes[1])) Settings.set('MainWindowWidth', sizes[0]) Settings.set('MainWindowHeight', sizes[1]) Settings.set('SettingsExpander', self.ui.expSettings.get_expanded()) plugin = GespeakerPlugin_SaveWindowSize( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_DESCRIPTION, PLUGIN_AUTHOR, PLUGIN_ICON, PLUGIN_WEBSITE) register_plugin(PLUGIN_NAME, plugin) gespeaker-0.8.6/plugins/plugin_windowsize/icon.svg000066400000000000000000000372121255744433100224220ustar00rootroot00000000000000 image/svg+xml Patrick Niklaus State gespeaker-0.8.6/po/000077500000000000000000000000001255744433100141215ustar00rootroot00000000000000gespeaker-0.8.6/po/ar.po000066400000000000000000000172501255744433100150700ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Arabic translation for Gespeaker. # # Translators: # M I msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: M I \n" "Language-Team: Arabic (https://www.transifex.com/projects/p/gespeaker/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "الإعدادات المتقدمة" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "الإعدادات الأساسية" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "أكتب نصاً لقرائته" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "تأخير:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "أنثى" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "نغمة الصوت:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "السرعة:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "متنوع:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "صوت القارئ:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_تعديل" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_ملف" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_مساعدة" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_اللغة:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_ذكر" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_الصوت:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "قارئ الصوت" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola application" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "إعدادات أُخرى" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "تسجيل" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "حفظ التعديلات" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "رسالة الترحيب" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Co_mmand:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "رسالة الترحيب:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "تمكين التفاف النص" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "عام" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "تحميل اﻷصوات _المتنوعة" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "البرنامج الرئيسي mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "أصوات Mbrola " #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "مسار أصوات Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "الإعدادات" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "حفظ _حجم النافذة الرئيسية" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "_تسجيل كل القرائات في ملف صوتي واحد " #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "أقرأ _نص الترحيب عند بدء البرنامج" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_حفظ إعدادات الصوت تلقائيا" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_استخدم رسالة ترحيب خاصة" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "تجربة الصوت" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "حدث خطأ خلال تجربة تطبيق الصوت.\n\nخطأ %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "default" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "هل تريد حذف النص الحالي؟" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "الرجاء اختيار ملف نصي لفتحه" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "ملفات نصية (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "جميع الملفات " #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "خطأ في فتح الملف" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "الرجاء اختيار مكان حفظ الملف النصي" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "خطأ في حفظ الملف" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "هل تريد إعادة ضبط الإعدادات الافتراضية؟" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "واجهة رسومية بإستخدام GTK لبرنامج espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "الرجاء اختيار مكان حفظ الملف المسجل" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave ملف (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "يتم حفظ الملف الصوتي في : %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio sound server" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "تطبيق صوت خاص " #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_إختبار" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "اللغة" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "المصدر" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "الحالة" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "مثبّت" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "غير مثبّت" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d لغة من أصل %d تم إيجادها" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "برنامج mbrola مثبّت" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "برنامج mbrola غير مثبّت" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "أهلا بك في Gespeaker" gespeaker-0.8.6/po/bg.po000066400000000000000000000204041255744433100150510ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Bulgarian translation for Gespeaker. # # Translators: # Svetoslav Stefanov msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Svetoslav Stefanov \n" "Language-Team: Bulgarian (https://www.transifex.com/projects/p/gespeaker/language/bg/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Разширени настройки" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Основни настройки" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Вмъкнете текст за изпъление" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Па_уза:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "_Жена" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "_Височина:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "_Скорост:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Вариант:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Глас:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Редактиране" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Файл" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Помощ" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Език:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Мъж" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "Сила на _звука:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Аудио плеър" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Приложение на Mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Налични гласове на Mbrola" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Други настройки" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Записване" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Зазапзване на настройки" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Съобщение за добре дошли" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "_Команда:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Потребителско съобщение:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Пренасяне на текст" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Общи" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Зареждане варианти на гласове" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Основна програма mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Гласове на Mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Път до гласовете на Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Настройки" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Запазване размера на основния прозорец" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Запис на една пътека" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Изговаряне на приветствения текст при стартиране" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "Автоматично запазване настройките на гласовете" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "Използване на потребителско приветствено съобщение" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Звукова проба" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Възникна грешка при пробата на аудио плеъра.\n\nГрешка %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "bulgarian" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Желаете ли да изтриете текущия текст?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Моля изберете текстов файл за отваряне" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Текстови файлове (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Всички файлове" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Грешка при отварянето на файл" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Моля изберете къде да се запази текстовият файл" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Грешка при записването на файла" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Искате ли да се върнете към стандартните настройки?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "GTK обвивка за espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Моля изберете къде да се запази записаният файл" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave файлове (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Запазване на звукова пътека в: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA — Съвременна архитектура за звук на Линукс" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Звуков сървър PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Потребителско приложение за звук" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Проба" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Език" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Източник" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Състояние" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Инсталиран" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Не е инсталиран" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "засечени %d езика от %d" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Пакетът mbrola е инсталиран" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Пакетът mbrola не е инсталиран" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Добре дошли в Gespeaker" gespeaker-0.8.6/po/ca.po000066400000000000000000000160301255744433100150440ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Catalan translation for Gespeaker. # # Translators: # Adolfo Jayme Barrientos , 2015 msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues\n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2015-07-11 20:55+0000\n" "Last-Translator: Adolfo Jayme Barrientos\n" "Language-Team: Catalan (http://www.transifex.com/projects/p/gespeaker/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Paràmetres avançats" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Paràmetres bàsics" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Inseriu el text a reproduir" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "_Retard:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "_Femenina" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "_To:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Velo_citat:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Varia_nt:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Veu:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Edita" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Fitxer" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Ajuda" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Idioma:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Masculina" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Volum:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Reproductor d’àudio" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Aplicació MBROLA" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Veus MBROLA disponibles" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Altres paràmetres" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "S’està enregistrant" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "S’estan desant les preferències" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Missatge de benvinguda" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Or_dre:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Miss_atge personalitzat:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Habilita l’ajust del te_xt" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "General" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Carrega les _variants de veu" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Programa MBROLA principal" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Veus MBROLA" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Camí de les veus MBROLA:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Preferències" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Desa la m_ida de la finestra principal" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Desa els parmetres de veu automàticament" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Utilitza un missatge de benvinguda personalitzat" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Prova d’àudio" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "" "There was an error during the test for the audio player.\n" "\n" "Error %s: %s" msgstr "S’ha produït un error en fer la prova per al reproductor d’àudio.\n\nError %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "catalan" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Voleu suprimir el text actual?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Trieu el fitxer de text que voleu obrir" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Fitxers de text (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Tots els fitxers" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "S’ha produït un error en obrir el fitxer" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Trieu el lloc on es desarà el fitxer de text" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "S’ha produït un error en desar el fitxer" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Voleu restablir els paràmetres per defecte?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Trieu el lloc on es desarà el fitxer enregistrat" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Fitxers WAV (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA (Advanced Linux Sound Architecture)" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Servidor de so PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Prova" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Idioma" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Estat" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Instal·lat" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "No instal·lat" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Us donem la benvinguda al Gespeaker" gespeaker-0.8.6/po/de.po000066400000000000000000000164121255744433100150550ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # German translation for Gespeaker. # # Translators: # Heinrich Schwietering # Ettore Atalan , 2014 msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-09-23 21:54+0000\n" "Last-Translator: Ettore Atalan \n" "Language-Team: German (http://www.transifex.com/projects/p/gespeaker/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Grundeinstellungen" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Text zur Wiedergabe eingeben" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Verzögerun_g:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Wei_blich" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "T_onhöhe:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Geschwin_digkeit:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Varia_nte:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Stimme:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "B_earbeiten" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Datei" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Hilfe" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Sprache" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Männlich" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Lautstärke:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Audiospieler" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola-Anwendung" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Verfügbare Mbrola-Stimmen" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Weitere Einstellungen" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Aufnahme" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Speicherungseinstellungen" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Willkommensnachricht" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Bef_ehl:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Eigene N_achricht:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Te_xt-Wrapping aktivieren" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Allgemein" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Stimm_varianten laden" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Mbrola-Hauptprogramm" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola-Stimmen" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Pfad zu Mbrola-Stimmen:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Einstellungen" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Größe des Hauptfensters spe_ichern" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Mono-Aufn_ahme" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Ausgabe des _Willkommenstextes beim Programmstart" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Stimmen-Einstellungen automatisch speichern" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Eigene Willkommensnachricht verwenden" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Audio-Test" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Feher beim Testen des Soundsystems.\n\nFehler %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "german" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Soll der aktuelle Text gelöscht werden?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Bitte wählen Sie die zu öffnende Textdatei aus" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Textdateien (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Alle Dateien" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Fehler beim Öffnen der Datei" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Bitte den Speicherort für die Textdatei wählen" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Fehler beim Speichern der Datei" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Sollen die Standardeinstellungen wiederhergestellt werden?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Ein GTK-Frontend für espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Bitte Speicherort für die Aufnahme auswählen" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave-Dateien (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Zeichne Ton nach: %s auf" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio-Sound-Server" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Andere Sound-Anwendung " #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Testen" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Sprache" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Ressource" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Status" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Installiert" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Nicht installiert" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d Sprachen von %d möglichen gefunden" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Paket mbrola ist installiert" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Paket mbrola ist nicht installiert" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Willkommen bei Gespeaker ('gespieker')" gespeaker-0.8.6/po/el_GR.po000066400000000000000000000206631255744433100154600ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Greek translation for Gespeaker. # # Translators: # osar1 , 2015 msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues\n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2015-01-24 17:31+0000\n" "Last-Translator: osar1 \n" "Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/gespeaker/language/el_GR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: el_GR\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Προχωρημένες Ρυθμίσεις" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr " Βασικές ρυθμίσεις " #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Εισαγωγή κειμένου για αναπαραγωγή" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Kαθυστέρηση" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Γυναίκεια" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "pitch" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Ταχύτητα " #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Παραλλαγή:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Φωνή" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Επεξεργασία" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Αρχείο" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Βοήθεια" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Γλώσσα" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Αντρική" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Ένταση:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Audio player" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola εφαρμογή" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Διαθέσιμες φωνές Mbrola " #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Άλλες ρυθμίσεις" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Εγγραφή" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Αποθήκευση προτιμήσεων" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Μήνυμα καλωσορίσματος" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Εντολή" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Προσαρμοσμένο μήνυμα" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Ενεργοποίηση αναδίπλωσης κειμένου" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Γενικά " #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Φόρτωση φωνητικών παραλλαγών" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Κυρίως πρόγραμμα mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola φωνές" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Διαδρομή για Mbrola φωνές" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Προτιμήσεις" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Αποθήκευση μέγεθος του κυρίου παραθύρου" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Εγγραφή μονού αρχείου" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Ηχητικό μήνυμα καλωσορίσματος κατά την έναρξη του προγράμματος" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Αποθήκευση των φωνητικών ρυθμίσεων αυτόματα" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "Χρησιμοποιήστε προσαρμοσμένο μήνυμα καλωσορίσματος" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Δοκιμή ήχου" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "" "There was an error during the test for the audio player.\n" "\n" "Error %s: %s" msgstr "Υπήρξε ένα σφάλμα κατά τη διάρκεια της δοκιμής για τη συσκευή αναπαραγωγής ήχου\n\n\nΣφάλμα %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "greek" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Θέλετε να διαγράψετε το τρέχον κείμενο;" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Επιλέξτε αρχείο κειμένου" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Αρχεία κειμένου (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Όλα τα αρχεία" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Σφάλμα κατά το άνοιγμα του αρχείου" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Επιλέξτε πού θέλετε να αποθηκεύσετε το αρχείο κειμένου" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Αποθηκεύσετε το αρχείο σφαλμάτων" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Θέλετε να επαναφέρετε τις προεπιλεγμένες ρυθμίσεις;" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Ένα GTK frontend για το espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Επιλέξτε πού θέλετε να αποθηκεύσετε το εγγεγραμμένο αρχείο" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave αρχεία (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Εγγραφή ήχου στο:ν %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Σύνθετη αρχιτεκτονική ήχου στο Linux" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Εξυπηρετητής ήχου PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Προσαρμοσμένη εφαρμογή αναπαραγωγής ήχου" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Δοκιμή" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Γλώσσα " #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Πόροι" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Κατάσταση" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Εγκαταστάθηκε" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Δεν έχει εγκατασταθεί" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d ανίχνευση%d γλώσσας" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Το πακέτο mbrola έχει εγκατασταθεί" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Το πακέτο mbrola δεν έχει εγκατασταθεί" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Καλώς ήρθατε στο Gespeaker" gespeaker-0.8.6/po/en.po000066400000000000000000000160011255744433100150610ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # English translation for Gespeaker. # # Translators: # Fabio Castelli (Muflone) msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Fabio Castelli (Muflone) \n" "Language-Team: English (http://www.transifex.com/projects/p/gespeaker/language/en/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Advanced settings" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Base settings" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Insert text to play" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Dela_y:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Fem_ale" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "P_itch:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Spee_d:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Varia_nt:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Voice:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Edit" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_File" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Help" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Language:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Male" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Volume:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Audio player" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola application" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Mbrola voices available" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Other settings" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Recording" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Saving preferences" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Welcome message" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Co_mmand:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Custom mess_age:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Enable te_xt wrapping" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "General" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Load voice _variants" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Main program mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola voices" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Mbrola voices path:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Preferences" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Save main window s_ize" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Single track _record" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Speak _welcome text on program start" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Save voice settings automatically" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Use custom welcome message" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Audio testing" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "There was an error during the test for the audio player.\n\nError %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "english" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Do you want to delete the current text?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Please select the text file to open" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Text files (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "All files" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Error opening the file" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Please select where to save the text file" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Error saving the file" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Do you want to reset the default settings?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "A GTK frontend for espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Please select where to save the recorded file" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave files (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Recording audio track to: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio sound server" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Custom sound application" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Test" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Language" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Resource" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Status" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Installed" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Not installed" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d languages of %d detected" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Package mbrola installed" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Package mbrola not installed" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Welcome in Gespeaker" gespeaker-0.8.6/po/es.po000066400000000000000000000164431255744433100151000ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Spanish translation for Gespeaker. # # Translators: # David Prieto # Adolfo Jayme Barrientos msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/gespeaker/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Configuración avanzada" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Configuración básica" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Introduzca un texto para reproducir" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Retras_o:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Mu_jer" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "_Tono:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "V_elocidad:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Varia_nte:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Voz:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "E_ditar" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Archivo" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "Ay_uda" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Idioma:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Hombre" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Volumen:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Reproductor de sonido" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Aplicación mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Voces disponibles de mbrola" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Otras opciones" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Grabación" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Guardar las preferencias" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Mensaje de bienvenida" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "C_omando:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "M_ensaje personalizado:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Activar el _retorno de línea" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "General" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Cargar _variantes de voz" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Programa principal mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Voces Mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Directorio voces Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Preferencias" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Guardar el _tamaño de la ventana principal" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "_Grabación en una pista" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Leer el mensaje de _bienvenida al abrir el programa" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "Guardar las opciones _de voz automáticamente" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Usar el mensaje de bienvenida personalizado" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Comprobar el audio" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Se ha producido un error al comprobar el reproductor de audio.\n\nError %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "spanish" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "¿Quiere eliminar el texto actual?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Seleccione el archivo de texto a abrir" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Archivos de texto (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Todos los archivos" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Error al abrir el archivo" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Elija dónde guardar el archivo de texto" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Error al guardar el archivo" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "¿Quiere recuperar las opciones predeterminadas?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Interfaz en GTK para espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Elija dónde guardar la grabación" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Archivos wave (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Grabando la pista de audio en: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Servidor de audio PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Aplicación de audio personalizada" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "Co_mprobar" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Idioma" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Recursos" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Estado" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Instalado" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "No instalado" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d idiomas de los %d detectados" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "El paquete mbrola está instalado" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "El paquete mbrola no está instalado" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Bienvenido a Gespeaker" gespeaker-0.8.6/po/fo.po000066400000000000000000000157241255744433100150760ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Faroese translation for Gespeaker. # # Translators: # Gunleif Joensen msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Gunleif Joensen \n" "Language-Team: Faroese (http://www.transifex.com/projects/p/gespeaker/language/fo/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fo\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Framkomnar uppsetingar" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Grunduppsetingar" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Set inn tekst til avspælingar" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Kvinn_a" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Ferð" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Rødd" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Ritstjórna" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Fíla" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Hjálp" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "Má_l:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Mannfólka" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "Ljóðs_tyrki:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Ljóðavspælari" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola nýtsluskipanin" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Tøkar Mbrola røddir" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Aðrar uppsetingar" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Upptøka" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Goymi uppseting" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Vælkomstboð" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "_Stýriboð:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Tillagað boð:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Alment" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola røddir" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Leið til Mbrola røddir:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Uppseting" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Goym stø_dd á høvuðsglugga" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Einkultspora _upptøka" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Les upp _vælkomsttekstin við forritsbyrjan" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Sjálvirkandi goym setingar á røddum" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Nýt tilgjørd vælkomstboð" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Ljóðroynd" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Har var ein villa undir ljóðroyndini av ljóðavspælaranum.\n\nVilla %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "default" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Vil tú strika núverandi tekstin?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Vinarliga vel tekstfíluna ið skal latast upp" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Tekstfílur (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Allar fílur" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Villa við upplating av fílu" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Vinarliga vel, hvar tekstfílan skal goymast" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Villa við goyman av fílu" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Vil tú tómstilla forsettu uppsetingina?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Vinarliga vel, hvar upptøkufílan skal goymast" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wavefílur (*.Wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Upptaki ljóðspor á: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio ljóðambætari" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Tillaga ljóðnýtsluskipan" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Roynd" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Mál" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Støða" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Innlagt" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Ikki innlagt" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d mál av %d funni(n)" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Mbrolapakkin innlagdur" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Mbrolapakkin er ikki innlagdur" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Vælkomin til Gespeaker" gespeaker-0.8.6/po/fr.po000066400000000000000000000163761255744433100151050ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # French translation for Gespeaker. # # Translators: # Emmanuel msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Emmanuel \n" "Language-Team: French (http://www.transifex.com/projects/p/gespeaker/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Paramètres avancés" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Paramètres par défaut" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Insérer le texte à lire" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Déla_i:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Fémini_ne" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "_Tonalité:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Vite_sse:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Va_riante:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Voix:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "É_dition" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Fichier" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "Aid_e" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "Lang_ue:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Masculine" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Volume:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Lecteur audio" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Application Mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Voix Mbrola disponibles" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Autres paramètres" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Enregistrement" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Enregistrer les préférences" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Message de bienvenu" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "_Commande:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Message p_ersonnalisé" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "_Activer le retour à la ligne" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Général" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "C_harger les variantes des voix" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Programme principal mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Voix Mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Parcour des voix Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Préférences" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Enregistrer les _dimensions de la fenêtre principale" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "En_registrement piste unique" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Lire le _message de bienvenu au lancement du programme" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "Enreg_istrer les paramètres de la voix automatiquement" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Utiliser le message de bienvenu personnalisé" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Vérifier l'audio" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Une erreur s'est produite pendant l'exécution du lecteur audio.\n\nErreur %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "french" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Voulez-vous effacer le texte courant?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Choisir le fichier texte à ouvrir" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Fichiers texte (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Tout les fichiers" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Erreur en ouvrant le fichier" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Choisir où enregistrer le fichier texte" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Erreur en enregistrant le fichier" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Voulez-vous rétablir les paramètres par défaut?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Une interface GTK pour espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Choisir où sauvegarder le fichier enregistré" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Fichiers Wave (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Enregistrement piste audio sous: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Serveur audio PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Application sonore personnalisée" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "Veri_fier" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Langue" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Ressource" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "État" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Installé" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Pas installé" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d langues sur %d détectées" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Paquet mbrola installé" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Paquet mbrola pas installé" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Bienvenu dans Gespeaker" gespeaker-0.8.6/po/genpot.sh000077500000000000000000000007051255744433100157560ustar00rootroot00000000000000#!/bin/bash POTFILE="new/gespeaker.pot" if ! [ -d new ] then mkdir new fi if [ -f ../data/ui/*.glade.h ] then rm ../data/ui/*.glade.h fi intltool-extract --type=gettext/glade ../data/ui/gespeaker.glade intltool-extract --type=gettext/glade ../data/ui/preferences.glade if ! [ -f $POTFILE ] then touch $POTFILE fi xgettext --language=Python --keyword=_ --keyword=N_ --output $POTFILE ../data/ui/*.glade.h ../src/*.py rm ../data/ui/*.glade.h read gespeaker-0.8.6/po/gespeaker.pot000066400000000000000000000131321255744433100166130ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # X translation for Gespeaker. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "" gespeaker-0.8.6/po/it.po000066400000000000000000000163611255744433100151040ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Italian translation for Gespeaker. # # Translators: # Fabio Castelli (Muflone) msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Fabio Castelli \n" "Language-Team: Italian (http://www.transifex.com/projects/p/gespeaker/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Impostazioni avanzate" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Impostazioni di base" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Inserisci il testo da riprodurre" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Ritar_do:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Femmini_le" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "_Tonalità:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "_Velocità:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Variant_e:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Voce:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Modifica" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_File" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "A_iuto" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "Li_ngua:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "M_aschile" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "V_olume:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Riproduttore audio" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Applicazione Mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Voci Mbrola disponibili" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Altre impostazioni" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Registrazione" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Salvataggio delle preferenze" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Messaggio di benvenuto" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "_Comando:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Messaggio p_ersonalizzato:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Attiva a capo del _testo" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Generale" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Carica _varianti delle voci" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Programma principale mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Voci Mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Percorso delle voci Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Preferenze" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Salva _dimensioni della finestra principale" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "_Registrazione traccia singola" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Riproduci _messaggio di benvenuto all'avvio del programma" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "Salva _impostazioni della voce automaticamente" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Utilizza messaggio di benvenuto personalizzato" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Prova dell'audio" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Si è verificato un errore durante la prova del riproduttore audio.\n\nErrore %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "italian" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Vuoi cancellare il testo corrente?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Scegliere il file di testo da aprire" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Files di testo (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Tutti i files" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Errore nell'apertura del file" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Scegliere dove salvare il file di testo" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Errore nel salvataggio del file" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Ripristinare le impostazioni predefinite?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Un'interfaccia in GTK per espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Scegliere dove salvare il file registrato" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Files Wave (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Registrazione traccia audio su: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Server audio PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Applicazione sonora personalizzata" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Prova" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Lingua" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Risorsa" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Stato" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Installato" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Non installato" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d lingue su %d rilevate" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Pacchetto mbrola installato" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Pacchetto mbrola non installato" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Benvenuto in Gespeaker" gespeaker-0.8.6/po/nl_NL.po000066400000000000000000000163171255744433100154730ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Dutch translation for Gespeaker. # # Translators: # Heimen Stoffels , 2015 msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues\n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2015-03-01 12:43+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch (Netherlands) (http://www.transifex.com/projects/p/gespeaker/language/nl_NL/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Geavanceerde instellingen" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Basisinstellingen" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Voer tekst in om af te spelen" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Vertr_aging:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Vrouw_elijk" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "T_oonhoogte:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Snel_heid:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Varia_nt:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Stem:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Bewerken" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "Be_stand" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Hulp" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Taal:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Mannelijk" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Volume:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Audiospeler" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola-applicatie" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Mbrola-stemmen beschikbaar" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Andere instellingen" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Opname" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Bezig met opslaan van voorkeuren" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Welkomstbericht" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Co_mmando:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Aangepast _bericht:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Te_kstomloop inschakelen" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Algemeen" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Stem_varianten laden" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Algemene applicatie mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola-stemmen" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Pad naar Mbrola-stemmen:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Voorkeuren" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Algemene venster_grootte opslaan" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Losse track_opname" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "_Welkomsttekst uitspreken bij programmastart" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "Steminstellingen automatisch _opslaan" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "Aangepast welkomstbericht _gebruiken" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Audiotest" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "" "There was an error during the test for the audio player.\n" "\n" "Error %s: %s" msgstr "Er is een fout opgetreden tijdens het testen van de audiospeler.\n\nFout %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "default" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Wilt u de huidige tekst verwijderen?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Selecteer een tekstbestand om te openen" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Tekstbestanden (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Alle bestanden" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Fout bij openen van bestand" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Selecteer opslaglocatie van tekstbestand" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Fout bij opslaan van bestand" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Wilt u de standaardinstellingen herstellen?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Een GTK-frontend voor espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Selecteer een opslaglocatie voor het opnamebestand" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave-bestanden (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Bezig met opnemen van audiotrack naar: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio-geluidsserver" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Aangepaste geluidsapplicatie" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Testen" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Taal" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Bron" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Status" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Geïnstalleerd" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Niet geïnstalleerd" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d talen van %d gevonden" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Het mbrola-pakket is geïnstalleerd" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Het mbrola-pakket is niet geïnstalleerd" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Welkom bij Gespeaker" gespeaker-0.8.6/po/pl.po000066400000000000000000000161571255744433100151060ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Polish translation for Gespeaker. # # Translators: # Andrey J. msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Andrey J. \n" "Language-Team: Polish (http://www.transifex.com/projects/p/gespeaker/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Ustawienia zaawansowane" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Ustawienia podstawowe" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Wstaw tekst do czytania" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "_Opóźnienie:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "_Kobieta" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "Wy_sokość" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "Temp_o:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Waria_nt:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Głos:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Edycja" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Plik" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "Pomo_c" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Język:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Mężczyzna" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Głośność:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Odtwarzacz audio" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Program Mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Dostępne głosy Mbrola" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Inne ustawienia" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Nagrywanie" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Zapisz preferencje" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Powitanie" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Po_lecenie:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Własne po_witanie:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Włącz _zawijanie tekstu" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Ogólne" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Ładuj wa_rianty głosów" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Główny program mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Głosy mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Ścieżka do głosów mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Preferencje" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Zapisz rozmiar o_kna" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Nagraj z _jedną ścieżką" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Mów powi_tanie po uruchomieniu" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Zapisz ustawienia głosu automatycznie" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Użyj własnego powitania" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Test dźwięku" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Wystąpił błąd podczas testu odtwarzacza audio.\n\nError %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "polish" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Czy chcesz usunąć bieżący tekst?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Wybierz plik tekstowy do otwarcia" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Pliki tekstowe (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Wszystkie pliki" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Błąd otwarcia pliku" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Wybierz gdzie zapisać plik tekstowy" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Błąd zapisu pliku" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Czy chcesz wrócić do domyślnych ustawień?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Frontend GTK dla espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Wybierz gdzie zapisać nagrany plik" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Pliki wave (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Nagrywam ścieżkę audio do: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "Serwer dźwięku PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Własny odtwarzacz audio" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Test" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Język" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Źródło" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Status" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Zainstalowany" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Nie zainstalowany" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "Wykryto języków: %d z %d" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Pakiet mbrola zainstalowany" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Pakiet mbrola nie zainstalowany" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Witamy w Gespeaker" gespeaker-0.8.6/po/tr.po000066400000000000000000000161261255744433100151140ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Turkish translation for Gespeaker. # # Translators: # Necdet Yücel msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Necdet Yücel \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/gespeaker/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Gelişmiş ayarlar" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Temel ayarlar" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Çalınacak metni girin" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "_Gecikme:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "_Kadın" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "T_on:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "_Hız:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "_Seçenekler:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Ses:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Düzenle:" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "Do_sya" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Yardım" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "Di_l" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Erkek" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "Ses düze_yi:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Ses oynatıcı" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Mbrola uygulaması" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Mbrola sesi mevcut" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Diğer ayarlar" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Kaydediyor" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Tercihler kaydediliyor" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Karşılama mesajı" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "Kom_ut:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Özel mesa_j" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Metin ka_ydırmayı etkinleştir" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Genel" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Ses seçeneklerini _yükle" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Temel program mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Mbrola sesleri" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Mbrola ses yolu:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Seçenekler" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Ana pencere boyutunu _kaydet" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Tek parça _kaydı" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "_Program açılırken karşılama mesajını oku" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Ses ayarlarını otomatik olarak kaydet" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Özelleştirilmiş karşılama mesajı kullan" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Ses deneniyor" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Ses oynatıcı deneirken hatayla karşılaşıldı.\n\nHata %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "turkish" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Mevcut metni silmek istiyor musunuz?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Lütfen açılacak metin dosyasını seçin" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Metin dosyaları (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Tüm dosyalar" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Dosya açılamadı" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Lütfen metin dosyasının nereye kaydedileceğini seçin" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Dosya kaydedilemedi" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Öntanımlı ayarlara dönmek istiyor musunuz?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Espeak için bir GTK önyüzü" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Lütfen kaydedilen dosyanın nereye kaydedileceğini seçin." #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Wave dosyaları (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Ses dosyaları kaydediliyor: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Gelişmiş Linux Ses Mimarisi" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio ses sunucusu" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Özel ses uygulaması" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "De_neme" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Dil" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Kaynak" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Durum" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Yüklendi" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Yüklenmedi" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d için %d dil algılandı" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Mbrola paketi yüklendi" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Mbrola paketi yüklenmedi" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Gespeaker'a hoşgeldiniz" gespeaker-0.8.6/po/vi.po000066400000000000000000000173161255744433100151070ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Vietnamese translation for Gespeaker. # # Translators: # Anh Phan msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues \n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2014-08-31 00:06+0200\n" "Last-Translator: Anh Phan \n" "Language-Team: Vietnamese (http://www.transifex.com/projects/p/gespeaker/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "Thiết lập nâng cao" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "Thiết lập cơ bản" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "Điền vào văn bản để đọc" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "Độ t_rễ:" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "Gi_ọng nữ" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "M_ức độ:" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "T_ốc độ:" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "Độ b_iến đổi:" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "Giọng:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "_Chỉnh sửa" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "_Tập ti" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "_Trợ giúp" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "_Ngôn ngữ:" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "_Giọng nam" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "_Âm lượng:" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "Chương trình phát Audio" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "Ứng dụng Mbrola" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "Hiện đã có giọng nói của Mbrola" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "Các thiết lập khác" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "Ghi âm" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "Lưu lại các chỉnh sửa" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "Nội dung phần chào mừng" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "L_ệnh:" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "Thông b_áo tự chọn:" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "Bật tính năng c_anh lề" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "Tổng quan" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "Tải độ cao _giọng phát" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "Chương trình chính trong mbrola" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "Giọng nói kiểu Mbrola" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "Đường dẫn đến giọng kiểu Mbrola:" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "Tùy biến" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "Lưu lại kí_ch thước cửa sổ" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "Lưu lại _track đơn lẻ" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "Phát _âm chào mừng khi chương trình được khởi động" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "_Tự động lưu lại các thiết lập về giọng phát" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "_Sử dụng lời chào mừng do người dùng lựa chọn" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "Phát thử audio" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "There was an error during the test for the audio player.\n\nError %s: %s" msgstr "Xảy ra lỗi khi kiểm thử phần phát audio.\n\nLỗi %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "vietnam" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "Bạn có muốn xóa đoạn văn bản hiện tại hay không?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "Xin vui lòng chọn một tập tin văn bản để mở" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "Tập tin văn bản (*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "Tất cả các loại tập tin" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "Xảy ra lỗi khi mở tập tin" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "Xin vui lòng chọn nơi để lưu lại tập tin văn bản" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "Xảy ra lỗi khi lưu lại tập tin" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "Bạn có muốn cài đặt lại toàn bộ các thiết lập về trạng thái mặc định hay không?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "Sử dụng GTK cho espeak" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "Xin vui lòng chọn nơi để lưu lại tập tin đã ghi âm" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "Tập tin dạng Wave (*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "Ghi âm lại track audio tại: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA - Advanced Linux Sound Architecture" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio sound server" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "Ứng dụng âm thanh tự lựa chọn" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "_Kiểm thử" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "Ngôn ngữ" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "Nguồn công cụ" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "Trạng thái" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "Đã cài đặt" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "Chưa cài đặt" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "%d ngôn ngữ trong tổng số %d đã được nhận diện" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "Đã cài đặt gói mbrola" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "Vẫn chưa cài đặt gói mbrola" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "Chào mừng bạn đã đến với Gespeaker" gespeaker-0.8.6/po/zh.po000066400000000000000000000155501255744433100151100ustar00rootroot00000000000000# Gespeaker # A GTK frontend for eSpeak # Copyright (C) 2009-2015 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gespeaker/ # This file is distributed under the same license of Gespeaker. # Chinese translation for Gespeaker. # # Translators: # Dolores Li , 2015 msgid "" msgstr "" "Project-Id-Version: Gespeaker\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gespeaker/issues\n" "POT-Creation-Date: 2010-06-12 14:02+0200\n" "PO-Revision-Date: 2015-01-31 00:45+0000\n" "Last-Translator: Dolores Li \n" "Language-Team: Chinese (http://www.transifex.com/projects/p/gespeaker/language/zh/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../data/ui/gespeaker.glade.h:1 msgid "Advanced settings" msgstr "高级设置" #: ../data/ui/gespeaker.glade.h:2 msgid "Base settings" msgstr "基本设置" #: ../data/ui/gespeaker.glade.h:3 msgid "Insert text to play" msgstr "插入要播放的文本" #: ../data/ui/gespeaker.glade.h:4 msgid "Dela_y:" msgstr "延迟(_Y):" #: ../data/ui/gespeaker.glade.h:5 msgid "Fem_ale" msgstr "女性(_A)" #: ../data/ui/gespeaker.glade.h:6 msgid "P_itch:" msgstr "音高(_I)" #: ../data/ui/gespeaker.glade.h:7 msgid "Spee_d:" msgstr "速度(_D)" #: ../data/ui/gespeaker.glade.h:8 msgid "Varia_nt:" msgstr "变体(_N)" #: ../data/ui/gespeaker.glade.h:9 msgid "Voice:" msgstr "声音:" #: ../data/ui/gespeaker.glade.h:10 msgid "_Edit" msgstr "编辑(_E)" #: ../data/ui/gespeaker.glade.h:11 msgid "_File" msgstr "文件(_F)" #: ../data/ui/gespeaker.glade.h:12 msgid "_Help" msgstr "帮助(_H)" #: ../data/ui/gespeaker.glade.h:13 msgid "_Language:" msgstr "语言(_Language)" #: ../data/ui/gespeaker.glade.h:14 msgid "_Male" msgstr "男性(_M)" #: ../data/ui/gespeaker.glade.h:15 msgid "_Volume:" msgstr "音量(_V)" #: ../data/ui/preferences.glade.h:1 msgid "Audio player" msgstr "音频播放器" #: ../data/ui/preferences.glade.h:2 msgid "Mbrola application" msgstr "mbrola应用" #: ../data/ui/preferences.glade.h:3 msgid "Mbrola voices available" msgstr "可用的mbrola声音" #: ../data/ui/preferences.glade.h:4 msgid "Other settings" msgstr "其它设置" #: ../data/ui/preferences.glade.h:5 msgid "Recording" msgstr "录制" #: ../data/ui/preferences.glade.h:6 msgid "Saving preferences" msgstr "保存偏好" #: ../data/ui/preferences.glade.h:7 msgid "Welcome message" msgstr "欢迎信息" #: ../data/ui/preferences.glade.h:8 msgid "Co_mmand:" msgstr "命令(_M)" #: ../data/ui/preferences.glade.h:9 msgid "Custom mess_age:" msgstr "自定信息(_A)" #: ../data/ui/preferences.glade.h:10 msgid "Enable te_xt wrapping" msgstr "启用文本折行(_X)" #: ../data/ui/preferences.glade.h:11 msgid "General" msgstr "通用" #: ../data/ui/preferences.glade.h:12 msgid "Load voice _variants" msgstr "载入声音变体(_V)" #: ../data/ui/preferences.glade.h:13 msgid "Main program mbrola" msgstr "mbrola主程序" #: ../data/ui/preferences.glade.h:14 msgid "Mbrola voices" msgstr "mbrola声音" #: ../data/ui/preferences.glade.h:15 msgid "Mbrola voices path:" msgstr "mbrola声音路径" #: ../data/ui/preferences.glade.h:16 msgid "Preferences" msgstr "偏好" #: ../data/ui/preferences.glade.h:17 msgid "Save main window s_ize" msgstr "保存主窗口大小(_I)" #: ../data/ui/preferences.glade.h:18 msgid "Single track _record" msgstr "单轨录音(_R)" #: ../data/ui/preferences.glade.h:19 msgid "Speak _welcome text on program start" msgstr "程序启动时念出欢迎文本(_W)" #: ../data/ui/preferences.glade.h:20 msgid "_Save voice settings automatically" msgstr "自动保存声音设定(_S)" #: ../data/ui/preferences.glade.h:21 msgid "_Use custom welcome message" msgstr "使用自定欢迎信息(_U)" #: ../src/EspeakFrontend.py:87 ../src/EspeakFrontend.py:113 #: ../src/PreferencesWindow.py:198 msgid "Audio testing" msgstr "音频测试" #: ../src/EspeakFrontend.py:89 ../src/EspeakFrontend.py:115 #: ../src/PreferencesWindow.py:200 #, python-format msgid "" "There was an error during the test for the audio player.\n" "\n" "Error %s: %s" msgstr "音频播放器测试出错\n\n错误 %s: %s" #: ../src/gespeakerUI.py:175 ../src/Settings.py:78 msgid "default language" msgstr "Mandarin" #: ../src/gespeakerUI.py:272 msgid "Do you want to delete the current text?" msgstr "您想删除当前文本吗?" #: ../src/gespeakerUI.py:287 msgid "Please select the text file to open" msgstr "请选择要打开的文本本件" #: ../src/gespeakerUI.py:290 ../src/gespeakerUI.py:328 msgid "Text files (*.txt)" msgstr "文本文件(*.txt)" #: ../src/gespeakerUI.py:291 ../src/gespeakerUI.py:330 #: ../src/gespeakerUI.py:559 msgid "All files" msgstr "全部文件" #: ../src/gespeakerUI.py:305 ../src/gespeakerUI.py:314 msgid "Error opening the file" msgstr "文件打开失败" #: ../src/gespeakerUI.py:326 msgid "Please select where to save the text file" msgstr "请选择文本文件保存位置" #: ../src/gespeakerUI.py:347 ../src/gespeakerUI.py:356 msgid "Error saving the file" msgstr "文件保存失败" #: ../src/gespeakerUI.py:368 msgid "Do you want to reset the default settings?" msgstr "您想重置为默认设置吗?" #: ../src/gespeakerUI.py:404 msgid "A GTK frontend for espeak" msgstr "espeak的GTK前端" #: ../src/gespeakerUI.py:555 msgid "Please select where to save the recorded file" msgstr "请选择录制文件保存位置" #: ../src/gespeakerUI.py:558 msgid "Wave files (*.wav)" msgstr "波形文件(*.wav)" #: ../src/gespeakerUI.py:576 #, python-format msgid "Recording audio track to: %s" msgstr "把音频录制到: %s" #: ../src/PreferencesWindow.py:107 msgid "ALSA - Advanced Linux Sound Architecture" msgstr "ALSA" #: ../src/PreferencesWindow.py:110 msgid "PulseAudio sound server" msgstr "PulseAudio" #: ../src/PreferencesWindow.py:112 msgid "Custom sound application" msgstr "自定声音应用" #: ../src/PreferencesWindow.py:114 msgid "_Test" msgstr "测试(_T)" #: ../src/PreferencesWindow.py:130 msgid "Language" msgstr "语言 - Language" #: ../src/PreferencesWindow.py:136 msgid "Resource" msgstr "资源" #: ../src/PreferencesWindow.py:142 msgid "Status" msgstr "状态" #: ../src/PreferencesWindow.py:225 msgid "Installed" msgstr "已安装" #: ../src/PreferencesWindow.py:225 msgid "Not installed" msgstr "未安装" #: ../src/PreferencesWindow.py:227 #, python-format msgid "%d languages of %d detected" msgstr "检测到 %d 种语言,共 %d 种" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola installed" msgstr "已安装 mbrola" #: ../src/PreferencesWindow.py:234 msgid "Package mbrola not installed" msgstr "未安装 mbrola" #: ../src/Settings.py:64 msgid "Welcome in Gespeaker" msgstr "欢迎使用 Gespeaker" gespeaker-0.8.6/setup.py000077500000000000000000000062631255744433100152270ustar00rootroot00000000000000#!/usr/bin/env python ## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## from distutils.core import setup from distutils.command.install_data import install_data from distutils.dep_util import newer from distutils.log import info from glob import glob import os import sys class InstallData(install_data): def run (self): self.install_translations() install_data.run(self) def install_translations(self): info('Installing translations...') for po in glob(os.path.join('po', '*.po')): lang = os.path.basename(po[:-3]) mo = os.path.join('build', 'mo', lang, 'gespeaker.mo') directory = os.path.dirname(mo) if not os.path.exists(directory): info('creating %s' % directory) os.makedirs(directory) cmd = 'msgfmt -o %s %s' % (mo, po) info('compiling %s -> %s' % (po, mo)) if os.system(cmd) != 0: raise SystemExit('Error while running msgfmt') dest = os.path.join('share', 'locale', lang, 'LC_MESSAGES') self.data_files.append((dest, [mo])) setup( name='Gespeaker', version='0.8.6', description='A GTK+ frontend for eSpeak and mbrola', author='Fabio Castelli', author_email='muflone@vbsimple.net', url='http://www.muflone.com/gespeaker/', license='GPL v2', scripts=['gespeaker'], data_files=[ ('share/applications', ['data/gespeaker.desktop']), ('share/gespeaker/data', ['data/testing.wav']), ('share/gespeaker/data/icons', glob('data/icons/*')), ('share/gespeaker/data/ui', glob('data/ui/*.glade')), ('share/doc/gespeaker', ['doc/README', 'doc/changelog', 'doc/translators']), ('share/doc/gespeaker/dbus', glob('doc/dbus/*')), ('share/man/man1', ['man/gespeaker.1']), ('share/gespeaker/plugins/plugin_dbus', glob('plugins/plugin_dbus/*')), ('share/gespeaker/plugins/plugin_debug', glob('plugins/plugin_debug/*')), ('share/gespeaker/plugins/plugin_stoponquit', glob('plugins/plugin_stoponquit/*')), ('share/gespeaker/plugins/plugin_voicesettings', glob('plugins/plugin_voicesettings/*')), ('share/gespeaker/plugins/plugin_welcome', glob('plugins/plugin_welcome/*')), ('share/gespeaker/plugins/plugin_windowposition', glob('plugins/plugin_windowposition/*')), ('share/gespeaker/plugins/plugin_windowsize', glob('plugins/plugin_windowsize/*')), ('share/gespeaker/src', glob('src/*.py')) ], cmdclass={'install_data': InstallData} ) gespeaker-0.8.6/src/000077500000000000000000000000001255744433100142725ustar00rootroot00000000000000gespeaker-0.8.6/src/DialogAbout.py000066400000000000000000000040671255744433100170450ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk def DialogAbout(name=None, version=None, comment=None, copyright=None, license=None, website=None, website_label=None, authors=None, translation=None, documentation=None, artists=None, logo=None, icon=None): "Show an About Dialog with specified arguments" about = gtk.AboutDialog() if name: about.set_name(name) if version: about.set_version(version) if comment: about.set_comments(comment) if copyright: about.set_copyright(copyright) if license: about.set_license(license) if website: about.set_website(website) if website_label: about.set_website_label(website_label) gtk.about_dialog_set_url_hook(lambda url, data=None: url) if authors: about.set_authors(authors) if translation: about.set_translator_credits(translation) if documentation: about.set_documenters(documentation) if artists: about.set_artists(artists) if logo: if isinstance(logo, gtk.gdk.Pixbuf): about.set_logo(logo) else: about.set_logo(gtk.gdk.pixbuf_new_from_file(logo)) if icon: about.set_icon_from_file(icon) about.run() about.destroy() gespeaker-0.8.6/src/DialogFileOpenSave.py000066400000000000000000000053331255744433100203100ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli # Copyright: 2009-2014 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # On Debian GNU/Linux systems, the full text of the GNU General Public License # can be found in the file /usr/share/common-licenses/GPL-2. ## import gtk class DialogFileOpenSave(gtk.FileChooserDialog): def __init__(self, useForOpen=True, title=None, initialDir=None, initialFile=None, askOverwrite=True): gtk.FileChooserDialog.__init__( self, title=title, parent=None, action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, useForOpen and gtk.STOCK_OPEN or gtk.STOCK_SAVE, gtk.RESPONSE_OK ) ) self.connect('response', self._response_callback) if initialDir: self.set_current_folder(initialDir) if initialFile: self.set_current_name(initialFile) self.set_do_overwrite_confirmation(askOverwrite) self.filename = None self.lastFilter = None def _response_callback(self, *args): self.response = args[1] if args[1] == gtk.RESPONSE_OK: self.filename = self.get_filename() self.lastFilter = self.get_filter() self.destroy() def show(self): super(self.__class__, self).run() return self.response==gtk.RESPONSE_OK def addFilter(self, name, patterns=None, mimetypes=None): filter = gtk.FileFilter() filter.set_name(name) if patterns: for pattern in patterns: filter.add_pattern(pattern) if mimetypes: for mimetype in mimetypes: filter.add_mime_type(mimetype) super(self.__class__, self).add_filter(filter) class DialogFileSave(DialogFileOpenSave): def __init__(self, title=None, initialDir=None, initialFile=None, askOverwrite=True): super(self.__class__, self).__init__( useForOpen=False, title=title, initialDir=initialDir, initialFile=initialFile, askOverwrite=askOverwrite ) class DialogFileOpen(DialogFileOpenSave): def __init__(self, title=None, initialDir=None, initialFile=None): super(self.__class__, self).__init__( useForOpen=True, title=title, initialDir=initialDir, initialFile=initialFile, askOverwrite=False ) gespeaker-0.8.6/src/DialogSimpleMessages.py000066400000000000000000000035611255744433100207120ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli # Copyright: 2009-2014 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # On Debian GNU/Linux systems, the full text of the GNU General Public License # can be found in the file /usr/share/common-licenses/GPL-2. ## import gtk def ShowDialogGeneric(type, title=None, text=None, showOk=True, icon=None): dialog = gtk.MessageDialog( parent=None, flags=gtk.DIALOG_MODAL, type=type, buttons=showOk and gtk.BUTTONS_OK or gtk.BUTTONS_NONE, message_format=text ) if title: dialog.set_title(title) if icon: dialog.set_icon_from_file(icon) dialog.connect('response', lambda self, args: self.destroy()) dialog.run() def ShowDialogWarning(title=None, text=None, showOk=True, icon=None): return ShowDialogGeneric(gtk.MESSAGE_WARNING, title=title, text=text, showOk=showOk, icon=icon) def ShowDialogError(title=None, text=None, showOk=True, icon=None): return ShowDialogGeneric(gtk.MESSAGE_ERROR, title=title, text=text, showOk=showOk, icon=icon) def ShowDialogInfo(title=None, text=None, showOk=True, icon=None): return ShowDialogGeneric(gtk.MESSAGE_INFO, title=title, text=text, showOk=showOk, icon=icon) def ShowDialogQuestion(title=None, text=None, showOk=True, icon=None): return ShowDialogGeneric(gtk.MESSAGE_QUESTION, title=title, text=text, showOk=showOk, icon=icon) gespeaker-0.8.6/src/DialogYesNo.py000066400000000000000000000033571255744433100170310ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk class DialogYesNo(gtk.MessageDialog): def __init__(self, message=None, default_button=gtk.RESPONSE_YES): super(self.__class__, self).__init__(parent=None, flags=gtk.DIALOG_MODAL, type=gtk.MESSAGE_QUESTION, buttons=gtk.BUTTONS_YES_NO, message_format=message) self.response = None self.set_default_response(default_button == gtk.RESPONSE_YES and gtk.RESPONSE_YES or gtk.RESPONSE_NO) self.connect('response', self._response_callback) def _response_callback(self, *args): self.response = args[1] self.destroy() def show(self): super(self.__class__, self).run() return self.response def responseIsYes(self): return self.response == gtk.RESPONSE_YES def responseIsNo(self): return self.response == gtk.RESPONSE_NO def responseIsCancel(self): return self.response == gtk.RESPONSE_DELETE_EVENT gespeaker-0.8.6/src/EspeakFrontend.py000066400000000000000000000176261255744433100175700ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import SubprocessWrapper import os import handlepaths from gettext import gettext as _ from DialogSimpleMessages import ShowDialogError class EspeakFrontend(object): def __init__(self): self.procTalk = None print 'python version detected: %d.%d' % ( SubprocessWrapper.PYTHON_VERSION[0], SubprocessWrapper.PYTHON_VERSION[1]) def isPlaying(self): "Check if a process is still running" return self.procTalk and ( self.procTalk[0].poll() == None or self.procTalk[1].poll() == None) def pauseOrResume(self, status): "Pause or Resume the playing, based on status" if self.procTalk: # Check if espeak is still runnning if self.procTalk[0].poll() == None: if status: self.procTalk[0].stop() else: self.procTalk[0].resume() # Check if player is still runnning if self.procTalk[1].poll() == None: if status: self.procTalk[1].stop() else: self.procTalk[1].resume() def play(self, cmdEspeak, cmdPlayer, fileToRecord=None): "Play the command provided" # If save to file has been requested add -w else --stdout cmdEspeak += fileToRecord and ['-w', fileToRecord] or ['--stdout'] # Execute espeak and pipe it with player print cmdEspeak, cmdPlayer.split() procEspeak = SubprocessWrapper.Popen(cmdEspeak, stdout=SubprocessWrapper.PIPE) # Save to file has been requested so we have to wait for espeak end # and to pipe filename content to the player if fileToRecord: procEspeak.wait() procEspeak = SubprocessWrapper.Popen(['cat', fileToRecord], stdout=SubprocessWrapper.PIPE) self.__playAudio(procEspeak, cmdPlayer) def playMbrola(self, cmdEspeak, cmdPlayer, cmdMbrola, fileToRecord=None): "Play the command provided" # If save to file has been requested add filename else - if not fileToRecord: fileToRecord = '/tmp/gespeaker.wav' cmdMbrola += [fileToRecord] # Execute espeak and pipe it with mbrola and then the player) print cmdEspeak, cmdMbrola, cmdPlayer.split() procEspeak = SubprocessWrapper.Popen(cmdEspeak, stdout=SubprocessWrapper.PIPE) try: procMbrola = SubprocessWrapper.Popen(cmdMbrola, stdin=procEspeak.stdout, stdout=SubprocessWrapper.PIPE) except OSError, (errno, strerror): # Error during communicate" ShowDialogError( title=_('Audio testing'), showOk=True, text=_('There was an error during the test for the audio player.\n\n' 'Error %s: %s') % (errno, strerror), icon=handlepaths.get_app_logo() ) procMbrola = None # Save to file has been requested so we have to wait for espeak end # and to pipe filename content to the player if procMbrola: procMbrola.wait() procMbrola = SubprocessWrapper.Popen(['cat', fileToRecord], stdout=SubprocessWrapper.PIPE) self.__playAudio(procMbrola, cmdPlayer) def __playAudio(self, procFrom, cmdPlayer): "Play audio with the player piping from a process" try: procPlay = SubprocessWrapper.Popen(cmdPlayer.split(), stdin=procFrom.stdout, stdout=SubprocessWrapper.PIPE, stderr=SubprocessWrapper.PIPE) except OSError, (errno, strerror): # Error during communicate" ShowDialogError( title=_('Audio testing'), showOk=True, text=_('There was an error during the test for the audio player.\n\n' 'Error %s: %s') % (errno, strerror), icon=handlepaths.get_app_logo() ) procPlay = None # Save both processes espeak and player if procPlay: self.procTalk = (procFrom, procPlay) def stop(self): "Stop audio killing espeak and player" # If played at least once then we have procTalk if self.procTalk: # Check if espeak is still running if self.procTalk[0].poll() == None: print 'killing espeak with pid %d' % self.procTalk[0].pid self.procTalk[0].terminate() # Check if player is still runnning if self.procTalk[1].poll() == None: print 'killing player with pid %d' % self.procTalk[1].pid self.procTalk[1].terminate() # We don't need processes anymore self.procTalk = None return True else: return False def loadLanguages(self, cmdEspeak): "Load languages list from espeak" print 'loading languages from %s --voices' % cmdEspeak proc = SubprocessWrapper.Popen((cmdEspeak, '--voices'), stdout=SubprocessWrapper.PIPE) return proc.communicate()[0].split('\n')[1:-1] def loadVariants(self, cmdEspeak): "Load variants list from espeak" vardir = '/usr/share/espeak-data/voices/!v' print 'loading variants from %s' % vardir variantsM = [] variantsF = [] # Check if voice variants dir exists if os.path.exists(vardir) and os.path.isdir(vardir): # Load files from vardir for f in os.listdir(vardir): # Only files if os.path.isfile(os.path.join(vardir, f)): varfile = open(os.path.join(vardir, f), mode='r') varcontent = varfile.read().split('\n') varfile.close() # Check if it's a valid variant if varcontent[0] == 'language variant' and \ varcontent[1][:5] == 'name ' and \ varcontent[2][:7] == 'gender ': # Check gender if varcontent[2][7:] == 'female': variantsF.append((f, varcontent[1][5:])) else: variantsM.append((f, varcontent[1][5:])) return (variantsM, variantsF) def loadMbrolaVoices(self, pathVoicesmb): "Load mbrola languages list" voicesmb = [] espeak_data_paths = ( '/usr/share/espeak-data/voices/mb/', '/usr/lib/x86_64-linux-gnu/espeak-data/voices/mb/', '/usr/lib/i386-linux-gnu/espeak-data/voices/mb/', ) for pathVoices in espeak_data_paths: if os.path.isdir(pathVoices): break else: print 'Cannot find any espeak-data voices folder, unable to detect MBROLA voices' pathVoices = '' if not pathVoicesmb or not os.path.isdir(pathVoicesmb): pathVoicesmb = '/usr/share/mbrola' if os.path.isdir(pathVoices) and os.path.isdir(pathVoicesmb): for voice in os.listdir(pathVoices): # Only files if os.path.isfile(os.path.join(pathVoices, voice)): voicefile = open(os.path.join(pathVoices, voice), mode='r') voicecontent = voicefile.read().split('\n') voicefile.close() # Check if it's a valid voice for line in voicecontent: if line[:5] == 'name ': voicesmb.append((line[5:], voice, os.path.isfile(os.path.join(pathVoicesmb, voice[3:], voice[3:])))) break return voicesmb def mbrolaExists(self, cmdMbrola): "Return mbrola existance" try: # Try to call mbrola executable mbrola = SubprocessWrapper.Popen(cmdMbrola, stdout=SubprocessWrapper.PIPE, stderr=SubprocessWrapper.PIPE) mbrola.communicate() status = True except: # Error during communicate" status = False return status gespeaker-0.8.6/src/PreferencesWindow.py000066400000000000000000000321041255744433100202750ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk import Settings import SubprocessWrapper import os.path import handlepaths import plugins import pango from gettext import gettext as _ from DialogSimpleMessages import ShowDialogError from DialogAbout import DialogAbout from pygtkutils import * COL_ACTIVE, COL_ICON, COL_NAME, COL_MARKUP = range(4) def showPreferencesWindow(gladeFile, espeak): prefsWindow = PreferencesWindow(gladeFile, espeak) class PreferencesWindow(object): def __init__(self, gladeFile, espeak): self.gladeFile = gladeFile self.espeak = espeak self.loadControls() self.dlgPrefs.set_icon_from_file(handlepaths.get_app_logo()) signals = { 'on_cboPlayer_changed': self.on_cboPlayer_changed, 'on_btnPlayerTest_clicked': self.on_btnPlayerTest_clicked, 'on_chkCustomWelcome_toggled': self.on_chkCustomWelcome_toggled, 'on_btnRefresh_clicked': self.on_btnRefresh_clicked, 'on_btnOk_clicked': self.on_btnOk_clicked, 'on_btnPluginInfo_clicked': self.on_btnPluginInfo_clicked, 'on_tvwPlugins_row_activated': self.on_tvwPlugins_row_activated } self.gladeFile.signal_autoconnect(signals) # Load settings self.cboPlayer.set_active(Settings.get('PlayMethod')) self.txtPlayerCommand.set_text(Settings.get('PlayCommand')) self.chkPlayWelcome.set_active(Settings.get('PlayWelcomeText') == True) self.chkCustomWelcome.set_active(Settings.get('UseCustomWelcome') == True) self.txtWelcomeText.set_text(Settings.get('WelcomeText')) self.chkSaveVoice.set_active(Settings.get('SaveVoiceSettings') == True) self.chkSaveSize.set_active(Settings.get('SaveWindowSize') == True) self.chkSingleRecord.set_active(Settings.get('SingleRecord') == True) self.chkWordWrap.set_active(Settings.get('WordWrap') == True) self.chkLoadVariants.set_active(Settings.get('LoadVariants') == True) self.chooserLanguagePath.set_current_folder(Settings.get('VoicesmbPath')) # Before to use the window property the realize method must be called self.dlgPrefs.realize() # Change WM buttons making the window only movable with the closing button self.dlgPrefs.window.set_functions(gtk.gdk.FUNC_CLOSE | gtk.gdk.FUNC_MOVE) # Reload mbrola languages list self.btnRefresh.clicked() # Load plugins list self.modelPlugins.clear() for pl in plugins.plugins.itervalues(): self.modelPlugins.append([ pl.active, pl.render_icon(), pl.name, '%s\n%s' % (pl.name, pl.description) ]) self.dlgPrefs.run() self.dlgPrefs.destroy() def loadControls(self): def separator_filter(model, iter, data=None): return model.get_value(iter, 2) gw = self.gladeFile.get_widget self.dlgPrefs = gw('dlgPreferences') self.cboPlayer = gw('cboPlayer') self.lblPlayerCommand = gw('lblPlayerCommand') self.txtPlayerCommand = gw('txtPlayerCommand') self.btnPlayerTest = gw('btnPlayerTest') self.chkPlayWelcome = gw('chkPlayWelcome') self.chkCustomWelcome = gw('chkCustomWelcome') self.lblCustomWelcome = gw('lblCustomWelcome') self.txtWelcomeText = gw('txtWelcomeText') self.chkSaveVoice = gw('chkSaveVoice') self.chkSaveSize = gw('chkSaveSize') self.chkSingleRecord = gw('chkRecordSingleTrack') self.chkWordWrap = gw('chkWordWrap') self.chkLoadVariants = gw('chkLoadVariants') self.tvwLanguages = gw('tvwLanguages') self.chooserLanguagePath = gw('chooserLanguagePath') self.btnRefresh = gw('btnRefresh') self.btnOk = gw('btnOk') self.imgExecutableMbrola = gw('imgExecutableMbrola') self.lblExecutableMbrolaStatus = gw('lblExecutableMbrolaStatus') self.lblLanguagesDetected = gw('lblLanguagesDetected') # Prepare model for players combo listStore = gtk.ListStore(gtk.gdk.Pixbuf, str, bool) self.cboPlayer.set_model(listStore) # First is image cell = gtk.CellRendererPixbuf() self.cboPlayer.pack_start(cell, False) self.cboPlayer.add_attribute(cell, 'pixbuf', 0) # Second is text cell = gtk.CellRendererText() self.cboPlayer.pack_start(cell, False) self.cboPlayer.add_attribute(cell, 'text', 1) self.cboPlayer.set_row_separator_func(separator_filter) # Load icons and text for methods listStore.append([Pixbuf_load_file( handlepaths.getPath('icons', 'alsalogo.png'), (24, 24)), _('ALSA - Advanced Linux Sound Architecture'), False]) listStore.append([Pixbuf_load_file( handlepaths.getPath('icons', 'palogo.png'), (24, 24)), _('PulseAudio sound server'), False]) listStore.append([None, '_', True]) listStore.append([None, _('Custom sound application'), False]) # Change testing button caption Button_change_stock_description(self.btnPlayerTest, _('_Test'), True) # Create model and sorted model for mbrola languages self.modelMbrola = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str) #self.tvwLanguages.set_model(self.modelMbrola) sortedModel = gtk.TreeModelSort(self.modelMbrola) sortedModel.set_sort_column_id(1, gtk.SORT_ASCENDING) self.tvwLanguages.set_model(sortedModel) # Create columns for tvwLanguages COL_LANG_IMG, COL_LANG_LANG, COL_LANG_RES, COL_LANG_STATUS = range(4) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn('') column.pack_start(cell) column.set_attributes(cell, pixbuf=COL_LANG_IMG) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Language'), cell, text=COL_LANG_LANG) column.set_sort_column_id(COL_LANG_LANG) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Resource'), cell, text=COL_LANG_RES) column.set_sort_column_id(COL_LANG_RES) column.set_resizable(True) self.tvwLanguages.append_column(column) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(_('Status'), cell, text=COL_LANG_STATUS) column.set_sort_column_id(COL_LANG_STATUS) column.set_resizable(True) self.tvwLanguages.append_column(column) # Order by Language column #column = self.tvwLanguages.get_column(COL_LANG_LANG) #column.set_sort_column_id(COL_LANG_LANG) #column.set_sort_order(gtk.SORT_ASCENDING) #column.set_sort_indicator(True) # Plugins self.tvwPlugins = gw('tvwPlugins') self.btnPluginInfo = gw('btnPluginInfo') self.btnPluginConfigure = gw('btnPluginConfigure') Button_change_stock_description(self.btnPluginInfo, _('_About plugin'), True) Button_change_stock_description(self.btnPluginConfigure, _('_Configure plugin'), True) # Create model for plugins list self.modelPlugins = gtk.ListStore( bool, # active gtk.gdk.Pixbuf, # icon str, # name str # markup ) sortedModel = gtk.TreeModelSort(self.modelPlugins) sortedModel.set_sort_column_id(COL_NAME, gtk.SORT_ASCENDING) self.tvwPlugins.set_model(sortedModel) cell = gtk.CellRendererToggle() cell.connect('toggled', self.on_pluginenable_toggle) column = gtk.TreeViewColumn(None, cell, active=COL_ACTIVE) self.tvwPlugins.append_column(column) cell = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn(None, cell, pixbuf=COL_ICON) self.tvwPlugins.append_column(column) cell = gtk.CellRendererText() cell.set_property('ellipsize', pango.ELLIPSIZE_END) column = gtk.TreeViewColumn(None, cell, markup=COL_MARKUP) column.set_resizable(True) self.tvwPlugins.append_column(column) def on_chkCustomWelcome_toggled(self, widget, data=None): self.lblCustomWelcome.set_sensitive(self.chkCustomWelcome.get_active()) self.txtWelcomeText.set_sensitive(self.chkCustomWelcome.get_active()) def on_btnOk_clicked(self, widget, data=None): "Apply settings" Settings.set('PlayMethod', self.cboPlayer.get_active()) Settings.set('PlayCommand', self.txtPlayerCommand.get_text()) Settings.set('PlayWelcomeText', self.chkPlayWelcome.get_active()) Settings.set('UseCustomWelcome', self.chkCustomWelcome.get_active()) Settings.set('WelcomeText', self.txtWelcomeText.get_text()) Settings.set('SaveVoiceSettings', self.chkSaveVoice.get_active()) Settings.set('SaveWindowSize', self.chkSaveSize.get_active()) Settings.set('SingleRecord', self.chkSingleRecord.get_active()) Settings.set('WordWrap', self.chkWordWrap.get_active()) Settings.set('LoadVariants', self.chkLoadVariants.get_active()) Settings.set('VoicesmbPath', self.chooserLanguagePath.get_filename()) def on_cboPlayer_changed(self, widget, data=None): "Enable and disable controls if custom command is not set" active = self.cboPlayer.get_active() text = self.txtPlayerCommand.get_text() self.lblPlayerCommand.set_sensitive(active == 3) self.txtPlayerCommand.set_sensitive(active == 3) self.btnOk.set_sensitive((active != 3) or bool(text)) self.btnPlayerTest.set_sensitive((active != 3) or bool(text)) def on_btnPlayerTest_clicked(self, widget, data=None): "Test selected player with testing.wav" # Set waiting cursor Window_change_cursor(self.dlgPrefs.window, gtk.gdk.WATCH, True) players = ('aplay', 'paplay', '', self.txtPlayerCommand.get_text()) filename = handlepaths.getPath('data', 'testing.wav') test = SubprocessWrapper.Popen(['cat', filename], stdout=SubprocessWrapper.PIPE) play = None try: # Try to play with pipe play = SubprocessWrapper.Popen(players[self.cboPlayer.get_active()], stdin=test.stdout, stdout=SubprocessWrapper.PIPE, stderr=SubprocessWrapper.PIPE) play.communicate() except OSError, (errno, strerror): # Error during communicate" ShowDialogError( title=_('Audio testing'), showOk=True, text=_('There was an error during the test for the audio player.\n\n' 'Error %s: %s') % (errno, strerror), icon=handlepaths.get_app_logo() ) # Terminate test if it's still running, follows a broken pipe error if test.poll() is None: test.terminate() # Restore default cursor Window_change_cursor(self.dlgPrefs.window, None, False) def on_btnRefresh_clicked(self, widget, data=None): "Reload mbrola languages from the selected folder" self.modelMbrola.clear() selectedFolder = self.chooserLanguagePath.get_filename() if not selectedFolder: # Calling before the dialog is shown results in None path selectedFolder = Settings.get('VoicesmbPath') mbrolaVoices = self.espeak.loadMbrolaVoices(selectedFolder) voicesFound = 0 for voice in mbrolaVoices: if voice[2]: voicesFound += 1 self.modelMbrola.append(( widget.render_icon(voice[2] and gtk.STOCK_YES or gtk.STOCK_NO, gtk.ICON_SIZE_BUTTON), voice[0], voice[1], voice[2] and _('Installed') or _('Not installed'))) # lblLanguagesDetected self.lblLanguagesDetected.set_text(_("%d languages of %d detected") % ( voicesFound, len(mbrolaVoices))) # Check if mbrola exists status = self.espeak.mbrolaExists(Settings.cmdMbrola) self.imgExecutableMbrola.set_from_stock(size=gtk.ICON_SIZE_BUTTON, stock_id=status and gtk.STOCK_YES or gtk.STOCK_NO) self.lblExecutableMbrolaStatus.set_label('%s' % (status and _('Package mbrola installed') or _('Package mbrola not installed'))) def on_pluginenable_toggle(self, renderer, path, data=None): "Select or deselect a plugin" path = self.tvwPlugins.get_model().convert_path_to_child_path(path) p = self.modelPlugins[path] p[COL_ACTIVE] = not p[COL_ACTIVE] plugins.plugins[p[COL_NAME]].active = not plugins.plugins[p[COL_NAME]].active def on_btnPluginInfo_clicked(self, widget, data=None): "Show information about plugin" model, iter = self.tvwPlugins.get_selection().get_selected() if model: plugin = plugins.plugins[model[iter][COL_NAME]] DialogAbout( name=model[iter][COL_NAME], version=plugin.version, comment=plugin.description, copyright='Copyright %s' % plugin.author, website=plugin.website, website_label=plugin.website, logo=model[iter][COL_ICON], icon=handlepaths.get_app_logo() ) def on_tvwPlugins_row_activated(self, widget, path, column, data=None): self.on_btnPluginInfo_clicked(widget, data) gespeaker-0.8.6/src/Settings.py000066400000000000000000000112751255744433100164520ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import ConfigParser import os from xdg.BaseDirectory import xdg_config_home from gettext import gettext as _ cmdEspeak = '/usr/bin/espeak' argsEspeak = '-a %v -p %p -s %s -g %d -v %l -f %f --pho' cmdMbrola = '/usr/bin/mbrola' argsMbrola = '-v %v -e %l -' config = None confdir = os.path.join(xdg_config_home, 'gespeaker') conffile = os.path.join(confdir, 'settings.conf') pluginsfile = os.path.join(confdir, 'plugins.conf') __sectionSettings = 'settings' __sectionWindowSize = 'window size' __sectionVoiceSetting = 'voice settings' __sectionMbrola = 'mbrola' __defSettings = None if not os.path.exists(confdir): os.mkdir(confdir) def load(filename=conffile): "Load settings from the configuration file" global config config = ConfigParser.RawConfigParser() loadDefaults() if os.path.exists(filename): config.read(filename) # Settings lookup is made upon __defSettings for setting in __defSettings.keys(): # Add section if doesn't exist if not config.has_section(__defSettings[setting][2]): config.add_section(__defSettings[setting][2]) if not config.has_option(__defSettings[setting][2], setting): config.set(__defSettings[setting][2], setting, str(__defSettings[setting][1])) def loadDefaults(): global __defSettings strbool = lambda value: value == 'True' __defSettings = { 'PlayMethod': [int, 0, __sectionSettings], 'PlayCommand': [str, 'aplay', __sectionSettings], 'PlayWelcomeText': [strbool, True, __sectionSettings], 'UseCustomWelcome': [strbool, False, __sectionSettings], 'WelcomeText': [str, _('Welcome in Gespeaker'), __sectionSettings], 'SaveVoiceSettings': [strbool, True, __sectionSettings], 'SaveWindowSize': [strbool, False, __sectionSettings], 'SingleRecord': [strbool, True, __sectionSettings], 'WordWrap': [strbool, False, __sectionSettings], 'LoadVariants': [strbool, True, __sectionSettings], 'MainWindowWidth': [int, 440, __sectionWindowSize], 'MainWindowHeight': [int, 470, __sectionWindowSize], 'MainWindowLeft': [int, 10, __sectionWindowSize], 'MainWindowTop': [int, 20, __sectionWindowSize], 'SettingsExpander': [strbool, True, __sectionWindowSize], 'VoiceVolume': [int, 100, __sectionVoiceSetting], 'VoicePitch': [int, 50, __sectionVoiceSetting], 'VoiceSpeed': [int, 170, __sectionVoiceSetting], 'VoiceDelay': [int, 10, __sectionVoiceSetting], 'VoiceTypeMale': [strbool, True, __sectionVoiceSetting], 'VoiceLanguage': [str, _('default language'), __sectionVoiceSetting], 'VoicesmbPath': [str, '/usr/share/mbrola', __sectionMbrola] } def save(filename=conffile, clearDefaults=False): "Save settings into the configuration file" file = open(filename, mode='w') if clearDefaults: for setting in __defSettings.keys(): if config.has_option(__defSettings[setting][2], setting): if get(setting) == __defSettings[setting][1]: config.remove_option(__defSettings[setting][2], setting) config.write(file) file.close def get(setting): "Returns a specified setting from the configuration or default values" if config.has_option(__defSettings[setting][2], setting): return __defSettings[setting][0](config.get(__defSettings[setting][2], setting)) elif __defSettings.has_key(setting): return __defSettings[setting][1] else: print 'unknown setting: %s' % setting def default(setting): "Returns the default value for a specified setting" if __defSettings.has_key(setting): return __defSettings[setting][1] def set(setting, value): "Sets a specific setting to the value." #" If it's the default then delete it" #if __defSettings.has_key(setting) and value == __defSettings[setting][1]: # config.remove_option(__defSettings[setting][2], setting) #else: #print __defSettings[setting][2], setting, str(value) config.set(__defSettings[setting][2], setting, str(value)) gespeaker-0.8.6/src/SubprocessWrapper.py000066400000000000000000000042301255744433100203340ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import subprocess import sys import os PIPE = subprocess.PIPE PYTHON_VERSION = sys.version_info[0:2] class Popen(object): def __init__(self, args, stdin=None, stdout=None, stderr=None, shell=False): self.process = subprocess.Popen(args=args, stdin=stdin, stdout=stdout, stderr=stderr, shell=shell) self.stdin = self.process.stdin self.stdout = self.process.stdout self.stderr = self.process.stderr self.pid = self.process.pid def __del__(self): self.process = None def communicate(self): return self.process.communicate() def poll(self): return self.process.poll() def terminate(self): "Python version < 2.6 doesn't have a terminate method for subprocess" if PYTHON_VERSION[0] == 2 and PYTHON_VERSION[1] >= 6: return self.process.terminate() else: signal = 15 return os.kill(self.pid, signal) def stop(self): signal = 19 if PYTHON_VERSION[0] == 2 and PYTHON_VERSION[1] >= 6: return self.process.send_signal(signal) else: return os.kill(self.pid, signal) def resume(self): signal = 18 if PYTHON_VERSION[0] == 2 and PYTHON_VERSION[1] >= 6: return self.process.send_signal(signal) else: return os.kill(self.pid, signal) def wait(self): return self.process.wait() gespeaker-0.8.6/src/TempfileWrapper.py000066400000000000000000000036601255744433100177570ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import tempfile import sys import os PYTHON_VERSION = sys.version_info[0:2] class NamedTemporaryFile(object): "Replacement for NamedTemporaryFile compatible with python 2.5" def __init__(self, mode='w+b', delete=True): self.delete = delete if PYTHON_VERSION[0] == 2 and PYTHON_VERSION[1] >= 6: self.tempfile = tempfile.NamedTemporaryFile(mode=mode, delete=delete) self.name = self.tempfile.name else: # Python < 2.6 doesn't have a delete argument for NamedTemporaryFile # We have to proceed manually :-\ self.name = tempfile.mkstemp()[1] self.tempfile = open(self.name, mode=mode) def __del__(self): self.close() self.tempfile = None def write(self, data): "Write data to the temporary file" return self.tempfile.write(data) def close(self): "Close the temporary file and delete it if requested" ret = self.tempfile.close() if PYTHON_VERSION[0] == 2 and PYTHON_VERSION[1] < 6 and self.delete: # Manually deletion of temporary filename os.remove(self.name) return ret gespeaker-0.8.6/src/gespeaker.py000077500000000000000000000036141255744433100166210ustar00rootroot00000000000000#!/usr/bin/env python ## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import os import sys import gettext import pkgutil import imp import gtk.glade import gespeakerUI import handlepaths import Settings import plugins if __name__ == '__main__': for module in (gettext, gtk.glade): module.bindtextdomain(handlepaths.APP_NAME, handlepaths.getPath('locale')) module.textdomain(handlepaths.APP_NAME) # Load user settings plugins.loadPluginsSettings() Settings.load() print 'loading available plugins...' plugins_path = [handlepaths.getPath('plugins')] for loader, name, isPkg in pkgutil.iter_modules(plugins_path): file, pathname, description = imp.find_module(name, plugins_path) imp.load_module(name, file, pathname, description) main = gespeakerUI.gespeakerUI() plugins.signal_proxy('load') plugins.signal_proxy('on_uiready', argc=1, args=main) main.run() plugins.signal_proxy('on_closed') plugins.signal_proxy('unload') plugins.signal_proxy('on_terminate') # Save settings print 'saving settings' Settings.save(clearDefaults=True) gespeaker-0.8.6/src/gespeakerUI.py000066400000000000000000000613651255744433100170630ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk import gtk.glade import pygtk import gobject pygtk.require('2.0') import tempfile import os from gettext import gettext as _ from DialogYesNo import DialogYesNo from DialogFileOpenSave import DialogFileOpen, DialogFileSave from DialogSimpleMessages import * from DialogAbout import DialogAbout from EspeakFrontend import EspeakFrontend import PreferencesWindow import Settings import handlepaths import plugins from pygtkutils import * COL_LANGUAGE, COL_NAME, COL_MBROLA = range(3) class gespeakerUI(object): def __init__(self): print 'starting %s' % handlepaths.APP_NAME self.espeak = EspeakFrontend() # Create temporary filename self.tempFilename = tempfile.mkstemp(prefix=handlepaths.APP_NAME)[1] self.timeoutCheck = None self.recordToFile = None self.recordToFileRequested = False self.variants = ((), ()) gladeUI = handlepaths.getPath('ui', 'gespeaker.glade') print 'loading interface from %s' % gladeUI self.gladeFile = gtk.glade.XML(fname=gladeUI, domain=handlepaths.APP_NAME) # Proxy maps self.proxy = { 'text.set': self.set_text, 'text.cut': self.on_imgmenuEditCut_activate, 'text.copy': self.on_imgmenuEditCopy_activate, 'text.paste': self.on_imgmenuEditPaste_activate, 'ui.new': self.on_imgmenuFileNew_activate, 'ui.open': self.on_imgmenuFileOpen_activate, 'ui.save': self.on_imgmenuFileSaveAs_activate, 'ui.record': self.on_imgmenuFileRec_activate, 'ui.unrecord': self.disable_record, 'ui.reset': self.on_imgmenuEditResetSettings_activate, 'ui.quit': self.on_imgmenuFileQuit_activate, 'ui.set_size': self.set_size, 'ui.set_position': self.set_position, 'ui.set_window': self.set_window, 'espeak.play': self.on_imgmenuEditPlay_activate, 'espeak.stop': self.on_imgmenuEditStop_activate, 'espeak.pause': self.on_imgmenuEditPause_activate, 'espeak.is_playing': self.checkIfPlaying, } # Signals handler signals = { 'on_imgmenuFileQuit_activate': self.on_imgmenuFileQuit_activate, 'on_imgmenuEditPlay_activate': self.on_imgmenuEditPlay_activate, 'on_imgmenuFileNew_activate': self.on_imgmenuFileNew_activate, 'on_imgmenuFileOpen_activate': self.on_imgmenuFileOpen_activate, 'on_imgmenuFileSaveAs_activate': self.on_imgmenuFileSaveAs_activate, 'on_imgmenuEditStop_activate': self.on_imgmenuEditStop_activate, 'on_btnPlayStop_toggled': self.on_btnPlayStop_toggled, 'on_btnPause_toggled': self.on_btnPause_toggled, 'on_tlbRecord_toggled': self.on_tlbRecord_toggled, 'on_imgmenuEditPause_activate': self.on_imgmenuEditPause_activate, 'on_imgmenuFileRec_activate': self.on_imgmenuFileRec_activate, 'on_imgmenuEditResetSettings_activate': self.on_imgmenuEditResetSettings_activate, 'on_imgmenuEditCut_activate': self.on_imgmenuEditCut_activate, 'on_imgmenuEditCopy_activate': self.on_imgmenuEditCopy_activate, 'on_imgmenuEditPaste_activate': self.on_imgmenuEditPaste_activate, 'on_imgmenuHelpAbout_activate': self.on_imgmenuHelpAbout_activate, 'on_imgmenuEditPreferences_activate': self.on_imgmenuEditPreferences_activate, 'on_radioVoice_toggled': self.on_radioVoice_toggled, 'on_cboLanguages_changed': self.on_cboLanguages_changed } self.gladeFile.signal_autoconnect(signals) # Set clipboard display = gtk.gdk.display_manager_get().get_default_display() self.clipboard = gtk.Clipboard(display, "CLIPBOARD") # Load window and controls self.loadControls() self.loadSettings(True) def run(self): "Start main loop" self.proxy['ui.set_window']('show') gtk.main() def loadControls(self): "Load controls and other values" # Load controls from gladeFile print 'loading controls from UI' gw = self.gladeFile.get_widget self.winMain = gw('winMain') self.winMain.set_title(handlepaths.APP_TITLE) self.winMain.set_icon_from_file(handlepaths.get_app_logo()) self.txvText = gw('txvText') self.txvBuffer = self.txvText.get_buffer() self.winMain.set_focus(self.txvText) self.expSettings = gw('expSettings') self.hscVolume = gw('hscVolume') self.hscPitch = gw('hscPitch') self.hscSpeed = gw('hscSpeed') self.hscDelay = gw('hscDelay') self.lblVoice = gw('lblVoice') self.radioVoiceMale = gw('radioVoiceMale') self.radioVoiceFemale = gw('radioVoiceFemale') self.cboLanguages = gw('cboLanguages') self.lblVariants = gw('lblVariants') self.cboVariants = gw('cboVariants') self.imgmenuEditPlay = gw('imgmenuEditPlay') self.imgmenuEditStop = gw('imgmenuEditStop') self.imgmenuFileRec = gw('imgmenuFileRec') self.tlbStop = gw('tlbStop') self.btnPlayStop = gw('btnPlayStop') self.btnPause = gw('btnPause') self.tlbRecord = gw('tlbRecord') self.stbStatus = gw('stbStatus') self.statusContextId = self.stbStatus.get_context_id(handlepaths.APP_NAME) self.imgmenuEditPause = gw('imgmenuEditPause') self.imgMbrola = gw('imgMbrola') # Create model for cboLanguages by (language, shortname, mbrola) self.listLanguages = gtk.ListStore(str, str, bool) self.cboLanguages.set_model(self.listLanguages) cell = gtk.CellRendererText() self.cboLanguages.pack_start(cell, True) self.cboLanguages.add_attribute(cell, 'text', 0) # Load languages list from espeak --voices for langs in self.espeak.loadLanguages(Settings.cmdEspeak): lang = langs[22:52].rsplit(None, 1) self.listLanguages.append(lang + [False]) # Load mbrola voices if mbrola is available if self.espeak.mbrolaExists(Settings.cmdMbrola): for lang in self.espeak.loadMbrolaVoices(Settings.get('VoicesmbPath')): if lang[2]: self.listLanguages.append(lang) self.listLanguages.set_sort_column_id(0, gtk.SORT_ASCENDING) # Select default voice self.defaultLanguageIndex = 0 defaultLanguage = _('default language') if defaultLanguage == 'default language': defaultLanguage = 'default' self.defaultLanguageIndex = TreeModel_find_text( self.listLanguages, COL_LANGUAGE, defaultLanguage) # Handle wrong default language in translation, fallback to 'default' if not self.defaultLanguageIndex: print 'default language "%s" not found in the languages list, ' \ 'fallback to "default"' % defaultLanguage self.defaultLanguageIndex = TreeModel_find_text( self.listLanguages, COL_LANGUAGE, 'default') # Prepare sorted model for voice variants self.listVariants = gtk.ListStore(str, str) self.listVariants.set_sort_column_id(0, gtk.SORT_ASCENDING) self.cboVariants.set_model(self.listVariants) cell = gtk.CellRendererText() self.cboVariants.pack_start(cell, True) self.cboVariants.add_attribute(cell, 'text', 1) self.winMain.set_default_size( Settings.default('MainWindowWidth'), Settings.default('MainWindowHeight') ) self.expSettings.set_expanded(Settings.get('SettingsExpander')) def loadSettings(self, loadEverything): if loadEverything: # Restore voice settings self.hscVolume.set_value(Settings.get('VoiceVolume')) self.hscPitch.set_value(Settings.get('VoicePitch')) self.hscSpeed.set_value(Settings.get('VoiceSpeed')) self.hscDelay.set_value(Settings.get('VoiceDelay')) if Settings.get('VoiceTypeMale'): self.radioVoiceMale.set_active(True) else: self.radioVoiceFemale.set_active(True) # Sets default language language = Settings.get('VoiceLanguage') languageIndex = TreeModel_find_text(self.listLanguages, COL_LANGUAGE, language) if not ComboBox_set_item_from_text(self.cboLanguages, 0, language): self.cboLanguages.set_active(self.defaultLanguageIndex) Settings.set('VoiceLanguage', self.listLanguages[self.cboLanguages.get_active()][COL_NAME]) # Load standard settings self.txvText.set_wrap_mode( Settings.get('WordWrap') and gtk.WRAP_WORD or gtk.WRAP_NONE) players = ('aplay', 'paplay', '', Settings.get('PlayCommand')) self.cmdPlayer = players[Settings.get('PlayMethod')] # Load voice variants if Settings.get('LoadVariants'): self.variants = self.espeak.loadVariants(Settings.cmdEspeak) self.lblVariants.show() self.cboVariants.show() else: self.variants = ((), ()) self.lblVariants.hide() self.cboVariants.hide() # Reload list voicebutton = Radio_get_active(self.radioVoiceMale.get_group()) self.on_radioVoice_toggled(voicebutton, None) def on_imgmenuFileQuit_activate(self, widget, data=None): "Close the program" plugins.signal_proxy('on_closing') if self.tempFilename and os.path.exists(self.tempFilename): os.remove(self.tempFilename) gtk.main_quit() return 0 def on_imgmenuEditPlay_activate(self, widget, data=None): "Press button to start play, indirect cause button style" self.btnPlayStop.set_active(True) def on_imgmenuFileNew_activate(self, widget, confirm=True): "Clears the whole text" if TextBuffer_get_text(self.txvBuffer): if confirm: dialog = DialogYesNo( message=_('Do you want to delete the current text?'), default_button=gtk.RESPONSE_NO ) dialog.set_icon_from_file(handlepaths.get_app_logo()) dialog.show() # Clear if confirm was not requested or if the user gave response if not confirm or dialog.responseIsYes(): self.txvBuffer.set_text('') print 'text cleared' def on_imgmenuFileOpen_activate(self, widget, filename=None): "Loads an external file" if not filename: # If filename was not provided show dialog dialog = DialogFileOpen( title=_('Please select the text file to open'), initialDir=os.path.expanduser('~')) dialog.set_icon_from_file(handlepaths.get_app_logo()) dialog.addFilter(_('Text files (*.txt)'), ['*.txt'], None) dialog.addFilter(_('All files'), ['*'], None) if dialog.show(): filename = dialog.filename dialog.destroy() # Open selected filename if filename: file = None try: file = open(filename, 'r') self.txvBuffer.set_text(file.read()) print 'loading text from %s' % filename except IOError, (errno, strerror): ShowDialogError( text=_('Error opening the file') + '\n\n%s' % strerror, showOk=True, icon=handlepaths.get_app_logo() ) print 'unable to load %s (I/O error %s: %s)' % ( filename, errno, strerror ) except: ShowDialogError( text=_('Error opening the file'), showOk=True, icon=handlepaths.get_app_logo() ) print 'error loading %s' % filename if file: file.close() def on_imgmenuFileSaveAs_activate(self, widget, filename=None): "Saves the whole text in the specified filename" if not filename: dialog = DialogFileSave( title=_('Please select where to save the text file'), initialDir=os.path.expanduser('~')) txtFilter = _('Text files (*.txt)') dialog.addFilter(txtFilter, ['*.txt'], None) dialog.addFilter(_('All files'), ['*'], None) dialog.set_icon_from_file(handlepaths.get_app_logo()) if dialog.show(): filename = dialog.filename if dialog.lastFilter.get_name() == txtFilter and filename[-4:] != '.txt': filename += '.txt' dialog.destroy() # Save selected filename if filename: print 'saving text in %s' % filename file = None try: file = open(filename, 'w') file.write(TextBuffer_get_text(self.txvBuffer)) print 'file %s saved' % filename except IOError, (errno, strerror): ShowDialogError( text=_('Error saving the file') + '\n\n%s' % strerror, showOk=True, icon=handlepaths.get_app_logo() ) print 'unable to save %s (I/O error %s: %s)' % ( filename, errno, strerror ) except: ShowDialogError( text=_('Error saving the file'), showOk=True, icon=handlepaths.get_app_logo() ) print 'error saving %s' % filename if file: file.close() def on_imgmenuEditResetSettings_activate(self, widget, confirm=True): "Restore default settings" if confirm: dialog = DialogYesNo( message=_('Do you want to reset the default settings?'), default_button=gtk.RESPONSE_NO ) dialog.set_icon_from_file(handlepaths.get_app_logo()) dialog.show() # Reset if confirm was not requested or if the user gave response if not confirm or dialog.responseIsYes(): if self.defaultLanguageIndex: self.cboLanguages.set_active(self.defaultLanguageIndex) print 'restored default settings' if os.path.exists(Settings.conffile): os.remove(Settings.conffile) print 'removed user settings file: %s' % Settings.conffile # Reload default settings Settings.load() self.loadSettings(True) def on_imgmenuEditCut_activate(self, widget, data=None): "Cut the selected text" self.txvBuffer.cut_clipboard(self.clipboard, self.txvText.get_editable()) def on_imgmenuEditCopy_activate(self, widget, data=None): "Copy the selected text" self.txvBuffer.copy_clipboard(self.clipboard) def on_imgmenuEditPaste_activate(self, widget, data=None): "Paste the clipboard in the buffer" self.txvBuffer.paste_clipboard(self.clipboard, None, self.txvText.get_editable()) def on_imgmenuHelpAbout_activate(self, widget, data=None): "Show the about dialog" print 'show about dialog' DialogAbout( name=handlepaths.APP_TITLE, version=handlepaths.APP_VERSION, comment=_('A GTK frontend for espeak'), copyright='Copyright 2009-2015 Fabio Castelli', license=handlepaths.read_text_file('doc', 'copyright'), website='http://www.muflone.com/gespeaker/', website_label='http://www.muflone.com/gespeaker/', authors=['Fabio Castelli (Muflone) '], translation=handlepaths.read_text_file('doc', 'translators').replace('(at)', '@'), logo=handlepaths.get_app_logo(), icon=handlepaths.get_app_logo() ) def on_imgmenuEditStop_activate(self, widget, data=None): "Press button to stop play, indirect cause button style" self.btnPlayStop.set_active(False) def on_imgmenuEditPause_activate(self, widget, data=None): "Press button to pause or continue" self.btnPause.set_active(not self.btnPause.get_active()) def on_imgmenuFileRec_activate(self, widget, filename=None): "Press button to record or disable recording" if filename: if not self.tlbRecord.get_active(): # Workaround to press the button without showing the dialog self.recordToFileRequested = True self.tlbRecord.set_active(True) self.recordToFileRequested = False self.set_record(filename) else: return 'recording was already active, no action' else: self.tlbRecord.set_active(not self.tlbRecord.get_active()) def checkIfPlaying(self): "Check if a process is still running" if self.espeak.isPlaying(): # Still running return True else: # Disable stop buttons on menu and toolbar self.btnPlayStop.set_active(False) return False def setStopCheck(self, active): "Set/unset timeout check for running processes" if active: self.timeoutCheck = gobject.timeout_add(500, self.checkIfPlaying) else: gobject.source_remove(self.timeoutCheck) self.timeoutCheck = None def on_btnPlayStop_toggled(self, widget, data=None): "Play and stop by pressing and releasing the button" if self.btnPlayStop.get_active() and TextBuffer_get_text(self.txvBuffer): # Button active so we have to start to play self.startPlaying() elif self.btnPlayStop.get_active(): self.btnPlayStop.set_active(False) elif TextBuffer_get_text(self.txvBuffer): # If Pause button is active then we have to continue before to kill if self.btnPause.get_active(): self.btnPause.set_active(False) # Button inactive so we have to stop the playing self.stopPlaying() def on_btnPause_toggled(self, widget, data=None): "Pause and unpause espeak and player by signals STOP/CONT" self.espeak.pauseOrResume(self.btnPause.get_active()) def startPlaying(self): "Play whole text" self.playText(TextBuffer_get_text(self.txvBuffer)) def playText(self, text): if text: # Save buffer text on temporary filename and play it tmpFile = open(self.tempFilename, mode='w') tmpFile.write(text) tmpFile.close() # Replace espeak's arguments with dialog values language = self.listLanguages[self.cboLanguages.get_active()][COL_NAME] isMbrola = self.listLanguages[self.cboLanguages.get_active()][COL_MBROLA] # Apply variant and voice to non-mbrola voices if not isMbrola: # Choose voice variant if self.cboVariants.get_active() == 0: # Default voice if self.radioVoiceFemale.get_active(): language += '+12' else: language += '+%s' % self.listVariants[self.cboVariants.get_active()][0] args = { '%v': str(int(self.hscVolume.get_value())), '%p': str(int(self.hscPitch.get_value())), '%s': str(int(self.hscSpeed.get_value())), '%d': str(int(self.hscDelay.get_value())), '%l': language, '%f': self.tempFilename } cmd = [Settings.cmdEspeak] + [ args.get(p, p) for p in Settings.argsEspeak.split()] # Enable stop buttons on menu and toolbar self.imgmenuEditPlay.set_sensitive(False) self.imgmenuEditStop.set_sensitive(True) self.imgmenuEditPause.set_sensitive(True) self.imgmenuFileRec.set_sensitive(False) self.btnPause.set_sensitive(True) self.btnPlayStop.set_label('gtk-media-stop') self.tlbRecord.set_sensitive(False) if not isMbrola: self.espeak.play(cmd, self.cmdPlayer, self.recordToFile) else: args = { '%v': str(int(self.hscVolume.get_value())/100.), '%l': '%s/%s/%s' % ( Settings.get('VoicesmbPath'), language.replace('mb-', '', 1), language.replace('mb-', '', 1)) } cmdMbrola = [Settings.cmdMbrola] + [ args.get(p, p) for p in Settings.argsMbrola.split()] self.espeak.playMbrola(cmd, self.cmdPlayer, cmdMbrola, self.recordToFile) # Enable check for running processes self.setStopCheck(True) def stopPlaying(self): self.espeak.stop() # Disable buttons and menus self.setStopCheck(False) self.imgmenuEditPlay.set_sensitive(True) self.imgmenuEditStop.set_sensitive(False) self.imgmenuEditPause.set_sensitive(False) self.imgmenuFileRec.set_sensitive(True) self.btnPause.set_sensitive(False) self.btnPlayStop.set_label('gtk-media-play') if Settings.get('SingleRecord'): self.tlbRecord.set_active(False) self.tlbRecord.set_sensitive(True) def on_imgmenuEditPreferences_activate(self, widget, data=None): "Show preferences dialog" prefsUI = handlepaths.getPath('ui', 'preferences.glade') gladePrefs = gtk.glade.XML(fname=prefsUI, domain=handlepaths.APP_NAME) PreferencesWindow.showPreferencesWindow(gladePrefs, self.espeak) self.loadSettings(False) def on_tlbRecord_toggled(self, widget, data=None): # Workaround to avoid dialog show if the record was requested through dbus if self.recordToFileRequested: return self.recordToFile = None if self.tlbRecord.get_active(): dialog = DialogFileSave( title=_('Please select where to save the recorded file'), initialDir=os.path.expanduser('~')) dialog.set_icon_from_file(handlepaths.get_app_logo()) dialog.addFilter(_('Wave files (*.wav)'), ['*.wav'], None) dialog.addFilter(_('All files'), ['*'], None) if dialog.show(): filename = dialog.filename if filename[-4:] != '.wav': filename += '.wav' self.set_record(filename) else: self.tlbRecord.set_active(False) dialog.destroy() else: self.stbStatus.pop(self.statusContextId) def set_record(self, filename): "Set record filename" print 'record to %s' % filename self.recordToFile = filename self.stbStatus.push(self.statusContextId, _('Recording audio track to: %s' % self.recordToFile)) def disable_record(self): "Disable recording" self.tlbRecord.set_active(False) def on_radioVoice_toggled(self, widget, data=None): "Assign variants after voice type change" if widget.get_active(): self.listVariants.clear() self.listVariants.append(None) for v in self.variants[widget is self.radioVoiceFemale and 1 or 0]: self.listVariants.append(v) self.cboVariants.set_active(0) def on_cboLanguages_changed(self, widget, data=None): "Check if a mbrola voice has been selected" status = self.listLanguages[self.cboLanguages.get_active()][COL_MBROLA] self.imgMbrola.set_from_stock(size=gtk.ICON_SIZE_BUTTON, stock_id=status and gtk.STOCK_YES or gtk.STOCK_NO) self.lblVoice.set_sensitive(not status) self.radioVoiceMale.set_sensitive(not status) self.radioVoiceFemale.set_sensitive(not status) self.lblVariants.set_sensitive(not status) self.cboVariants.set_sensitive(not status) def set_text(self, text, insert_type=0): "Set buffer text" if insert_type == 0: # Replace previous text self.txvBuffer.set_text(text) elif insert_type == 1: # Insert at cursor self.txvBuffer.insert_at_cursor(text) elif insert_type == 2: # Insert at the begin self.txvBuffer.insert(self.txvBuffer.get_start_iter(), text) elif insert_type == 3: # Insert at the end self.txvBuffer.insert(self.txvBuffer.get_end_iter(), text) def set_position(self, position): "Set window position" position = position.split('x', 1) return self.winMain.move(int(position[0]), int(position[1])) def set_size(self, size): "Set window size" size = size.split('x', 1) return self.winMain.resize(int(size[0]), int(size[1])) def set_window(self, action, data=None): "Execute window action" return_value = None if action=='hide': return_value = self.winMain.hide() plugins.signal_proxy('on_hidden') elif action=='show': return_value = self.winMain.show() plugins.signal_proxy('on_shown') elif action=='minimize': return_value = self.winMain.iconify() elif action=='unminimize': return_value = self.winMain.deiconify() elif action=='maximize': return_value = self.winMain.maximize() elif action=='unmaximize': return_value = self.winMain.unmaximize() elif action=='fullscreen': return_value = self.winMain.fullscreen() elif action=='unfullscreen': return_value = self.winMain.unfullscreen() elif action=='stick': return_value = self.winMain.stick() elif action=='unstick': return_value = self.winMain.unstick() elif action=='active': return_value = self.winMain.is_active() elif action=='activate': return_value = self.winMain.present() elif action=='get-opacity': return_value = int(self.winMain.get_opacity() * 100) elif action=='set-opacity': return_value = self.winMain.set_opacity(0.01 * int(data)) elif action=='set-keep-above': return_value = self.winMain.set_keep_above(True) elif action=='unset-keep-above': return_value = self.winMain.set_keep_above(False) elif action=='set-keep-below': return_value = self.winMain.set_keep_below(True) elif action=='unset-keep-below': return_value = self.winMain.set_keep_below(False) elif action=='get-size': return_value = 'x'.join(str(i) for i in list(self.winMain.get_size())) elif action=='get-position': return_value = 'x'.join(str(i) for i in list(self.winMain.get_position())) return str(return_value) gespeaker-0.8.6/src/handlepaths.py000066400000000000000000000040021255744433100171330ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import os import sys __base_path__ = os.path.dirname(os.path.abspath(__file__)) APP_NAME = 'gespeaker' APP_TITLE = 'Gespeaker' APP_VERSION = '0.8.6' PATHS = { 'locale': [ '%s/../locale' % __base_path__, '%s/share/locale' % sys.prefix], 'ui': [ '%s/../data/ui' % __base_path__], 'icons': [ '%s/../data/icons' % __base_path__], 'data': [ '%s/../data' % __base_path__], 'doc': [ '%s/../doc' % __base_path__, '%s/share/doc/%s' % (sys.prefix, APP_NAME)], 'plugins': [ '%s/../plugins' % __base_path__, '%s/share/plugins' % sys.prefix] } def getPath(key, append = ''): "Returns the correct path for the specified key" for path in PATHS[key]: if os.path.isdir(path): if append: return os.path.abspath(os.path.join(path, append)) else: return os.path.abspath(path) def get_app_logo(): "Returns the path of the icon logo" return getPath('icons', '%s.svg' % APP_NAME) def read_text_file(key, append = ''): "Returns the content of the indicated text file" try: f = open(getPath(key, append), 'r') text = f.read() f.close() except: text = '' return text gespeaker-0.8.6/src/plugins.py000066400000000000000000000055211255744433100163300ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk.gdk import os import handlepaths import ConfigParser import Settings ICON_WIDTH = 48 ICON_HEIGHT = 48 plugins = {} config = None def register_plugin(name, plugin_class): "Register a new plugin" global plugins plugins[name] = plugin_class def signal_proxy(signal, argc=0, args=None): "Call a signal by its name" for plugin in plugins.itervalues(): if hasattr(plugin, signal): method = getattr(plugin, signal) if method and plugin.active: if argc==1: method(args) elif argc==0: method() def loadPluginsSettings(): "Load plugins from the configuration file" global config config = ConfigParser.RawConfigParser() if os.path.exists(Settings.pluginsfile): config.read(Settings.pluginsfile) class GespeakerPlugin(object): def __init__(self, name, version, description, author, icon='', website=''): "Module initialization" self.name = name self.version = version self.description = description self.author = author self.icon = icon self.website = website self.logger('init plugin v.%s' % version) self.active = True def load(self): "Plugin load" pass def unload(self): "Plugin unload" pass def reload(self): "Plugin reload" self.unload() self.load() def configure(self): "Plugin custom configuration" pass def update_ui(self): "Update UI for changes" pass def enable(self): "Enable the disabled plugin" self.active = True def disable(self): "Disable the plugin" self.active = False def logger(self, message): "Print a message from a plugin" print '[%s]: %s' % (self.name, message) def render_icon(self): filename = self.icon.replace('$icons', handlepaths.getPath('icons')) if not filename or not os.path.exists(filename): filename = handlepaths.getPath('icons', 'generic-plugin.png') return gtk.gdk.pixbuf_new_from_file_at_size(filename, ICON_WIDTH, ICON_HEIGHT) gespeaker-0.8.6/src/pygtkutils.py000066400000000000000000000053611255744433100170700ustar00rootroot00000000000000## # Project: gespeaker - A GTK frontend for espeak # Author: Fabio Castelli (Muflone) # Copyright: 2009-2015 Fabio Castelli # License: GPL-2+ # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation; either version 2 of the License, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ## import gtk def TextBuffer_get_text(buffer): "Return the whole text on the TextBuffer" return buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter()) def Radio_get_active(group): "Return the currently active radio button on the group" for button in group: if button.get_active(): return button def Pixbuf_load_file(filename, size=None): "Load an image file with the desired size if requested" if size and len(size) == 2: return gtk.gdk.pixbuf_new_from_file_at_size(filename, size[0], size[1]) else: return gtk.gdk.pixbuf_new_from_file(filename) def Window_change_cursor(window, cursor, refresh=False): "Change a window's cursor and optionally forces the refresh" window.set_cursor(cursor and gtk.gdk.Cursor(cursor) or None) if refresh: gtk.gdk.flush() def Button_change_stock_description(button, caption, use_underline=None): "Change stock button description" alignment = button.get_children()[0] box = alignment.get_children()[0] first, second = box.get_children() # Find label if type(first) is gtk.Label: label = first elif type(second) is gtk.Label: label = second else: label = None if label: label.set_text(caption) # Set use_underline if use_underline is not None: label.set_use_underline(use_underline) def TreeModel_find_text(model, column, text): "Return the path of the found text in the model" iter = model.get_iter_first() while iter: if model.get_value(iter, column) == text: return int(model.get_string_from_iter(iter)) iter = model.iter_next(iter) def ComboBox_set_item_from_text(combo, column, text): path = TreeModel_find_text(combo.get_model(), column, text) if not path is None: combo.set_active(path) return path def ComboBox_get_text(combo, column): active = combo.get_active() if not active is None: return combo.get_model()[active][column]