2014年6月16日 星期一

Praat 大量語音處理套件改版

上回修正了 project_v3 套件的檔名大小寫與 ACCESS 資料表太多問題後, 學姊說還是有問題, 跑 formant 共振峰擷取時仍然失敗. 前幾天看原始碼, 終於恢復記憶, 原來我寫的三支自動擷取 formant 的 script 不是 general 的, 而是必須視受試者性別去修改程式碼, 因為太久沒用了, 我忘記了這點 (我看了以前做的簡報以及原始碼才想起來). 但這週忙著幫姐姐找補習班, 所以沒空改程式.

為了一勞永逸, 索性修改了 formant 的執行架構, 在第一步時必須指定有哪些受試者是女性或兒童 (參數用 5500Hz), 其餘為男性不需指定 (程式內部參數會套用 5000 Hz), 這些女性/兒童受試者用逗號隔開, 中間不要有空格, 例如 :

33,36,38,41,46

在執行完第一步時, 會多產生一個 gender_list.txt 檔, 標示與 subject_list.txt 對應之性別, 0 表女性/兒童, 1 表男性. 同時也修改了三個 fetch_formant 程式, 執行時會自動根據 gender_list.txt 的內容套用 5500Hz 或 5000 Hz 參數, 以後做不同的研究計畫時就不必每次都要去修改這三個抓取 formant 的程式了.

以下紀錄修改的部分, 以免又忘記. 這三個共振峰擷取程式為 :

fetch_formant_list.praat
fetch_formant_mean_max_min.praat
fetch_percent_formant.praat

改的地方都一樣, 就是添加讀取 gender_list.txt, 以及剖析其內容的部分 :

#定義受試者目錄檔
subjectFileName$=working_directory$ + "\subject_list.txt"
genderFileName$=working_directory$ + "\gender_list.txt"   (添加)
#讀取受試者目錄名稱檔,轉成陣列
if fileReadable (subjectFileName$)
   #讀取受試者目錄名稱檔與性別檔至一字串
   subjectList$ < 'subjectFileName$'
   genderList$ < 'genderFileName$'   (添加)
   ...
   ...
       #取得目前受試者性別字串總字元長度
       listLength=length(genderList$)
       #找出受試者性別字串中的第一個空白位置之索引值,到檔尾時找不到的話會得到 0
       i=index(genderList$," ")
       #從受試者性別字串中取出受試者性別 (空白字元左側)
       if i=0
          g$=genderList$
 #去除已取出之受試者性別,更新受試者性別字串
          genderList$=right$(genderList$,0)
       else 
          g$=left$(genderList$,'i'-1)
 #去除已取出之受試者性別,更新受試者性別字串
          genderList$=right$(genderList$,'listLength'-'i')
       endif
       #紀錄目前處理中之受試者目錄至檔案
       fileappend "'info_out$'" subject='k$' gender='g$''newline$'  (修改)
       newListLength=length(subjectList$)
       ...
       ...
  #產生 formant 物件 (女:g$=0,用 5500, 男:g$=1,用 5000)
  if g$="0" 
     To Formant (burg)... 0 5 5500 0.025 50
  else 
     To Formant (burg)... 0 5 5000 0.025 50
  endif   (修改)
    #選取該 formant 物件
  select Formant 'majorFileName$'
       ...
       ...
else
   echo "'subjectFileName$' not found"   (修改)
endif

以上最重要的部分是產生 formant 物件的那個 if-else, 就是這裡依據 g$ 這個性別字元來套用 5500Hz 還是 5000Hz 的最高頻率.


等七月份評鑑完, 再來想辦法用 Java Swing 改寫, 這樣才不會受限於 IE 或 Windows, 或許介面也要做些改變, 直接呼叫 praatcon.exe 去執行, 以盡量減少人工操作步驟.

# 下載 project_v3.zip (無語料)
下載 project_v3.zip (有語料)

2018-02-16 :

為了與玉蓉學姊討論語音分析問題, 加上了有語料版本下載連結, 語料來源為淑蓉學妹的碩士論文中的其中兩個受試者. 另外, Win10 上的 IE11 瀏覽器無法執行此網頁程式, 但可以降級為 IE10 來跑, 參考 :

Praat 大量語音資料處理套件在 IE11 上的執行問題

沒有留言 :