Praatスクリプト入門(5):入力用ウィンドウを作る

概要
Praatスクリプトの入門講座その5。form を使ってユーザのための入力用ウィンドウを作る方法を扱う。

簡単に周波数を入力できるようにする

本入門講座の目次は「Praatスクリプト入門:目次」というページをご覧いただきたい。また、前回の講座を見たい人は「Praatスクリプト入門(4):周波数を変更してみる その2」というページをご覧いただきたい。

前回の講座の最後のスクリプトはかなり複雑なものになってしまった。一旦、単純なものに戻そう。次のスクリプトは、frequency に周波数を代入して、その周波数の正弦波の音声を合成し、再生した上で、できあがった音声を削除するものである。今までのスクリプトでは、1000 Hzの正弦波なら sineWave1000 と、440 Hzの正弦波なら sineWave440 と、合成する音によってその音の名前を変えていたが、ここでは話を単純にするために、単に sineWave と名付けることにした。

frequency = 1000
do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove") 

このスクリプトでは、1行目で frequency に 1000 を代入している。別の周波数の正弦波が必要ならば、ここの 1000 を別の数値に書き換えることになる。ここまでPraatのスクリプトを勉強してきたならば、スクリプトでの数値を変えるのは簡単だろう。しかし、スクリプトのしくみが分からない人は、どこを変えてよいか分からないかもしれない。スクリプトが分かっている人でも、間違えて別の所を書き換えてしまってスクリプトが動かなくなるということがあるかもしれない。スクリプトはできればあまりいじりたくないのだ。

このため、もっと数値を変更しやすくする必要がある。スクリプトを用いずに、Praatのメニューから音を合成したときは、入力欄がある設定用ウィンドウが出てきた。このようなウィンドウを提示できれば、スクリプトのしくみが分からない人でも、簡単に設定できるようになるはずだ。

Praatのスクリプトにはフォームというものがあり、これを使うと設定を行うためのウィンドウを出すことができる。Praatでフォームを作るのはとても簡単だ。スクリプトの中で form と記述するだけで、フォームを作ることができる。

先ほどのスクリプトに周波数を指定するためのフォームを加えたものが、次のスクリプトである。このスクリプトを入力して、実行してみよう。

form Input frequency
  positive frequency 1000
endform

do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove") 

このスクリプトを実行すると、Input frequencyというタイトルのウィンドウが出てくる。出てきたウィンドウには、frequency:というラベルと、1000 と表示された入力欄があるはずだ。また、入力欄の下には、いくつかのボタンが並んでいるはずだ。とりあえず、入力欄にある 1000 という数値は変えずに、OK というボタンを押そう。すると、今までと同じように、1000 Hzの正弦波の音が流れるはずである。

もう一回このスクリプトを実行してみよう。先ほどと同じようにInput frequencyというウィンドウが出てくるので、1000 という数値を 440 に変えて、OK ボタンを押そう。すると、440 Hzの正弦波が流れる。このスクリプトを何回か実行してみて、入力欄の数値を様々なものに変え、周波数が変わることを確認してほしい。

先ほどのスクリプトで、どうやってフォームを作ったのか解説したい。

まず、1行目に、form Input frequency とある。フォームについての記述は、form と書くことから始める。form の直後に書かれている Input frequency が、フォームのタイトルになる。フォームの記述を終えるには endform と書く。先ほどのスクリプトでは3行目に書いてある。どんな入力欄を設定するかについては form と endform の間に書く。繰り返しを記述したときに for と endfor の間に繰り返し内容を書いたのと似ている。

フォームを作るときは、form と endform を用意する。フォームの入力欄の設定は form と endform の間に書く。

フォームについての記述をスクリプトに書くときは、form と endform に挟まれたところにインデントをつけると見やすくなるす。先ほどのスクリプトでは、2行目にインデントをつけた。こうすることで、どこからどこまでがフォームの記述の範囲なのか分かりやすくなる。以前 if 構造や for 構造にインデントをつけたのと同じような理由だ。

さて、フォームの入力欄はどのように設定するのだろうか。Praatのスクリプトでは、1つの行に「入力欄の種類」、「入力欄の名前」、「入力欄のデフォルト値」の3つの要素を順番に書くことで入力欄を作る。これらの3つの要素の詳細については後ほど説明したい。

