如果本系列教程你是从头开始看的话,那么到这里相信很多人已经有了相应的基础了,但可能还有很多人看着前面的教程都是分开单个功能点进行讲解的,理解每一行代码应该没问题,但是要是真的给你一个需求,让你根据需求用学过的知识来实现,肯定很多人还是一头雾水。就像我当初开始学习编程时,老师教给你的都是基本语法,然后让你用程序实现“1+1”等于多少,复杂一点就让你实现“1、2、3、4……100”相加等于多少。心里就会很傻B地问:“写这程序有什么用?一点实质性的东西都做不出来!”。

现在,本节教程就根据一个很简单的例子来综合说明一下前面所学到的知识,整个脚本的思路是怎样的,具体到每一句是什么意思,在这一节会详细讲解。这个例子就是平时用得挺多的“提取10点基频”。

我们来看看整体的思路:

要提取十点基频,我们需要选中一段要提取的基频的音频,然后从选中的这一段音频中,从起始点到结束点,我们要平均将其分成9等份(为什么不是10等份?分成10等份,那从开始点到结束点,就会有11个点了,别说你想不明白这个,这是小学的数学了……)。然后我们就去取每一点上所对应的基频值,将其输出到输出窗口(Info窗口)中,当脚本执行完以后,我们的输出窗口中就会有10个数,就是我们提取出来的十点基频。

现在我们在整理一下上述思路中用到的东西,首先,选中一段音频,这是手动操作的,选中了之后我们要知道起始点和结束点,这个在Praat的菜单中可以看到有相应的功能,对应的菜单分别是【Query】菜单下的【Get start of selection】和【Get end of selection】。平均分成9等分,然后去取每一个点对应的基频值。平均!我们可以想到用循环,而不用对应到每一点去写一行脚本代码来提取。提取基频值,在【Pitch】菜单下的【Get pitch】。输出,我们可以使用第一篇教程中所说的所有输出语句,但值得注意的一点是writeInfo和writeInfoLine的使用,如果忘了请回头看。

说到这里,不知道你们是否有思路了,如果您已经有思路了,可以自己来写一下,如果没思路,下面就给出完整的脚本代码。

start = Get start of selection

end = Get end of selection

if start=end

exitScript: "请选中一段音频"

endif

for i from 0 to 9

time = start + (end-start)/9*i

Move cursor to... time

pitch = Get pitch

print 'pitch:0'

if i < 9

printtab

endif

endfor

print 'newline$'

Select... start end

接下来,我就来给你们解释一下每一行代码的意思。

在第一篇教程中,我说过:如果你要编写脚本程序,最好是用英文原版,因为你可以清楚看到每一个脚本命令怎样去写。并且让你们记住一句话:Praat大部分的脚本命令其实就是动态菜单或下拉菜单中的菜单项。

第1行:获取你选中那段音频的起始时间点,将其存入start变量中。我们为什么可以使用【Get start of selection】这个命令来获取起始时间点?就是因为在Sound窗口的【Query】菜单中有这一个菜单,所以我们在脚本中可以直接使用,这就是上面红色这句话的意思。菜单中所有的菜单项,都可以在脚本中使用。

第2行:获取你选中那段音频的结束时间点,将其存入end变量中。

第3行:if判断语句,判断起始点与结束点,如果起始点与结束点相等,就执行到第4行。

第4行:退出脚本,第3行的判断成立就执行到此,后面的脚本不会再执行。这个命令在前面没讲过,基本语法:【exitScript:"提示语句"】。在脚本中遇到这个命令后续脚本都不会再执行了。

第5行:与第3行的if语句构成完整的判断结构。

第6行:循环语句,变量i从0到9,正好10个点,也就是我们要提取的10点。这里为什么是从0开始,而不是从1开始,这是为了下面第7行的取值方便。

第7行:根据起始时间与结束时间,获取对应点的时间,将其存入time变量中。时间点的获取,起始时间+总时间(结束时间-起始时间)除以9,再乘以循环点,就是当前循环点对应的时间。比如刚开始,i=0,这时 time=start + 0,也就是当i=0时,time就等于起始点的时间,当i=1时,time=start+每一段的时间“(end-start)/9”乘于1,这就是第二个点所处的时间点,当i=2时,time=start+每一段的时间“(end-start)/9”乘于2,这就是第三个点所处的时间点……这就是在第6行时我们为什么要从0开始,如果从1开始的话,那这一行对应的就应该是(i-1),否则第一个点就会取不到值。

第8行:【Move cursor to...】菜单项命令,将选中点移动到某个时间点上,后面跟上time参数,就是将选中点移动到time时间点上。

第9行:【Get pitch】菜单项命令,用于获取当前选中时间点上的基频值,将其存入pitch变量中。

第10行:用print命令进行输出,后面跟上的'pitch:0',是对第9行中取得的基频值pitch进行输出,这里在pitch变量后面还有个冒号0“:0”,这是数值型的小数位数截取的,想保留多少位小数后面的数值就是多少,这里是只取整数,如果取一位小数可以这样写“'pitch:1'”,截取规则根据四舍五入。

第11-13行:如果i小于9就执行【printtab】命令。换句话说,在这个脚本里面,只有i=9时才不会执行此命令。“printtab”命令主要用于在输出窗口中打印一个制表符(tab),要这里我们要输出的每个基频值之间打印上一个制表符来分隔前后两个数。

