此节教程我们来学习Praat对象的选中、单选、多选、取消选择等多种对象选择方法。
假设我有三个文件:【Audio_One.wav】、【Audio_Two.wav】和【Audio_Three.wav】,我已经将它们加载进Praat里面,如下图所示:
可以看到,现在图中选中的是第一个音频文件,我们要可以通过脚本来依次选中第二个、第三个文件进行播放,脚本如下:
selectObject: 2 Play
这是选中第二个音频并播放的脚本,我们还可以选中第三个:
selectObject: "Sound Audio_Three" Play
可能有些人注意到了,我们要选中第二个和选中第三个音频时都是通过【selectObject】命令进行的,不同的是后面的参数不一样。上述两个例子说明,我们选中一个对象可以通过ID来进行选择,也可以通过文件名来进行选择。
注意:图中的ID是由Praat自动生成的,你每加入一个对象,它都会在原有列表上自动加1来对下一个文件进行编号,即使您移除了一个对象,那后续加载进来的还是会继续增加,而不会重复使用已经使用的ID。如:您在上图的状态下,再加载一个音频进来,那么加载进来的这个音频ID会被命名为“4”,这时,您把“4”从窗口对象中移除,再加载一个音频进来,那新加载进来的音频不会去填补你已经移除的ID“4”,而是会继续编号为“5”,这时窗口中的ID只有“1,2,3,5”。
如果您加载进来的音频文件有同名的,比如您加载了两个【Audio_Three.wav】进来,那列表中的对象就有“1.Sound Audio_One、2.Sound Audio_Two、3.Sound Audio_Three、4.Sound Audio_Three”,如果您使用【selectObject: "Sound Audio_Three"】命令来选择“Audio_Three”文件的话,它不会选中ID为3的那个文件,而是会选中ID为4的文件,也就是说,对于同名文件,默认会选中列表中最后的那一个。
鉴于以上所述:如果通过ID来进行选择,如果中间有断开的ID序列,我们就不能确定下一个ID是什么;如果通过文件名进行选择,如果有同名文件,我们就有可能选不到我们想要的文件。所以,我们在选中对象时就应该权衡一下我们应该使用何种方式来进行选择。
选中多个对象:
如上图所示的,我们当前是选中第一个对象,当我们用鼠标在第一个对象中点下,按住鼠标不放,一直往下拖,我们会同时选中第二个、第三个对象……也就是我们往下拖时,对象列表中有多个文件,拖到第几个文件就会选中连续的N的文件。
如上图所示的,我们当前是选中第一个对象,当我们按下键盘上的【ctrl】键,再用鼠标点击一下第三个文件,我们就选中了第一和第三这两个文件,通过【ctrl】键我们可以选择多个不连续的文件。
在编写脚本时,有时需要同时选中多个文件进行操作,但我们总不能在脚本运行过程中拿鼠标去选择吧?在Praat中,同样也提供了多文件选中的命令给我们【plusObject】,后面跟的参数和【selectObject】是一样的,可以是ID,也可以是文件名:
plusObject: 3
如果我们的初始状态是如上图一样,那运行上面这句脚本后会选中第一和第三个文件。您还可以继续使用该命令增加选中的对象。此命令是在不更改当前选中的情况下增加选中对象的,我们还可以使用【selectObject】来一次性选中我们想要选择的对象:
selectObject:1,3
或者:
selectObject:"Sound Audio_One","Sound Audio_Three"
后面同样是跟上ID或者文件名,多个ID或文件名用英文逗号隔开。
取消对象的选择:
当我们选中了一个或多个对象,这时可能根据实际需要又要不选中某个对象,Praat给我们提供了命令【minusObject】,后面参数同样跟上ID或者文件名。如果我们上图中现在上同时选中了三个对象,我们执行如下脚本:
minusObject: 2
这时你会看到第二个文件变成了未选中的状态。
通过对象变量进行文件的选择:
对象变量:其实就是前面我们所说的变量,但这里的变量不同于前面的字符串变量和数值变量,这个就是存储的是对象窗口中的一个对象,通过此变量我们可以对列表中的对象进行操作。通过对象变量来操作对象,我们可以不必知道它的ID的文件名,只要变量没有被重新赋值,那它始终会代表着那个对象。
初始状态如上图所示,我们来执行如下脚本命令:
soundObj1 = Create Sound as pure tone: "NewAudio",1, 0, 1, 44100, 440, 0.2, 0.01, 0.01 soundObj2 = Create Sound as pure tone: "NewAudio",1, 0, 1, 44100, 880, 0.2, 0.01, 0.01 selectObject: soundObj1
我们通过【Create Sound as pure tone】命令来创建了一个音频,但你要注意的是在创建命令的前面还有【soundObj1 =】,这个代表了我们将创建的音频赋值给变量“soundObj1”,下一句我们通过“selectObject”后面跟上变量名的形式进行选择。上面例子中,我们创建两个音频,都命名为“NewAudio”,或者通过一系列的操作,我们也不知道新创建的这两个音频的ID会是多少了,这时我们无法通过ID或文件名选择我们想要选中的对象。但我们通过【selectObject: soundObj1】命令可以很准确地选中我们创建的第一个音频,因为“soundObj1”变量所指向的对象就是第一个命令所创建的音频对象。
最后说明一点:我们通过文件名进行选择时,要把文件类型一并带上。我们知道Praat的对象有很多种类型,如果音频对象Sound、基频对象Pitch、标注对象TextGrid、音强对象Intensity等等。例如我们把“Audio_One”转换为基频对象,这时窗口中会多出一个“Pitch Audio_One”的对象,我们通过文件名选择时要把Pitch文件类型也带上:
selectObject:"Pitch Audio_One"
关于选中和取消选中,你们可以自己试着执行不同的命令看一下不同的效果,本节教程就到此结束。
遍历选中的对象:
sounds = numberOfSelected("Sound") for i to sounds sound'i' = selected ("Sound",i) endfor for i to sounds select sound'i' #其他一些操作 endfor
原创作品,未经授权不可进行转载。
如果您想实时收到教程更新提示,您可以订阅本网站的更新到QQ邮箱,订阅方法点击这里查看。或者关注本站微信公众账号。