2016-01-13 103 views
0

我是新来praat,所以也许这是一个简单的问题。我尝试在praat中创建一个脚本,该脚本将通过for循环遍历对象列表中的某些对象,并删除silenct间隔。我已经创建了这个脚本,我将把它放在for循环中。Praat脚本删除沉默,不能选择和删除对象

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

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

下面你会发现你的脚本的编辑和评论版本。我改变了一些变量名,以便更容易遵循。

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写,使其更易于管理普瑞特对象选择了这样的情况下。上面插入的两个循环可能已被@saveSelection()@restoreSelection()(完全披露:我写了该插件)的调用所取代。

+0

就像我说的我是新来的praat,所以根本不明显。非常感谢! – Dimitris