為了要幫葉老師的書畫一些語調圖,所以寫了一個Praat腳本來處理這些dirty work。這也是真正第一個自己寫的Praat腳本,值得慶賀一下(終於學會了 ^^y )。
腳本的功能說明:
- 標記語調
- 提取音高,手動修正野點(wild point),平滑
- 畫音波圖和語調曲拱
- 存檔(附檔名TextGrid、Pitch、wmf)
流程圖示
######################################
# Annotate and draw intonation
#
# Author: Zhunbang Pbice Liao
# Praat Version: 4.6.34
# Last Update: 2007.10.23
######################################
form File Directory
comment Input file directory
sentence directory c:\praat\
endform
# Create a string file that lists file names.
Create Strings as file list... list 'directory$'*.wav
numberOfFiles = Get number of strings
# if !numberOfFiles
# Create Strings as file list... list'directory$'*.WAV
# numberOfFiles = Get number of strings
# endif
# Loop to read in files
for ifile to numberOfFiles
select Strings list
fileName$ = Get string... ifile
Read from file... 'directory$''fileName$'
name$ = fileName$ -".wav" -".WAV"
# Skip labeling if TextGrid files already exist
if fileReadable (directory$+name$+".TextGrid")
Read from file... 'directory$''name$'.TextGrid
else
# Do labeling
select Sound 'name$'
To TextGrid... Romanization
plus Sound 'name$'
Edit
pause Annotate the sound then click "continue"
endeditor
endif
# Skip extract pitch contour if Pitch file exit
if fileReadable (directory$+name$+".Pitch")
Read from file... 'directory$''name$'.Pitch
else
# Extract pitch contour
select Sound 'name$'
To Pitch... 0 50 300
select Pitch 'name$'
Edit
select Sound 'name$'
plus TextGrid 'name$'
# Edit
pause Fix pitch points then click "continue"
endeditor
endeditor
select Pitch 'name$'
Smooth... 5
endif
# Draw waveform
Erase all
Black
14
Helvetica
select Sound 'name$'
Select outer viewport... 0 7.5 0 1.5
Line width... 1
Draw... 0 0 0 0 no Curve
# Draw intonation contour
select Pitch 'name$'
plus TextGrid 'name$'
Line width... 3
Select outer viewport... 0 7.5 0.5 5.5
Draw separately... 0 0 0 300 yes yes yes
Line width... 3
Draw separately... 0 0 0 300 no no no
Line width... 3.5
Select outer viewport... 0 7.5 0 5.5
Axes... 0 7.5 0 5.5
Draw rectangle... 0 7.5 0 5.5
# Save File
Write to Windows metafile... 'directory$''name$'.wmf
if not fileReadable (directory$+name$+".TextGrid")
select TextGrid 'name$'
Write to text file... 'directory$''name$'.TextGrid
endif
if not fileReadable (directory$+name$+".Pitch")
select Pitch 'name$'
Write to text file... 'directory$''name$'.Pitch
endif
# Remove
select Sound 'name$'
plus TextGrid 'name$'
plus Pitch 'name$'
Remove
select Pitch 'name$'
Remove
endfor
select all
Remove
# End of script
11 則留言:
原來SCRIPT的中文叫做腳本唷?
Script在簡體中文叫做「腳本」;繁體中文似乎叫做「指令稿」。不過我嫌它容易和「命令」(command)等名稱搞混,所以就沿用簡體中文的名稱.... :p
原來是大陸的呀!
我每次看到大陸的翻法就很冏,譬如「幫助」、「菜單」......
(p.s. 純粹習慣問題)
看久了也就習慣了,我現在就是這樣... :p
不錯不錯,終於看到你學程式的結果了 ^^
你好,想請教你一個語音問題。
我發現/nt/音若然前後都是vowel,或於 syllable coda時,/t/音會被省去,即語音學中的elision。
例如:"internet"會讀成類似'inernet', "winter"會讀成'winner'等等…(除非很小心很清楚地讀)
問題就是,為何/nt/後的/t/會被省去?是否因為他們是同一個place of articulation?若是這個原理,為何/mp/中的/p/沒有這個現象?
Hi, BL,
我雖然讀過一點點phonetics,不過我得很慚愧地說,我不懂phonology。所以你說的elision,我也不知道該怎麼解釋.....照你的描述來看,或許是bilabial跟dental的區別?
子音節nt這幾個例子感覺是謬誤
win-ter的t是onset所以並不會被省略
in-ter-net的例子也一樣
nt的t在coda position容易被忽略
是因為percetually weak
可以參考D. Steriade 2001的paper
Directional asymmetries in place assimilation: a perceptual account.
另ㄧ個子音節mp也是一樣
如果硬要說mp比較salient
也可能是因為p比t可能要salient
至於是perceptually還是其他原因
我個人是覺得articulatory的解釋
比較合理
labial的articulation過程中
constriction比較narrow
而alveolar or dental
在phonology中常被unspecified
所以相較其他stop也就更容易被
assimilated or deleted
您好:
您的部落格上有很多很棒的訊息,對於您的用心我非常感佩。
我目前也是研究生,論文的主題也是關於外籍生的聲調習得,因搜尋praat的相關訊息時便連結到您的部落格上,對於praat我還是個零起點的學習者,在使用上常出現一些不知所以然的現象,只能初步地看到聲調的調型,但對於圖象的判讀,還有很大困難,不知可否向您請教以下幾個問題呢?
1.在設定聲調的Hz時,軟體預設所的Pitch Floor是75Hz,Pitch Ceiling是600Hz,對於華語聲調需要再重新設定嗎?
2.在分析語音檔的聲調時.我想讓軟體跑出該語音檔的聲音,所出現的聲音卻只有聲調的高低,顯現並非原聲,這是為什麼呢?是不是在設定出現了什麼問題呢?
3.分析華語聲調,我需要寫script嗎?您的建議為何?
很冒昧的問了幾個問題,請您見諒,謝謝!
Hi, Rosie,
請不要這麼客氣,很高興有機會跟同行互相切磋。
Q1. Pitch range的設定,主要還是看發音人的音高。根據Praat官網的說明,男子的聲音可設定為75~300 Hz,女子的聲音可設定100~500 Hz,如果是嘎裂音(creaky voice),則有可能低於75 Hz。至於實際應該設定多少,你不妨先分析幾個聲音,看看發音人的音高範圍大致如何。
Q2. 抱歉我看不懂你的問題。可否再說的詳細一點?
Q3. 寫script只是節省時間,這些分析也可以用手工完成,只是很費時間罷了。如果你分析的聲音只有幾十個,就不需要特別寫script,但如果上百個、甚至上千個,自然還是script比較省力。Praat Script也不會很難,和其他script language(比如PHP、Perl)多有相似之處。
By the way, Praat的官網的Help是很好的學習資源,不妨參考。
這是我的email: pbice@seed.net.tw
您好,我目前就讀於師大華研所,非常佩服您寫出了這個腳本!!
我在執行上遇到了一些問題,不知能不能請教您?
張貼留言