Извлечение текста из файла презентации Praat в другой текстовый файл

Мне было интересно, могут ли кто-нибудь помочь мне с такой сложной задачей, как извлечение времени и частоты контура Praat Pitch в текстовый файл.

я начинаю с

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.

Заранее спасибо за помощь.


person Marco    schedule 21.07.2016    source источник


Ответы (1)


Я работал над некоторыми процедурами для быстрого преобразования различных типов объектов в их табличные представления, и 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 можно привести к объекту Matrix, который уже в основном является таблицей. В этом случае единственные необходимые манипуляции — это транспонирование (чтобы таблица была вертикальной) и переименование столбцов.

person jja    schedule 22.07.2016
comment
Спасибо, джа. Это хороший способ извлечь время и F0. Я привык делать что-то вроде того, что вы предложили, но было бы неплохо вместо этого иметь способ извлекать данные из файла Pitch, не так ли? - person Marco; 23.07.2016
comment
Я не уверен, что понимаю, что вы имеете в виду. Вы имеете в виду без использования Praat? Лично я считаю это плохой идеей, так как эти форматы не предназначены для экспорта во внешние приложения. Лучше всего это сделать с помощью интерпретатора Praat. Но если вам нужно, это можно изменить на наиболее подходящий YAML с помощью регулярных выражений, как я делаю в praat2yaml.pl. Если вы предпочитаете это, я рад расширить ответ, но я думаю, что вы также можете уточнить в своем вопросе. - person jja; 24.07.2016
comment
Мне понравился ваш ответ, и я обязательно буду следовать этому пути и интегрировать что-то подобное в один из моих сценариев. Я просто указал, что было бы неплохо иметь способы, возможно, исключающие использование Praat, для обработки файлов и получения тех же результатов. Если у вас есть время, я хотел бы увидеть расширение того, что вы предлагаете выше. Если у вас нет времени, позвольте мне еще раз поблагодарить вас за ваше время и вашу помощь. - person Marco; 25.07.2016