見出し画像

Praatでフォルダにあるファイルを一括処理する

昨日の記事でPraat Scriptでアノテーションの編集画面とその結果から時間情報を自動で読み取るスクリプトを公開しました。

そこに「指定したフォルダにあるファイル全てを処理するのも可能だけど新しい言語ではまだよく分かってない」という旨を書きました。けど,あっさりできました。Praatではフォルダ内のファイル一覧はStringsという形式で作られるので,それを作り,中にあるファイルを1つずつ実行するというのでよさそうです。これは古い言語とほとんど変わってないと思います。

Stringsとその中身

手順をまとめると次のようになります。

  1. ファイルリストを作成し,ファイルを数える

  2. 1番のファイルから,ファイルを読み込む。

  3. 以下,必要な命令(例えば上の記事のスクリプト)を入れる。

  4. 命令が終わったら,textgridは不要なのでクリアし,ファイルを書き込み,結果も一度クリアする

  5. ファイルのリストをクリアする

# 手順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")

# 以下略

これで満足いくスクリプトにできました。


いいなと思ったら応援しよう!