上回修正了 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 上的執行問題
沒有留言:
張貼留言