praatをGUIで操作していると音響分析の結果は1項目ずつしかゲットできません(例えばピッチの最大値とその時間情報を手にするには2画面必要)。
ということで,そのへんを一気にやってしまいたいという動機ででっち上げたのが以下のスクリプトです(Gistからの再掲)。Pitchの算出については言語系の人は実際に目で見て確認したい人が多いようなので,1オブジェクトずつ図形式で確認してから算出させるようにしています。Hzとsemitone好きな単位で算出します。
[praat: Write out soundinfo selectively (f0, intensity, duration) into a file]
( http://goo.gl/zS6mZ "praat: Write out soundinfo selectively (f0, intensity, duration) into a file")
SoundInfoInto1File.praat といった適当な名前でお好きな場所に保存いただいたらpraatのトップメニューから
Open Praat script…
を選択して,表示通りSoundオブジェクトを指定してRun - Run でOKです。
#Write out soundinfo selectively (f0, intensity, duration) into a file#使い方#Soundオブジェクトを選択してからRun - Runと進みます。#このスクリプトが保存されたディレクトリにsoundinfoというファイル名でデータが追加されます。#データがまとまったらExcel等で読み込んでください。#謝辞とともに利用可。echo Soundオブジェクトを選択してからRun - Runと進みます。printline F0を選ぶとその最高値と時間,最低値と時間がこの順に計算されます。printline Intensityを選ぶとその最大値と時間,最小値と時間がこの順に計算されます。printline Durationを選ぶと音声ファイルの長さが秒単位で計算されます。printline それぞれのデータはこのスクリプトが保存されたディレクトリにsoundinfoというファイル名で追加されます。printline データがまとまったらExcelで読み込んでください。printline 謝辞とともに利用可とします。#platformと抽出したい音響特徴を選択するbeginPause ("On which platform do you use praat?") comment ("1: windows 2: mac os")platform = endPause ("1", "2", 2)beginPause ("Which parameter do you analyze?") comment ("1: f0 2: intensity 3: duration")parameter = endPause ("1", "2", "3", 1)#f0情報を抽出するif parameter = 1 name$ = selected$ ("Sound") select Sound 'name$' beginPause ("Which method do you like?") comment ("1: Hertz 2: semitones re 1Hz 3: semitones re 100Hz 4: semitones re 200Hz") analysis = endPause ("1", "2", "3", "4", 0) if analysis = 1 pitch = To Pitch... 0.0 75 500 #pitch floor が 75Hz, pitch ceiling が 500Hzの設定です。変更可 select Pitch 'name$' maxF0 = Get maximum... 0 0 Hertz Parabolic timeOfmaxF0 = Get time of maximum... 0 0 Hertz Parabolic miniF0 = Get minimum... 0 0 Hertz Parabolic timeOfminF0 = Get time of minimum... 0 0 Hertz Parabolic elsif analysis = 2 pitch = To Pitch... 0.0 75 500 #pitch floor が 75Hz, pitch ceiling が 500Hzの設定です。変更可 select Pitch 'name$' maxF0 = Get maximum... 0 0 "semitones re 1 Hz" Parabolic timeOfmaxF0 = Get time of maximum... 0 0 "semitones re 1 Hz" Parabolic miniF0 = Get minimum... 0 0 "semitones re 1 Hz" Parabolic timeOfminF0 = Get time of minimum... 0 0 "semitones re 1 Hz" Parabolic elsif analysis = 3 pitch = To Pitch... 0.0 75 500 #pitch floor が 75Hz, pitch ceiling が 500Hzの設定です。変更可 select Pitch 'name$' maxF0 = Get maximum... 0 0 "semitones re 100 Hz" Parabolic timeOfmaxF0 = Get time of maximum... 0 0 "semitones re 100 Hz" Parabolic miniF0 = Get minimum... 0 0 "semitones re 100 Hz" Parabolic timeOfminF0 = Get time of minimum... 0 0 "semitones re 100 Hz" Parabolic elsif analysis = 4 pitch = To Pitch... 0.0 75 500 #pitch floor が 75Hz, pitch ceiling が 500Hzの設定です。変更可 select Pitch 'name$' maxF0 = Get maximum... 0 0 "semitones re 200 Hz" Parabolic timeOfmaxF0 = Get time of maximum... 0 0 "semitones re 200 Hz" Parabolic miniF0 = Get minimum... 0 0 "semitones re 200 Hz" Parabolic timeOfminF0 = Get time of minimum... 0 0 "semitones re 200 Hz" Parabolic endif select Sound 'name$' Edit endeditor select Pitch 'name$' Edit pause "Check and correct the pitch values." #音声波形と見比べて怪しいF0値があったら修整してください。 endeditor #データの書き出し #桁数はコロンの後の数字を変更 clearinfo print 'name$' printtab print 'maxF0:0' printtab if analysis = 1 print Hz@ elsif analysis =2 print semitones re 1 Hz@ elsif analysis = 3 print semitones re 100 Hz@ elsif analysis = 4 print semitones re 200 Hz@ endif printtab print 'timeOfmaxF0:3' sec printtab print 'miniF0:0' printtab if analysis = 1 print Hz@ elsif analysis =2 print semitones re 1 Hz@ elsif analysis = 3 print semitones re 100 Hz@ elsif analysis = 4 print semitones re 200 Hz@ endif printtab print 'timeOfminF0:3' sec printtab printtab printline if platform = 1 fappendinfo soundinfo.text elsif platform = 2 fappendinfo soundinfo.txt endif #不要なファイルを消去します select Pitch 'name$' Removeelsif parameter = 2 name$ = selected$ ("Sound") select Sound 'name$' intensity = To Intensity... 75 0 yes #pitch floor が 75Hzの設定です。変更可 maxInt = Get maximum... 0 0 Parabolic timeOfmaxint = Get time of maximum... 0 0 Parabolic miniint = Get minimum... 0 0 Parabolic timeOfminiint = Get time of minimum... 0 0 Parabolic #データの書き出し #桁数はコロンの後の数字を変更 clearinfo print 'name$' printtab print 'maxInt:0' printtab print dB@ printtab print 'timeOfmaxint:3' sec printtab print 'miniint:0' printtab print dB@ printtab print 'timeOfminiint:3' sec printline if platform = 1 fappendinfo soundinfo.text elsif platform = 2 fappendinfo soundinfo.txt endif #不要なファイルを消去します select Intensity 'name$' Removeelsif parameter = 3 name$ = selected$ ("Sound") select Sound 'name$' duration = Get total duration #データの書き出し #桁数はコロンの後の数字を変更 clearinfo print 'name$' printtab print 'duration:3' printtab print sec printline if platform = 1 fappendinfo soundinfo.text elsif platform = 2 fappendinfo soundinfo.txt endifendif