请高手帮我注释一下这些代码!
Sub DrawRuler(CurSamp As Long, SoEsc As Boolean)
Dim a As Integer, u As Integer, xmin As Integer
Dim xzero As Double, x440 As Integer
Dim yzero As Double, ymaxgraf As Double
Dim xmult As Double, xmax As Integer
Dim ymult As Double, N As Long, PaulBryan As Double
Dim mpl As Double, xn As Integer
a = 1
Rule:
u = 0
Picture2.Cls
xmin = 0
xzero = 0.964615822 'Hz
x440 = 15900 'twips
yzero = Picture2.Height * 2 / 3 - 500
If a = -1 Then yzero = Picture2.Height * 1 / 3
ymaxgraf = Picture2.Height / 8
If a = -1 Then ymaxgraf = 0
xmult = x440 / Log(440 / xzero)
xmax = 7362 '150 twips for each logical note
Picture2.Line (xmin, yzero)-(xmin + Picture2.Width, yzero), &H0&
If SoEsc = True Then GoTo NumRuler
ymult = (yzero - ymaxgraf) / ymodmax
Picture2.PSet (xmin + u, yzero - (a * ymod(1)) * ymult)
PaulBryan = CurSamp * 2 / SampFreq
For N = 1 To CurSamp - 1
Picture2.Line -(Log(N / (PaulBryan * xzero)) * xmult + u, yzero - (a * ymod(N + 1)) * ymult), &HFF00&
Next N
NumRuler:
mpl = x440 / Log(440 / xzero)
Picture2.Line (xmin, yzero + 200)-(xmin + Picture2.Width, yzero + 200)
For N = 1 To 50
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 260)
If N < 5 And N > 1 Then
Picture2.PSet (xn - 100, yzero + 280), &H400040
Picture2.Print N
End If
Next N
For N = 60 To 500 Step 10
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 260)
Next N
For N = 600 To 5000 Step 100
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 260)
Next N
For N = 6000 To 50000 Step 1000
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 260)
Next N
For N = 1 To 5 Step 4
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 360)
Picture2.Circle (xn, yzero + 360), 20
Picture2.PSet (xn - 100, yzero + 400), &H400040
Picture2.Print N
Next N
For N = 10 To 50 Step 10
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 360)
Picture2.Circle (xn, yzero + 360), 20
Picture2.PSet (xn - 120, yzero + 400), &H400040
Picture2.Print N
Next N
For N = 100 To 500 Step 100
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 360)
Picture2.Circle (xn, yzero + 360), 20
Picture2.PSet (xn - 180, yzero + 400), &H400040
Picture2.Print N
Next N
For N = 1000 To 5000 Step 1000
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 360)
Picture2.Circle (xn, yzero + 360), 20
Picture2.PSet (xn - 180, yzero + 400), &H400040
Picture2.Print N / 1000; " K"
Next N
For N = 10000 To 50000 Step 10000
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 360)
Picture2.Circle (xn, yzero + 360), 20
Picture2.PSet (xn - 180, yzero + 400), &H400040
Picture2.Print N / 1000; " K"
Next N
For N = 5 To 50 Step 5
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 320)
Next N
For N = 50 To 500 Step 50
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 320)
Next N
For N = 500 To 5000 Step 500
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 320)
Next N
For N = 5000 To 50000 Step 5000
xn = Int(Log(N / xzero) * mpl + u)
Picture2.Line (xn, yzero + 200)-(xn, yzero + 320)
Next N
'Call DrawLines
End Sub