Praat脚本-007 | 计算目录里音频或者TextGrid总时长

引出

统计录音时长,是大家经常用到的一个功能,统计的方法有很多,这里小编只介绍两种,一种是在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之后,选择PraatOpen Praat Script...,打开这个脚本,然后在脚本窗口选择RunRun,或者直接使用快捷键Ctrl+R,在弹出来的对话框里,设置以下几个地方,本文例子的目录在wavsTextGrids目录:

  1. 设置wavs文件夹名称,这里是wavs/,也可以置空;
  2. 设置TextGrid文件夹名称,这里是TextGrids/,可以将wavs目录TextGrids目录任意一项置空,这样就只统计不为空的目录;
  3. 设置保存结果路径,这里是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、对于不遵守此声明或者其他违法使用本站内容者,本人依法保留追究权等。

<think>好的,用户需要了解如何使用Praat脚本统计音频中的静音总时长。首先,我需要回忆Praat的基本功能和脚本编写方法。Praat是一个语音分析软件,支持脚本自动化处理。静音检测通常基于音量阈值,可能需要考虑短时能量或过零率,但Praat中常用的方法是使用音频强度(intensity)来判断。 接下来,我应该确定检测静音的具体步骤。通常步骤包括:获取音频的强度对象,设置阈值(比如低于40 dB视为静音),然后检测低于该阈值的区间。但需要处理可能存在的短暂非静音部分,比如使用最小静音持续时间来过滤。 然后,需要编写Praat脚本脚本的大致流程可能是:打开声音文件,创建强度对象,提取强度时间序列,然后遍历每个时间点,判断是否低于阈值,并累计静音时长。需要注意的是,Praat脚本语法,比如如何循环、条件判断,以及如何获取时间点。 用户可能需要示例代码,所以得提供一个简单的脚本框架。例如,使用`To Intensity`命令生成强度对象,然后使用`Get value at time`来逐个时间点检查。同时,要处理静音段的开始和结束时间,计算总时长。 还需要考虑一些常见问题,比如阈值的选择可能因录音条件不同而变化,用户可能需要调整参数。此外,静音检测可能受背景噪音影响,可能需要预处理或使用更复杂的方法,比如动态阈值或机器学习模型,但Praat脚本可能只支持基础方法。 最后,生成相关问题,帮助用户深入理解,比如如何调整阈值、处理噪音、检测语音活动等。确保回答清晰,步骤详细,代码正确,并提醒用户可能需要根据实际情况调整参数。</think>### Praat脚本统计音频静音总时长方法 要统计音频中静音段的总时长,需通过Praat脚本实现以下步骤: 1. **定义静音阈值**:通常选择强度(intensity)低于某个阈值(如40 dB)的区间为静音[^1]。 2. **提取音频强度**:将音频转换为强度对象,获取时间序列数据。 3. **遍历时间点**:逐个时间点判断强度是否低于阈值,并记录连续静音段的起止时间。 4. **累计静音时长**:对所有符合条件的静音段求和。 #### 示例脚本 ```praat # 打开音频文件 sound = Read from file: "your_audio.wav" # 创建强度对象(推荐参数:100 Hz带宽,0.01秒时间步长) intensity = To Intensity: 100, 0.01, "yes" # 获取强度时间序列 num_points = Get number of frames total_silence = 0 threshold = 40 # 静音阈值(单位:dB) min_silence_duration = 0.3 # 最小静音持续时间(秒) # 初始化静音段标记 in_silence = 0 start_time = 0 for i to num_points time = Get time from frame number: i value = Get value in frame: i if value < threshold if in_silence == 0 start_time = time in_silence = 1 endif else if in_silence == 1 end_time = time duration = end_time - start_time if duration >= min_silence_duration total_silence += duration endif in_silence = 0 endif endif endfor # 处理最后一个静音段 if in_silence == 1 end_time = Get end time duration = end_time - start_time if duration >= min_silence_duration total_silence += duration endif endif # 输出结果 writeInfoLine: "Total silence duration: ", total_silence, " seconds" ``` #### 关键参数说明 - **threshold**:根据实际音频调整阈值(背景噪声大的音频可能需要更高阈值)。 - **min_silence_duration**:避免将短暂停顿误判为静音(建议0.2-0.5秒)[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极地语音工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值