R wrapper for a Praat TextGrid object for linguistic annotation. Uses shared dispatch table for minimal memory per object.
Details
TextGrids are the primary tool for linguistic annotation in Praat. They contain one or more tiers, where each tier can be:
IntervalTier: consecutive time intervals with labels (e.g., phonemes, words)PointTier(TextTier): time points with labels (e.g., events, tones)
Creating TextGrid objects
TextGrid(path)- read from file (Praat text or binary format)textgrid_create(tmin, tmax, tier_names, point_tiers)- create an empty grid
Querying tiers
get_number_of_tiers()- number of tiersget_tier_names()- names of all tierstier_is_interval_tier(tier)- check if a tier is an IntervalTiertier_is_point_tier(tier)- check if a tier is a PointTier
IntervalTier operations
get_number_of_intervals(tier)- number of intervals in a tierget_interval_text(tier, n)- get the label of interval nget_label_at_time(tier, time)- get the label at a specific timeget_all_intervals(tier)- get all intervals as a data.frame (fast)extract_intervals_batch(tier, ...)- extract matching intervals (fast)extract_intervals_where(sound, tier, criterion, text, preserve_times)- extract Sound intervals matching a text criterionset_interval_text(tier, n, text)- set the label of interval ninsert_boundary(tier, time)- insert a new boundaryremove_boundary(tier, time)- remove a boundary
PointTier operations
get_number_of_points(tier)- number of points in a tierget_point_text(tier, n)- get the label of point ninsert_point(tier, time, mark)- insert a new pointset_point_text(tier, n, text)- set the label of point nremove_point(tier, n)- remove a point
Tier management
add_interval_tier(name)- add a new IntervalTieradd_point_tier(name)- add a new PointTierremove_tier(tier)- remove a tierset_tier_name(tier, name)- rename a tierduplicate_tier(tier, new_name)- duplicate a tier with a new name
Export
as_data_frame(tiers)- convert to a long-format data framesave(path)- write to a fileextract_part(start, end)- extract a time range
Examples
# Create new TextGrid with one interval tier and one point tier
# (tier_names lists all tiers; point_tiers names the subset that are point
# tiers)
tg <- textgrid_create(0, 1, "words tones", "tones")
tg$get_tier_names()
#> [1] "words" "tones"
# Add boundaries and labels (IntervalTier)
tg$insert_boundary("words", 0.4)
tg$insert_boundary("words", 0.7)
tg$set_interval_text("words", 1, "hello")
tg$set_interval_text("words", 2, "world")
# Add points and labels (PointTier)
tg$insert_point("tones", 0.2, "H*")
tg$insert_point("tones", 0.8, "L-L%")
# Query
tg$get_number_of_intervals("words")
#> [1] 3
label <- tg$get_label_at_time("words", 0.5)
# Export to R
df <- tg$as_data_frame()