12.12.2012 Views

Festival Speech Synthesis System: - Speech Resource Pages

Festival Speech Synthesis System: - Speech Resource Pages

Festival Speech Synthesis System: - Speech Resource Pages

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

We save the above definitions in a file `spanish_el.scm'. Now we can declare the new voice to <strong>Festival</strong>. See<br />

section 24.3 Defining a new voice, for a description of methods for adding new voices. For testing purposes we can<br />

explciitly load the file `spanish_el.scm'<br />

The voice is now available for use in festival.<br />

festival> (voice_spanish_el)<br />

spanish_el<br />

festival> (SayText "hola amigos")<br />

<br />

As you can see adding a new voice is not very difficult. Of course there is quite a lot more than the above to add a<br />

high quality robust voice to <strong>Festival</strong>. But as we can see many of the basic tools that we wish to use already exist. The<br />

main difference between the above voice and the English voices already in <strong>Festival</strong> are that their models are better<br />

trained from databases. This produces, in general, better results, but the concepts behind them are basically the same.<br />

All of those trainable methods may be parameterized with data for new voices.<br />

As <strong>Festival</strong> develops, more modules will be added with better support for training new voices so in the end we hope<br />

that adding in high quality new voices is actually as simple as (or indeed simpler than) the above description.<br />

[ < ] [ > ] [ > ] [Top] [Contents] [Index] [ ? ]<br />

24.2.9 Resetting globals<br />

Because the version of Scheme used in <strong>Festival</strong> only has a single flat name space it is unfortunately too easy for<br />

voices to set some global which accidentally affects all other voices selected after it. Because of this problem we<br />

have introduced a convention to try to minimise the possibility of this becoming a problem. Each voice function<br />

defined should always call voice_reset at the start. This will reset any globals and also call a tidy up function<br />

provided by the previous voice function.<br />

Likewise in your new voice function you should provide a tidy up function to reset any non-standard global variables<br />

you set. The function current_voice_reset will be called by voice_reset. If the value of<br />

current_voice_reset is nil then it is not called. voice_reset sets current_voice_reset to nil,<br />

after calling it.<br />

For example suppose some new voice requires the audio device to be directed to a different machine. In this example<br />

we make the giant's voice go through the netaudio machine big_speakers while the standard voice go through<br />

small_speakers.<br />

Although we can easily select the machine big_speakers as out when our voice_giant is called, we also<br />

need to set it back when the next voice is selected, and don't want to have to modify every other voice defined in the<br />

system. Let us first define two functions to selection the audio output.<br />

(define (select_big)<br />

(set! giant_previous_audio (getenv "AUDIOSERVER"))<br />

(setenv "AUDIOSERVER" "big_speakers"))<br />

(define (select_normal)<br />

(setenv "AUDIOSERVER" giant_previous_audio))<br />

Note we save the previous value of AUDIOSERVER rather than simply assuming it was small_speakers.<br />

Our definition of voice_giant definition of voice_giant will look something like

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!