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