聴覚心理実験プログラム例集

トップページ  プログラム  ヒント  一からのプログラム作成  Q&A  お問い合わせ 

一からのプログラム作成

M-1. はじめに
 このページはプログラミング (Visual Basic) 初心者の人のために、実験プログラムの作成を一から解説するページです。Visual Basicプログラミングについて簡単な解説をした後、実際の実験プログラムを一緒に作成します。しかし,一口に初心者といってもやる気は人それぞれだと思います。プログラミングのようなことが好きになれず,でも研究のためにはやらなければならなくて,でも勉強に長い時間は割きたくない (長い解説書は読みたくない),という人もいると思います。プログラミングそれ自体は研究にとって本質的なものではありませんので,その気持ちはわかります。そのような人でも,手短に実験用プログラムの作成ができるようになるように書いたつもりです (ただし,さすがに解説書いらずとまではいかないでしょう)。そのため,例えば「オブジェクト指向」のような難しい専門用語は一切使っていません。また,あえてその場しのぎの理解を促している部分もあります。プログラミング上級者は読んでいて苛々するかもしれません。プログラミングを真面目に勉強しようとする人にお勧めできるページではないと思います。以上を踏まえて読んでください。Visual Basicの解説書を既に読んだ人はM-4から読んでも構いません。


一番上に戻る

M-2 コントロール
 Visual Basicによるプログラミングの極意のようなものを解説することはできません。しかし,実験用プログラムの作成という目的に限っていえば,これさえ押さえておけばなんとかなるという事柄はあると思います。それは,コントロールを中心にしてプログラムの構成を考えればいいということです。コントロールとは,ボタンやトラックバーのようにフォーム (ウインドウ) 内に配置される道具,装置のようなもののことです。フォームもコントロールのひとつです。例えば、ボタンはクリックされることにより音を鳴らします。この例をプログラム風に書くと,

ボタンは押されたとき,以下の行動を行う
  音を鳴らす
