![]()
Cross-language synthesis with
MBROLA
![]()
In my MBROLA TTS application, I'd like to supply a variety of English-speaking "voices".
MBROLA currently offers English speaker voices en1, us1, us2 and us3, all of which I use: but I'd like more!
For my application, it's fine (indeed, an advantage) to output English with a "foreign" (in this context, a non-British and non-American) accent.
As an experiment, I wrote some quick-and-dirty PERL scripts which take an en1 .pho file as input, and produce .pho files which can be played using the br1, de1, de2, fr1, fr2, fr3, fr4, nl2 and sw1 MBROLA voices.
Essentially, the scripts simply remap the source phonemes, and check/replace illegal phoneme pairs.
Although the code is very primitive, the results were promising. To my ear, the output sounds like an authentic Brazilian, Dutch, French, German or Swedish native speaker using English.
It would be perfectly possible to design a far better, and far more general system which can map source voice A to destination voice B, rather than my rather lame, manually-derived, ad-hoc implementation.
Below are downloadable PERL scripts, MBROLA .pho files and audio samples encoded with RealPlayer .
Items marked with
are
"singing" files, created with another program. Click
the icon to play the MIDI, or right-click to save.
I'd be interested to correspond with anyone who may be working along parallel lines in this area.
Mike Hamilton mikeh@hamilton.net.au.
![]()
Update 22 June 2000:
Here are some
results from some recent work:
I took this text:
Melbourne ATIS
|
... and created a British English .pho file which I rendered into an audio file with Mbrola:
| Voice | .pho file | audio |
| en1 | melbourne_british.pho |
Next, I processed
the British .pho file to produce .pho files for
note: the .mp3 audio files are all approx. 90k)
br1, br2, br3, de1, de2, de3, fr1, fr2, fr3, fr4, fr5. nl2, nl3
and sw1,
and rendered them all into audio with Mbrola.
Note that the br2 and br3 examples exhibit some severe "burbling" effects caused by the lack of suitable phonemes in the target voice database.
![]()
Here are the PERL scripts (right-click to save):
| script | |
| en1tobr.pl | en1 to br1 (Brazilian speaker) |
| en1tode.pl | en1 to de1, de2 (German speakers) |
| en1tofr.pl | en1 to fr1, fr2, fr3, fr4 (French speakers) |
| en1tonl.pl | en1 to nl2 (Dutch speaker) |
| en1tosw.pl | en1 to sw1 (Swedish speaker) |
![]()
| Voice | .pho file | audio |
| en1 | en_boogie.pho | |
| br1 | br_boogie.pho | |
| de1 | de_boogie.pho | |
| de2 | de_boogie.pho | |
| fr1 | fr_boogie.pho | |
| fr2 | fr_boogie.pho | |
| fr3 | fr_boogie.pho | |
| fr4 | fr_boogie.pho | |
| nl2 | nl_boogie.pho | |
| sw1 | sw_boogie.pho |
| Voice | .pho file | audio |
| en1 | en_doremi.pho | |
| br1 | br_doremi.pho | |
| de1 | de_doremi.pho | |
| de2 | de_doremi.pho | |
| fr1 | fr_doremi.pho | |
| fr2 | fr_doremi.pho | |
| fr3 | fr_doremi.pho | |
| fr4 | fr_doremi.pho | |
| nl2 | nl_doremi.pho | |
| sw1 | sw_doremi.pho |
euler
|
| Voice | .pho file | audio |
| en1 | euler.pho | |
| br1 | br_euler.pho | |
| de1 | de_euler.pho | |
| de2 | de_euler.pho | |
| fr1 | fr_euler.pho | |
| fr2 | fr_euler.pho | |
| fr3 | fr_euler.pho | |
| fr4 | fr_euler.pho | |
| nl2 | nl_euler.pho | |
| sw1 | sw_euler.pho |
mbrola
|
| Voice | .pho file | audio |
| en1 | mbrola.pho | |
| br1 | br_mbrola.pho | |
| de1 | de_mbrola.pho | |
| de2 | de_mbrola.pho | |
| fr1 | fr_mbrola.pho | |
| fr2 | fr_mbrola.pho | |
| fr3 | fr_mbrola.pho | |
| fr4 | fr_mbrola.pho | |
| nl2 | nl_mbrola.pho | |
| sw1 | sw_mbrola.pho |
|
| Voice | .pho file | audio |
| en1 | en_popeye.pho | |
| br1 | br_popeye.pho | |
| de1 | de_popeye.pho | |
| de2 | de_popeye.pho | |
| fr1 | fr_popeye.pho | |
| fr2 | fr_popeye.pho | |
| fr3 | fr_popeye.pho | |
| fr4 | fr_popeye.pho | |
| nl2 | nl_popeye.pho | |
| sw1 | sw_popeye.pho |
tobe
|
| Voice | .pho file | audio |
| en1 | tobe.pho | |
| br1 | br_tobe.pho | |
| de1 | de_tobe.pho | |
| de2 | de_tobe.pho | |
| fr1 | fr_tobe.pho | |
| fr2 | fr_tobe.pho | |
| fr3 | fr_tobe.pho | |
| fr4 | fr_tobe.pho | |
| nl2 | nl_tobe.pho | |
| sw1 | sw_tobe.pho |