帕瑟茅斯批量完整语音报告

时间:2019-02-15 10:51:46

标签: report batch-processing voice praat

我想知道是否有一种方法可以使用parselmouth或其他praat的pythonic实现批量处理音频文件并生成完整的语音报告。到目前为止,我只能获得中值音调,但我需要能够计算出脉冲和周期的总数,语音中断的程度和微光。如果使用python无法做到这一点,可以使用praat脚本吗? praat generated voice report

1 个答案:

答案 0 :(得分:1)

[免责声明:我是提到的Parselmouth库的作者]

Gitter chatbox for Parselmouth上提出并解决了这个问题,但为以后参考,这是我在此处建议的解决方案:

之前在StackOverflow上曾问过类似的问题:How to automate voice reports for Praat,说明了如何在不使用Praat“查看和编辑”窗口(例如,使用SoundPitch的情况下获取语音报告,和PointProcess对象)。

  

因此,首先您要获得以下三个对象,即声音,音高音调和PointProcess脉冲,可能会更改您希望具有不同参数的参数:

import parselmouth
sound = parselmouth.Sound("the_north_wind_and_the_sun.wav")
pitch = sound.to_pitch()
pulses = parselmouth.praat.call([sound, pitch], "To PointProcess (cc)")
     

之后,您可以查询要以不同方式提取的不同数量。例如,可以使用以下方法提取PointProcess中的脉冲数:

n_pulses = parselmouth.praat.call(pulses, "Get number of points")
     

还有其他人

n_periods = parselmouth.praat.call(pulses, "Get number of periods", 0.0, 0.0, 0.0001, 0.02, 1.3)
shimmer_local = parselmouth.praat.call([sound, pulses], "Get shimmer (local)...", 0.0, 0.0, 0.0001, 0.02, 1.3, 1.6)
     

要获得语音中断的程度要难一些。不知道为什么普拉特没有命令得到这个。

     

在Python中获取此代码的快速方法是:

max_voiced_period = 0.02  # This is the "longest period" parameter in some of the other queries
periods = [parselmouth.praat.call(pulses, "Get time from index", i+1) -
           parselmouth.praat.call(pulses, "Get time from index", i)
           for i in range(1, n_pulses)]
     

degree_of_voice_breaks =总和(如果期间> max_voiced_period,则为该期间的期间)/ sound.duration

     

您还可以在“语音报告”的输出字符串中找到报告此百分比的行;参见https://stackoverflow.com/a/51657044/2043407

     

如果您查看Praat用户界面,实际上没有按钮“获取中间值”,因此这行不起作用。但是,在Praat中有一个“获取分位数”命令   所以我建议

parselmouth.praat.call(pitch, "Get quantile", 0.0, 0.0, 0.5, "Hertz")
     

(那个0.5就是50%的分位数,即中位数)