情報処理-
VB
1. Visual Basic の起動
まず、「
Microsoft Visual Studio.Net 2003」を立ち上げてください。また、「新し
いプロジェクト」を選んで、たとえば、「リズム」というプロジェクトを作ってくだ
さい。
次に、「ファイル」メニューから、「既存項目の追加」を選び、フォルダを1つ上
がって「メトロノーム」(あるいは、前回つけた名前)を選んで開き、「
Form1.vb」
(あるいは、前回つけた名前)を開けてください。「
Form1.vb」のままで開いている
人は、たぶん、
3 回何か聞かれますが、すべて「はい」と答えてください。これで、こ
の間作ったものを「リズム」プロジェクトにコピーできました。今日は、これを変更
してリズムを付けます。
前回違う名前を付けて保存した人は、「ソリューションエクスプローラ」
(無ければ、表示メニューから選んで表示させてください)に、
Form1.vb と
「自分の付けた名前
.vb」の 2 つが開いていると思います。「プロジェクト」
メニューから、一番下の「何とかのプロパティ」を選び、左側、「共通プロ
パティ」の「→全般」で、右側の「スタートアップの設定」に「自分の付け
た名前」を指定してください。その後、「ソリューションエクスプローラ」
の
Form1.vb を右クリックして削除してください。
2. フォームに TextBox2 をつける
「表示」メニューから「ツールボックス」を選び、出てきた中から、
を
クリックして、フォームをクリックし、
TextBox2 を作ります。プロパティの Text を
「
1110」にします。1 は音が出る時、0 は音が出ない時を表して、リズムを作ります。
これなら、「♪♪♪ 」というリズムです。
3. コードを変える(全体で使う変数の定義)
「表示」メニューから「コード」を選んで、プログラムコードを表示させてくださ
い。これをちょっと変えます。まず、最初の方、「
Windows フォームデザイナで生成
されたコード」と薄い色で書いてある行と、
Private Sub Button1_Click(...) と書い
てある行の間に、
Dim nlen As Integer
Dim i As Integer
ムに書いてあるすべてのプログラムで共通なものになります。あるプログラムで
nlen
に
3 を入れると、その後ほかのプログラムで参照したときにも 3 の値を保持しています。
また、
ibeep のあとに(50)とついているのは、ibeep を ibeep(0), ibeep(1), ibeep(2), ...,
ibeep(50) という配列で定義しているという意味です。まとめておくと便利なものを格
納するのが配列です。後の使い方を見てください。
4. コードを変える(実際に動くところ)
全体のコードは、以下のようになっています。変える所は少しですので、がんばっ
て変えてみてください。
Dim nlen As Integer Dim i As Integer
Dim ibeep(50) As Integer
Private Sub Button1_Click(...) End
End Sub
Private Sub TextBox1_TextChanged(...) Dim memori As Integer
memori = Val(TextBox1.Text) If memori > 0 Then
Timer1.Interval = 60000 / memori
memori = Math.Min(memori, TrackBar1.Maximum) memori = Math.Max(memori, TrackBar1.Minimum) TrackBar1.Value = memori
End If End Sub
Private Sub Timer1_Elapsed(...)
i = (i Mod nlen) + 1
If ibeep(i) = 1 Then
Beep()
End If
End Sub
Private Sub Button2_Click(...)
Dim j As Integer ←ここに入れる(③)
② ここを変える
If Timer1.Enabled = True Then Timer1.Enabled = False Button2.Text = "Start" Else Timer1.Enabled = True Button2.Text = "Stop" i = 0 nlen = Len(TextBox2.Text) For j = 1 To nlen ibeep(j) = Val(Mid(TextBox2.Text, j, 1)) Next j End If End Sub
Private Sub TrackBar1_Scroll(...)
TextBox1.Text = TrackBar1.Value End Sub
説明: ④では、スタートするときに、
i にゼロを代入
nlen に Textbox2 に入っている文字の数(「1110」なら 4)を代入
ibeep(j)に Textbox2 に入っている文字列の、j 番目の文字の値を代入
(「
1110」なら、ibeep(1)=1、ibeep(2)=1、ibeep(3)=1、ibeep(4)=0)
します。
②では、
Timer1 が合図を出すごとに、
i に i を nlen で割ったときの余りに 1 を足したものを代入
(「余り」は、
5÷3=1 余り 2 というときの 2)
(「
1110」と 4 文字なら、Timer1 が合図を出すごとに、1, 2, 3, 4, 1,
2, 3, 4,と変わっていく)
ibeep(i)が 1 なら、Beep を鳴らす。
となります。
結局、
Timer の合図で、「1110」なら beep beep beep 沈黙 beep beep beep 沈黙...
と音が鳴ります。
デバッグメニューから開始で試してみてください。
「プロジェクト」メニューから「コンポーネントの追加」を選んで、右側をスクロ
ールして「アイコンファイル」を選んでください。「開く」で左のソリューションエ
クスプローラに
icon1.ico が追加されます。それをダブルクリックして絵を描いてくだ
さい。出来たら、
をクリックして保存し、「プロジェクト」メニューから「何と
かのプロパティ」、左側でビルドを選び、右側のアプリケーションアイコンで、今作
ったものを指定します。これで、リビルドをすると、このアイコンのアプリケーショ
ンが出来ます。
また、フォーム
1 をクリックし、プロパティの icon でこれを選ぶと、上のバーの絵
が、アイコンの絵になります。試してみてください。
6. アプリケーションを作る
「ビルド」メニューから「リズムのリビルド」を選ぶと、「リズム」フォルダの
「
bin」フォルダの中に、リズム.exe というアプリケーションが出来ます。これも、ほ
かの
Windows コンピュータに持って行けば、そこで単独で動かせるアプリケーション
です。
7. 提出
今作った「
bin」フォルダの中のアプリケーションを提出してください。
8. 自分で作る
新たなプロジェクトを作り、リズムプロジェクトを応用して、自分の好きなものを
作ってください。たとえば、
・
Timer を2つつけて、複雑なリズムにする
・数字を入力させ、
10 以上ならばリズム音が出る
・クリックすると
10 秒間だけリズム音が出る
とか、いろいろ。
9. 音源を操作する 「かえるプロジェクト」の作成
1.を繰り返し、こんどは、「かえる」プロジェクトを新たに作り、「リズム」プ
10. 音源を操作する 「かえるプロジェクト」の作成
1.を繰り返し、こんどは、「かえる」プロジェクトを新たに作り、「リズム」プ
ロジェクトから
Form1.vb をコピーしてください。次に、前で指示する所から、音源フ
ァイルをコピーして、「かえる」フォルダの中の「
bin」フォルダにコピーしてくださ
い。また、音源操作コマンドのファイル「
example.txt」を「かえる」フォルダにコピ
ーしてください。
Visual Basic に戻って、「ファイル」メニューから「開く」「ファイル」で、今コピ
ーした「
example.txt」を開いてください。
「
Form1.vb[デザイン]」のタグを選んで、フォームの絵を出し、TextBox2 のテキス
トを、「
12343210345654301010101012343210」にして下さい(別にほかのでもいいけ
れど)。
1→ド、2→レ、...です。とりあえず、1 オクターブ内で出来るメロディにして下
さい。
Form の上の青いバーをクリックして、コードの出ているウィンドウに帰って下さ
い。以下に、コードを載せます。変えた所は、面倒なコマンドが並んでいるので、適
宜「
example.txt」からコピーして作ってください。
Private Declare Function mciSendString Lib "winmm.dll" Alias
"mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Dim SoundFileName As String Dim sfn(20) As String Dim col(20) As Color
Dim nlen As Integer
③ ここにコピー(
1
行)
④ ここに入れる(
3
行)
Dim ibeep(50) As Integer
Private Sub Button1_Click(...) End
End Sub
Private Sub TextBox1_TextChanged(...) Dim memori As Integer
memori = Val(TextBox1.Text) If memori > 0 Then
Timer1.Interval = 60000 / memori
memori = Math.Min(memori, TrackBar1.Maximum) memori = Math.Max(memori, TrackBar1.Minimum) TrackBar1.Value = memori
End If End Sub
Private Sub Timer1_Elapsed(...)
mciSendString("Close " & SoundFileName, vbNull, 0, 0) i = (i Mod nlen) + 1
If ibeep(i) > 0 Then
SoundFileName = sfn(ibeep(i))
mciSendString("Play " & SoundFileName, vbNull, 0, 0) ActiveForm.BackColor = col(ibeep(i))
Else
ActiveForm.BackColor = Color.White End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim j As Integer
If Timer1.Enabled = True Then Timer1.Enabled = False Button2.Text = "Start" Else Timer1.Enabled = True Button2.Text = "Stop" i = 0 nlen = Len(TextBox2.Text) For j = 1 To nlen ibeep(j) = Val(Mid(TextBox2.Text, j, 1)) Next j End If End Sub
Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
⑤
こ
こ
を
変
更
TextBox1.Text = TrackBar1.Value End Sub
Private Sub Form1_Load(...) sfn(1) = """c0.wav""" sfn(2) = """d0.wav""" sfn(3) = """e0.wav""" sfn(4) = """f0.wav""" sfn(5) = """g0.wav""" sfn(6) = """a0.wav""" sfn(7) = """b0.wav""" sfn(8) = """c1.wav""" sfn(9) = """d1.wav""" sfn(10) = """cs0.wav""" sfn(11) = """ds0.wav""" sfn(12) = """fs0.wav""" sfn(13) = """gs0.wav""" sfn(14) = """as0.wav""" sfn(15) = """cs1.wav""" col(1) = Color.Aqua col(2) = Color.Blue col(3) = Color.Coral col(4) = Color.DarkGoldenrod col(5) = Color.ForestGreen col(6) = Color.GreenYellow col(7) = Color.HotPink col(8) = Color.Ivory col(9) = Color.LavenderBlush col(10) = Color.Magenta col(11) = Color.Navy col(12) = Color.Orange col(13) = Color.PapayaWhip col(14) = Color.RosyBrown col(15) = Color.SeaGreen col(16) = Color.Teal col(17) = Color.Violet col(18) = Color.Yellow col(19) = Color.Silver col(20) = Color.Gold End Sub End Class
説明: ③では、パソコンの音源を操作する関数を定義しています。
④では、
SoundFileName という文字変数と、sfn という文字変数の配列と、
col というカラー変数の配列を、このかえるプロジェクト全体で使うと定義し
ています。
⑥ ここに入れる
Form1.Load が無ければ、
デザインの方に戻って、
Form の青いバーをダブル
クリックして出して下さい。
⑦ ここに入れる
sfn(ibeep(i))に入っているファイル名に対応する音を出して(Play)、フォーム
の色を
col(ibeep(i))の色にし、ibeep(i)=0 の時は、フォームの色を白にしてい
ます。
⑥の
Form1_Load は、フォームが出てきたときに動くプログラムで、ここで
は、最初の値を入れるのに使っています。
sfn にファイル名を”で囲ったもの
を入力しています。
⑦では、
col にカラー名を入れています。
デバッグメニューから実行で試してみてください。
うまくいったら、アイコンを作ったりした後、「かえるのリビルド」をして、アプ
リケーションにして下さい。
11. 音源を操作する 「音階プロジェクト」の作成 <参考>
今度は、「キーボード」を作ってみましょう。「新しいプロジェクト」で、音階プ
ロジェクトを新たに作ってください。
まず、
Form1 のプロパティの KeyPreview を True にしてください。
次に、
Button を1つだけ作ってください。(今回は TextBox も、Bar もありませ
ん。)出来た
Button をダブルクリックしてコードウィンドウを表示させます。
コードは以下の通りです。適宜
example.txt からコピーして作って下さい。また、
Form1_KeyDown(...)、Form1_KeyUp(...)は、コードウィンドウの上の左の窓を
(
Form1 Events)、右を KeyDown や KeyUp にすると出てきます。
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Dim sfn(50) As String Dim col(50) As Color
Private Sub Button1_Click(...) End
End Sub
Private Sub Form1_Load(...) sfn(1) = """c0.wav""" sfn(2) = """d0.wav""" sfn(3) = """e0.wav""" sfn(4) = """f0.wav""" sfn(5) = """g0.wav""" sfn(6) = """a0.wav""" sfn(7) = """b0.wav""" sfn(8) = """c1.wav""" sfn(9) = """d1.wav""" sfn(10) = """cs0.wav""" sfn(11) = """ds0.wav""" sfn(12) = """fs0.wav""" sfn(13) = """gs0.wav""" sfn(14) = """as0.wav""" sfn(15) = """cs1.wav""" col(1) = Color.Aqua col(2) = Color.Blue col(3) = Color.Coral col(4) = Color.DarkGoldenrod col(5) = Color.ForestGreen col(6) = Color.GreenYellow col(7) = Color.HotPink col(8) = Color.Ivory col(9) = Color.LavenderBlush col(10) = Color.Magenta col(11) = Color.Navy col(12) = Color.Orange col(13) = Color.PapayaWhip col(14) = Color.RosyBrown col(15) = Color.SeaGreen col(16) = Color.Teal col(17) = Color.Violet col(18) = Color.Yellow col(19) = Color.Silver col(20) = Color.Gold End Sub
Private Sub Form1_KeyDown(...) Dim ie As Integer
ie = e.KeyCode If ie = 65 Then '65 a je = 1 ElseIf ie = 83 Then '83 s je = 2 ElseIf ie = 68 Then '68 d je = 3 ElseIf ie = 70 Then '70 f je = 4 ElseIf ie = 71 Then '71 g je = 5 ElseIf ie = 72 Then '72 h je = 6 ElseIf ie = 74 Then '74 j je = 7 ElseIf ie = 75 Then '75 k je = 8 ElseIf ie = 76 Then '76 l je = 9 Else je = 0 End If SoundFileName = sfn(je)
mciSendString("Play " & SoundFileName, vbNull, 0, 0) Form1.ActiveForm.BackColor = col(je)
End Sub
Private Sub Form1_KeyUp(...)
mciSendString("Close " & SoundFileName, vbNull, 0, 0) End Sub
End Class