Я могу придумать два способа сделать это: «вручную» и путем извлечения частей TextGrid.
Давайте представим (для ясности), что вы хотите подсчитать количество точек, попадающих в заданный интервал. Есть некоторые различия между этим и интервалами подсчета, которые попадают в интервалы, но маленькие шаги.
Вручную
Под «вручную» я подразумеваю, что вы можете получить индекс «первой» точки в вашем интервале (первая точка после начала интервала) и индекс «последней» точки, а затем просто вычитая (остерегайтесь ошибки ограждения!). Если первая 3
, а последняя 8
, вы знаете, что в вашем интервале 6 точек.
Предположим, что у нас есть это:
textgrid = selected("TextGrid")
main_tier = 1 ; The tier with the main interval
sub_tier = 2 ; The tier with the elements you want to count
interval = 3 ; The interval in the main tier
start = Get start point: main_tier, interval
end = Get end point: main_tier, interval
Тогда мы можем сделать это:
first = Get high index from time: sub_tier, start
last = Get low index from time: sub_tier, end
total = last - first + 1
appendInfoLine: "There are ", total, " points within interval ", interval
(Или вы можете использовать "Подсчет точек в диапазоне..." в плагине tgutils CPrAN).
Если бы вы считали интервалы, вам пришлось бы немного изменить это:
first = Get high interval at time: sub_tier, start
last = Get low interval at time: sub_tier, end
Или, если вы хотите подсчитать только те интервалы, которые полностью попадают в ваш основной интервал
first = Get high interval at time: sub_tier, start
last_edge = Get interval edge from time: sub_tier, end
last = last_edge + 1
Извлечение деталей
Совершенно другим подходом было бы использование команды «Извлечь часть...» для TextGrid. Вы можете извлечь часть TextGrid, которая попадает в ваше временное окно, а затем работать только с этой частью. Тогда подсчет количества интервалов в этой части будет просто подсчетом общего количества интервалов в этом новом TextGrid.
Конечно, это не проверяет, являются ли интервалы, которые считаются внутри, полностью внутри.
Простой пример:
Extract part: start, end, "yes"
# And then you just count the intervals
intervals = Get number of intervals: sub_tier
# or points
points = Get number of points: sub_tier
Если вы хотите делать это неоднократно (например, для каждого из интервалов на вашем основном уровне), плагин tgutils, упомянутый выше, имеет скрипт для "взрывания" TextGrid. Хотя название может немного нервировать, оно просто разделяет TextGrid на куски размером с интервал, используя интервалы в заданном уровне (путем вызова той же команды, упомянутой выше). Например, если вы «взорвете» TextGrid, используя интервальный уровень с 5 интервалами, в результате вы получите 5 меньших TextGrid, соответствующих каждому из исходных интервалов.
Сценарий может сохранять метки времени результирующих элементов TextGrid, чтобы упростить обращение к оригиналу. И если запустить с TextGrid и выбранным звуком, он также «взорвет» звук, поэтому вы также можете работать с комбинацией обоих объектов.
(Полное раскрытие: я написал этот плагин).
person
jja
schedule
18.01.2016