如何为Praat自动化语音报告

时间:2017-07-21 11:58:14

标签: python report voice praat

是否有办法为Praat自动生成语音报告(在视图和编辑窗口中的“脉冲”下),因为我必须为100多个文件执行此操作。我需要整个文件的语音报告,理想情况下我会熟悉Python。

2 个答案:

答案 0 :(得分:0)

语音报告是编辑器命令,因此在Praat的批处理实例中不可用。您将需要一个连接到GUI的Praat实例(否则您将收到Cannot view or edit a Sound from batch错误。)

我不熟悉当前特定于Python的库,所以我不知道是否有一个可以回避这个问题(我对此表示怀疑)。也就是说,您可以通过使用sendpraat来程序控制远程Praat实例来避免这种情况,该实例又可以连接到GUI。请参阅this answer for some more info on how that would work

您可以在下面使用Praat本身的脚本语言找到答案。这可以放入脚本中,并作为系统命令(或使用sendpraat)从您喜欢的任何语言执行。

form Voice report...
  positive F0_min 50
  positive F0_max 500
endform

sound = selected("Sound")
end = Get total duration

View & Edit
editor: sound
  # Optimise settings for voice research 
  # and make sure things are turned on
  Pitch settings: f0_min, f0_max, 
    ... "Hertz", "cross-correlation", "automatic"
  info$ = Editor info
  if !extractNumber(info$, "Pulses show:")
    Show pulses
  endif

  Select: 0, end
  report$ = Voice report
endeditor

# Remove header from report
# This leaves text that is parsable as YAML
report$ = replace_regex$(report$, "-- Voice report .*\n", "", 1)
report$ = replace_regex$(report$, "\nTime range .*\n", "", 1)
report$ = replace_regex$(report$, "\s*From 0 to .*\n", "", 1)

writeInfoLine: report$

语音报告(与Praat的大部分输出一样)主要计划由人类消费,因此通过机器解析并非易事。我在答案中添加了一些额外的命令来预处理语音报告,使得输出至少可以被YAML解析,这可能会使你的情况变得更容易。

答案 1 :(得分:0)

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

根据您的实际目标,似乎可以在声音编辑器菜单(以View & Edit打开)之外获得相同的“语音报告”输出:选择一个声音对象,分析其音高(选择{{1 }},单击Sound)和脉冲(选择Analyse periodicity > To Pitch...Sound对象,单击Pitch)。然后,选择所有3个对象(To PointProcess (cc)SoundPitch)和操作PointProcess将使您获得输出。

这甚至在Praat的批处理版本中也有效(即,没有图形用户界面)。我不是编写Praat脚本的专家,但是转换此工作流程似乎相当简单。

对于您问题的另一部分:Parselmouth库实际上是可以通过Python实现的。这是我一直在创建的一个开放源代码库,该库允许以Python直观的方式从Python访问Praat:

Voice report...

对于某些事物,对象上存在Python方法,对于某些其他功能,您需要使用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)") voice_report_str = parselmouth.praat.call([sound, pitch, pulses], "Voice report", 0.0, 0.0, 75, 600, 1.3, 1.6, 0.03, 0.45) 直到在库上完成更多工作。但是它可以在Python中使用。

但是,如果您只对语音报告的一部分感兴趣,并希望将其作为实际的数字变量获取(例如,因为您想对所有100个文件运行某些统计信息?),则可以访问所有这些内容与parselmouth.praat.call功能无关。例如,仅获取某个声音文件的平均音高,如Python Voice report

float