Скрипт Praat для удаления тишины, не может выбирать и удалять объекты
Я новичок в прате, так что, возможно, это простой вопрос. Я пытаюсь создать скрипт в praat, который будет проходить через некоторые объекты в моем списке объектов с помощью цикла for и удалит интервалы без вывода сообщений. Я создал этот скрипт, который я добавлю в цикл for.
selectObject: i
inten=To Intensity... 100 0 "no"
txt=To TextGrid (silences)... -35 0.1 0.05 'silent' 'sounding'
selectObject: i
plusObject: txt
Extract intervals where: 1, "no", "contains", "sounding"
myobj=Concatenate
Copy: string$(i)
selectObject: inten
plusObject: txt
plusObject: myobj
Remove
Хотя я получаю то, что хочу, моя проблема в очереди
Extract intervals where: 1, "no", "contains", "sounding"
В этой строке части, содержащие звук, извлекаются и выбираются. Затем я немедленно использую конкатенацию, чтобы создать нужный файл и выбрать его. Однако, поскольку эта строка выдает больше одной переменной, я не могу ее сохранить. Поэтому позже у меня нет ссылки, чтобы удалить его из моего каталога объектов. Хотя я все еще мог запустить его так, что мой каталог был бы залит, и я не думаю, что это элегантно. Какие-либо предложения?
1 ответ
Это может показаться очевидным, но вы можете сохранить идентификационные номера нескольких извлеченных интервалов, сохранив каждый из них в индексированной переменной, а затем повторно выбрав их, когда вам нужно удалить их.
Ниже вы найдете отредактированную и прокомментированную версию вашего скрипта. Я изменил некоторые имена переменных, чтобы было легче следить.
sound = selected()
intensity = To Intensity: 100, 0, "no"
textgrid = To TextGrid (silences): -35, 0.1, 0.05, silent, sounding
# Select multiple objects at once
selectObject: sound, textgrid
Extract intervals where: 1, "no", "contains", "sounding"
# Save the ID numbers of the currently selected intervals
total_parts = numberOfSelected()
for i to total_parts
part[i] = selected(i)
endfor
# No need to make a copy just to rename
sounding = Concatenate
Rename: string$(sound)
# Select all the objects you want to remove
selectObject: intensity, textgrid
# Including the extracted intervals
for i to total_parts
plusObject: part[i]
endfor
# And remove them
Remove
# If you knew beforehand what objects to select,
# you could also use removeObject()
# Select your concatenated sound
selectObject: sounding
Помимо этого, selection
Плагин, доступный через CPrAN, был написан, чтобы упростить управление выбором объектов Praat для таких случаев, как этот. Вставленные выше две петли могли быть заменены вызовами @saveSelection()
а также @restoreSelection()
(полное раскрытие: я написал этот плагин).