A library for working with praat, time aligned audio transcripts, and audio files that comes with batteries included.
Praat uses a file format called textgrids, which are time aligned speech transcripts. This library isn't just a data struct for reading and writing textgrids--many utilities are provided to make it easy to work with with transcripts and associated audio files. This library also provides some other tools for use with praat.
Praat is an open source software program for doing phonetic analysis and annotation of speech. Praat can be downloaded here
What can you do with this library?
query a textgrid to get information about the tiers or intervals contained within
tg = tgio.openTextgrid("path_to_textgrid") entryList = tg.tierDict["speaker_1_tier"].entryList # Get all intervals entryList = tg.tierDict["phone_tier"].find("a") # Get the indicies of all occurrences of 'a'
create or augment textgrids using data from other sources
found that you clipped your audio file five seconds early and have added it back to your wavefile but now your textgrid is misaligned? Add five seconds to every interval in the textgrid
tg = tgio.openTextgrid("path_to_textgrid") moddedTG = tg.editTimestamps(5) moddedTG.save('output_path_to_textgrid')
utilize the klattgrid interface to raise all speech formants by 20% (among other possible manipulations)
kg = kgio.openKlaatGrid("path_to_klaatgrid") incrTwenty = lambda x: x * 1.2 kg.tierDict["oral_formants"].modifySubtiers("formants",incrTwenty) kg.save(join(outputPath, "bobby_twenty_percent_less.KlattGrid"))
replace labeled segments in a recording with silence or delete them
use set operations (union, intersection, difference) on textgrid tiers
see /praatio/praatio_scripts.py for various ready-to-use functions such as
splitAudioOnTier(): split an audio file into chunks specified by intervals in one tier
spellCheckEntries(): spellcheck a textgrid tier
tgBoundariesToZeroCrossings(): adjust all boundaries and points to fall at the nearest zero crossing in the corresponding audio file
alignBoundariesAcrossTiers(): for handmade textgrids, sometimes entries may look as if they are aligned at the same time but actually are off by a small amount, this will correct them
Automatically generated pdocs can be found here:
There are tutorials available for learning how to use PraatIO. These are in the form of IPython Notebooks which can be found in the /tutorials/ folder distributed with PraatIO.
You can view them online using the external website Jupyter:
Praatio uses semantic versioning (Major.Minor.Patch)
Ver 4.1 (May 13, 2020)
Ver 4.0 (February 5, 2020)
Ver 3.8 (July 24, 2019)
Ver 3.7 (March 17, 2019)
Ver 3.6 (May 05, 2017)
Ver 3.5 (April 04, 2017)
Ver 3.4 (February 04, 2017)
Ver 3.3 (June 27, 2016)
Ver 3.2 (January 29, 2016)
Ver 3.1 (December 16, 2015)
Ver 3.0 (November 10, 2015)
Ver 2.1 (July 27, 2015)
Ver 2.0 (February 5, 2015)
Ver 1.0 (August 31, 2014)
Python 2.6.* or above
Python 3.3.* or above (actually, probably any version of python 3)
99% of the time you're going to want to run
from praatio import tgio tg = tgio.openTextgrid(r"C:\Users\tim\Documents\transcript.TextGrid")
Or if you want to work with KlaatGrid files
from praatio import kgio kg = kgio.openKlattGrid(r"C:\Users\tim\Documents\transcript.KlattGrid")
See /test for example usages
PraatIO is on pypi and can be installed or upgraded from the command-line shell with pip like so::
python -m pip install praatio --upgrade
Otherwise, to manually install, after downloading the source from github, from a command-line shell, navigate to the directory containing setup.py and type::
python setup.py install
If python is not in your path, you'll need to enter the full path e.g.::
C:\Python36\python.exe setup.py install
PraatIO is general purpose coding and doesn't need to be cited but if you would like to, it can be cited like so:
Tim Mahrt. PraatIO. https://github.com/timmahrt/praatIO, 2016.
Development of PraatIO was possible thanks to NSF grant BCS 12-51343 to Jennifer Cole, José I. Hualde, and Caroline Smith and to the A*MIDEX project (n° ANR-11-IDEX-0001-02) to James Sneed German funded by the Investissements d'Avenir French Government program, managed by the French National Research Agency (ANR).