John Alexander
Programmer
Const NOTES_ON = &H90
Const MIDI_MAPPER = (-1)
Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, _
ByVal udeviceid As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
Dim Note1Play(200) As Long, Length1_Note(200) As Single
Dim Note2Play(200) As Long, Length2_Note(200) As Single
Dim Note3Play(200) As Long, Length3_Note(200) As Single
Dim Note4Play(200) As Long, Length4_Note(200) As Single
Dim NUMBEROFNOTES As Integer
Dim NUMBEROFNOTES1 As Integer, NUMBEROFNOTES2 As Integer, NUMBEROFNOTES3 As Integer
Private Sub Form_Load()
midiOpenError = midiOutOpen(hMidiOut, MIDI_MAPPER, 0, 0, 0)
midiMessageOut = NOTES_ON
midiData2 = 127
Happy_Birthday ' This calls sub Happy_Birthday to read in notes
For y = 1 To NUMBEROFNOTES
lowint = (Note1Play
* 256) + &H90
GoSub PlayVoice1
lowint = (Note2Play
* 256) + &H94
GoSub PlayVoice1
lowint = (Note3Play
* 256) + &H96
GoSub PlayVoice1
lowint = (Note4Play
* 256) + &H98
GoSub PlayVoice1
ThisTime = Timer
Do
Loop While ThisTime + Length1_Note
* 0.7 > Timer
Next y
ThisTime = Timer
Do
Loop While ThisTime + 0.3 > Timer
x = midiOutClose(hMidiOut)
End
PlayVoice1:
highint = (midiData2 * 256) * 256
MidiMessage = lowint + highint
x = midiOutShortMsg(hMidiOut, MidiMessage)
Return
End Sub
Private Sub Happy_Birthday()
NUMBEROFNOTES = 26
'******************** Data for Happy Birthday VOICE ONE **************************************
For y = 1 To 12 'G G A G >C <B G G A G D C
Note1Play
= Choose(y, 55, 55, 57, 55, 60, 59, 55, 55, 57, 55, 62, 60)
Length1_Note
= Choose(y, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82)
Next y
For y = 13 To 24 'G G >G E C C B A F F E C
Note1Play
= Choose(y - 12, 55, 55, 67, 64, 60, 60, 59, 57, 65, 65, 64, 60)
Length1_Note
= Choose(y - 12, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91)
Next y
For y = 25 To 26 ' D C
Note1Play
= Choose(y - 24, 62, 60)
Length1_Note
= Choose(y - 24, 0.91, 1.82)
Next y
'******************** Data for Happy Birthday VOICE Two **************************************
For y = 1 To 12 'F F E E E F F F F F B G
Note2Play
= Choose(y, 53, 53, 52, 52, 52, 53, 53, 53, 53, 53, 59, 55)
Length2_Note
= Choose(y, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82)
Next y
For y = 13 To 24 'E E >C C <G <G F F >C C C <G
Note2Play
= Choose(y - 12, 52, 52, 60, 60, 55, 55, 53, 53, 60, 60, 60, 55)
Length2_Note
= Choose(y - 12, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91)
Next y
For y = 25 To 26 ' B G
Note2Play
= Choose(y - 24, 59, 55)
Length2_Note
= Choose(y - 24, 0.91, 1.82)
Next y
'******************** Data for Happy Birthday VOICE Three ************************************
For y = 1 To 12 'B B >C C E D <B B B B F E
Note3Play
= Choose(y, 59, 59, 60, 60, 64, 62, 59, 59, 59, 59, 65, 64)
Length3_Note
= Choose(y, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82, 0.455, 0.455, 0.91, 0.91, 0.91, 1.82)
Next y
For y = 13 To 24 'C C E G E E C C A A G E
Note3Play
= Choose(y - 12, 60, 60, 64, 67, 64, 64, 60, 60, 69, 69, 67, 64)
Length3_Note
= Choose(y - 12, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91)
Next y
For y = 25 To 26
Note3Play
= Choose(y - 24, 65, 64)
Length3_Note
= Choose(y - 24, 0.91, 1.82)
Next y
'******************** Data for Happy Birthday VOICE Four *************************************
For y = 1 To 12 'G G G G G G G G G G G C
Note4Play
= Choose(y, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 60)
Length4_Note
= Choose(y, 0.455, 0.455, 0.91, 0.91, 0.91, 0.182, 0.455, 0.455, 0.91, 0.91, 0.91, 0.182)
Next y
For y = 13 To 24 'G G G C C C F F F F G G
Note4Play
= Choose(y - 12, 55, 55, 55, 60, 60, 60, 53, 53, 53, 53, 55, 55)
Length4_Note
= Choose(y - 12, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91, 0.455, 0.455, 0.91, 0.91)
Next y
For y = 25 To 26 ' G C
Note4Play
= Choose(y - 24, 55, 60)
Length4_Note
= Choose(y - 24, 0.91, 1.82)
Next y
End Sub
Const MIDI_MAPPER = (-1)
Private Declare Function midiOutShortMsg Lib "winmm.dll" (ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, _
ByVal udeviceid As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
Dim Note1Play(200) As Long, Length1_Note(200) As Single
Dim Note2Play(200) As Long, Length2_Note(200) As Single
Dim Note3Play(200) As Long, Length3_Note(200) As Single
Dim Note4Play(200) As Long, Length4_Note(200) As Single
Dim NUMBEROFNOTES As Integer
Dim NUMBEROFNOTES1 As Integer, NUMBEROFNOTES2 As Integer, NUMBEROFNOTES3 As Integer
Private Sub Form_Load()
midiOpenError = midiOutOpen(hMidiOut, MIDI_MAPPER, 0, 0, 0)
midiMessageOut = NOTES_ON
midiData2 = 127
Happy_Birthday ' This calls sub Happy_Birthday to read in notes
For y = 1 To NUMBEROFNOTES
lowint = (Note1Play

GoSub PlayVoice1
lowint = (Note2Play

GoSub PlayVoice1
lowint = (Note3Play

GoSub PlayVoice1
lowint = (Note4Play

GoSub PlayVoice1
ThisTime = Timer
Do
Loop While ThisTime + Length1_Note

Next y
ThisTime = Timer
Do
Loop While ThisTime + 0.3 > Timer
x = midiOutClose(hMidiOut)
End
PlayVoice1:
highint = (midiData2 * 256) * 256
MidiMessage = lowint + highint
x = midiOutShortMsg(hMidiOut, MidiMessage)
Return
End Sub
Private Sub Happy_Birthday()
NUMBEROFNOTES = 26
'******************** Data for Happy Birthday VOICE ONE **************************************
For y = 1 To 12 'G G A G >C <B G G A G D C
Note1Play

Length1_Note

Next y
For y = 13 To 24 'G G >G E C C B A F F E C
Note1Play

Length1_Note

Next y
For y = 25 To 26 ' D C
Note1Play

Length1_Note

Next y
'******************** Data for Happy Birthday VOICE Two **************************************
For y = 1 To 12 'F F E E E F F F F F B G
Note2Play

Length2_Note

Next y
For y = 13 To 24 'E E >C C <G <G F F >C C C <G
Note2Play

Length2_Note

Next y
For y = 25 To 26 ' B G
Note2Play

Length2_Note

Next y
'******************** Data for Happy Birthday VOICE Three ************************************
For y = 1 To 12 'B B >C C E D <B B B B F E
Note3Play

Length3_Note

Next y
For y = 13 To 24 'C C E G E E C C A A G E
Note3Play

Length3_Note

Next y
For y = 25 To 26
Note3Play

Length3_Note

Next y
'******************** Data for Happy Birthday VOICE Four *************************************
For y = 1 To 12 'G G G G G G G G G G G C
Note4Play

Length4_Note

Next y
For y = 13 To 24 'G G G C C C F F F F G G
Note4Play

Length4_Note

Next y
For y = 25 To 26 ' G C
Note4Play

Length4_Note

Next y
End Sub