I have two interval tiers in my selected TextGrid, one with utterances and one with disfluency features marked. I've been able to script a way of extracting the information so that I have the feature in the first column, then its start time, end time, duration, and the corresponding utterance on the other tier. I would like to add a column that tells me the duration of the corresponding utterance, but as I've tried to script it I can only get it to repeat the duration of the feature.
Here's my existing code:
tierWords = 2
tierdis = 3
resultfile$ = "/Users/alice/Desktop/results.tsv"
writeFile: resultfile$
titleline$ = "Dis Start End Duration Utterance 'newline$'"
fileappend "'resultfile$'" 'titleline$'
#select your TextGrid
tg = selected("TextGrid")
nint_tierdis = Get number of intervals: tierdis
for int_tierdis to nint_tierdis
selectObject: tg
dis$ = Get label of interval: tierdis, int_tierdis
if dis$ <> ""
appendFile: resultfile$, dis$
start = Get starting point: tierdis, int_tierdis
end = Get end point: tierdis, int_tierdis
duration = end-start
appendFile: resultfile$, tab$, start, tab$, end, tab$, duration
extractedTg = Extract part: start, end, "yes"
nint_tierWords = Get number of intervals: tierWords
for int_tierWords to nint_tierWords
word$ = Get label of interval: tierWords, int_tierWords
appendFile: resultfile$, tab$, word$, newline$
endfor
removeObject: extractedTg
endif
endfor
I hope this makes sense, TIA!
I'm assuming that the number of intervals on the two tiers are not aligned, so simply switching the tier you are querying with the same interval number in the loop will not work. I'm going to make the assumption that the interval you actually want to measure the duration of is always aligned with the midpoint of the intervals you are looping throuh on the tierdis
.
In that case, you can add something like this, where I get the midpoint of the current interval on tierdis
, and then use that timestamp to get the # of the corresponding interval on tierWords
. From there, I use that interval number to get the start, end, and calculate the duration.
midpoint = (start+end)/2
int_other = Get interval at time: tierWords, midpoint
start_other = Get starting point: tierWords, int_other
end_other = Get end point: tierWords, int_other
duration_other = end_other-start_other
Therefore the full script would look like this:
tierWords = 2
tierdis = 3
resultfile$ = "/Users/alice/Desktop/results.tsv"
writeFile: resultfile$
titleline$ = "Dis Start End Duration Utterance 'newline$'"
fileappend "'resultfile$'" 'titleline$'
#select your TextGrid
tg = selected("TextGrid")
nint_tierdis = Get number of intervals: tierdis
for int_tierdis to nint_tierdis
selectObject: tg
dis$ = Get label of interval: tierdis, int_tierdis
if dis$ <> ""
appendFile: resultfile$, dis$
start = Get starting point: tierdis, int_tierdis
end = Get end point: tierdis, int_tierdis
midpoint = (start+end)/2
int_other = Get interval at time: tierWords, midpoint
start_other = Get starting point: tierWords, int_other
end_other = Get end point: tierWords, int_other
duration_other = end_other-start_other
duration = end-start
appendFile: resultfile$, tab$, start, tab$, end, tab$, duration
extractedTg = Extract part: start, end, "yes"
nint_tierWords = Get number of intervals: tierWords
for int_tierWords to nint_tierWords
word$ = Get label of interval: tierWords, int_tierWords
appendFile: resultfile$, tab$, word$, newline$
endfor
removeObject: extractedTg
endif
endfor
Let me know if this works, or if you have any questions!