Я пишу сценарий праата, который будет искать в нескольких файлах список слов. Это то, что у меня есть до сих пор. Он увеличивает только первое слово в процедуре и не перебирает остальные. Я думаю, что это как-то связано с тем, что выбрано. Для For i through n
выбирается только текстовая сетка, но затем в аннотаторе выбираются обе. Мне нужно, чтобы скрипт продолжал поиск по каждому интервалу, чтобы можно было найти и другие слова в процедуре.
directory$ = "directory"
listfile$ = "test.txt"
Read Strings from raw text file... 'directory$'/'listfile$'
last = Get number of strings
# loop through each file
for a from 1 to last
listfile2$ = listfile$ - ".txt"
select Strings 'listfile2$'
textgrid$ = Get string... 'a'
Read from file... 'directory$'/'textgrid$'
object_name$ = selected$("TextGrid")
Read from file... 'directory$'/'object_name$'.wav
# rearrange tiers
select TextGrid 'object_name$'
Duplicate tier: 3, 1, "MAU"
Remove tier: 4
Insert interval tier: 1, "subphone"
# find target word
n = Get number of intervals: 3
for i to n
@instance: "strikes"
@instance: "raindrops"
@instance: "and"
@instance: "rainbow"
@instance: "into"
@instance: "round"
@instance: "its"
@instance: "its"
procedure instance: .target_word$
label$ = Get label of interval: 3, i
if label$ == .target_word$
index = i
i += n
# get the start and end point of the word
startpoint = Get starting point... 3 index
endpoint = Get end point... 3 index
select TextGrid 'object_name$'
plus Sound 'object_name$'
View & Edit
editor TextGrid 'object_name$'
# annotation
Select... startpoint endpoint
Zoom to selection
pause Annotate stops then continue
Close
endeditor
endif # if the label = target word
endfor # for number of intervals
select TextGrid 'object_name$'
Write to text file: directory$ + "/" + object_name$ + "_editedtext.TextGrid"
select all
minus Strings 'listfile2$'
Remove
endproc
#writeInfoLine: "done!"
#select Strings 'listfile2$'
endfor # for each of the files
clearinfo
print That's it!
Изменить: вот исправленный сценарий, основанный на ответе.
directory$ = "/Users/directorypath"
listfile$ = "test.txt"
Read Strings from raw text file... 'directory$'/'listfile$'
last = Get number of strings
listfile2$ = listfile$ - ".txt"
# loop through each file
for a from 1 to last
select Strings 'listfile2$'
textgrid$ = Get string... 'a'
Read from file... 'directory$'/'textgrid$'
object_name$ = selected$("TextGrid")
Read from file... 'directory$'/'object_name$'.wav
# rearrange tiers
select TextGrid 'object_name$'
Duplicate tier: 3, 1, "MAU"
Remove tier: 4
Insert interval tier: 1, "subphone"
n = Get number of intervals: 3
for i to n
@instance: "strikes"
@instance: "raindrops"
@instance: "and"
@instance: "rainbow"
@instance: "into"
@instance: "round"
@instance: "its"
@instance: "its"
endfor
endfor
procedure instance: .target_word$
label$ = Get label of interval: 3, i
if label$ == .target_word$
index = i
i += n
# get the start and end point of the word
startpoint = Get starting point... 3 index
endpoint = Get end point... 3 index
select TextGrid 'object_name$'
plus Sound 'object_name$'
View & Edit
editor TextGrid 'object_name$'
# annotation
Select... startpoint endpoint
Zoom to selection
pause Annotate stops then continue
Close
endeditor
endif
endproc