Changes

Jump to: navigation, search

Festival TTS

2,398 bytes added, 12:45, 10 March 2017
Building a Unit Selection Cluster Voice from TIMIT data
*short tutorial - http://festvox.org/festtut-2.0/
*exercises and hints - http://festvox.org/festtut-2.0/exercises/
==Slides on HTS Synthesis==
*http://www.sp.nitech.ac.jp/~tokuda/tokuda_iscslp2006.pdf
=Training Voice Models=
==Building a Unit Selection Cluster Voice==
(from here http://festvox.org/festvox/x3082x3086.html)
#<pre>mkdir uw_uw_rdt
cd uw_uw_rdt</pre>
==Building a CLUSTERGEN Statistical Parametric Synthesizer==
(adapted from http://festvox.org/festvox/c3170c3174.html#AEN3172AEN3176)#<codepre>mkdir uw_us_rdt_arctic</pre>#<pre>cd uw_us_rdt_arctic</pre>#<pre>$FESTVOXDIR/src/clustergen/setup_cg uw us rdt_arctic</codepre>#copy text into <codepre>etc/txt.done.data</codepre>. use some of the lines from here http://www.festvox.org/cmu_arctic/cmuarctic.data#copy audio files into <codepre>wav/</codepre>
#use <pre>bin/get_wavs</pre> to copy files to power normalize and convert to proper format.
==Building a Unit Selection Cluster Voice from TIMIT data==
(from here http://festvox.org/festvox/x3082c2645.html#AEN2716)#<pre>mkdir uw_uw_rdt_timit</pre>#<pre>cd uw_uw_rdt_timit</pre>
#timit setup: <pre> $FESTVOXDIR/src/unitsel/setup_clunits uw us rdt timit</pre>
#generate prompts and prompt files: <pre>festival -b festvox/build_clunits.scm '(build_prompts_waves "etc/timit.data")'</pre>
#record sound, using audacity. save as 16k, 16bit mono.
#copy sound files from recording directory into voice directory. <pre> ./bin/get_wavs ~/Sounds/TIMIT_Training_Data/warehouse_omni/*.wav </pre>
#make labels: <pre>./bin/make_labs prompt-wav/*.wav</pre>
#build utterance structure: <pre>festival -b festvox/build_clunits.scm '(build_utts "etc/timit.data")'</pre>
#find Mel Frequency Cepstral Coefficients: <pre>./bin/make_mcep etc/timit.data</pre>
#build cluster unit selection synth: <pre>festival -b festvox/build_clunits.scm '(build_clunits "etc/timit.data")'</pre>
 
=Improving Quality=
= Using Voices =
== using meghan voice ==
 ===To run Run the server:Server ===*open terminal: <pre>cd /Users/murmur/Desktop/meghan festival_server -c meghans_special_sauce.scm</pre>
*To kill the server:
<pre>Control-C</pre>=== Run the Client ===*To run the client:open a 2nd terminal window: <pre>cd /Users/murmur/Desktop/meghan festival_client myfile.txt --ttw --output client_test.wav </pre>
*Other stuff (python):
<pre>
import os
os.popen("/Applications/festival_2.1/festival/src/main/festival_client /Users/murmur/Desktop/meghan/myfile.txt --ttw --output /Users/murmur/Desktop/meghan/client_test78.wav")
</pre>
==Using new VoicesA Newly Trained Voice =====Modify new the voice so festival knows it's there===*append proclaim message to your newly trained model <code>uw_us_rdt_clunits.scm </code> in <code>uw_us_rdt_clunits/festvox</code>: <codepre>
(proclaim_voice
'uw_us_rdt_clunits
(provide 'uw_us_rdt_clunits)
</codepre>
===Install voice to festival directory===
*http://roberttwomey.com/downloads/uw_us_rdt_clunits.tar.gz
*unzip file from festival root directory, it should install to the correct directory
*copy your newly trained voice to <code>festival/lib/voices/english/</code>
*the name of your new voice directory (ex: <code>uw_us_rdt_clunits/</code>) needs to match the voice file (ex: <code>uw_us_rdt_clunits/festvox/uw_us_rdt_clunits.scm</code>)
 
===Configure festival to use your voice by default===
*to set your voice as default(and add a special pause entry), add the following to <code>festival/etc/siteinit.scm</code>:
<pre>
(autoload voice_uw_us_rdt_clunits "/Users/rtwomey/code/tts/festival/lib/voices/english/uw_us_rdt_clunits/festvox/uw_us_rdt_clunits" "American English male uw_us_rdt_clunits")
 
(set! voice_default 'voice_uw_us_rdt_clunits)
(voice_uw_us_rdt_clunits)
(lex.add.entry '("<break>" n (((pau pau) 0))))
 
</pre>
*the <code>lex.add.entry</code> line makes a new word in the lexicon <precode><break></precode> that adds a pause.*change directory <code>cd</code> to the folder containing your <code>festvox</code> files (trained model)
*run <code>festival_server</code> and it will load your new voice by default
*http://www.cstr.ed.ac.uk/projects/festival/manual/festival_24.html
=Add a pause as a new lexical entry=
*add the following after <code> (provide 'siteinit) </code> in <code>festival/etc/siteinit.scm</code>:
<pre>
(voice_uw_us_rdt_clunits)
 
(lex.add.entry '("<break>" n (((pau pau) 0))))
</pre>
*this will add a new word, "<break>" that is synthesized as a brief pause in speech.
=Using Voice on Raspberry Pi=
*install with apt-get. alternatively, follow these instructions: http://elinux.org/RPi_Text_to_Speech_(Speech_Synthesis)
*With festival 2.1
*copy the voice data into <code>/usr/share/festival/voices/english</code>
*edit '''/usr/share/festival/voices.scm''' and add the new voice <code>uw_us_rdt_clunits</code> at the beginning of the default-voice-priority-list. (end of the file)
*now your new voice should be the default for festival.
==rpi with external i2s dac==
*change aplay command within festival/scheme:
<syntaxhighlight lang="bash">
(Parameter.set 'Audio_Command "aplay -q -c 2 -t raw -f s16 -r 8000 $FILE")"
</syntaxhighlight>
*or add to startup: https://wiki.archlinux.org/index.php/Festival#Usage_with_a_Sound_Server
=Tuning phrasing, prosody, etc with SABLE=
*http://www.cstr.ed.ac.uk/projects/festival/manual/festival_10.html#SEC31
=Using Festival=
==Run the Server==
*from anywhere: <code>festival_server</code>
==Run the Client==
*run the client: <code>echo "Do you really want to see all of it?" | festival_client --ttw --output test.wav </code>
*generates a wave file
==Synthesize Speech to Audio Out==
*run festival: <code>echo "test this" | festival --tts</code>
*plays through speakers.
==Render a Text File In Speech==
*run the server
*run the client: <code>cat ~/Documents/speech\ performance/speech\ performance\ structure.txt | festival_client --ttw --output structure.wav</code>
==Phoneme tests==
Switch voices:
<syntaxhighlight lang="scheme">(voice_kal_diphone)</syntaxhighlight>
Switch back:
<syntaxhighlight lang="scheme">(voice_uw_us_rdt_clunits)</syntaxhighlight>
Pronounce phonemes:
<syntaxhighlight lang="scheme">(SayPhones '(pau ch pau m ay n ey m ih z r ah b er t pau)) </syntaxhighlight>
<syntaxhighlight lang="scheme">(SayPhones '(pau ch pau m ay n ey m ih z r ow b er t pau)) </syntaxhighlight>
<syntaxhighlight lang="scheme">(SayPhones '(pau ch pau m ay n ey m ih z r ow b ah t pau)) </syntaxhighlight>
<syntaxhighlight lang="scheme">(SayPhones '(pau ch pau m ay n ey m ih z r ah b ah t pau)) </syntaxhighlight>

Navigation menu