Back to Silas S. Brown's home page
lexconvert: a converter between the lexicon formats of different speech synthesizers
As a person with limited vision, I often use
speech synthesis software to read things.
Some uncommon words (such as names and places
in literature) are frequently pronounced
wrongly by speech synthesizers, but if the
synthesizer has a user-controlled pronunciation
dictionary (lexicon) then this can be used to
correct its pronunciation where
necessary. However, if you move to
a different speech synthesizer, you may find that your
corrections have to be re-done because the
lexicon format is different. This can be
a problem if you have many corrections and/or
don't know the new format.
To help, here is a Python program that
converts between the lexicon formats
of different English speech synthesizers.
It supports the pronunciation notations of
eSpeak, Festival (British version), Cepstral's UK voices,
Apple's US voices, SAPI, SAMPA, Unicode IPA (used
on some websites) and others.
usage information is below.
lexconvert v0.1453 - convert between lexicons of different speech synthesizers
(c) 2007-2012 Silas S. Brown. License: GPL
Available pronunciation formats: festival, espeak, sapi, cepstral, mac, x-sampa, acapela-uk, cmu, bbcmicro, unicode-ipa, pinyin-approx
Use --convert <from-format> <to-format> to convert a user lexicon file. Expects Festival's .festivalrc to be in the home directory, or espeak's en_extra or Cepstral's lexicon.txt to be in the current directory.
For InfoVox/acapela, export the lexicon to acapela.txt in the current directory.
E.g.: python lexconvert.py --convert festival cepstral
Use --try <format> <pronunciation> to try a pronunciation with eSpeak (requires 'espeak' command),
e.g.: python lexconvert.py --try festival h @0 l ou1
or: python lexconvert.py --try unicode-ipa '\u02c8\u0279\u026adn\u0329' (for Unicode put '\uNNNN' or UTF-8)
(it converts to espeak format and then uses espeak to play it)
Use --trymac to do the same as --try but with Mac OS 'say' instead of 'espeak'
Use --phones2phones <format1> <format2> <phones in format1> to perform a one-off conversion of phones from format1 to format2.
Use --phones <format> <words> to convert 'words' to phones in format 'format'. espeak will be run to do the text-to-phoneme conversion, and the output will then be converted to 'format'.
E.g.: python lexconvert.py --phones unicode-ipa This is a test sentence.
Note that some commercial speech synthesizers do not work well when driven entirely from phones, because their internal format is different and is optimised for normal text.
Use --syllables <words> to attempt to break 'words' into syllables for music lyrics (uses espeak to determine how many syllables are needed)
Use --festival-dictionary-to-espeak <location> to convert the Festival Oxford Advanced Learners Dictionary (OALD) pronunciation lexicon to ESpeak.
You need to specify the location of the OALD file in <location>,
e.g. for Debian festlex-oald package: python lexconvert.py --festival-dictionary-to-espeak /usr/share/festival/dicts/oald/all.scm
or if you can't install the Debian package, try downloading http://ftp.debian.org/debian/pool/non-free/f/festlex-oald/festlex-oald_1.4.0.orig.tar.gz, unpack it into /tmp, and do: python lexconvert.py --festival-dictionary-to-espeak /tmp/festival/lib/dicts/oald/oald-0.4.out
In all cases you need to cd to the espeak source directory before running this. en_extra will be overwritten. Converter will also read your ~/.festivalrc if it exists. (You can later incrementally update from ~/.festivalrc using the --convert option; the entries from the system dictionary will not be overwritten in this case.) Specify --without-check to bypass checking the existing espeak pronunciation for OALD entries (much faster, but makes a larger file and in some cases compromises the pronunciation quality).
All material © Silas S. Brown unless otherwise stated.