先ほどのスクリプトを見てみよう。このスクリプトでは、2行目に positive frequency 1000 と書いてあった。これはどういう意味なのだろうか。順を追ってみてみよう。まず、positive が「入力欄の種類」だ。次の frequency が「入力欄の名前」である。最後の 1000 は、「入力欄のデフォルト値」、すなわち最初に表示される値を示す。

さて、「入力欄の種類」について説明しよう。先ほどのスクリプトでは positive となっていた。これは、欄に入力できるのが正の数に限られていることを示している。先ほどのスクリプトを実行し、Input frequencyというウィンドウで、周波数を入れる欄に、負の数、例えば、-620 と入れてみてほしい。次のようなエラーメッセージを表示したボックスが表示されるはずだ。

“frequency” must be greater than 0.0.
Please correct command window “Input frequency” or cancel.

これは要するに、frequency は0.0より大きくなくてはならないから、入力値を修正するかキャンセルしてくれという意味になる。

Praatのフォームで数値を入れることができる入力欄の種類としては、次のようなものがある。

試しに、次のスクリプトを入力してフォームを作ってみてほしい。これは先ほどのスクリプトの positive となっていたところを、real に変えたものである。positive は正の数しか許さなかったが、real は負の数でも問題ない。次のスクリプトを実行し、負の数、例えば、-620 と入れてみよう。エラーは出ないはずだ。

form Input frequency
  real frequency 1000
endform

次に2番目の要素である「入力欄の名前」について見てみよう。入力欄の名前は、フォーム上では入力欄のラベルとして働き、フォームの外では欄に入力された値を呼び出す際の変数名として働く。

先ほどのスクリプトを再掲しよう。

form Input frequency
  positive frequency 1000
endform

do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove")

このスクリプトの2行目で、入力欄の名前として frequency を指定した。これが、フォーム上では frequency: のように出力される。また、5行目の数式で sin(2*pi*frequency*x) とあるが、ここでの frequency は、フォームの入力欄で入れられた数値が格納されている変数である。例えば、フォームで、440と入力すれば、frequency に440という数値が格納される。

つまり、「入力欄の名前」には2つの役割がある。1つは、フォーム上に出現して、入力欄がどういうものか説明するという役割である。もう1つは、入力欄で入力されたものをスクリプトの中から呼び出すための変数という役割である。前者はユーザのために、後者はスクリプトでの処理のためにある。

最後の要素である「入力欄のデフォルト値」について説明しよう。これは簡単で、フォームを提示するときに最初に入力欄に入っている値のことである。ユーザがフォームで値を変更しなければこの値が用いられる。もちろん、ユーザがフォームで値を変更すれば、その変更した値が用いられる。なお、フォームが表示されているときに、Standards というボタンを押すと、すべての入力欄の値がこのデフォルト値に戻る。

フォームに説明を加える

先ほど作ったフォームは非常にシンプルなものであった。しかし、実際にはもっと複雑なフォームを作る場合もある。複雑になると、慣れないユーザは何が何だか分からなくなる。このため、ユーザにとって分かりやすくするために適宜説明を加える必要が出てくる。ここでは、ユーザにもっと分かりやすく使ってもらうために、フォームに説明を加える方法を紹介する。

フォームに説明を加えるには comment を使うのが一番簡単だ。次のスクリプトのように、comment のあとに空白を置いて、その後に表示したい説明を書けばよい。もちろん、これは form と endform の間に書く必要がある。フォームに関することは何でも form と endform の間に記述するのだ。

positive などは「入力欄の種類」、「入力欄の名前」、「入力欄のデフォルト値」の3つの要素からなり、各要素の間を空白で区切った。comment はこれと異なり、2つの要素しかない。次のスクリプトの2行目の comment Please input the frequency of the wave. で言うと、comment が「入力欄の種類」に相当する部分で、残りの Please input frequency of wave. が「表示する内容」に相当する部分だ。ここで、comment と Please の間の空白は要素を区切る空白、つまり「入力欄の種類」に相当する部分と「表示する内容」に相当する部分を区切る空白になっている。これに対して、Please と input の間の空白などは要素を区切る空白ではない。これらは単語と単語を区切るためだけに用いられている空白である。

form Input frequency
  comment Please input the frequency of the wave.
  positive frequency 1000
endform

do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove")

とりあえず、このスクリプトを入力して、実行してみよう。そうすると、前に作ったスクリプトと似た感じで、Input frequencyというタイトルのウィンドウが出てくる。しかし、今回は前と違って、入力欄の上に、Please input the frequency of the wave.と表示されているはずだ。

