LoginSignup
2
1

More than 5 years have passed since last update.

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

Posted at

praatをGUIで操作していると音響分析の結果は1項目ずつしかゲットできません(例えばピッチの最大値とその時間情報を手にするには2画面必要)。
ということで,そのへんを一気にやってしまいたいという動機ででっち上げたのが以下のスクリプトです(Gistからの再掲)。Pitchの算出については言語系の人は実際に目で見て確認したい人が多いようなので,1オブジェクトずつ図形式で確認してから算出させるようにしています。Hzとsemitone好きな単位で算出します。

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
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1