Skip to main content

praatIO

Questions? Comments? Feedback?


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

Table of contents

  1. Documentation
  2. Tutorials
  3. Version history
  4. Requirements
  5. Installation
  6. Upgrading major versions
  7. Usage
  8. Common use cases
  9. Output types
  10. Tests
  11. Citing praatIO
  12. Acknowledgements

Documentation

Automatically generated pdocs can be found here:

http://timmahrt.github.io/praatIO/

Tutorials

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:

Tutorial 1: An introduction and tutorial

Version History

Praatio uses semantic versioning (Major.Minor.Patch)

Please view CHANGELOG.md for version history.

Requirements

Python module https://pypi.org/project/typing-extensions/. It should be installed automatically with praatio but you can install it manually if you have any problems.

Python 3.7.* or above (CI tested with python 3.7 through 3.12).

If you are using Python 2.x or Python < 3.7, you can use PraatIO 4.x.

Installation

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 root directory and type

python -m pip install .

If python is not in your path, you'll need to enter the full path e.g.

C:\Python37\python.exe -m pip install .

Upgrading

Please view UPGRADING.md for detailed information about how to upgrade from earlier versions.

Usage

99% of the time you're going to want to run

from praatio import textgrid
tg = textgrid.openTextgrid(r"C:\Users\tim\Documents\transcript.TextGrid", False)

Or if you want to work with KlattGrid files

from praatio import klattgrid
kg = klattgrid.openKlattGrid(r"C:\Users\tim\Documents\transcript.KlattGrid")

See /test for example usages

Common Use Cases

What can you do with this library?

  • query a textgrid to get information about the tiers or intervals contained within

    tg = textgrid.openTextgrid("path_to_textgrid", False)
    entries = tg.tierDict["speaker_1_tier"].entries # Get all intervals
    entries = 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 = textgrid.openTextgrid("path_to_textgrid", False)
    moddedTG = tg.editTimestamps(5)
    moddedTG.save('output_path_to_textgrid', 'long_textgrid', True)
    
  • utilize the klattgrid interface to raise all speech formants by 20%

    kg = klattgrid.openKlattGrid("path_to_klattgrid")
    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

    • see /examples/deleteVowels.py
  • use set operations (union, intersection, difference) on textgrid tiers

    • see /examples/textgrid_set_operations.py
  • 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

Output types

PraatIO supports 4 textgrid output file types: short textgrid, long textgrid, json, and textgrid-like json.

Short textgrids and long textgrids are both formats that are natively supported by praat. Short textgrids are meant to be more concise while long textgrids are meant to be more human-readable. For more information on these file formats, please see praat's official documentation

JSON and textgrid-like JSON are more developer-friendly formats, but they are not supported by praat. The default JSON format is more minimal while the textgrid-like JSON is formatted with information similar to a textgrid file.

The default JSON format does not support one use-case: a textgrid has a specified minimum and maximum timestamp. The textgrid's tiers also have a specified minimum and maximum timestamp. Under most circumstances, they are the same, but the user can specify them to be different and praat will respect this. If you have such textgrids, you should use the textgrid-like JSON.

Here is the schema for the JSON output file:

{
    "start": 0.0,
    "end": 1.8,
    "tiers": {
        "phone": {
            "type": "IntervalTier",
            "entries": [[0.0, 0.3, ""], [0.3, 0.38, "m"]]
        },
        "pitch": {
            "type": "TextTier",
            "entries": [[0.32, "120"], [0.37, "85"]]
        }
    }
}

Here is the schema for the Textgrid-like JSON output file. Notably, tiers is a list of hashes, rather than a hash of hashes. Also, each tier specifies it's name, and a min and max time.

{
    "xmin": 0.0,
    "xmax": 1.8,
    "tiers": [
        {
            "class": "IntervalTier",
            "name": "phone",
            "xmin": 0.0,
            "xmax": 1.8,
            "entries": [[0.0, 0.3, ""], [0.3, 0.38, "m"]]
        },
        {
            "class": "TextTier",
            "name": "pitch",
            "xmin": 0.0,
            "xmax": 1.8,
            "entries": [[0.32, "120"], [0.37, "85"]]
        }
    ]
}

Citing praatIO

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.

Acknowledgements

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).

Release files for praatio 6.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for praatio 6.2.2
File Size Uploaded
praatio-6.2.2.tar.gz 2.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for praatio 6.2.2
File Interpreter ABI Platform
praatio-6.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 2.3 MB

Release files / praatio-6.2.2.tar.gz

Download URL praatio-6.2.2.tar.gz
Size 2.2 MB
Tags Source
SHA-256 checksum
How to use checksums
ed8fdee6121bdae142817879ed9a50cc8334e72c03c110162e21ed8160180d2a
BLAKE2b-256 checksum
How to use checksums
defabe0bab2b2da04427204f84cd5e54bd3364937456adf03d98f0f2cfb8f402
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release files / praatio-6.2.2-py3-none-any.whl

Download URL praatio-6.2.2-py3-none-any.whl
Size 82.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d097b0e6991715559d68537c6af1baba86a0e0f9ad077e6d078e3d21c510743f
BLAKE2b-256 checksum
How to use checksums
761259f3928dc6583d652798758b513ab6062e4dddbbf624623d0ec02e7bbb23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.0

Release history Release notifications | RSS feed

This release

6.2.2 This release

2 release files

6.2.1

2 release files

6.2.0

2 release files

6.1.0

2 release files

6.0.1

2 release files

6.0.0

2 release files

5.1.1

2 release files

5.1.0

2 release files

5.0.1

2 release files

5.0.0

2 release files

4.4.0

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.1

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.8.1

2 release files

3.8.0

2 release files

3.7.1

2 release files

3.7.0

1 release file

3.6.15

1 release file

3.6.14

1 release file

3.6.13

1 release file

3.6.12

1 release file

3.6.11

1 release file

3.6.10

1 release file

3.6.8

1 release file

3.6.7

1 release file

3.6.5

1 release file

3.6.4

1 release file

3.6.3

1 release file

3.6.1

1 release file

3.6.0

1 release file

3.5.7

1 release file

3.5.6

1 release file

3.5.5

1 release file

3.5.4

1 release file

3.5.3

1 release file

3.5.1

1 release file

3.5.0

1 release file

3.4.6

1 release file

3.4.5

1 release file

3.4.4

1 release file

3.4.3

1 release file

3.4.2

1 release file

3.4.1

1 release file

3.4.0

1 release file

3.3.3

1 release file

3.3.2

1 release file

3.3.1

3 release files

3.3.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page