也许有人有Praat 脚本,它可以获取有关音频文件的所有可能信息(音高、格式、强度)?.
2 回答
假设“关于音频的所有可能数据”仅指基频、共振峰结构和强度轮廓(而不是光谱、脉冲等),最简单的方法是分别生成Pitch、Formant和强度对象。
pitch = To Pitch: 0, min_f0, max_f0
formant = To Formant (burg): 0,
... total_formants, max_formant, 0.025, 50
intensity = To Intensity: min_f0, 0, "yes"
但是,您仍然需要了解有关您正在处理的音频的一些信息,例如您感兴趣的最大共振峰的可能频率,或者您估计基频的范围(您可能想查看此插件具有用于估计 f0 范围的自动方法)。
至于导出,我假设您的意思是您希望可以从不是Praat 的程序访问此信息。这可能是最难的部分,因为 Praat 没有任何标准的数据导出方式,而且它使用的数据格式虽然都是基于文本的,但都是非常... Praat 特定的(您可以查看它们通过使用Save as text file...
命令)。
您可以在 Praat 中处理它们,并将所需的数据以您想要的任何格式和结构放入Table对象中,并将其保存为制表符或逗号分隔的文件(请参阅我的相关答案)。首先,您可以使用Down to Table...
可用于共振峰对象的命令,该命令将使用共振峰数据创建一个表。然后,您可以扩展该表以包含来自 Pitch 和 Intensity 对象(或您需要的任何对象)的数据。
或者,Praat 使用的大多数(不是全部)基于文本的格式几乎都是YAML,因此您可以尝试将它们转换并按原样将它们读入您以后想要使用的任何程序中。我编写了几个执行此操作的 Perl 脚本,在JSON/YAML之间进行转换,以及从Praat GUI 执行此操作的 Praat 插件。你可能想检查一下。
这是一个解决问题的脚本。
form Give the parameters for pause analysis
comment soundname:
text soundname 1.wave
comment outputFileName.csv:
text outputFileName result.csv
endform
min_f0 = 75
max_f0 = 350
Read from file: soundname$
soundname$ = selected$ ("Sound")
select Sound 'soundname$'
formant = To Formant (burg): 0, 4, 5000, 0.025, 50
formantStep = Get time step
selectObject: formant
table = Down to Table: "no", "yes", 6, "yes", 3, "yes", 3, "yes"
numberOfRows = Get number of rows
select Sound 'soundname$'
pitch = To Pitch: 0, min_f0, max_f0
selectObject: table
Append column: "Pitch"
for step to numberOfRows
selectObject: table
t = Get value: step, "time(s)"
selectObject: pitch
pitchValue = Get value at time: t, "Hertz", "Nearest"
selectObject: table
Set numeric value: step, "Pitch", pitchValue
endfor
#export to csv
selectObject: table
Save as comma-separated file: outputFileName$
removeObject(table)
echo Ok