Ahoj!
> neviete, ci existuje nejaky program na citanie textu ? Ide mi
> vlastne o hlasovy vystup z textoveho suboru. Tiez by som rad vedel,
> kde sa daju ziskat programy na manipulaciu zvuku. Staci iba
> zobrazenie wav suborov a nejake to osekavanie casti zvukovej
> nahravky a tak.
Tohle je modul do programu festival (viz festival.org). Spolu s
mbrolou a databazi cz1 mluvi vcelku pouzitelne.
Pavel
(Jestli rozchodis festival a mbrolu ale tohle ne, tak me kontaktuj na
soukromou adresu, rad pomuzu).
; CZ1 mbrola: czech voice for festival. Requires festival, mbrola and
; cz1 database.
;
; Put this into lib/voices/czech/cz1_mbrola/festvox/ and put cz1
; database to lib/voices/czech/cz1_mbrola.
;
;
; Copyright 2000 Pavel Machek <***@ucw.cz>
;
; Version 0.4
;
; You MAY use this software under terms of GNU GPL, or under following license:
;
; Permission is hereby granted, free of charge, to use and distribute
; this software and its documentation without restriction, including
; without limitation the rights to use, copy, modify, merge, publish,
; distribute, sublicense, and/or sell copies of this work, and to
; permit persons to whom this work is furnished to do so, subject to
; the following conditions:
; 1. The code must retain the above copyright notice, this list of
; conditions and the following disclaimer.
; 2. Original authors' names are not deleted.
;
; EVERYONE
; DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
; ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT
; SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE
; FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
; AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
; ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
; THIS SOFTWARE.
;
; Festival is buggy, and ignores current locale setting. It also has
; lowercase letters hardcoded to a-z, and similar fatal bugs
; w.r.t. localization. I try to workaround it.
;
; FIXME: should create my own _accent_cart_tree and use it
;
(set! cz1_mbrola_dir (cdr (assoc 'cz1_mbrola voice-locations)))
(require 'mbrola)
(defPhoneSet
czech
;;; Phone Features
(;; vowel or consonant
(vc + -)
;; vowel length: short long diphthong schwa
(vlng s l d a 0)
;; vowel height: high mid low
(vheight 1 2 3 -)
;; vowel frontness: front mid back
(vfront 1 2 3 -)
;; lip rounding
(vrnd + -)
;; consonant type: stop fricative affricative nasal liquid
(ctype s f a n l 0)
;; place of articulation: labial alveolar palatal labio-dental
;; dental velar
(cplace l a p b d v 0)
;; consonant voicing
(cvox + -)
)
;; Phone set members (features not set properly: copied from spanish)
(
(_ - 0 - - - 0 0 -)
(a + l 3 1 - 0 0 -)
(a: + l 3 1 - 0 0 -)
(b - 0 - - + s l +)
(c - 0 - - + s v +)
(d - 0 - - + s a +)
(D - 0 - - + s a +)
(e + l 2 1 - 0 0 -)
(e: + l 2 1 - 0 0 -)
(f - 0 - - + f b -)
(g - 0 - - + s p +)
(h - 0 - - + a a -)
(i + l 1 1 - 0 0 -)
(i: + l 1 1 - 0 0 -)
(j - 0 - - + l a +)
(k - 0 - - + s p -)
(l - 0 - - + l d +)
(m - 0 - - + n l +)
(n - 0 - - + n d +)
(N - 0 - - + n d +)
(o + l 3 3 - 0 0 -)
(o: + l 3 3 - 0 0 -)
(p - 0 - - + s l -)
(r - 0 - - + l p +)
(r\ - 0 - - + l p +)
(s - 0 - - + f a +)
(S - 0 - - + f a +)
(t - 0 - - + s v +)
(T - 0 - - + s v +)
(u + l 1 3 + 0 0 -)
(u: + l 1 3 + 0 0 -)
(v - 0 - - + n l +)
(x - 0 - - + a a -)
(z - 0 - - + f a +)
(Z - 0 - - + f a +)
(tS - 0 - - + s v +)
)
)
(set! czech_el_phone_data
; This is also not right
'(
(_ 0.0 0.250)
(a 0.0 0.090)
(a: 0.0 0.150)
(b 0.0 0.065)
(c 0.0 0.065)
(d 0.0 0.060)
(D 0.0 0.060)
(e 0.0 0.090)
(e: 0.0 0.150)
(f 0.0 0.100)
(g 0.0 0.080)
(h 0.0 0.135)
(i 0.0 0.080)
(i: 0.0 0.150)
(j 0.0 0.100)
(k 0.0 0.100)
(l 0.0 0.080)
(m 0.0 0.070)
(n 0.0 0.080)
(N 0.0 0.080)
(o 0.0 0.090)
(o: 0.0 0.150)
(p 0.0 0.100)
(r 0.0 0.060)
(r\ 0.0 0.070)
(s 0.0 0.110)
(S 0.0 0.110)
(t 0.0 0.085)
(T 0.0 0.085)
(u 0.0 0.080)
(u: 0.0 0.150)
(v 0.0 0.100)
(x 0.0 0.135)
(z 0.0 0.110)
(Z 0.0 0.110)
(tS 0.0 0.110)
))
(set! czech_dur_tree
'
((R:SylStructure.parent.R:Syllable.p.syl_break > 1 ) ;; clause initial
((R:SylStructure.parent.stress is 1)
((1.5))
((1.2)))
((R:SylStructure.parent.syl_break > 1) ;; clause final
((R:SylStructure.parent.stress is 1)
((2.0))
((1.5)))
((R:SylStructure.parent.stress is 1)
((1.2))
((1.0))))))
(PhoneSet.silences '(_))
(lex.create "czech")
(lex.set.phoneset "czech")
(lex.add.entry
'("pocitac" nil ( ((p o) 1) ((tS i:) 0) ((t a tS) 0) ))
)
(lex.add.entry
'("pocitaca" nil ( ((p o) 0) ((tS i:) 1) ((t a tS) 0) ))
)
(lex.add.entry
'("pocitacb" nil ( ((p o) 0) ((tS i:) 0) ((t a tS) 1) ))
)
(lts.ruleset
; Name of rule set
czech_ruleset
; Sets used in the rules
(
(MEKCIDLO i í i Í I)
)
; Rules
(
( [ a ] = a )
( [ á ] = a: )
( [ b ] = b )
( [ c h ] = x )
( [ c ] = c )
( [ E ] = tS )
( [ e ] = tS )
( [ d ] MEKCIDLO = D )
( [ d ] = d )
( [ i ] = D )
( [ I ] = D )
( [ e ] = e )
( [ é ] = e: )
( [ i ] = e )
( [ I ] = e )
( [ f ] = f )
( [ g ] = g )
( [ h ] = h )
( [ i ] = i )
( [ í ] = i: )
( [ Í ] = i: )
( [ j ] = j )
( [ k ] = k )
( [ l ] = l )
( [ m i ] = m N e )
( [ m I ] = m N e )
( [ m ] = m )
( [ n ] MEKCIDLO = N )
( [ n ] = n )
( [ o ] = N )
( [ O ] = N )
( [ o ] = o )
( [ ó ] = o: )
( [ Ó ] = o: )
( [ p ] i = p j )
( [ p ] I = p j )
( [ p ] = p )
( [ q ] = k v )
( [ r ] = r )
( [ o ] = r\ )
( [ O ] = r\ )
( [ s ] = s )
( [ š ] = S )
( [ (c) ] = S )
( [ t ] MEKCIDLO = T )
( [ t ] = t )
( [ << ] = T )
( [ >> ] = T )
( [ u ] = u )
( [ ú ] = u: )
( [ Ú ] = u: )
( [ u ] = u: )
( [ U ] = u: )
( [ v ] i = v j )
( [ v ] I = v j )
( [ v ] = v )
( [ w ] = v )
( [ x ] = k s )
( [ y ] = i )
( [ ý ] = i: )
( [ Ý ] = i: )
( [ z ] = z )
( [ 3/4 ] = Z )
( [ (r) ] = Z )
( [ 1 ] = j e d n a _ )
( [ 2 ] = d v a _ )
( [ 3 ] = t r\ i _ )
( [ 4 ] = tS t i r\ i _ )
( [ 5 ] = p j e t _ )
( [ 6 ] = S e s t _ )
( [ 7 ] = s e d m _ )
( [ 8 ] = o s m _ )
( [ 9 ] = d e v j e t _ )
( [ 0 ] = n u l a _ )
( [ "." ] = _ )
( [ "?" ] = _ )
( [ "-" ] = _ )
( [ ":" ] = _ )
( [ "," ] = _ )
( [ "_" ] = _ )
( [ ">" ] = _ )
( [ "<" ] = _ )
( [ "(" ] = _ )
( [ ")" ] = _ )
( [ "!" ] = _ )
))
(define (czech_lts word features)
"(czech_lts WORD FEATURES)
Using letter to sound rules build a spanish pronunciation of WORD."
(list word
nil
(lex.syllabify.phstress (lts.apply (downcase word) 'czech_ruleset))))
(lex.set.lts.method 'czech_lts)
(set! czech_phrase_cart_tree
'
((lisp_token_end_punc in ("?" "." ":"))
((BB))
((lisp_token_end_punc in ("'" "\"" "," ";"))
((B))
((n.name is 0) ;; end of utterance
((BB))
((NB))))))
(define (czech_token_to_words token name)
"(czech_token_to_words TOKEN NAME)
This is workaround for ugly bugs w.r.t. iso-8859-2 in core festival"
(list name)
)
(set! czech_accent_cart_tree
'
((R:SylStructure.parent.gpos is content)
((stress is 1)
; ((Accented))
((position_type is single)
; ((Accented))
((NONE))))
((NONE))))
(define (voice_cz1_mbrola)
"(voice_cz1_mbrola)
Set up the current voice to be female Czech using mbrola."
;; Phone set
(voice_reset)
(Parameter.set 'Language 'czech)
(Parameter.set 'PhoneSet 'czech)
(PhoneSet.select 'czech)
;; Tokenization rules
(set! token_to_words czech_token_to_words)
;; POS tagger
; (require 'pos)
(set! pos_supported nil)
; (set! pos_lex_name nil) ; If I enable this, it just says nothing
(set! pos_ngram_name 'english_pos_ngram)
;; Lexicon selection
(lex.select "czech")
;; Phrase prediction
(require 'phrase)
(set! phrase_cart_tree czech_phrase_cart_tree)
(Parameter.set 'Phrase_Method 'cart_tree)
;; Accent and tone prediction
(require 'tobi)
(set! int_tone_cart_tree f2b_int_tone_cart_tree)
(set! int_accent_cart_tree f2b_int_accent_cart_tree) ;f2b_int gives better results than czech ?
(set! postlex_vowel_reduce_cart_tree
postlex_vowel_reduce_cart_data)
;; F0 prediction
(set! int_simple_params
'((f0_mean 180) (f0_std 15)))
(Parameter.set 'Int_Target_Method 'Simple)
(Parameter.set 'Int_Method 'Simple)
;; Duration prediction
(set! duration_cart_tree czech_dur_tree)
(set! duration_ph_info czech_el_phone_data)
(Parameter.set 'Duration_Method Duration_Tree_ZScores)
(Parameter.set 'Duration_Stretch 1.1)
;; Waveform synthesizer
(set! us_abs_offset 0.0)
(set! window_factor 1.0)
(set! us_rel_offset 0.0)
(set! us_gain 0.9)
(Parameter.set 'Synth_Method 'MBROLA_Synth)
(set! mbrola_progname "mbrola")
(set! mbrola_database
(format
nil
"%s%s "
cz1_mbrola_dir "cz1/cz1"
))
(set! current-voice 'cz1_mbrola)
)
(proclaim_voice
'cz1_mbrola
'((language czech)
(gender female)
(dialect none)
(description
"This is test czech voice using mbrola.")))
(provide 'cz1_mbrola)
--
I'm ***@ucw.cz. "In my country we have almost anarchy and I don't care."
Panos Katsaloulis describing me w.r.t. patents at ***@linmodems.org