Microsoft Small Basic

Program Listing: VPW885
' Metronome for Sound.PlayMusic()
' Copyright (c) 2014 Nonki Takahashi. All rights reserved.
'
GraphicsWindow.Title = "Metronome for Sound.PlayMusic()"
GraphicsWindow.BackgroundColor = "LightGray"
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(10, 14, "Tempo")
oTempo = Controls.AddTextBox(60, 10)
c4 = 0
tempo = 150 ' [quarter note/min]
Controls.SetTextBoxText(oTempo, tempo)
param = "x=10;y=40;"
Controls_AddLamp()
oLamp = retval
Controls.TextTyped = OnTextTyped
msec = 60000 / tempo / 2
Timer.Interval = msec
Timer.Tick = OnTick
While "True"
Sound.PlayMusic("O4CDEFGFED")
EndWhile
Sub OnTextTyped
tempo = Controls.GetTextBoxText(oTempo)
Timer.Interval = 60000 / tempo / 2
EndSub
Sub OnTick
Stack.PushValue("param", param)
param = "lamp=" + oLamp + ";"
Controls_LampToggle()
param = Stack.PopValue("param")
EndSub
Sub Controls_AddLamp
' Controls | Add Lamp
' param["x"], param["y"] - position of lamp
' return retval - lamp id
savedColor = GraphicsWindow.BrushColor
savedPen = GraphicsWindow.PenWidth
GraphicsWindow.PenWidth = 0
nLamp = lamp["num"] + 1
lamp["num"] = nLamp
x = param["x"]
y = param["y"]
GraphicsWindow.BrushColor = "White"
lamp[nLamp]["rw"] = Shapes.AddRectangle(21, 7)
Shapes.Move(lamp[nLamp]["rw"], x + 3, y + 3)
GraphicsWindow.BrushColor = "DimGray"
lamp[nLamp]["rg"] = Shapes.AddRectangle(21, 7)
Shapes.Move(lamp[nLamp]["rg"], x, y)
GraphicsWindow.BrushColor = "#330000"
lamp[nLamp]["rk"] = Shapes.AddRectangle(20, 6)
Shapes.Move(lamp[nLamp]["rk"], x + 2, y + 2)
GraphicsWindow.BrushColor = "Red"
lamp[nLamp]["rr"] = Shapes.AddRectangle(20, 6)
Shapes.Move(lamp[nLamp]["rr"], x + 2, y + 2)
Shapes.HideShape(lamp[nLamp]["rr"])
lamp[nLamp]["on"] = "False"
retval = "Lamp" + nLamp
GraphicsWindow.PenWidth = savedPen
GraphicsWindow.BrushColor = savedColor
EndSub
Sub Controls_LampOn
' Controls | Lamp On
' param["lamp"] - the lamp id to be on
Sound.PlayClick()
iLamp = Text.GetSubTextToEnd(param["lamp"], 5)
Shapes.ShowShape(lamp[iLamp]["rr"])
lamp[iLamp]["on"] = "True"
EndSub
Sub Controls_LampOff
' Controls | Lamp Off
iLamp = Text.GetSubTextToEnd(param["lamp"], 5)
Shapes.HideShape(lamp[iLamp]["rr"])
lamp[iLamp]["on"] = "False"
EndSub
Sub Controls_LampToggle
' Controls | Lamp Toggle
' param["lamp"] - the lamp id to be toggled
iLamp = Text.GetSubTextToEnd(param["lamp"], 5)
If lamp[iLamp]["on"] Then
Controls_LampOff()
Else
Controls_LampOn()
EndIf
EndSub