Praat脚本编程中文教程:开篇第一个脚本程序

分类:Praat
 标签:Praat脚本,Praat中文教程,Praat编程
   修改 | 阅读(3902)| 评论(0)



Praat是一款功能非常强大的语音处理分析软件,除了其本身自有的菜单功能之外,还提供了很好的脚本编程接口,使得有一定语言编程能力的人能够快速、自动化地对录音文件进行数据提取。

如果你具有一定的编程能力,此教程你可以不必要看。如果你英文水平不错,也可以不必要看,你可以直接看官网的教程(http://www.fon.hum.uva.nl/praat/manual/Scripting.html),毕竟我英文水平也不好,所以此教程是按照我个人的理解进行叙述,可能会有点乱,没有官网上的那么有条理。

如果你发现此教程中有错误的,还请指正。

如果你要编写脚本程序,最好是用英文原版,因为你可以清楚看到每一个脚本命令怎样去写。Praat大部分的脚本命令其实就是动态菜单或下拉菜单中的菜单项(请记住这句话)。当然,如果你英文不好,且你只是想运行脚本程序,你可以下载我个人汉化的Praat汉化版、中文版进行使用,其菜单的功能与英文无差别。

注:Praat的菜单栏一般我会用汉化版和原英文版两种方式写出。

首先,我们来看一下脚本编程前的准备。我们要进行编程,就得先打开编程窗口。在主窗口(我在此称之为Objects窗口,如图1所示)依次点击【开始】→【新建Praat脚本】(【Praat】→【New Praat script】),这时候我们就会打开一个脚本窗口(如图2所示),就一个空白的文本输入框,我们所有脚本都写在这里。当然,如果你有现成的脚本,你也可以从菜单中用打开命令进行打开,打开菜单路径在此不述。

我们除了在Objects窗口打开脚本窗口外,几乎其他的窗口你都可以打开脚本窗口,比如Sound窗口、Pitch窗口等等,打开顺序为【文件】→【新建脚本】(【File】→【New editor script】)。

注意:请确认你的脚本对应的操作窗口,在错误的窗口运行不对应的脚本将无法运行。(如提取10点基频的脚本应该在Sound窗口运行,如果你在主窗口或者Pitch窗口等其他窗口运行将会报错)

图1 Praat主窗口、Objects窗口


图2 Praat脚本窗口、Script窗口



好的,打开了这个窗口后,我们接下来要来写我们的第一个程序 “Hello World”。如果你不知道“Hello World”,那你就不是程序猿世界的人,几乎所有的程序员都是从编写“Hello World”开始的。

要编写“Hello World”,我们得先来知道Praat的输出语句:print。print为打印的意思,即在输出窗口中打印出我们想要的结果。那我们的第一个程序就很简单了:

print Hello World

把上面这句脚本复制到图2所示的脚本窗口中,然后依次点击【运行】→【运行】(【Run】→【Run】),结果就会在Info输出窗口中输出“Hello World”,如图3所示

图3 Hello World 示例程序


print是在当前行输出的,也就是说如果你写了两句print,那输出的结果会在一行中显示,如果我们要另起一行输出,那可以用 printline

print Hello World1
print Hello World2

脚本1


以上两句脚本的输出结果为:

Hello World1Hello World2


那我们来换一下:

printline Hello World1
printline Hello World2

脚本2


这时我们看到的输出结果会是下面这样:

Hello World1
Hello World2

是的,我们的脚本1输出的结果连起来了,而脚本2的输出结果分行显示了。


除了print以外,Praat还提供了另外的输出语句:writeInfoLine

writeInfoLine:"Hello World"

运行以上这句脚本,我们同样能在Info窗口输出“Hello World”,那我们再试试如下脚本:

writeInfoLine:"Hello World1"
writeInfoLine:"Hello World2"

你可能猜这会输出“Hello World1”,再输出“Hello World2”,但是你错了,在结果中你只会看到一个“Hello World2”,那“Hello World1”去哪了?原来,writeInfoLine会在输出结果之前先把Info输出窗口中的所有信息清除掉,那我们又有另外一个输出命令:appendInfoLine

writeInfoLine:"Hello World1"
appendInfoLine:"Hello World2"

如你所料,这次输出的结果是:

Hello World1
Hello World2

appendInfoLine不会清除原先输出窗口中的内容。对应writeInfoLine、appendInfoLine,还有不换行输出的writeInfoappendInfo两个命令,读者可自行编写试验。

鉴于writeInfoLine能清除Info输出窗口中的内容,所以我们一般会写在整个脚本的第一次输出的地方,在脚本中接下的输出中千万不要再用writeInfoLine,否则一个脚本运行下来你就只能看到最后一条输出结果,之前的结果会被清除掉。


现在,我们现在来总结一下:print后面直接跟要输出的内容,writeInfo和appendInfo后面跟英文冒号,然后输出内容包裹在英文双引号中。注意程序编写是区分大小写的。这篇教程中用到的几个命令:printprintlinewriteInfowriteInfoLineappendInfoappendInfoLine。请注意区分这6个命令的异同。


好了,第一篇教程就写到这了。有点啰嗦,两千多字就写了三个小时,期待后续的教程吧。


原创作品,未经授权不可进行转载。





您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新