引出
统计录音时长,是大家经常用到的一个功能,统计的方法有很多,这里小编只介绍两种,一种是在win10
系统中的资源管理器中可直接实现,另外一种当然就是本文的主题,通过Praat脚本
实现。
简便操作
首先介绍第一种,直接利用windows的资源管理器
,打开需要统计时长的目录之后,选择菜单里“查看”
下面的,“详细信息窗格”
按钮,这时候你会发现在右侧,出现了详细信息窗格
,
操作很简单,只需要将需要统计的wav
都选中,点一下详细窗格里的“显示详细信息”
, 稍等时间之后,在右侧这个窗格里就会显示出这些wav
的总时长。如这里的500个wav
总时长是29分钟12秒
。这里单位是按小时:分钟:秒
的形式。
脚本
下面来介绍第二种方案,使用Praat脚本
操作,第一种方法统计目录里音频的时长的确是方便的,但是如果统计标注过的TextGrid
,尤其是如果有以下几个需求:
- 统计我们标注过的非空的内容的时长;
- 统计我们标注过的所有的某一个发音比如a的时长;
- 统计我们标注过的包括某一个单词的时长;
- …
这些统计条件要求我们有标注的数据,通过标注的TextGrid
来定位时间点,从而达到统计对应条件的音频时长。奥秘就在这里,Praat
为我们提供了丰富的查询检索条件,通过打开一个TextGrid
,如图所示步骤,点击到Get total duration of intervals where...
得到下图这些查询条件,这些条件包括等于
,不等于
,包括
,不包括
,以...结束
,不以...结束
,以...开始
,不以...开始
等等丰富的条件。
脚本说明
这里说明一下举的例子是统计这些标注文件中不为空的所有时长,即相当于统计非静音的时长。我们利用上面的条件,是is not equal to
,因为标注中静音的位置都是空的,所以代码里是,其它一些例子可以相应的跟上图的命令做相应的修改。
duraTotal = Get total duration of intervals where: 1, "is not equal to", ""
运行脚本
打开Praat
之后,选择Praat
,Open Praat Script...
,打开这个脚本,然后在脚本窗口选择Run
,Run
,或者直接使用快捷键Ctrl+R
,在弹出来的对话框里,设置以下几个地方,本文例子的目录在wavs
和TextGrids
目录:
- 设置
wavs
文件夹名称,这里是wavs/
,也可以置空; - 设置
TextGrid
文件夹名称,这里是TextGrids/
,可以将wavs目录
和TextGrids
目录任意一项置空,这样就只统计不为空的目录; - 设置
保存结果路径
,这里是duration_result.txt
;
设置完毕,点击OK
,运行脚本,结果可以到duration_result.txt
查看。这里的统计单位是秒。结果中会有每个文件的时长,最后的Total
是目录里所有文件的时长。
baozhai.wav,35.5553125
Total wavs: 35.5553125
baozhai.TextGrid,28.16666713270619
Total TextGrids: 28.16666713270619
如何获取脚本
https://github.com/feelins/Praat_Scripts
本站所有Praat脚本
都可以在上述github的项目目录
里找到,如果日常对代码、脚本操作比较熟练的可通过下载、安装、配置github for windows
在自己的电脑上通过git clone
将代码下载到本机,这样的好处是可以跟主站及时更新代码。
不想费如此脑筋,可以通过点击如下图Code位置所示,下载整站的代码,可直接使用。
本文的代码是07-compute_total_duration/Get_Duration_From_Sound_Files.praat
,点进去之后,还有附带的示例文件,同学可练习使用。脚本里有我的邮箱,有任何问题都可以来信咨询。
关注
关于对本站脚本的使用咨询,以及功能修改,增加等,都可以扫QQ咨询群,私信群主。
版权说明
1、版权归本公众号“极地语音工作室”,原名“语音处理小站”所有;
2、未经本站或者作者允许, 不得任意转载本文内容,否则将视为侵权;
3、转载或者引用本文内容请注明来源及原作者;
4、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。