praat: 音響分析用スクリプト


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です。

```praat:
#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
```