Praatでフォルダにあるファイルを一括処理する
昨日の記事でPraat Scriptでアノテーションの編集画面とその結果から時間情報を自動で読み取るスクリプトを公開しました。
そこに「指定したフォルダにあるファイル全てを処理するのも可能だけど新しい言語ではまだよく分かってない」という旨を書きました。けど,あっさりできました。Praatではフォルダ内のファイル一覧はStringsという形式で作られるので,それを作り,中にあるファイルを1つずつ実行するというのでよさそうです。これは古い言語とほとんど変わってないと思います。
手順をまとめると次のようになります。
ファイルリストを作成し,ファイルを数える
1番のファイルから,ファイルを読み込む。
以下,必要な命令(例えば上の記事のスクリプト)を入れる。
命令が終わったら,textgridは不要なのでクリアし,ファイルを書き込み,結果も一度クリアする
ファイルのリストをクリアする
# 手順1
Create Strings as file list: "fileList", "/Users/hogehoge/files"
num_of_files = Get number of strings
# 手順2
for ifile to num_of_files
selectObject: "Strings fileList"
filename$ = Get string: ifile
Read from file: "/Users/hogehoge/files/" + filename$
objectname$ = selected$("TextGrid")
# 手順3(必要な命令)
# 手順4
removeObject: "TextGrid "+objectname$
appendFile: "/Users/yearman/Library/CloudStorage/Dropbox/Research/長崎市/プロソディ/外来語/result/info.txt", info$ ( )
clearinfo
endfor
# 手順5
removeObject: "Strings fileList"
今回ははじめのフォルダを直接スクリプト内に書き込みましたが,これはformを使って実行するたびにそこに書くようにもできます。その方が汎用性が高まるでしょう。
# 手順1(改)
form
word: "folder_name", "/Users/hogehoge/file"
endform
Create Strings as file list: "fileList", folder_name$
num_of_files = Get number of strings
# 手順2(改)
for ifile to num_of_files
selectObject: "Strings fileList"
filename$ = Get string: ifile
Read from file: folder_name$ + "/" + filename$
objectname$ = selected$("TextGrid")
# 以下略
これで満足いくスクリプトにできました。