Contour 将Praat音高文件中的文本提取到另一个文本文件中

Contour 将Praat音高文件中的文本提取到另一个文本文件中,contour,pitch,pitch-tracking,praat,pitch-detection,Contour,Pitch,Pitch Tracking,Praat,Pitch Detection,我想知道是否有人能帮我解决一个棘手的问题,那就是将Praat音高轮廓的时间和频率提取到txt文件中 我从 File type = "ooTextFile" Object class = "Pitch 1" xmin = 0 xmax = 1.592 nx = 159 dx = 0.01 x1 = 0.006002267573695814 ceiling = 1900 maxnCandidates = 2 frame []: frame [1]: inte

我想知道是否有人能帮我解决一个棘手的问题,那就是将Praat音高轮廓的时间和频率提取到txt文件中

我从

File type = "ooTextFile"
Object class = "Pitch 1"

xmin = 0 
xmax = 1.592 
nx = 159 
dx = 0.01 
x1 = 0.006002267573695814 
ceiling = 1900 
maxnCandidates = 2 
frame []: 
    frame [1]:
        intensity = 0 
        nCandidates = 1 
        candidate []: 
            candidate [1]:
                frequency = 0 
                strength = 0.9 
    frame [2]:
        intensity = 0 
        nCandidates = 1 
        candidate []: 
            candidate [1]:
                frequency = 0 
                strength = 0.9 
    frame [3]:
        intensity = 0 
        nCandidates = 1 
        candidate []: 
            candidate [1]:
                frequency = 763.0480724135344 
                strength = 0.9 
    frame [4]:
        intensity = 0 
        nCandidates = 1 
        candidate []: 
            candidate [1]:
                frequency = 763.3612753914916 
                strength = 0.9 
....
我想去:

0,0
t1,0
t2,763.0480724135344
t3,763.3612753914916 
....
tn, ...
如果脚本能够读取“dx=”中的信息并计算x坐标的时间,那也太好了


提前感谢您的帮助。

我一直在研究一些过程,以快速将不同的对象类型转换为它们的表表示形式,
Pitch
对象相对简单。试试这个:

# Execute this with your Pitch object selected
@pitchToTable()

procedure pitchToTable ()
  .obj = selected("Pitch")
  .name$ = extractWord$(selected$(), " ")
  .t1 = Get time from frame number: 1
  .m1  = To Matrix
  .m2  = Transpose
  .tor = To TableOfReal
  .id  = To Table: "Time"
  Set column label (index): 2, "F0"
  Formula: "Time", "'.t1' + (Object_'.obj'.dx * (row - 1))"
  Formula: "F0", "if self then self else undefined fi"
  Rename: .name$ + "_pitch"
  removeObject: .m1, .m2, .tor
endproc

转换利用了这样一个事实,即大多数Praat对象都可以转换为矩阵对象,而矩阵对象基本上已经是一个表了。在这种情况下,唯一需要进行的操作是换位(创建垂直表)和重命名列。

谢谢jja。这是提取时间和F0的好方法。我习惯于做一些像你建议的事情,但是如果能有一种方法从音高文件中提取数据也会很好,不是吗?我不确定我是否明白你的意思。你是说不用普拉特?我个人认为这不是一个好主意,因为这些格式不是为导出到外部应用程序而设计的。使用Praat解释器是最好的方法。但如果必须的话,可以使用正则表达式将其更改为基本符合YAML,就像我在中所做的那样。如果你愿意的话,我很乐意扩展答案,但我想你可能也想在你的问题中澄清一下。我喜欢你的答案,肯定会按照这种方式,在我的脚本中集成类似的内容。我只是指出,如果有办法(可能不包括使用Praat)来处理文件并获得相同的结果,也会很好。如果你有时间的话,我很乐意看到你上面建议的扩展。如果你没有时间,让我再次感谢你的时间和帮助。