mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 13:38:47 +00:00
358 lines
16 KiB
Markdown
358 lines
16 KiB
Markdown
# MBROLA Voices
|
|
|
|
- [Voice Names](#voice-names)
|
|
- [Windows Installation](#windows-installation)
|
|
- [Linux Installation](#linux-installation)
|
|
- [Installation of standard packages](#installation-of-standard-packages)
|
|
- [Installation of latest MBROLA packages](#installation-of-latest-mbrola-packages)
|
|
- [Usage](#usage)
|
|
- [Adding new MBROLA voice entry to eSpeak NG](#adding-new-mbrola-voice-entry-to-espeak-ng)
|
|
- [1. Add MBROLA voice definition file](#1-add-mbrola-voice-definition-file)
|
|
- [2. Add MBROLA phoneme translation file](#2-add-mbrola-phoneme-translation-file)
|
|
- [3. Compile voice and update Makefile.am file](#3-compile-voice-and-update-makefileam-file)
|
|
|
|
----------
|
|
|
|
The MBROLA project is a collection of diphone voices for speech
|
|
synthesis. They do not include any text-to-phoneme translation, so this
|
|
must be done by another program. The MBROLA voices are cost-free but are
|
|
not open source. Voice files are available at
|
|
[http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html).
|
|
|
|
eSpeak NG can be used as a front-end to MBROLA. It provides the
|
|
spelling-to-phoneme translation and intonation, which MBROLA then uses
|
|
to generate speech sound.
|
|
|
|
## Voice Names
|
|
|
|
To use a MBROLA voice, eSpeak NG needs information to translate from its
|
|
own phonemes to the equivalent MBROLA phonemes.
|
|
|
|
The eSpeak NG voices which use MBROLA are named as:
|
|
|
|
mb-xxN
|
|
|
|
where `xxN` is the name of a MBROLA voice (e.g. `mb-en1` for the MBROLA
|
|
`en1` English voice). These voice files are in eSpeak NG's folder
|
|
`.../espeak-ng-data/voices/mb` (where `...` is usually `/usr/share`,
|
|
but could be somewhere else).
|
|
|
|
The installation instructions below use the MBROLA voice `en1` as an
|
|
example. You can use other mbrola voices for which there is an
|
|
equivalent eSpeak NG voice in `espeak-ng-data/voices/mb`.
|
|
|
|
There are some additional eSpeak NG MBROLA voices, which speak English text
|
|
using a MBROLA voice for a different language. These contain the name of
|
|
the MBROLA voice with a suffix `-en`. For example, the voice
|
|
`mb-de4-en` will speak English text with a German accent by using the
|
|
MBROLA `de4` voice.
|
|
|
|
The following MBROLA voices are available. Not all are supported by eSpeak NG.
|
|
|
|
| MBROLA Voice | Language | Gender | eSpeak | Debian Package |
|
|
|--------------|----------------------|--------|----------|----------------|
|
|
| `af1` | Afrikaans | male | `mb-af1` | `mbrola-af1` |
|
|
| `ar1` | Arabic | male | `mb-ar1` | |
|
|
| `ar2` | Arabic | male | `mb-ar2` | |
|
|
| `br1` | Brazillian Portugues | male | `mb-br1` | `mbrola-br1` |
|
|
| `br2` | Brazillian Portugues | male | `mb-br2` | `mbrola-br2` |
|
|
| `br3` | Brazillian Portugues | male | `mb-br3` | `mbrola-br3` |
|
|
| `br4` | Brazillian Portugues | female | `mb-br4` | `mbrola-br4` |
|
|
| `bz1` | Breton | female | | |
|
|
| `ca1` | Canadian French | male | `mb-ca1` | |
|
|
| `ca2` | Canadian French | male | `mb-ca2` | |
|
|
| `cn1` | Mandarin Chinese | female | `mb-cn1` | |
|
|
| `cr1` | Croatian | male | `mb-cr1` | `mbrola-cr1` |
|
|
| `cz1` | Czech | female | `mb-cz1` | |
|
|
| `cz2` | Czech | male | `mb-cz2` | `mbrola-cz2` |
|
|
| `de1` | German | female | `mb-de1` | `mbrola-de1` |
|
|
| `de2` | German | male | `mb-de2` | `mbrola-de2` |
|
|
| `de3` | German | female | `mb-de3` | `mbrola-de3` |
|
|
| `de4` | German | male | `mb-de4` | `mbrola-de4` |
|
|
| `de5` | German | female | `mb-de5` | `mbrola-de5` |
|
|
| `de6` | German | male | `mb-de6` | `mbrola-de6` |
|
|
| `de7` | German | female | `mb-de7` | `mbrola-de7` |
|
|
| `de8` | German-Bavarian | male | `mb-de8` | |
|
|
| `ee1` | Estonian | male | `mb-ee1` | `mbrola-ee1` |
|
|
| `en1` | British English | female | `mb-en1` | `mbrola-en1` |
|
|
| `es1` | Spanish | male | `mb-es1` | `mbrola-es1` |
|
|
| `es2` | Spanish | male | `mb-es2` | `mbrola-es2` |
|
|
| `es3` | Spanish | female | `mb-es3` | |
|
|
| `es4` | Spanish | male | `mb-es4` | |
|
|
| `fr1` | French | male | `mb-fr1` | `mbrola-fr1` |
|
|
| `fr2` | French | female | `mb-fr2` | |
|
|
| `fr3` | French | male | `mb-fr3` | |
|
|
| `fr4` | French | female | `mb-fr4` | `mbrola-fr4` |
|
|
| `fr5` | Belgian French | male | `mb-fr5` | |
|
|
| `fr6` | French | male | `mb-fr6` | |
|
|
| `fr7` | Belgian French | male | `mb-fr7` | |
|
|
| `gr1` | Greek | male | `mb-gr1` | `mbrola-gr1` |
|
|
| `gr2` | Greek | male | `mb-gr2` | `mbrola-gr2` |
|
|
| `hb1` | Hebrew | male | | |
|
|
| `hb2` | Hebrew | female | | |
|
|
| `hn1` | Korean | male | | |
|
|
| `hu1` | Hungarian | female | `mb-hu1` | `mbrola-hu1` |
|
|
| `ic1` | Icelandic | male | `mb-ic1` | `mbrola-ic1` |
|
|
| `in1` | Hindi | male | `mb-in1` | |
|
|
| `in2` | Hindi | female | `mb-in2` | |
|
|
| `id1` | Indonesian | male | `mb-id1` | `mbrola-id1` |
|
|
| `ir1` | Iranian Persian | male | `mb-ir1` | `mbrola-ir1` |
|
|
| `it1` | Italian | male | `mb-it1` | |
|
|
| `it2` | Italian | female | `mb-it2` | |
|
|
| `it3` | Italian | male | `mb-it3` | `mbrola-it3` |
|
|
| `it4` | Italian | female | `mb-it4` | `mbrola-it4` |
|
|
| `jp1` | Japanese | male | `mb-jp1` | |
|
|
| `jp2` | Japanese | female | `mb-jp2` | |
|
|
| `jp3` | Japanese | female | `mb-jp3` | |
|
|
| `la1` | Classical Latin | male | `mb-la1` | `mbrola-la1` |
|
|
| `lt1` | Lithuanian | male | `mb-lt1` | `mbrola-lt1` |
|
|
| `lt2` | Lithuanian | male | `mb-lt2` | `mbrola-lt2` |
|
|
| `ma1` | Malay | female | `mb-ma1` | |
|
|
| `mx1` | Mexican Spanish | male | `mb-mx1` | `mbrola-mx1` |
|
|
| `mx2` | Mexican Spanish | male | `mb-mx2` | `mbrola-mx2` |
|
|
| `nl1` | Dutch | male | `mb-nl1` <sup>[1](#footnote1)</sup> | |
|
|
| `nl2` | Dutch | male | `mb-nl2` | `mbrola-nl2` |
|
|
| `nl3` | Dutch | female | `mb-nl3` | |
|
|
| `nz1` | Maori | male | `mb-nz1` | |
|
|
| `pl1` | Polish | female | `mb-pl1` | `mbrola-pl1` |
|
|
| `pt1` | Portuguese | female | `mb-pt1` | `mbrola-pt1` |
|
|
| `ro1` | Romanian | male | `mb-ro1` | `mbrola-ro1` |
|
|
| `sw1` | Swedish | male | `mb-sw1` | `mbrola-sw1` |
|
|
| `sw2` | Swedish | female | `mb-sw2` | `mbrola-sw2` |
|
|
| `tl1` | Telugu | female | `mb-tl1` | |
|
|
| `tr1` | Turkish | male | `mb-tr1` | `mbrola-tr1` |
|
|
| `tr2` | Turkish | female | `mb-tr2` | `mbrola-tr2` |
|
|
| `us1` | American English | female | `mb-us1` | `mbrola-us1` |
|
|
| `us2` | American English | male | `mb-us2` | `mbrola-us2` |
|
|
| `us3` | American English | male | `mb-us3` | `mbrola-us3` |
|
|
| `vz1` | Venezuelan Spanish | male | `mb-vz1` | `mbrola-vz1` |
|
|
|
|
* If some MBROLA voice is not available as Debian package, you can download data files
|
|
from [here](https://github.com/mbrola/mbrola-voices).
|
|
|
|
## Windows Installation
|
|
|
|
The SAPI5 version of eSpeak NG uses the `mbrola.dll`.
|
|
|
|
1. Install eSpeak NG. Include the voice `mb-en1` in the list of voices during
|
|
the eSpeak NG installation.
|
|
|
|
2. Install the PC/Windows version of MBROLA (`MbrolaTools35.exe`) from:
|
|
[http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pcwin/MbrolaTools35.exe](http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pcwin/MbrolaTools35.exe).
|
|
|
|
3. Get the `en1` or other voice from:
|
|
[http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html).
|
|
|
|
4. Unpack the archive, and copy the `en1` data file (not the whole "en1" folder) into
|
|
`C:/Program Files/eSpeak/espeak-ng-data/mbrola`.
|
|
|
|
4. Use the voice `espeak-MB-EN1` from the list of SAPI5 voices.
|
|
|
|
## Linux Installation
|
|
|
|
### Installation of standard packages
|
|
|
|
There are standard packages prepared for MBROLA binary and voices on different Linux distributions.
|
|
On Debian/Ubuntu-like Linux, you can install mbrola using `apt-get` package manager:
|
|
|
|
sudo apt-get install mbrola mbrola-en1
|
|
|
|
where:
|
|
|
|
* `mbrola` is package containing MBROLA executable,
|
|
* `mbrola-en1` is mbrola data files for **en1** MBROLA voice.
|
|
|
|
You can check other available voices searching with command:
|
|
|
|
apt-cache search mbrola
|
|
|
|
### Installation of latest MBROLA packages
|
|
|
|
1. To install the latest MBROLA binary for Linux, download:
|
|
[http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip](http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip).
|
|
|
|
2. Unpack the archive, and copy and rename the file from: `mbrola-linux-i386` to `mbrola` somewhere in your executable path (eg. `/usr/bin/mbrola`).
|
|
|
|
3. Get the `en1` or other voice from:
|
|
[http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html](http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html).
|
|
|
|
4. Unpack the archive, and copy the `en1` data file (not the whole "en1" folder) to `/usr/share/mbrola/en1` folder.
|
|
|
|
5. Remember to make `mbrola` file executable.
|
|
|
|
__Notes:__
|
|
|
|
* eSpeak NG will look for mbrola voices firstly in `espeak-ng-data/mbrola` and then in `/usr/share/mbrola`.
|
|
* You can download latest development versions of MBROLA binaries from [https://github.com/mbrola/mbrola-bin/](https://github.com/mbrola/mbrola-bin/)
|
|
|
|
## Usage
|
|
|
|
If you use the eSpeak NG voice such as `mb-en1` then eSpeak NG will use the mbrola "en1" voice, e.g.:
|
|
|
|
espeak-ng -v mb-en1 "Hello world"
|
|
|
|
To generate mbrola phoneme data (.pho file) you can use:
|
|
|
|
espeak-ng -v mb-en1 -q --pho "Hello world"
|
|
|
|
or
|
|
|
|
espeak-ng -v mb-en1 -q --pho --phonout=out.pho "Hello world"
|
|
|
|
If you have issues with sound system integration, you can pass MBROLA's output to standard output,
|
|
which then can be played by ALSA (`aplay`) or PulseAudio (`paplay`) player throug the pipe:
|
|
|
|
espeak-ng -vmb-en1 --stdout "Hello world"|aplay
|
|
|
|
## Adding new MBROLA voice entry to eSpeak NG
|
|
|
|
To add new MBROLA voice entry for eSpeak NG you have to:
|
|
|
|
1. add MBROLA voice definition file,
|
|
2. add MBROLA phoneme translation file,
|
|
3. update Makefile.am file and compile voice.
|
|
|
|
These steps are described in details in following sections.
|
|
|
|
### 1. Add MBROLA voice definition file
|
|
|
|
eSpeak NG's voice files for MBROLA voices are in `espeak-ng-data/voices/mb` folder.
|
|
Voice definition file is in form `mb-xxN` and have to contain at least this line:
|
|
`mbrola <voice> <translation>`, e.g.
|
|
|
|
mbrola en1 en1_phtrans
|
|
|
|
Where:
|
|
* `en1` is the name of the MBROLA voice.
|
|
* `en1_phtrans` is a translation file to convert between eSpeak NG phonemes and
|
|
the equivalent MBROLA phonemes.
|
|
|
|
If language code differs between MBROLA voice and eSpeak NG language,
|
|
then additional line is necessary:
|
|
|
|
language xx
|
|
|
|
where `xx` is code of the language in eSpeak NG.
|
|
|
|
Binary `xxN_phtrans` files are kept in `espeak-ng-data/mbrola_ph` folder
|
|
and are generated from `phsource/mb/xxN` text files, during MBROLA
|
|
voice compilation.
|
|
|
|
Additionally MBROLA voice definition file can have other optional parameters,
|
|
similar to eSpeak NG voices, which are described [Voices](voices.md) file.
|
|
|
|
### 2. Add MBROLA phoneme translation file
|
|
|
|
MBROLA phoneme translation files specify translations from eSpeak NG
|
|
phoneme names to mbrola phoneme names.
|
|
|
|
The source phoneme translation files are in `.../phsource/mbrola` folder and
|
|
their name is in form `xxN` of referenced MBROLA voice.
|
|
|
|
_Note:_
|
|
|
|
* eSpeak NG phonemes are referenced from voice files in `phsource` folder of particular language e.g.
|
|
`ph_english` and/or general `phonemes` file.
|
|
|
|
* MBROLA phonemes are usualy listed in `README.txt` file of MBROLA voice.
|
|
|
|
Each line in the mbrola phoneme translation file contains:
|
|
|
|
<control> <espeak ph1> <espeak ph2> <percent> <mbrola ph1> [<mbrola ph2>]
|
|
|
|
* `<control>` \
|
|
bit 0 (+1) skip the next phoneme \
|
|
bit 1 (+2) match this and previous phoneme \
|
|
bit 2 (+4) only at the start of a word \
|
|
bit 3 (+8) don't match two phonemes across a word boundary \
|
|
bit 4 (+16) add this phoneme name as a prefix to the next phoneme name (used for de4 phoneme prefix '?') \
|
|
bit 5 (+32) only in stressed syllable \
|
|
bit 6 (+64) only at the end of a word
|
|
|
|
* `<espeak ph1>` \
|
|
The eSpeak NG phoneme which is to be translated to an mbrola phoneme.
|
|
|
|
* `<espeak ph2>` \
|
|
If this field is not `NULL`, then the match only occurs if
|
|
this field matches the next phoneme. If control bit `1` is set, then the
|
|
_previous_ rather than the _next_ phoneme is matched. This field may
|
|
also have the following values:
|
|
`VWL` \
|
|
matches any Vowel phoneme.
|
|
|
|
* `<percent>` \
|
|
If this field is zero then only one mbrola phoneme is used. If this
|
|
field is non-zero, then two mbrola phonemes are used, and this value
|
|
gives the percentage length of the first mbrola phoneme.
|
|
|
|
* `<mbrola ph1>` \
|
|
The mbrola phoneme to which the eSpeak NG phoneme is translated. This
|
|
field may be `NULL`.
|
|
|
|
* `<mbrola ph2>` \
|
|
The second mbrola phoneme. This field is only used if the \<percent\>
|
|
field is not zero.
|
|
|
|
The list is searched from start to finish, until a match is found.
|
|
Therefore, a line with more specific match condition should appear
|
|
before a line which matches the same eSpeak NG phoneme but with a more
|
|
general condition.
|
|
|
|
__Note:__
|
|
|
|
You can get list (and descriptions) of defined phonemes for particular eSpeak NG language
|
|
by entering command in `phsource` folder:
|
|
|
|
egrep "^phoneme " phonemes ph_english|cut -d$' ' -f2-|sort
|
|
|
|
where `ph_english` is phoneme definition for particular language
|
|
|
|
Note that `ph_language` file can extend or override phoneme definitions
|
|
in `phonemes` file. Translations for all defined phonemes should be
|
|
given in the mbrola phoneme translation file.
|
|
|
|
If the language's `*_list` or `*_rules` files includes rules to speak
|
|
words "as English" the mbrola phoneme translation file should include
|
|
rules which translate English phonemes into near equivalents, so that
|
|
they can spoken by the MBROLA voice.
|
|
|
|
For latest Linux verson of `mbrola` you can get list of diphones for particular
|
|
language by entering command:
|
|
|
|
mbrola -d /usr/share/mbrola/en1/en1
|
|
|
|
where `/usr/share/mbrola/en1/en1` is location of the voice file.
|
|
|
|
When phoneme translation source file is compiled (look at next section)
|
|
`espeak-ng-data/mbrola_ph/xxN_phtrans` file is created.
|
|
|
|
### 3. Compile voice and update Makefile.am file
|
|
|
|
Separate MBROLA voice can be compiled using comand:
|
|
|
|
espeak-ng --compile-mbrola=<xxN>
|
|
|
|
where `xxN` is MBROLA voice name.
|
|
|
|
`Makefile.am` is build configuration file which should be extended, to include automatic compilation
|
|
of newly added MBROLA voice for eSpeak NG.
|
|
|
|
Search for `mbrola: \` line in `Makefile.am` and add additional line for newly created MBROLA voice, e.g.:
|
|
|
|
mbrola: \
|
|
...
|
|
espeak-ng-data/mbrola_ph/xxN_phtrans \
|
|
...
|
|
espeak-ng-data/mbrola_ph/xxN_phtrans: phsource/mbrola/xxN src/espeak-ng
|
|
mkdir -p espeak-ng-data/mbrola_ph
|
|
ESPEAK_DATA_PATH=$(PWD) src/espeak-ng --compile-mbrola=phsource/mbrola/xxN
|
|
|
|
Note that it could be that several voices share the same translation file. Then translation file
|
|
is named just `xx`.
|
|
|
|
When `Makefile.am` is update, when espek-ng will be compiled, e.g. by
|
|
entering command `automake; make -B` newly added MBROLA voice will be compiled automatically.
|
|
|
|
<a name="footnote1">1</a>: This voice has very limited set of diphones and is usable only for reading numbers.
|
|
|