Skip to content

Bournemouth Forced Aligner

Find where every phoneme and word starts and ends in a recording, in 82 languages.

BFA is a multilingual forced aligner. Given speech audio and its transcript, it returns start and end times for every phoneme and word, exported as Praat TextGrids or JSON. Pronunciations come from a neural grapheme-to-phoneme model, so no pronunciation dictionary and no training on your data are needed.

Get started Language support GitHub

pip install bournemouth-forced-aligner
balign recording.wav "the words spoken in the recording" --preset=en-us --textgrid=recording.TextGrid

Check and correct the result in the browser with balign --web: every phoneme over the spectrogram, its boundaries draggable, and the model's alternatives ranked by probability.

The web interface: an aligned sentence over the spectrogram, one phoneme selected, with the replacement tokens ranked by the model's probability The web interface: an aligned sentence over the spectrogram, one phoneme selected, with the replacement tokens ranked by the model's probability

More about the web interface

Documentation

  • Getting started


    Install, align one recording, a long interview, or many files at once, from the command line or from Python.

    Getting started

  • Language support


    The 82 languages, the model each one uses, and what to know about tone, stress and word segmentation.

    Language support

  • Web interface


    balign --web: align, transcribe and hand-correct phoneme timestamps in the browser.

    Web interface

  • Phoneme guides


    Every phoneme token of each language group, with example words and where its boundaries go.

    Phoneme guides

  • About the models


    How the acoustic models are built and trained, and how a boundary is read off them.

    About the models

  • Evaluation


    Boundary accuracy and speed on TIMIT and Buckeye, against the Montreal Forced Aligner.

    Evaluation

  • Developer guide


    The full API and command-line reference, the output format, and how to extend BFA.

    Developer guide

  • Changelog


    What changed in each release, including the move from 1.x to 2.0.

    Changelog

What's inside

Speed 6-20× faster than real time on a CPU, 100-500× with a GPU
Resolution 5 ms frames, with each boundary placed between frames
Languages 82 with the default phoneme set, including Mandarin, Cantonese, Japanese, Korean, Vietnamese, Thai, Arabic, Persian, Hindi and Greek; 80+ through espeak-ng (ph66)
Output Praat TextGrid; JSON with phoneme, word and phoneme-group times, plus tone, stress and length; phoneme embeddings
Runs on Linux, macOS, Windows

Accuracy

Phoneme-boundary F1 on two hand-labelled English corpora (TIMIT, 6,300 read sentences; Buckeye, 255 conversational recordings), against the Montreal Forced Aligner (MFA):

TIMIT, within 10 ms TIMIT, within 25 ms Buckeye, within 25 ms
BFA CUPE-3-en (ph66, English) 58.7 76.8 74.2
BFA mbfa-latin (default, 36 languages) 53.7 72.6 68.4
MFA english_us_arpa (English model + dictionary) 55.2 80.9 84.3

BFA's boundaries are more precise (better within 10 ms, lower median error), MFA has fewer large misses, and one BFA model covers 36 languages with no dictionary. Speed, robustness to transcript errors and the full analysis are on the evaluation page.