Пример миди музыки

Это простенький пример создания миди музыки. Конечно это игрушечная поделка, хотя может кому-то станет отправной точкой. Звучание под WinXp и Win7 разные , я делал под семерку.

Платформа: Windows
Автор: Станислав Будинов

#INCLUDE "windows.bi"
#INCLUDE "win/mmsystem.bi"

Dim Shared hMidiOut As hMidiOut
' массив с нотами
Dim Shared M(...) As Integer=>{150,49,53,63,61,50,55,60,58,51,55,63,63,50,55,60,58,52,58,55,52,55,55,55,55,58,61,62,56,57}

'Структура для команд
Union midimsg
    dw As Uinteger
    b(2) As Ubyte 
End Union

' проверяем миди устройства в системе
If midiOutGetNumDevs = 0 Then End
' Открываем или создаем устройство миди
midiOutOpen @hMidiOut, -1, 0, 0, 0

Dim d As midimsg ' создаем объект структуры
d.b(2)=64 ' в нашем примере громкость будет постоянной
Dim UB As Integer = Ubound(M)' узнаем сколько ячеек в массиве

For i As Integer = 0 To UB

    Dim T As Double ' переменная для таймера
    
    d.b(0)=&h80 ' выключаем звучание    чтобы не было наложения звука
   ' отправляем команду выключения
    midiOutShortMsg hMidiOut, d.dw  
    
    d.b(0)=&h90 ' включаем звук
    'устанавливаем инструмент SynthStrings1
    midiOutShortMsg hMidiOut, &hC0+&h100*50 
    d.b(1)=M(i) ' берем ноту из массива
   midiOutShortMsg hMidiOut, d.dw ' проигрываем звук
   
   'устанавливаем инструмент Koto
    midiOutShortMsg hMidiOut, &hC0+&h100*107
    d.b(1)=M(i)' берем ноту из массива
    midiOutShortMsg hMidiOut, d.dw ' проигрываем звук
    
    'устанавливаем инструмент SynthDrum
    midiOutShortMsg hMidiOut, &hC0+&h100*118  
    d.b(1)=M(i)' берем ноту из массива
    midiOutShortMsg hMidiOut, d.dw ' проигрываем звук
    
    'устанавливаем инструмент BowedPad
    midiOutShortMsg hMidiOut, &hC0+&h100*92
    d.b(1)=M(i)' берем ноту из массива
    midiOutShortMsg hMidiOut, d.dw ' проигрываем звук
    If i=UB Then Sleep(650) ' ограничиваем время звучания завершающей ноты
    T = Timer
Do: Loop Until Timer >= T + .4 ' время звучания каждой ноты
Next

midiOutClose hMidiOut 'закрываем устройство

/'СПИСОК ИНСТРУМЕНТОВ

 0. AcousticGrandPiano скрипка
 1. BrightAcousticPiano
 2. ElectricGrandPiano
 3. HonkyTonkPiano
 4. ElectricPiano1
 5. ElectricPiano2
 6. Harpsichord
 7. Clavinet
 8. Celesta
 9. Glockenspiel
 10. MusicBox
 11. Vibraphone
 12. Marimba
 13. Xylophone
 14. TubularBells
 15. Dulcimer
 16. DrawbarOrgan
 17. PercussiveOrgan
 18. RockOrgan
 19. ChurchOrgan
 20. ReedOrgan
 21. Accordion
 22. Harmonica
 23. TangoAccordion
 24. AcousticNylonGuitar
 25. AcousticSteelGuitar
 26. JazzElectricGuitar
 27. CleanElectricGuitar
 28. MutedElectricGuitar
 29. OverdrivenGuitar
 30. DistortionGuitar
 31. GuitarHarmonics
 32. AcousticBass 
 33. FingeredElectricBass
 34. PickedElectricBass
 35. FretlessBass
 36. SlapBass1
 37. SlapBass2
 38. SynthBass1
 39. SynthBass2
 40. Violin
 41. Viola
 42. Cello   43. Contrabass
 44. TremoloStrings
 45. PizzicatoStrings
 46. OrchestralHarp
 47. Timpani
 48. StringEnsemble1
 49. StringEnsemble2
 50. SynthStrings1
 51. SynthStrings2
 52. ChoirAahs
 53. VoiceOohs
 54. SynthVoice
 55. OrchestraHit
 56. Trumpet
 57. Trombone
 58. Tuba
 59. MutedTrumpet
 60. FrenchHorn
 61. BrassSection
 62. SynthBrass1
 63. SynthBrass2
 64. SopranoSax
 65. AltoSax
 66. TenorSax
 67. BaritoneSax
 68. Oboe
 69. EnglishHorn
 70. Bassoon
 71. Clarinet
 72. Piccolo
 73. Flute
 74. Recorder
 75. PanFlute
 76. BlownBottle
 77. Shakuhachi
 78. Whistle
 79. Ocarina
 80. SquareLead
 81. SawtoothLead
 82. CalliopeLead
 83. ChiffLead
 84. CharangLead
 85. VoiceLead   86. FifthsLead
 87. BassandLead
 88. NewAgePad
 89. WarmPad
 90. PolySynthPad
 91. ChoirPad
 92. BowedPad
 93. MetallicPad
 94. HaloPad
 95. SweepPad
 96. SynthFXRain
 97. SynthFXSoundtrack
 98. SynthFXCrystal
 99. SynthFXAtmosphere
 100. SynthFXBrightness
 101. SynthFXGoblins
 102. SynthFXEchoes
 103. SynthFXSciFi
 104. Sitar
 105. Banjo
 106. Shamisen
 107. Koto
 108. Kalimba
 109. Bagpipe
 110. Fiddle
 111. Shanai
 112. TinkleBell
 113. Agogo
 114. SteelDrums
 115. Woodblock
 116. TaikoDrum
 117. MelodicTom
 118. SynthDrum
 119. ReverseCymbal
 120. GuitarFretNoise
 121. BreathNoise
 122. Seashore
 123. BirdTweet
 124. TelephoneRing
 125. Helicopter
 126. Applause
 127. Gunshot'/