以上
となります。実際のプログラムは,
Private Sub Button1_Click…
    PlaySound(…
End Sub
となります。「…」は省略部分です。プログラミングも物語を書くことも大して変わらないことに気づかれたかもしれません。 コントロールは物語でいうと登場人物にあたるのかもしれません。しかし,普通の登場人物と異なり彼らはとても消極的な存在です。自発的に行動することはありません。クリックされたときとか,動かされたときとか,「〜されたとき」にしか行動しません。したがって,「このコントロールは〜されたとき,〜を行う」という文が基本の形となります。そして,それがたくさん集まることにより実験プログラムができると思ってください。
 コントロールにはさまざまな種類がありますが,その全てを覚える必要はありません。実験用プログラムに使うコントロールの数は限られているので主なものを紹介しておきます。

・ボタン
 実験プログラムにおいてもっとも使用頻度の高いコントロールでしょう。コントロールは押される (クリックされる) ことで行動を起こします。刺激音の呈示、次の試行に進む,などあらゆる場面で必要とされるでしょう。

・フォーム
 見落とされやすいのが、ボタンやトラックバーといったコントロールが乗るフォーム(ウインドウ)も重要なコントロールであるということです。フォームは、自分が画面に表示されることで,行動を起こします。

・タイマー
 タイマーは他のコントロールと少し変わったところがあります。まず,画面に表示されません。そして,何かされるというよりかは,決められた時間が過ぎるごとに行動を起こします。名前が災いして時間計測のための道具だと思われがちですが、少し違います。タイマー自体は時計ではありません。アラームが鳴ったら行動を起こすような人物であると思っておいた方がよいでしょう。

 他にもトラックバーなど,便利なコントロールはまだありますが,それらについては,本サイト「プログラム」で入手できる各プログラムの説明において紹介します。
 行動はめったに起こさないものの、表示をしたり、値を入力したりすることができるコントロールも忘れてはいけません。「ラベル」は試行数を表示するため,教示を与えるためなど、様々な場面で活用することができます。「テキストボックス」は実験参加者名といった情報を入力するために使うことができます。以上,これらのコントロールがあれば,実験プログラムを作ることができます。


一番上に戻る

M-3 コントロールの行動を指定する
 コントロールについて説明をしてきましたが、彼らの行動を指定するためにはVisual Basicにおける語法と文法を覚えなければなりません。特に、いくつかの関数と構文についての書き方とその働きを覚える必要があります。ここでいう関数とは、皆さんが習ってきた数学におけるそれとは少し異なった意味合いを持っています。三角関数や対数関数といったものに限らず,ある一連の計算や処理をパックにして含んでいるようなものだと考えてください。関数の名前をいうことにより、コントロールはその関数の中で指定された計算や処理を行います。
 構文は、「何々のとき、云々する」といったような分岐文を書くときに用います。例えば、If構文であれば、「もし何々であれば、云々する」といったことが指定できます。様々な構文を使うことにより、コントロールの行動の幅は広がるでしょう。全部を覚える必要はありません。実験のためなら、覚えておくのはIf構文、Select構文、For構文,そしてLoop (While) 構文で十分だと思います。
 個々の関数と構文については、概説を行うよりも実践のなかで説明した方が覚えやすいと思いますのでそうします。また、関数と構文を「覚える必要がある」と書きましたが重く受け止める必要はありません。関数や構文の名前だけ覚えておいて、もしくは,こんなのがあったなということだけ覚えておいて、使うときに解説本を参照して思い出すようにするので十分だと思います(実際、私はそうしています)。


一番上に戻る

M-4 実験を計画する
 ここではマグニチュード推定法を用いて音の大きさの尺度構成を行う実験を計画します。本ページの第一目的はプログラミング入門ですから、実験の質はあまり問いません。本格的に実験を行うときには計画全体をよく練り直してください。完成済みのプログラム (Magnitude) が本サイト「プログラム」からダウンロードできますので,行き詰ったら参照してください。
 実験ではレベルを-15 dBから+15 dBまで5 dB刻みで変化させた1000 Hzの純音バーストが呈示されます。純音バーストの持続時間は500 msで、20 msのコサイン曲線形状の立ち上がり,立ち下がり包絡が付加されます。刺激音が始まってから次の刺激音が始まるまでの時間間隔は8000 msです。聴取者には呈示された音の大きさを数字で言い表してもらいます。聴いて感じた通りの数字を用いるようにして,物理量は推定しないようにお願いします。数値には分数や小数を用いても構いませんが、0は使わないようにお願いします。
 刺激音が7つありますので,本試行は全部で7つあります。最初に2試行のウォーミングアップを加えます。ウォーミングアップの刺激音には本試行の最後2試行で呈示される刺激音を用います。
 それではプログラミングを始めます。しかし、まだVisual Basicを立ち上げる段階ではありません。最初にプログラムの構成を考えなければなりません。これから作成するプログラムに、何を、どのような順序でさせるのか、を考えなければなりません。なかなか計画通りにはいきませんが,最初に大まかな全体像を考えておくことで後の進みは違うはずです。このような作業を難しいと思う人がいるかもしれませんが、できるようになるしかありません。以下のようなことを頭で考えさえすればいいのです。
 さて、実験を行うにあたって,プログラムは何をすればいいのでしょうか。こういうことを考える際,コンピューターを使わずに実験者が実験を進める場合を考えたほうがわかりやすいかもしれません。教示を終えた後、聴取者が実験室に入ってきました。まず,「日付と実験の開始時間と聴取者の名前を記録」します。次に,刺激音を呈示すると言いたいところですが、それはまだです。「刺激音の呈示順を無作為化」をする必要があります。「聴取者の合図」を聴いたら,「刺激音を呈示」します。その刺激音に対する「聴取者の回答を記録」します。刺激音は一定の時間間隔で呈示しますので「時間を計測」する必要があります。全ての刺激音を呈示し終えたら実験を終了して「終了時間を記録」します。(文章で書くほどに私の考えが最初からまとまっていたわけではありません。プログラミングしながら方針転換したという事実もあります。しかし,この作業に30分ほど割いても損はないでしょう。)
 ここまでに挙げた実験ですべきことを順番に列挙すると以下のようになります。

1.日付や実験参加者の名前などの記録
2.刺激音の呈示順を無作為化
3.聴取者の合図
4.刺激音を呈示 (一定の時間ごとに) 
5.聴取者の回答を記録
6.終了時間を記録
 今から、これらの項目がコンピューターおよびVisual Basicで実行可能かどうかを検証してみます。プロではないので,人間にもできない特別な行動をコンピューターにさせるような難しいプログラミングは断固として避けます。
 1はテキストボックスとボタンを用いることでできそうです。2は難しそうなので保留しておきます。3はボタンを使えば可能そうです。4は難しそうですがこれができないとどうしようもありません。また,4は一定時間ごとに行う必要がありますので,これはタイマーに任せましょう。5は保留します。6は1ができればなんとかなるでしょう。
 5については古典的ですが、聴取者の回答を実験者が後ろで聴いて紙に記録するようにします。テキストボックスとボタンを用いることで回答を記録することができそうですが,やめたほうがよさそうです。テキストボックスへの入力よる回答方法にすると,聴取者が感じた数字をテンキーで答えることになります。実際にやってみればわかりますが、テンキー操作にすると桁の多い数を入力するのが面倒で1から9までの数で答えたくなります。より手間の少ない口頭で答えてもらうという方法が一番よさそうです。
 2もコンピュータ上で行うのを今回はあきらめましょう。刺激音の番号を書いたカードを手でシャッフルして決めた順番を直接入力するようにしましょう。あきらめきれない人は、本サイトの「ヒント」の「刺激呈示順序の無作為化」において無作為化の方法を説明しましていますので参照してください。
 だんだんと輪郭が見え始めてきました。プログラムは以下のような構成でどうでしょうか。まず、聴取者の名前を入力する画面が表示されます。そのときに、刺激音の呈示順も入力できるようにしておきます。聴取者からの合図があったら実験開始ボタンを押します。すると、一定の時間間隔で刺激音が呈示されます。すべての刺激音を呈示し終えたら、終了時間を記録し,実験を終了します。(実験参加者にはコンピュータ画面の見えない位置に座っていてもらったほうがよいでしょう。)


一番上に戻る

M-5 プログラミング1 −コントロールを配置する−
 それではVisual Basicを立ち上げましょう。.NET以降のバージョンを用いるようにしてください。起動したら新しいプロジェクトを作成します (名前は任意ですが,特に希望がなければ“Magnitude”とつけてください)。コントロールを追加する前に作業をひとつ行う必要があります。本サイト「プログラム」のページから「MDHNETb.vb」を入手して、モジュールとしてこのプロジェクトに追加する必要があります。「メニューバー」の「プロジェクト」から「既存項目の追加」を選んでダウンロードしたファイルを選びます。ソリューションエクスプローラウインドウにモジュールが加えられているのがわかると思います。この「MDHNETb.vb」は音ファイル合成に必要な関数が詰まっています。手を加えないようにしてください。
 現在の画面をフォームデザイナと呼びます。以下のコントロールの配置に関しては図1を参照してください。最初にForm1が置かれていますので、これを実験参加者情報の入力画面にしましょう。わかりやすくするためにForm1の名前を変えましょう。画面右下にプロパティウインドウがあると思います。プロパティとはコントロールの属性のことで,これを変えることにより,コントロールの名前や表示する文字を変えることができます。ウインドウ内の“Name”を“Form1”から“EntryForm”に変えます。“Text”に“Entry”と入力します。以下から,このようなプロパティの変更に関わる作業を略記します。今の例でいうと,以下のようになります。プロパティ: Name>EntryForm; Text>Entry。
 ツールボックスからテキストボックスを選び,ドラッグ&ドロップしてフォームの上部に貼り付けます。プロパティ: Name>NameText; Text>実験参加者。
 その下に,刺激音ファイルを作成するためのボタンを作ります。プロパティ: Name>StmButton; Text>刺激音合成。  その下に,テキストボックスを7つ並べます。プロパティ: Name> (上から順に) Trl1StmText, Trl2StmText, …Trl7StmText。それぞれの左隣に本試行の「1」から「7」までを表示したラベルを貼り付けます。プロパティ: Name>Trial1Label, Trial2Label, …Trial7Label; Text> 1, 2, …7。わかりやすいようにそれらの一番上に「本試行」と「刺激番号」を表示したラベルを貼り付けます。前者のプロパティ: Name>TrialLabel; Text>本試行。後者のプロパティ: Name>StmLabel; Text>刺激番号。
 どの刺激音が各試行で呈示されるかをテキストボックスに入力することにより設定します。刺激音は全部で7つありますので、それぞれを0から6までの番号で呼びます。実験を行う際には0から6まで書いたカードをシャッフルして、その順番に従ってテキストボックスに上から順に番号を入力していきます。カードの順番が2、5、0、6、3、1、4となっていたら、本試行1には2、本試行2には5、本試行3には0…と入力していきます。(どうして0から始まるのかは後でわかります。)
 フォームの下のほうにボタンを置きましょう。これが実験開始ボタンとなります。プロパティ: Name>ExpButton; Text>実験開始。片隅にもうひとつボタンを置きましょう。これはプログラムを終了するためのボタンです。プロパティ: Name>ExitButton; Text>終了。
 最後にタイマーを置きます。フォームデザイナの適当な部分にドラッグ&ドロップしてください。下のほうに別枠が作られて,そこに置かれます。プロパティ: Name>PrstTimer; Enabled>False (タイマーは一切動かない); Interva>8000 (8000 msごとに指定された動作を行う)。

図1 (新しいウインドウ、タブが開きます)


一番上に戻る

M-6 プログラミング2 −変数の定義−
 刺激音合成をダブルクリックしてみてください。別の画面に移ります。ここに,プログラムコードを入力していきます。図2から図6に実際の画面におけるプログラムコードの様子を載せましたので参照してください。
 刺激音合成の中身を書く前に,その上に書かないといけないことがあります。図2のようになるように以下のコードを書いてください。

Public Stimulus(6) As Integer
Public StmNum As Integer
Public Trial As Integer
Public ExpTrial As Integer
Public FileNum As Integer
Public SoundFile As String
 ここでは刺激番号や試行数を代入する変数を定義しています。Public X as Yとは,Y型変数Xを定義しますという意味です。Visual Basicでは変数を使う前に,その変数が何者であるかを告げなければなりません。Integerとは4バイト整数型です。詳しくは解説本を読んでください。今のところは整数の一種だと思ってください。StmNumからFileNumまでの変数は全てInteger型の変数であると定義されました。StmNumは刺激番号を返す (代入する) 変数,Trialは試行数を返す変数,ExpTrialは本試行数を返す変数,FileNumはファイル番号を返す変数 (後で詳しく説明します) です。
 Stimulus(6)はInteger型であるといえばそうですが,変数とは少し違います。動的配列と呼ばれるもので,M-8で詳しく説明します。SoundFileには音ファイルの名前が返されます。Stringとは文字列型であることを意味します。要するに,変数に代入されるのは文字列です。

図2 (新しいウインドウ、タブが開きます)


一番上に戻る

M-7 VBプログラミング3 -刺激音の作成-
 実験を始める前に、刺激音を作成しておきましょう。プログラムで刺激音を合成するためには相当な知識を必要としますから、ここではMDHNETbにある関数を利用します。Private Sub StmButton_Click…からEnd Subまでの間に以下のように記述してください(これまでに書いたコードの後に続けてください)。詳しい説明は本サイト「プログラム」にある「MDHNETbの説明」に委ねます。今は,実験に使う7つの刺激音のWAVファイルがCドライブに作成されるということだけ知っておいてください。

directory = "c:\"

Dim g As Short()
g = gap(2.0)

dur = 0.5
lag = 0.0
offtime = 0.0
rtime = 0.02
ftime = 0.02
iph = 0
ifreq = 1000

ilevel = -15
Dim a As Short()
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "0.wav"
savemn(a)

ilevel = -10
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "1.wav"
savemn(a)

ilevel = -5
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "2.wav"
savemn(a)

ilevel = 0
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "3.wav"
savemn(a)

ilevel = 5
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "4.wav"
savemn(a)

ilevel = 10
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "5.wav"
savemn(a)

ilevel = 15
a = tone()
a = connect(g, a)
a = connect(a, g)
filename = "6.wav"
savemn(a)

dur = 2.0
ilevel = 0
a = tone()
filename = "calib.wav"
savemn(a)

MsgBox("音ファイルを‘" & directory & "’に保存しました。")
 Cドライブの中に,刺激音とは別に,calib.wavという音ファイルが作られています。これには基準レベルの純音が入っていますので,刺激音のレベルを測定するときに使ってください。

図3 (新しいウインドウ、タブが開きます)


一番上に戻る

M-8 プログラミング4 −動的配列,刺激音の呈示順−
 先ほど、ラベルとテキストボックスを配置して,各試行で呈示する刺激音を決めることができるようにしたはずです。しかし、現段階では、テキストボックスに数字を入力しても、プログラムはそのことを理解できるわけではありません。実験開始ボタンをクリックしたら,各試行で呈示する刺激の番号を読み込むようにプログラミングする必要があります。
 フォームデザイナの実験開始ボタンをダブルクリックし,表示された部分にコードを記入します。
まず,

Me.Enabled = False
と記入します。これにより,フォームは一切の入力を受け付けなくなります。実験中に誤操作しておかしなことになってしまうということを防ぐことができます。
 「1試行目に呈示される刺激音の番号はTrl1StmTextに入力された番号である」という文章をVisual Basic用に作ってみたいと思います。このために,動的配列というものを学ばなければなりません。
 Stimulus(6)のように,変数の後に () がついたものは動的配列と呼ばれます。動的配列とは,同じ範疇に属する変数の集合体を表したようなものです。例えていうと,学校のクラスのようなものです。3年B組というクラスがあったとします。クラスには数十人の学生がいて,出席番号が振られています。出席番号1は伊藤君,2は加藤君というようになっています。3年B組出席番号1番は伊藤君という文を動的配列を用いた式で表すと以下のようになります。
3年B組(1) = 伊藤君
括弧内には出席番号が入ります。出席番号2なら,
3年B組(2) = 加藤君
となります。つまり,動的配列には複数の値 (例でいう名前) が含まれており,各値に数字のインデックス (出席番号) がついているのです (インデックスという語法が正しいかどうかわかりませんが,とりあえずここではそう呼びます)。ただし,気をつけなければならないのは,動的配列のインデックスは0から始まるということです。出席番号が0から始まるとクラスの管理が難しくなるはずです。なぜならば,出席番号の末尾が30だったとして,そのクラスには31人いることになるからです。以下の話も同じようにややこしくなります。
 Stimulus() の括弧内には試行数が入ります。入力された試行数において,どの刺激番号が呈示されるかが返されます。括弧内は0から始まるので,試行数は1引いて考えなければなりません。したがって,1試行目で呈示される刺激番号を返すには,
Stimulus(0) = Trl1StmText.Text
と書くことでできます。各部分が何を言っているかということを表すと、
Stimulus(0)                             =  Trl1StmText  .  Text
「1試行目 (0) に呈示される刺激音の番号 は Trl1StmText  に 入力された番号である」
となります。なお,本来なら,
Stimulus(0) = Val(Trl1StmText.Text)
もしくは,
Stimulus(0) = CInt(Trl1StmText.Text)
と書くのが正式です。文字列型を整数型に変換する必要があるからです。しかし,このような変換はVisual Basicでは自動に行ってくれるますし,今重要なのはとりあえず実験プログラムを作ることができるようになることですので,ここでは無精をします。
 2試行目、3試行目…に呈示される刺激音については,ほぼ同様です。以下に書いておきます。
 
Stimulus(1) = Trl2StmText.Text
Stimulus(2) = Trl3StmText.Text
Stimulus(3) = Trl4StmText.Text
Stimulus(4) = Trl5StmText.Text
Stimulus(5) = Trl6StmText.Text
Stimulus(6) = Trl7StmText.Text
 動的配列のインデックスを0を無視して1から始めるという方法も考えられます。ただし,毎回その手が通用するわけではないので,0から始まるのになれておく必要もあります。刺激音の番号を0から始めているのもこれに対応させるためです。ここで紹介した方法が最上とはいえないでしょう。自分なりのやりかたを考えてみてください。なお,動的配列を定義するためには最大のインデックスの数を括弧内に入力しておく必要があります。今回,本試行は7つなので,Public Stimulus(6) As Integer となります。

図4 (新しいウインドウ、タブが開きます)


一番上に戻る

M-9 プログラミング5 −ファイル作成−
 刺激音を呈示する前に、聴取者情報と実験の開始時間をファイルに書き出しておきましょう。まずファイルを作成します。

FileNum = FreeFile()
FileOpen(FileNum, "c:\" & NameText.Text & ".csv", OpenMode.Append)
と書くことで、Cドライブに聴取者の名前のついたCSVファイルを作成します。CSVファイルとは、テキストファイルの変種みたいなもので、表計算ソフトで扱うことができます。カンマで区切られた項目が一つのセルに収まります。FileOpenでファイルを作成する場合,そのファイルに数字であだ名をつけなければなりません。例えば1と名づけてもいいのですが,プログラムの実行中において使用することのできる数字は限られています。そこで,FreeFile()という関数を使うことで,現在余っている数字のひとつを取り出すことができます。それをFileNumに返し,それをあだ名にしています。FileOpen括弧内の最初は,このようなあだ名番号を入力する場所です。カンマで区切ったら,次にファイル名を入力します。"c:\"とはファイルを作成する階層「Cドライブ」を表します。&は文字列をつなげるために用いられ,ここではテキストボックス内に入力された聴取者名とつなげます。そして最後に拡張子の「.csv」とつなげます。これで,「Cドライブ」に「実験参加者名.csv」というファイルが作られます。もし,実験参加者の名前が“kuroda”だったら,ファイル名は"c:\kuroda.csv"となります。
 次に
WriteLine(FileNum, "実験参加者", NameText.Text)
とすることで,先ほどFileNumと名づけたCSVファイルの最初の行の最初のセルに「実験参加者」という文字列を書き込みます。そして隣のセルに実験参加者名を書き込みます。そして改行します。
 次に,
WriteLine(FileNum, "実験開始", FormatDateTime(Now))
と書くことで、実験開始という文字と現在時刻がファイルの中に書き込みます。FormatDateTime…は現在時刻を呼び出す関数です。ファイルの作成の仕方や時刻の書き方にはさまざまな方法があります。これらのことについては、解説本を読んでください。
 最後に,
Trial = 1
ExpTrial = 1
と,試行数と本試行数初期値を返し,
PrstTimer.Enabled = True
とすることでタイマーが動き出します。

図5 (新しいウインドウ、タブが開きます)


一番上に戻る

M-10 プログラミング6 −刺激音呈示−
 フォームデザイナのPrstTimerをダブルクリックしてください。以下からはこの中にコードを入力していきます。音は、一定の時間間隔 (8000 ms) で呈示します。音の再生は

PlaySound(ファイル名, Nothing, SndFlag)
と書くことでできます (この関数を使用するために本来は色々な変数の宣言が必要ですが,それらはMDHNETbの中で行っています)。
 しかし,音を呈示する前に,試行ごとに再生する音ファイルを指定しなければなりません。ここではSelect構文を用いましょう。Select構文の基本的な形は以下の通りになります。
Select X
 Case 1
      行動1
  Case  2 to 4
      行動2
End Select
 これでXが1のときには行動1を行い,Xが2から4のときには行動2を行います。今回は,このXは試行数となります。以下のように書きます。
Select Case Trial
  Case 1
     StmNum = Stimulus(5)
  Case 2
     StmNum = Stimulus(6)
  Case 3 To 9
    StmNum = Stimulus(ExpTrial - 1)
  Case 10
    WriteLine(FileNum, "終了", FormatDateTime(Now))
    FileClose(FileNum)
    PrstTimer.Enabled = False
    MsgBox("実験が終わりました。")
    Me.Enabled = True
    Exit Sub
End Select
ウォーミングアップ試行,本試行があるので少しややこしいかもしれません。下にそれらの試行と呈示される刺激との関係を示しておきます。
試行数	行われる試行	        刺激番号
1	ウォーミングアップ1	Stimulus(5)
2	ウォーミングアップ2	Stimulus(6)
3	本試行1	                Stimulus(0)
4	本試行2	                Stimulus(1)
5	本試行3	                Stimulus(2)
6	本試行4	                Stimulus(3)
7	本試行5	                Stimulus(4)
8	本試行6	                Stimulus(5)
9	本試行7	                Stimulus(6)
   やはり,動的配列が0から始まることが話をさらにややこしくしています。ウォーミングアップ試行では本試行の最後2試行で呈示される刺激が呈示されます。したがってウォーミングアップ1試行目ではStimulus(5)が,ウォーミングアップ2試行目ではStimulus(6)が呈示されます。
 3試行目から9試行目では,Stimulus(ExpTrial - 1)が呈示されます。カッコ内がマイナス1になっているのは,動的配列が0から始まるのに対して,本試行数が1から始まるからです。10試行目で呈示する刺激はありませんので,時刻を記録して実験を終了します。
 Me.Enabled = Trueでフォームが入力可状態になります。Exit Subとは,Private Sub ExpButton_Click…からEnd Subまでの区間から強制的に抜け出すということです。結果的に,タイマーの行動から離れ,実験が終了します。
 以上のSelect構文で試行ごとに行う行動の場合分けができました。この後,Cドライブにある音ファイルを指定して,そのファイルを再生するようにコードを続けます。
SoundFile = "c:\" & CStr(StmNum) & ".wav"
PlaySound(SoundFile, Nothing, SndFlag)
 この後に,呈示した刺激音を記録します。
WriteLine(FileNum, Trial, StmNum) 
WriteLineは実行するたびに行を変えますので,ファイルを表計算ソフトで開くと試行数と刺激音とがそれぞれ同じカラムに並んでいることがわかります。
 刺激音の呈示が終わったので,試行を次に進めます。
Select Case Trial
   Case 1 To 2
   Case 3 To 9
       ExpTrial += 1
End Select

Trial += 1
ウォーミングアップを行っている間は試行数を増やすだけです。本試行に入ったら,本試行の数をひとつ増やして試行数もひとつ増やします。
 終了ボタンもあったほうが親切です。フォームデザイナの終了ボタンをダブルクリックしてください。フォームを閉じるのは,
Me.Close()
と記入することでできます。

図6 (新しいウインドウ、タブが開きます)


一番上に戻る

M-11 動かしてみる −デバッグとビルド−
 これでプログラムが動くはずです。まず,デバッグをしてみましょう。デバッグとは簡単にいうとプログラムを動かしながら,正しく動くかどうかチェックすることです。デバッグはメニューバー側にあるプレイボタンを押すことで始まります。デバッグといっても,実際は,普通にプログラムを動かすのと変わりありません。しかし,実行上不都合があればプログラムを停止してその部分を表示します。
 問題がないようでしたら,ビルドします。ビルドすると,実行ファイルが作成されます。.NET Framework環境があればどのパソコンでもそのファイルだけでプログラムを動かすことができるようになります。メニューバーの「ビルド」の「Magnitudeのビルド」をクリックします。現在使用しているプロジェクトファイルがあるフォルダと同じ場所 (Visual Basic 2005ならば,マイドキュメントのVisual Studio 2005内のProjects内のMagnitudeフォルダ内のMagnitudeフォルダ内) にobjフォルダがあるはずです。この中のReleaseフォルダの中のMagnitude.exeが実行ファイルになります。これさえあれば,実験が可能になります。


一番上に戻る



(c) Tsuyoshi Kuroda 2010 All Rights Reserved.