split_scp.pl
1.
这一段注释告诉我们此脚本是用来对scp文件或者archive-type文件做分割(split),如果没有utt2spk,就分割成同样的行数
2.
如果有utt2spk,则根据说话人进行分割
3.
告诉我们这个脚本的用法
4.
首先分析一下perl脚本的语法:
- $,开头的是变量,@开头的是数组,%开头的是哈希(类似python的字典)
- $0 表示正在运行的perl脚本名,@ARGV表示运行输入参数的数组
- 这个函数把数组的第一个值移出并且返回它,然后把数组长度减一并且把所有的东西都顺移。如果在数组中不再存在元素,它返回 undef。如果是单独的shift,就表示shift的是ARVG数组
这个循环会跑两次,对输入的参数解析,有异常会抛出
5.
die,报错,它会执行退出,一般用作错误信息的输出
这一段,就是对异常输入的检查
6.
首先分析perl语法:
- push,从数组末尾加入元素,(pop是从末尾取元素,shift是从开头取元素,unshift是从开头添加元素)
这一段是把ARGV数组中的元素,传到@OUTPUT数组中
7.
首先分析perl语法:
- open,在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作
- split,把字符串进行分割并把分割后的结果放入数组中。这个函数使用规则表达式(RE),如果未特定则工作在$_变量上。
仍然是对输入异常的处理
8.
定义了一个数组,元素是每一个scp文件
按照scp文件相对于说话人比例,平均分割
换句话说,就是按说话人对scp文件平均分配
9.
这一段注释告诉我们,下面的代码要对说话人分配开头和结尾,并最小化平方差
10.
注释告诉我们,这一段是scp文件分配结尾
11.
计算平方差
12.
注释告诉我们这一段是打印files
13.
没有utt2spk的情况