【问题标题】:Praat script to remove silence, cannot select and remove objectsPraat 脚本删除静音,无法选择和删除对象
【发布时间】:2016-01-13 15:07:43
【问题描述】:

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

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

【问题讨论】:

    标签: object praat


    【解决方案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
    

    顺便说一句,通过 CPrAN 提供的selection 插件是为了更容易管理此类情况下的 Praat 对象选择而编写的。上面插入的两个循环可以替换为对@saveSelection()@restoreSelection() 的调用(完全披露:我编写了那个插件)。

    【讨论】:

    • 就像我说我是 praat 的新手,所以一点也不明显。非常感谢!
    • 您好,我知道这是一个老问题,但这个脚本似乎对我不起作用。除了sounding = Concatenate Rename: string$(sound) 部分之外,该脚本对我来说都很有意义。此外,第二个 for 循环似乎只是选择已创建的对象,而不是原始声音文件中的间隔。谢谢!
    • @Lisa 脚本使用Extract intervals 将每个“发声”区间转换为一个新的Sound 对象,并使用Concatenate 将它们全部合并为一个新的Sound 对象和@ 987654333@ 所以它有一个合理的名字。第二个循环正在选择已创建的对象,以便我们可以Remove 它们。我称它们为“提取间隔”,因为它们中的每一个都代表我们之前提取的间隔之一。所以不是TextGrid 中的区间,而是Sound 对象中具有这些区间中的数据的对象。这更清楚吗?另外:这到底是怎么不适合你的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2015-11-23
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多