第14行:与第6行构成完整的循环结构。

第15行:换行输出。命令“print 'newline$'”为输出一个新行。此行代码非必须,这里只是为了用户在一个音频里提取多段数据方便,下次再执行本脚本时,就会在新行继续输出数据。

第16行:【Select...】菜单项命令,选中一段音频,后面跟上起始时间和结束时间。这里用于我们在提取完数据后让界面上还是选中我们之前选中的音频段。要不然就只是定位到结尾了。

好了,这次的实战代码就解释到这里,如果还有不明白的,可以直接发邮件给我。这只是做引导的一个实例,如果你有别的需求或者想法,可根据自己的想法来编写脚本,如果你想把脚本写好,那一定要进行各种尝试,单是靠看看我写的这些教程是不可能学会的。

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

如您觉得本文对您有帮助,可以赞助博主一杯奶茶吗

linux praat 脚本,Praat脚本编程中文教程:实例讲解提取十点基频脚本相关推荐

  1. Linux命令--统计多项--dstat--使用/教程/实例

    原文网址:Linux命令--统计多项--dstat--使用/教程/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Linux的统计类命令:dstat. dstat 是一个多功能产品,可以替 ...

  2. linux下简单的shellfor循环程序,对Linux下shell编程之for循环的实例讲解

    对Linux下shell编程之for循环的实例讲解 linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 ...

  3. php脚本函数,PHP执行系统命令函数实例讲解

    命令注入 命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 bash 命令)的一种注入攻击手段. 常见的执行系统命令 ...

  4. Linux下Desktop文件入门,解析Deepin Linux系统中的Desktop文件,附实例讲解

    以下内容为你解析 Deepin Linux 操作系统中的 Desktop Entry 文件,同时附上实例讲解. 概念 Desktop Entry 文件是 Linux 桌面系统中用于描述程序启动配置信息 ...

  5. 【linux】linux中fork()详解(实例讲解)|fork的运行机制

    目录 linux中fork()函数详解 从一道面试题谈linux下fork的运行机制 linux中fork()函数详解 原文:linux中fork()函数详解(原创!!实例讲解)_jason314的博 ...

  6. linux操作系统中的shell编程----基于头歌实践教学编写shell脚本测试结果

    一.前言 今天,又要使用我的大学技能-写实验报告.linux操作系统课程实验课到了尾声,这是最后一次linux操作系统实验报告,我喜极而泣. 行了,废话不多说,我直接开始肝!!本实验是基于基于头歌实践 ...

  7. linux nginx 安装_艾编程基础教程:Linux 环境下 Nginx 安装

    #安装说明:Nginx 安装前需要提前安装相关命令和工具包: make 命令.gcc g++.pcre.zlib.openssl 1.安装 gcc g++ #ubuntu 环境下安装 apt-get ...

  8. 华为固件解包工具linux,华为EMUI8.0固件解包教程(含提取recovery方法)

    华为EMUI8.0固件解包教程(含提取recovery方法),现在出来的新款华为手机基本上都是EMUI8.0系统的,一些玩机新手便想着怎么提取一下固件中的相关文件,比如原版的recovery.img或 ...

  9. eeglab中文教程系列(5)-提取数据epoch

    目录 提取数据epoch 移除基线值 保存数据 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 提取数据epoch 为了研究连续记录数据的事件相关脑电图动力学, ...

最新文章

  1. [转]解读手机专业术语
  2. Laravel使用之七牛对象存储
  3. Bash: Removing leading zeroes from a variable
  4. php设置文件权限问题,关于.user.ini以及php访问上级文件权限问题
  5. c语言怎么在编码时改变颜色,怎么给贪吃蛇换一个颜色 怎么改 代码如下
  6. django定义模型类-14
  7. 终于有人把数据中台讲明白了
  8. 针对xml文件做提取与写入的操作
  9. 自学python好找工作么-转行去培训班学Python好找工作吗?老男孩教育
  10. 更改 Office 解决方案的安装路径
  11. day73 中间件 以及模板引擎
  12. 181005扇贝有道每日一句
  13. sklearn实现lasso regression以及调参
  14. 计算几何——点到直线的距离、投影点
  15. 修改Linux文件格式为unix
  16. 仓库温度湿度控制措施_一般仓库的温湿度控制范围是多少合适?
  17. 企业邮箱登录入口,邮箱登陆登录入口有哪些?
  18. 产品经理应该懂哪些术语?
  19. [Scrapy使用技巧] 如何在scrapy中捕获并处理各种异常
  20. Qt 之设置 QWidget 背景色

热门文章

  1. svn和git不过是工具而已
  2. [go学习笔记.第一章] go可以做什么
  3. 笔记本电脑免拆清灰的诸多方法,怎么不拆机清灰
  4. GEE(Google Earth Engine)学习——常用筛选器Filter操作
  5. 高温热水解预处理对厌氧消化期间污泥腐殖化的调控机制
  6. 纳什均衡及经典案例(2)
  7. 多功能报警杆在高速服务区的应用
  8. java实现远程文件下载
  9. Google Map开发系列(十二)——定制GoogleBar --谷歌地图的本地搜索栏
  10. UVA 1084 deer-proof fence