删除静音的 Praat 脚本,不能 select 和删除对象

Praat script to remove silence, cannot select and remove objects

我是 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"

在这一行中,包含声音的部分被提取并 selected。然后我立即使用 concatenate 创建所需的文件并 select 它。但是,因为这一行产生的变量不止一个,所以我无法保存它。因此,稍后我没有将其从我的对象目录中删除的参考。虽然我仍然可以 运行 但我的目录会被淹没,我不认为这是优雅的。有什么建议吗?

这听起来很明显,但您可以通过将每个提取的间隔保存到一个索引变量中来保存多个提取间隔的 ID 号,然后在需要删除它们时 re-selecting 它们。

您将在下面找到经过编辑和评论的脚本版本。我更改了一些变量名称以使其更易于理解。

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 plugin available through CPrAN was written to make it easier to manage Praat object selections for cases such as this. The two loops inserted above could have been replaced with calls to @saveSelection() and @restoreSelection()(完全披露:我写了那个插件)。