フォームにおけるコメント
  1. 先ほどのスクリプトの2行目と3行目を入れ替えるとどうなるか。
  2. 今扱った comment は、入門講座の第3回で扱った シャープ(#)から行を始めることによって作るコメントとは働きが異なっている。両者の役割の違いを説明してみよう。誰のために書かれているのかと考えてみるとよいだろう。

先ほどのフォームでは、単に frequency (周波数)と表示されるだけであった。このため、何の周波数か分からないという苦情があったとしよう。そこで、音の周波数だということをはっきりさせるために、ラベルをfrequencyから、sound frequencyに改めることになったとする。ここで、positive frequency 1000 を positive sound frequency 1000 にしてはならない。このように改めると問題が発生する。

なぜ問題が発生するのかフォームの記述方法の面から見てみよう。フォームの記述に当たっては、「入力欄の種類」、「入力欄の名前」、「入力欄のデフォルト値」という3つの要素をを順に書き、それぞれの要素の間には空白を入れた。このことを踏まえて、positive sound frequency 1000 を見てみると、まず positive が入力欄の種類として存在する。次に、そこから空白で区切られた先にある sound が入力欄の名前と見なされる。そして次の空白の先にある残りの frequency 1000 [1] が、入力欄のデフォルト値と見なされてしまう。これではおかしいことになる。

それでは、フォームでの名前として空白を含むものは使えないのだろうか。そんなことはない。フォーム上でsound frequencyと表示したければ、スクリプトでは空白をアンダーバーに置き換えて sound_frequency のように表記する。次がその例である。

form Input frequency
  comment Please input the frequency of the wave.
  positive sound_frequency 1000
endform

do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove")

なお、sound_frequency という変数に、sound frequencyという欄に入力した数値が入る。要するに、ユーザに見えるところではsound frequencyと空白でつながった形になっているが、スクリプトの中ではすべて sound_frequency とアンダーバーでつながった形になっているのだ。

アンダーバーでつなぐテクニックを紹介したついでに、もう1つテクニックを紹介したい。次のスクリプトを実行して見てほしい。実行して出てきたフォームでは、sound frequency (Hz)と表示される。この欄に入力した数値を格納する変数は、今までのパターンで行けば、sound_frequency_(Hz) となりそうだが、そうはならない。実際、writeInfoLine(sound_frequency_(Hz)) とするとエラーが出る。Praatでは、フォームでの入力欄の名前に括弧を使用した場合、括弧の中身が無視されるという特殊なふるまいをする。つまり、sound frequency (Hz)と表示されている欄に入力した値は、sound_frequency という変数に格納される。

form Input frequency
  comment Please input the frequency of the wave.
  positive sound_frequency_(Hz) 1000
endform

writeInfoLine(sound_frequency)

なお、括弧の中身が無視されるというのは、入力欄の名前に限った話ではない。次のスクリプトを見てほしい。

form Input frequency
  comment Please input the frequency of the wave.
  positive sound_frequency_(Hz) 1000 (= 1 kHz)
endform

writeInfoLine(sound_frequency)

デフォルトの値が 1000 (= 1 kHz) とあるが、括弧の中身は無視され、そのまま変更しなければ sound_frequency には 1000 が格納される。

フォームを作る際のテクニックをもう1つ紹介しよう。次のスクリプトを見てほしい。3行目で Frequency のように大文字から始まる名前の入力欄を作っている。こうすると、フォーム上はFrequencyと大文字で表示される。しかし、スクリプトの中の変数としては、Frequency ではなく、frequency と見なされる。と言うのも、Praatでは変数は必ず小文字から始まらないといけないという決まりがあり、大文字から始まる変数があると困るからである。

form Input frequency
  comment Please input the frequency of the wave.
  positive Frequency 1000
endform

do("Create Sound from formula...", "sineWave", 1, 0.0, 1.0, 44100, "sin(2*pi*frequency*x)")
do("Play")
do("Remove")
フォームを作る際のテクニック

このスクリプトの6行目の frequency を Frequency にするとどうなるか。実際に試してみよう。

なお、Praatのフォームの入力欄には、文字列を入れるための入力欄もある。数値を入力する際に使った positive などの代わりに、word などを用いれば簡単に文字列用の入力欄を作ることができる。文字列用の入力欄に関しても、1つの行に「入力欄の種類」、「入力欄の名前」、「入力欄のデフォルト値」の3つの要素を順番に書いていく。

文字列に関する「入力欄の種類」には次のようなものがある。

文字の入力欄があるスクリプトの例を1つ挙げよう。これは名前 (Given name) と名字 (Family name) を入力させて、それを表示するという単純なものである。

form Input your name
  word Given_name Taro
  word Family_name Yamada
endform

writeInfoLine("Your name is ", given_name$, " ", family_name$, ".")

フォームの作り方は、先に周波数の数値の入力欄を作ったときと全く同様だ。ただし、文字列の場合、入力した値を呼び出すには、「入力欄の名前」にドル記号をつけなくてはならない。実際、先ほどのスクリプトでは、writeInfoLine を使うときに、given_name$ のようにしている。これは、文字列変数であるため、末尾にドル記号をつける必要があるからだ。

波形を選べるようにする

先ほどのスクリプトでは、合成される音の波形は正弦波だった。今度は、正弦波以外の波形の音も合成できるようにスクリプトを書き直したい。

これから作るスクリプトの流れは次の通りになる。

  1. 合成する音の詳細を決めるためのフォームを提示する
    • 基本周波数を入力する欄
    • 音声の波形(正弦波、のこぎり波、三角波)を選ぶ欄
  2. フォームで指定した波形によって、数式を決定する
  3. 決定した数式に基づき、音声を合成する
  4. 音を流す
  5. 合成した音を消す

「音声の波形(正弦波、のこぎり波、三角波)を選ぶ欄」と「フォームで指定した波形によって、数式を決定する」という部分だけ今まで作ったことがないが、今までの知識を応用すればできる。

さて、まず「音声の波形(正弦波、のこぎり波、三角波)を選ぶ欄」を作るところから取りかかろう。フォームを作る場合、form を使うのだった。このフォームに載せる「基本周波数を入力する欄」も今まで作ってきたものが流用できる。とりあえず、今まで作ってきたものを以下に掲げよう。

form Input frequency
  comment Please input the frequency of the wave.
  positive Frequency_(Hz) 1000
endform

あとはこれに波形を選ぶ欄を加えるだけだ。Praatのフォームで選択欄を作るには、choice と button を使う。次のスクリプトの4行目から7行目を見てほしい。

form Input frequency and shape
  comment Please input the frequency of the wave and select the wave shape.
  positive Frequency_(Hz) 1000
  choice Wave_shape 1
    button Sine wave
    button Sawtooth wave
    button Triangle wave
endform

まず、choice を用いて選択欄の大枠を作る。choice の後に続く Wave_shape がこの選択欄の名前になる。その次の 1 はデフォルト値を表している。選択欄のデフォルト値については後で詳しく説明する。5行目から7行目では、button を使って、この選択欄の選択肢としてどういうものを設定するかを記述している。ここでは Sine wave (正弦波)、Sawtooth wave (のこぎり波)、Triangle wave (三角波)の3種類の選択肢を設定している [2]

choice を用いて選択欄を作る場合、その選択肢となっている button はインデントしておくと後で見やすくなる。

先ほどのスクリプトを実行してみよう。Input frequency and shape というタイトルのウィンドウが出るはずだ。このウィンドウには、上から順に、(1) Please input the frequency of the wave and select the wave shape.という説明、(2) 周波数を入力する欄、(3) 波形を選択する欄が表示されていると思う。波形を選択する欄には、その欄のラベルとして、Wave shape:という文言がある。この文言はスクリプトの4行目の choice の後の Wave_shape に対応する。Praatのフォームでは、「入力欄の種類」、「入力欄の名前」、「入力欄のデフォルト値」の順に記述するのであった。「入力欄の種類」が choice の場合でも同じである。positive の後に書いた Frequency_(Hz) がラベルとして登場したということを思い出してほしい。直後に書いたものがラベルになるというのは、choice も同様である。

さて、このWave shape:という選択欄には選択肢が3つある。上から順に、Sine wave, Sawtooth wave, Triangle waveという選択肢がある。スクリプトで記述した順番で並ぶのだ。このウィンドウが表示された時は、Sine waveがあらかじめ選択された状態になっている。あらかじめ何を選択するかは、choice のデフォルト値によって決まる。今のスクリプトでは、choice Wave_shape 1 と書いてあるので、ここの 1 がデフォルト値になるわけである。これは、何番目の選択肢かを示している。1番目の選択肢はSine waveだから、これがあらかじめ選択された状態で表示される。もしTriangle waveをあらかじめ選択しておきたければ、Triangle waveは3番目の選択肢なので、choice Wave_shape 3 とする。あらかじめ選択された状態にしたくなければ、choice Wave_shape 0 とするか、デフォルト値を書かずに単に choice Wave_shape とする。

ところで、フォームでユーザが選んだ選択肢の情報は、どこにどのように格納されるのだろうか。この情報は、choice の直後に書いた選択欄の名前と同じ変数に、選択肢の番号が格納される。先ほどのスクリプトの例で言えば、wave_shape という変数に選択肢の番号が格納される。もし、Triangle waveを選んだとすれば、これは3番目の選択肢なので、wave_shape に3という数値が格納される。次のスクリプトは、先ほどのスクリプトに、フォームで入力・選択したものを出力する命令を付け加えたものである。実行して、どう出力されるか確かめてみよう。

form Input frequency and shape
  comment Please input the frequency of the wave and select the wave shape.
  positive Frequency_(Hz) 1000
  choice Wave_shape 1
    button Sine wave
    button Sawtooth wave
    button Triangle wave
endform

writeInfoLine("Frequency: ", frequency)
appendInfoLine("Wave shape: ", wave_shape)

このスクリプトを実行し、フォームで値を変更せずにそのまま OK ボタンを押したとする。つまり、周波数の欄には1000が入力された状態で、波形はSine waveが選択された状態で OK ボタンを押したことになる。すると、Praat Info ウィンドウに次のように表示されるはずだ。

Frequency: 1000
Wave shape: 1

周波数の欄に入力した値が frequency という数値変数に、波形の欄で選んだ選択肢の番号が wave_shape という数値変数に格納されているのが分かるだろう。

このままでも大きな問題はないのだが、単に1と書いてあるだけでは、後から人間が見直したときにどの選択肢を選んだのか分かりにくくなる。今はフォームでの選択肢の順番を覚えているので、1番目がSine waveだということが分かるが、後から見直すときは、フォームでの選択肢の順番を忘れてしまっているかもしれない。だから、1のように単に選択肢の番号を書くのではなく、Sine waveのように選択肢の名前を表示することにする。こうすれば、人間にとって分かりやすくなる。

選択肢の番号の代わりに選択肢の名前を表示するように書き換えたのが次のスクリプトである。先ほどのスクリプトと違うのは、最後の行だ。先ほどのスクリプトで wave_shape と書いたのをこのスクリプトでは wave_shape$ とした。変数名の最後にドル記号を加えただけである。

form Input frequency and shape
  comment Please input the frequency of the wave and select the wave shape.
  positive Frequency_(Hz) 1000
  choice Wave_shape 1
    button Sine wave
    button Sawtooth wave
    button Triangle wave
endform

writeInfoLine("Frequency: ", frequency)
appendInfoLine("Wave shape: ", wave_shape$)

このスクリプトを実行し、先ほどと同じように、フォームで値を変更せずにそのまま OK ボタンを押したとする。すると、Praat Info ウィンドウに次のように表示されるはずだ。

Frequency: 1000
Wave shape: Sine wave

つまり、choice Wave_shape 1 と選択欄を記述した場合、数値変数 wave_shape には選んだ選択肢の番号が、文字列変数 wave_shape$ には選んだ選択肢の名前が格納される。Praatのスクリプトでは、通常、名前が同じであっても、数値変数と文字列変数は全くの別物として扱われる。例えば、数値変数 hoge と文字列変数 hoge$ は全く無関係である。choice を使ったときのみ、このような特別なふるまいを見せる。

どの選択肢を選んだかという情報を扱う際は、数値を使った方がよいのだろうか。それとも文字列を使った方がよいのだろうか。それは場合による。数値を使った方がよいときもあるし、文字列を使った方がよい場合もある。とはいえ、何も基準がないとどちらを使えばよいか悩むだろう。慣れないうちは次のような基準に従えばよい。まず、基本的には数値を使って処理する。ただし、writeInfoLine などを使って人間に見せる場合には、文字列を使う。そうすれば、大概うまくいく。

次の目標は、フォームで選んだ波形によって、数式を決定することである。ここまでの内容が理解できれば、さほど難しいことではない。次のスクリプトを見てほしい。

form Input frequency and shape
  comment Please input the frequency of the wave and select the wave shape.
  positive Frequency_(Hz) 1000
  choice Wave_shape 1
    button Sine wave
    button Sawtooth wave
    button Triangle wave
endform

<p># Set formula</p>
<p># Sine wave</p>
if wave_shape = 1
  formula$ = "sin(2*pi*" + string$(frequency) + "*x)"
<p># Sawtooth wave</p>
elsif wave_shape = 2
  formula$ = string$(frequency) + "*x-floor(" + string$(frequency) + "*x)"
<p># Triangle wave</p>
elsif wave_shape = 3
  formula$ = "2*(abs(" + string$(frequency) + "*x-floor(" + string$(frequency) + "*x+0.5)))-1"
endif

writeInfoLine(formula$)

このスクリプトを実行すると、フォームで指定した周波数と波形に基づく音がどんな数式となるのかが表示される。このスクリプトの1行目から8行目は、フォームに関する記述である。

また、10行目から20行目で、波形に合った数式を指定している。フォームで何番目の波形を選んだかについては、数値変数 wave_shape に格納されている。10行目から20行目の記述では、3つの選択肢それぞれについて数式を個別に指定している。1番目の選択肢、つまりSine waveを選んだ場合、wave_shape の値は1となるから、12行目の if の条件に合致し、13行目で formula$ に正弦波の数式が代入される。同様に、2番目の選択肢、つまりSawtooth waveを選んだ場合、wave_shape の値が2となって、15行目の elsif の条件に合致し、16行目で formula$ にのこぎり波の数式が代入される。3番目の選択肢、つまりTriangle waveを選んだ場合も同様で、wave_shape の値が3となって、18行目の elsif の条件に合致し、19行目で formula$ にのこぎり波の数式が代入される。

あとは、こうして得られた数式をもとに音を合成するだけである。次のスクリプトが完成版となる。

form Input frequency and shape
  comment Please input the frequency of the wave and select the wave shape.
  positive Frequency_(Hz) 1000
  choice Wave_shape 1
    button Sine wave
    button Sawtooth wave
    button Triangle wave
endform

<p># Set formula</p>
<p># Sine wave</p>
if wave_shape = 1
  formula$ = "sin(2*pi*" + string$(frequency) + "*x)"
<p># Sawtooth wave</p>
elsif wave_shape = 2
  formula$ = string$(frequency) + "*x-floor(" + string$(frequency) + "*x)"
<p># Triangle wave</p>
elsif wave_shape = 3
  formula$ = "2*(abs(" + string$(frequency) + "*x-floor(" + string$(frequency) + "*x+0.5)))-1"
endif

do("Create Sound from formula...", "sound", 1, 0.0, 1.0, 44100, formula$)
do("Play")
do("Remove")
この回で扱った内容を復習しよう
  1. Praatのスクリプトで、フォームの個々の入力欄を描写するとき、通常は3つの要素が必要とされる。それらは何か。どんな順番で書くか。
  2. 次の条件にあったフォームを作るスクリプトを書け。
    • Please tell me about you.(あなたについて教えてください)という説明を表示する。
    • 名前(Name)を入れる欄を作る。
    • 性別(Sex)を男(male)と女(female)から選択する欄を作る。
    • 年齢(Age)を入れる欄を作る。

本入門講座の続きは「Praatスクリプト入門(6):実験画面を作る」というページをご覧いただきたい。

脚注
  1. frequency と 1000 の間の空白は、要素と要素を区切る空白ではない。フォームの入力欄は3つの要素からなるわけだから、要素と要素を区切る空白は2つあれば足りる。残りの空白は最後の要素、すなわち「入力欄のデフォルト値」の一部と見なされる。 []
  2. 先ほどのスクリプトを見て、button Sine wave は button Sine_wave にすべきだと思った人がいるかもしれない。結論から先に言うと、空白をアンダーバーに置き換える必要はない。positive のような普通の入力欄は、3つの要素からなる。これに対して、button は2つの要素のみからなる。1つは「入力欄の種類」に相当する部分で、もう1つは「入力欄の名前」に相当する部分である。button Sine wave で言うと、button が「入力欄の種類」に相当する部分で、Sine wave が「入力欄の名前」に相当する部分だ。この2つの要素を区切っているのは、button と Sine の間の空白である。これ以外の空白、すなわち Sine と wave の間の空白は単なる空白で、要素を区切る役割は果たさない。前に空白をアンダーバーに置き換えたのは、空白ならば要素を区切る空白であると誤解される場所にあったからである。ここでは誤解されないので空白のままでかまわない。 []