職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

デバックモード

2020年01月08日 | VB2017
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+8G8AG8A8B8B8B8EA8A8GG8G8F+E8F+8G2"

'●メイン処理

'楽譜から一音ずつ取り出して演奏する

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+8G8AG8A8B8B8B8EA8A8GG8G8F+E8F+8G2"

'●メイン処理

'楽譜から一音ずつ取り出して演奏する

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
以上




コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 息子介護物語-エピソード15(... | トップ | 息子介護物語-エピソード16(... »
最新の画像もっと見る

コメントを投稿

VB2017」カテゴリの最新記事