Skip to main content

A Python front-end for the MBROLA speech synthesizer

Project description

pymbrola

GitHub Actions Workflow Status PyPI - Version PyPI - Python Version GitHub License PyPI - Status Docker Image Size (tag) GitHub Release Codecov


A Python interface for the MBROLA speech synthesizer, enabling programmatic creation of MBROLA-compatible phoneme files and automated audio synthesis. This module validates phoneme, duration, and pitch sequences, generates .pho files, and can call the MBROLA executable to synthesize speech audio from text-like inputs.

References: Dutoit, T., Pagel, V., Pierret, N., Bataille, F., & Van der Vrecken, O. (1996, October). The MBROLA project: Towards a set of high quality speech synthesizers free of use for non commercial purposes. In Proceeding of Fourth International Conference on Spoken Language Processing. ICSLP'96 (Vol. 3, pp. 1393-1396). IEEE. https://doi.org/10.1109/ICSLP.1996.607874

Features

  • Front-end to MBROLA: Easily create .pho files and synthesize audio with Python.
  • Input validation: Prevents invalid file and phoneme sequence errors.
  • Customizable: Easily set phonemes, durations, pitch contours, and leading/trailing silences.
  • Cross-platform (Linux/WSL): Automatically detects and adapts to Linux or Windows Subsystem for Linux environments.

Requirements

  • Python 3.10+
  • MBROLA binary installed and available in your system path, or via WSL for Windows users. To install MBROLA in your UBUNTU or WSL instance, run the [mbrola/install.sh] script:
sudo bin/install.sh --voice fr2 it4 # install voices fr2 and it4
sudo bin/install.sh --voice all # install all voices
sudo bin/install.sh # install no voices

A Docker image of Ubuntu 22.04 with a ready-to-go installation of MBROLA is available, for convenience.

  • MBROLA voices (e.g., it4) must be installed at /usr/share/mbrola/<voice>/<voice>.

Installation

MBROLA is currently available only on Linux-based systems like Ubuntu, or on Windows via the Windows Susbsystem for Linux (WSL). Install MBROLA in your machine following the instructions in the MBROLA repository. If you are using WSL, install MBROLA in WSL. After this, you should be ready to install pymbrola using pip.

pip install mbrola

Usage

Synthesize a Word

import mbrola

# Create an MBROLA object
caffe = MBROLA(
    word="caffè",
    phon=["k", "a", "f", "f", "E1"],
    durations=100,  # or [100, 120, 100, 110]
    pitch=[100, [200, 50, 200], 100, 100, 200]
)

# Display phoneme sequence
print(caffe)

# Export PHO file
caffe.export_pho("caffe.pho")

# Synthesize and save audio (WAV file)
caffe.make_sound("caffe.wav", voice="it4")

The module uses the MBROLA command line tool under the hood. Ensure MBROLA is installed and available in your system path, or WSL if on Windows.

Specifying the pitch contour

pymbrola implements the piecewise linear pitch specification as different inputs:

If pitch is specified as an integer, pitch is assumed constant across phonemes:

phon = list("kasa")
pitch = 200
validate_pitch(200, phon)
# [[(0, 200)], [(0, 200)], [(0, 200)], [(0, 200)]]

If pitch is specified as a list, each element in mapped to each phoneme. Integers in the list are treated as before (constant pitch for the whole phoneme):

phon = list("kasa")
pitch = [200, 50, 50, 100]
validate_pitch(pitch, phon)
# [[(0, 200)], [(0, 50)], [(0, 50)], [(0, 100)]]

Empty lists inside the main list are treated as constant pitch sections:

phon = list("kasa")
pitch = [[], 50, [], 100]
validate_pitch(pitch, phon)
# [[], [(0, 50)], [], [(0, 100)]]

Non-empty lists must consist in lists of tuples. Each tuple contains two values. The first value is the time (as a percentage of the duration of the phoneme) at which the pitch should be modified inside the phoneme (as a float or integer), and the second value is the pitch that should be set at that time (as an integer):

phon = list("kasa")
pitch = [[], [(25, 50), (50, 100), (75, 150), (90, 200)], [], 100]
validate_pitch(pitch, phon)
# [[], [(25, 50), (50, 100), (75, 150), (90, 200)], [], [(0, 100)]]

Docker image

For convenience, a Docker image is available at Dockerhub:

docker run -it gongcastro/pymbrola:latest

Troubleshooting

  • Ensure MBROLA and the required voices are installed and available at /usr/share/mbrola/<voice>/<voice>.
  • If you encounter an error about platform support, make sure you are running on Linux or WSL.
  • Write an issue, I'll look into it ASAP.

License

pymbrola is distributed under the terms of the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mbrola-0.3.12.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mbrola-0.3.12-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file mbrola-0.3.12.tar.gz.

File metadata

  • Download URL: mbrola-0.3.12.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mbrola-0.3.12.tar.gz
Algorithm Hash digest
SHA256 c83693d701319d1ea15adcf3980a6a6b76e057557f8cd94c75b5a5f0d697dcb8
MD5 67dd379d2b39767d70b086ae3fe0a969
BLAKE2b-256 5a56e841d3c7572d18dd3172f37c367ea3f6e0a07da0c768e94cf8fcca8e2238

See more details on using hashes here.

File details

Details for the file mbrola-0.3.12-py3-none-any.whl.

File metadata

  • Download URL: mbrola-0.3.12-py3-none-any.whl
  • Upload date:
  • Size: 8.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mbrola-0.3.12-py3-none-any.whl
Algorithm Hash digest
SHA256 ce6a279cf3b885d111e88914c8afc810fc616e2a4aa23ee4cabb913cadbab903
MD5 106d3375429f46632b5fc126222f20db
BLAKE2b-256 2ffd2dca8cf82a49085eaf0065434a4a6b79dec4fd9348911b66a81aa8ac30d0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page