2016-07-21 12 views
0

Praat Pitch 컨투어의 시간과 빈도를 txt 파일로 추출하는 까다로운 작업을 수행 할 수 있는지 궁금합니다.Praat 피치 파일의 텍스트를 다른 텍스트 파일로 추출

나는

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 
.... 

에서 시작 나는에 가고 싶다 "= DX"스크립트의 정보를 읽을 수 있다면이 또한 좋은 것

0,0 
t1,0 
t2,763.0480724135344 
t3,763.3612753914916 
.... 
tn, ... 

및 위해 시간을 계산 x 좌표.

미리 도움을 주셔서 감사합니다.

답변

0

저는 다른 객체 유형을 테이블 표현으로 신속하게 변환하기위한 몇 가지 절차를 수행하고 있으며 객체는 비교적 간단합니다. 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 

변환이 가장 프라 트 객체는 기본적으로 이미 표 인 Matrix 객체에 캐스트 할 수 있다는 사실을 사용한다. 이 경우 일어날 수있는 유일한 조작은 전치 (세로 테이블 사용) 및 열 이름 바꾸기입니다.

+0

감사합니다. 시간과 F0를 추출하는 좋은 방법입니다. 당신이 제안한 것과 비슷한 일을하는 데 익숙했지만 피치 파일에서 데이터를 추출하는 방법을 사용하는 것이 좋을 것입니다. 그렇지 않습니까? – Marco

+0

내가 무슨 뜻인지 모르겠다. Praat_을 사용하지 않고? 필자는 개인적으로 이것이 좋은 생각이 아니라고 생각합니다.이 형식은 외부 응용 프로그램으로 내보낼 수 있도록 설계되지 않았기 때문입니다. Praat 통역사를 사용하는 것이 최선의 방법입니다. 하지만 필자가해야한다면, [praat2yaml.pl] (https://gitlab.com/cpran/plugin_serialise/blob/master/scripts/praat2yaml.pl#)에서와 같이 정규 표현식을 사용하여 대부분 YAML을 준수하는 것으로 변경할 수 있습니다. L244-300). 당신이 그것을 원한다면, 나는 대답을 연장하게되어 기쁘지만, 당신이 당신의 질문에서도 분명히하고 싶을 것이라고 생각합니다. – jja

+0

나는 당신의 대답을 사랑했고, 분명히 그런 식으로 나의 스크립트 중 하나에 그런 것을 통합 할 것입니다. Praat의 사용을 제외하고 파일을 처리하고 동일한 결과를 얻는 방법을 사용하는 것도 좋았을 것이라는 점을 지적했습니다. 시간이 있다면 위에서 제안한 내용의 연장을보고 싶습니다. 시간이 없다면 시간과 도움을 주셔서 다시 한 번 감사드립니다. – Marco