Command Line Examples

The phonemize command can be used to replicate most of the features exposed in Python Examples.

For a complete list of available options, have a:

phonemize --help

See the installed backends with the --version option:

$ phonemize --version
phonemizer-3.0
available backends: espeak-ng-1.50, espeak-mbrola, festival-2.5.0, segments-2.1.3

Input/output examples

  • from stdin to stdout:

    $ echo "hello world" | phonemize
    həloʊ wɜːld
    
  • Prepend the input text to output:

    $ echo "hello world" | phonemize --prepend-text
    hello world | həloʊ wɜːld
    
    $ echo "hello world" | phonemize --prepend-text=';'
    hello world ; həloʊ wɜːld
    
  • from file to stdout

    $ echo "hello world" > hello.txt
    $ phonemize hello.txt
    həloʊ wɜːld
    
  • from file to file

    $ phonemize hello.txt -o hello.phon --strip
    $ cat hello.phon
    həloʊ wɜːld
    

Backends

  • The default is to use espeak us-english:

    $ echo "hello world" | phonemize
    həloʊ wɜːld
    
    $ echo "hello world" | phonemize -l en-us -b espeak
    həloʊ wɜːld
    
    $ echo 'hello world' | phonemize -l en-us -b espeak --tie
    həlo͡ʊ wɜːld
    
  • Use festival US English instead

    $ echo "hello world" | phonemize -l en-us -b festival
    hhaxlow werld
    
  • In French, using espeak and espeak-mbrola, with custom token separators (see below). espeak-mbrola does not support words separation.

    $ echo "bonjour le monde" | phonemize -b espeak -l fr-fr -p ' ' -w '/w '
    b ɔ̃ ʒ u ʁ /w l ə /w m ɔ̃ d /w
    
    $ echo "bonjour le monde" | phonemize -b espeak-mbrola -l mb-fr1 -p ' ' -w '/w '
    b o~ Z u R l @ m o~ d
    
  • In Japanese, using segments

    $ echo 'konnichiwa' | phonemize -b segments -l japanese
    konnitʃiwa
    
    $ echo 'konnichiwa' | phonemize -b segments -l ./phonemizer/share/japanese.g2p
    konnitʃiwa
    

Supported languages

The exhaustive list of supported languages is available with the command phonemize --list-languages [--backend <backend>].

  • Languages supported by espeak are available here.

  • Languages supported by espeak-mbrola are available here. Please note that the mbrola voices are not bundled with the phonemizer nor the mbrola binary and must be installed separately.

  • Languages supported by festival are:

    en-us -> english-us
    
  • Languages supported by the segments backend are:

    chintang  -> ./phonemizer/share/segments/chintang.g2p
    cree      -> ./phonemizer/share/segments/cree.g2p
    inuktitut -> ./phonemizer/share/segments/inuktitut.g2p
    japanese  -> ./phonemizer/share/segments/japanese.g2p
    sesotho   -> ./phonemizer/share/segments/sesotho.g2p
    yucatec   -> ./phonemizer/share/segments/yucatec.g2p
    

    Instead of a language you can also provide a file specifying a grapheme to phone mapping (see the files above for examples).

Token separators

You can specify separators for phones, syllables (festival only) and words (excepted espeak-mbrola).

$ echo "hello world" | phonemize -b festival -w ' ' -p ''
hhaxlow werld

$ echo "hello world" | phonemize -b festival -p ' ' -w ''
hh ax l ow w er l d

$ echo "hello world" | phonemize -b festival -p '-' -s '|'
hh-ax-l-|ow-| w-er-l-d-|

$ echo "hello world" | phonemize -b festival -p '-' -s '|' --strip
hh-ax-l|ow w-er-l-d

$ echo "hello world" | phonemize -b festival -p ' ' -s ';esyll ' -w ';eword '
hh ax l ;esyll ow ;esyll ;eword w er l d ;esyll ;eword

You cannot specify the same separator for several tokens (for instance a space for both phones and words):

$ echo "hello world" | phonemize -b festival -p ' ' -w ' '
fatal error: illegal separator with word=" ", syllable="" and phone=" ",
must be all differents if not empty

Punctuation

By default the punctuation is removed in the phonemized output. You can preserve it using the --preserve-punctuation option (not supported by the espeak-mbrola backend):

$ echo "hello, world!" | phonemize --strip
həloʊ wɜːld

$ echo "hello, world!" | phonemize --preserve-punctuation --strip
həloʊ, wɜːld!

The default punctuation marks are each of the following characters: ;:,.!?¡¿—…"«»“”. These can be overridden by the --punctuation-marks option.

$ echo "hello, world!" | phonemize --preserve-punctuation --strip --punctuation-marks '!?'
həloʊ wɜːld!

The punctuation marks can be specified as a regular expression by additionally using the --punctuation-marks-is-regex option. For example, to preserve the default punctuation marks except for commas and periods in the middle of numbers, the following will work:

$ echo "1,000, or so." | phonemize --preserve-punctuation --strip --punctuation-marks '[;:!?¡¿—…"«»“”]|[,.](?!\d)' --punctuation-marks-is-regex
wʌn θaʊzənd, ɔːɹ soʊ.

Espeak specific options

  • The espeak backend can output the stresses on phones:

    $ echo "hello world" | phonemize -l en-us -b espeak --with-stress
    həlˈoʊ wˈɜːld
    
  • The espeak backend can add tie on multi-characters phonemes:

    $ echo "hello world" | phonemize -l en-us -b espeak --tie
    həlo͡ʊ wɜːld
    

Warning

The espeak backend can switch languages during phonemization (below from French to English), use the --language-switch option to deal with it:

$ echo "j'aime le football" | phonemize -l fr-fr -b espeak --language-switch keep-flags
[WARNING] fount 1 utterances containing language switches on lines 1
[WARNING] extra phones may appear in the "fr-fr" phoneset
[WARNING] language switch flags have been kept (applying "keep-flags" policy)
ʒɛm lə- (en)fʊtbɔːl(fr)

$ echo "j'aime le football" | phonemize -l fr-fr -b espeak --language-switch remove-flags
[WARNING] fount 1 utterances containing language switches on lines 1
[WARNING] extra phones may appear in the "fr-fr" phoneset
[WARNING] language switch flags have been removed (applying "remove-flags" policy)
ʒɛm lə- fʊtbɔːl

$ echo "j'aime le football" | phonemize -l fr-fr -b espeak --language-switch remove-utterance
[WARNING] removed 1 utterances containing language switches (applying "remove-utterance" policy)

Warning

The espeak backend sometimes merge words together in the output, use the --words-mismatch option to deal with it:

$ echo "that's it, words are merged" | phonemize -l en-us -b espeak
[WARNING] words count mismatch on 100.0% of the lines (1/1)
ðætsɪt wɜːdz ɑːɹ mɜːdʒd