VBのデバックについて
【開発環境】
os:Windows 10
IDE(統合開発環境):VisualStudio 2017
言語;VB
【参照サイト】
第42回 初めてのデバッグ
【準備】
① Sound2005.lzhを参照サイトからダウンロードし、解凍して「Sound.dll」ファイルを作成する。
②[プロジェクト]メニューの[参照の追加]をクリックし、表示されるウィンドウの[参照]タブをクリックして先ほど解凍した「Sound.dll」ファイルを指定する。
③フォームにボタンを貼る。

【コーデング】
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim CmdSound As String '楽譜を表す文字列
Dim Reader As IO.StringReader '楽譜を順番に読むオブジェクト
Dim Octarb As Integer '次に弾く音のオクターブ
Dim Sign As String '次に弾く音の♯だの♭だのの調合。#は"+"、♭は"-"で表す。
Dim Length As String '次に弾く音の長さ。四分音符は4、8部音符は8。ただし4の場合は省略可能。
Dim Note As String '次に弾く音の音階。ドレミファソラシは順にCDEFGABで表す。
Dim Player As New RLaboratory.Windows.Sound '音を発するクラス。楽器。
'●前処理
'楽器・楽譜の初期設定
'音色にシンセリードを指定。
'MIDIデバイスがない環境ではこの指定は無効で、常にビープ音によって演奏される。
Player.Instrument =RLaboratory.Windows.Instruments.FifthsLead
'このコメントをはずすとMIDIデバイスがあってもビープ音による演奏が行われる。
'Player.SoundMode =RLaboratory.Windows.Sound.SoundeModes.Beep
'大きな古時計の楽譜(最初のフレーズのみ)
CmdSound = "DGF+8G8AG8A8B8B8
'●メイン処理
'楽譜から一音ずつ取り出して演奏する
Reader = New IO.StringReader(CmdSound)
Do While Reader.Peek '楽譜の最後に到達するまでループを実行
Note =Chr(Reader.Read) '楽譜の次の音階を読む。
'▼読み込んだのが音階ではなくオクターブを変える記号の場合
If Note = "<" Then
Octarb += 1
ElseIf Note = ">" Then
Octarb -= 1
End If
'▼次の文字が-+(調号)の場合は"C+", "B-"のように音階と一緒にする。
Sign =Chr(Reader.Peek)
If Sign = "+" OrElse Sign = "-" Then
Note &= Sign
End If
'▼次の文字が数字の場合は"C8","F+8"のように音階と一緒にする。
Length =Chr(Reader.Peek)
If IsNumeric(Length) Then
Note &= Length
'▼その次の文字も数字の場合も同様。たとえば"D+16"などの場合
Length = Chr(Reader.Peek)
If IsNumeric(Length) Then
Note &= Length
End If
End If
'▼読み込んだ音を発音する。
Player.PlayString(Note, Octarb)
Loop
'●後処理
Reader.Close()
Player.Close()
End Sub
【実行】
「演奏する」ボタンを押す

エラー表示される

【デバック】
デバックはブレークポイントやウォッチウィンドウ、ビジュアライザー、エディットコンティニューといったツールを用いてやる。

【デバック完了後のコード】
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CmdSound As String '楽譜を表す文字列
Dim Reader As IO.StringReader '楽譜を順番に読むオブジェクト
Dim Octarb As Integer '次に弾く音のオクターブ
Dim Sign As String '次に弾く音の♯だの♭だのの調合。#は"+"、♭は"-"で表す。
Dim Length As String '次に弾く音の長さ。四分音符は4、8部音符は8。ただし4の場合は省略可能。
Dim Note As String '次に弾く音の音階。ドレミファソラシは順にCDEFGABで表す。
Dim Player As New RLaboratory.Windows.Sound '音を発するクラス。楽器。
'●前処理
'楽器・楽譜の初期設定
'音色にシンセリードを指定。
'MIDIデバイスがない環境ではこの指定は無効で、常にビープ音によって演奏される。
Player.Instrument = RLaboratory.Windows.Instruments.FifthsLead
'このコメントをはずすとMIDIデバイスがあってもビープ音による演奏が行われる。
'Player.SoundMode =RLaboratory.Windows.Sound.SoundeModes.Beep
'大きな古時計の楽譜(最初のフレーズのみ)
CmdSound = "DGF+8G8AG8A8B8B8
'●メイン処理
'楽譜から一音ずつ取り出して演奏する
Reader = New IO.StringReader(CmdSound)
'楽譜の最後に到達するまでループを実行
'Do While Reader.Peekを変更する
Do Until Reader.Peek = -1
Note = Chr(Reader.Read) '楽譜の次の音階を読む。
'▼読み込んだのが音階ではなくオクターブを変える記号の場合
If Note = "<" Then
Octarb += 1
ElseIf Note = ">" Then
Octarb -= 1
End If
'▼次の文字が-+(調号)の場合は"C+", "B-"のように音階と一緒にする。
Sign = Chr(Reader.Peek)
If Sign = "+" OrElse Sign = "-" Then
Note &= Sign
Reader.Read() '追加
End If
'▼次の文字が数字の場合は"C8","F+8"のように音階と一緒にする。
Length = Chr(Reader.Peek)
If IsNumeric(Length) Then
Note &= Length
Reader.Read() '追加
'▼その次の文字も数字の場合も同様。たとえば"D+16"などの場合
Length = Chr(Reader.Peek)
If IsNumeric(Length) Then
Note &= Length
Reader.Read() '追加
End If
End If
'▼読み込んだ音を発音する。
If Note <> "<" AndAlso Note <> ">" Then '←この行を追加する
Player.PlayString(Note, Octarb)
End If
Loop
'●後処理
Reader.Close()
Player.Close()
End Sub
End Class
以上
※コメント投稿者のブログIDはブログ作成者のみに通知されます