この記事にはGoogle Adsenseによる広告が含まれています。

はじめに

Praatスクリプトの応用例として,別ページの「促音を入れる:無音区間の挿入」をスクリプトで実行できるようにしてみましょう。ここでは,「型」の音声を以下の三つに切り分けました。

  • A: [ka]
  • B: [t]の閉鎖区間
  • C: [t]の破裂以降

そして,Bを任意の長さの無音区間に置き換えるということをしていました。

このページでは,上のようにして切り出した三区間のうち,AとCを使います。以下は切り出した音声ファイルです。ダウンロードしてPraatで読み込んでください。

なお,新しいスクリプトを書くための準備として,Objectウィンドウの上メニューからPraat > New Praat scriptを実行し,スクリプトのウィンドウが立ち上がったらClear historyを実行しておきましょう。

Paste historyによる下準備

まず,基本的な作業の流れをPraat上で行ってみて,それをPaste historyすることにしましょう。(Sound AとSound Cがこの順番に読み込んであるという前提です。)

行う作業は,以下の流れになります。

  1. silenceを作る(New > Sound > Create Sound from formula… ここでName: silence,End time: 0.1,formula: 0とします。)
  2. Sound Cをコピーする(名前は何でもよいですが,例えば C_copy にする。)
  3. Sound AとsilenceとSound C_copyを選択した上で Concatenate (Combine > Concatenate)

ここで2番目にSound Cをコピーするのは,Concatenateを行った場合にオブジェクト上に並んでいる順番に連結されるためです。Sound Cは無音のあとに来なければならないため,この手順が必要になります。

ここまでの作業を行った上で Paste history をすると,以下の一連のコマンドが貼り付けられるはずです。(作業手順が多少異なった場合,これとは若干異なったものになるかもしれませんが,これは修正していくための元にするものなので,細かいところは気にしなくても大丈夫です。)

オブジェクトの選択

上で貼り付けられたコマンドには,オブジェクトの選択にかかわるものがいくつか含まれています。これについて説明します。

オブジェクトウィンドウ上にあるオブジェクトを選択するときは,selectObjectというコマンドを使います。下の例は,Aという名前のSoundオブジェクトを選択することを意味しています。

selectObject: "Sound A"

複数のオブジェクトを選択する場合は,二つ目以降のオブジェクトについてplusObjectを使います。

selectObject: "Sound A"
plusObject: "Sound C"

ところで,個々のオブジェクトは固有のIDを持っています。オブジェクトウィンドウ上でオブジェクト名の前に表示される数字が,そのオブジェクトのIDです。

この情報を利用すれば,以下のようにオブジェクトを指定して選択することもできます。下の例は,35というIDを持つオブジェクトを選択することを意味します。

selectObject: 35

以下の例は,この応用です。

b = Create Sound from formula: "silence", 1, 0, 0.1, 44100, "0"
selectObject: b

ここでは,先ほどのsilenceをつくるコマンドの前に, “b =” をつけています。このようにすることで,Soundオブジェクトを新しく作るとともに,そのオブジェクトIDをbという変数に代入することができます。もしIDが35であれば,bには35が代入されるというわけです。その次のselectObject: bでは,上の例でいえば,35というIDを持つオブジェクトを選択することになります。

これをふまえ,上のPaste historyで作ったスクリプトに修正を加えると,次のようになります。(修正箇所に黄色の蛍光マーカーをつけてあります。)

b = Create Sound from formula: "silence", 1, 0, 0.1, 44100, "0"
selectObject: "Sound C"
Copy: "C_copy"
selectObject: "Sound A"
plusObject: b
plusObject: "Sound C_copy"
Concatenate

forループに埋め込む

次に,このスクリプトをforループに埋め込むとともに,silenceの長さを変化させられるようにしてみましょう。

for i from 0 to 20
   duration = 0.1 + i * 0.01
   b = Create Sound from formula: "silence", 1, 0, duration, 44100, "0"
   selectObject: "Sound C"
   Copy: "C_copy"
   selectObject: "Sound A"
   plusObject: b
   plusObject: "Sound C_copy"
   Concatenate
endfor

1行目でiを0から20まで順次代入していくループを作っています。そして,2行目で duration という変数を作っています。iの値の変化にしたがい,durationは0.1から0.3まで変化するようになっています。

3行目の無音を作るコマンドの中でdurationを代入するようにしたので,無音の長さは0.1秒から0.3秒まで,0.01秒刻みで変化していきます。

これでほぼ完成なのですが,これだと名前の同じオブジェクトが(中身は違いますが)が21個できてしまうので,オブジェクト名をつけかえるようにしましょう。

for i from 0 to 20
   duration = 0.1 + i * 0.01
   b = Create Sound from formula: "silence", 1, 0, duration, 44100, "0"
   selectObject: "Sound C"
   Copy: "C_copy"
   selectObject: "Sound A"
   plusObject: b
   plusObject: "Sound C_copy"
   Concatenate
   Rename: "stimulus'i'"
endfor

Renameはオブジェクト名を変えるコマンドです。ここでは stimulus のあとに ‘i’ をつけることで,iが代入されるようにしています。

実行してみる

上で作ったスクリプトを実行してみると,次のようにオブジェクトがたくさん作られるはずです。このうち,Sound stimulus 0~20が,無音区間を0.1秒から0.01秒刻みで変化させた21個の音声刺激です。