* * *    
Главная » Статьи » Код PB

Просмотров: 1190 | Дата: 09.05.2024 | Коментарии (0)

Метроном



Code
#NoteOn = $90;
#MSEC=60000.0 ; = millisecs in 1 minute

Global _hMIDIout
Procedure midiinit()
  For nDev=-1 To midiOutGetNumDevs_()-1
  If midiOutGetDevCaps_(nDev,@midi.MIDIOUTCAPS,SizeOf(MIDIOUTCAPS))=0
  If midi\wVoices>0
  MidiPort=nDev
  EndIf
  EndIf
  Next
  midiOutOpen_(@_hMIDIout,MidiPort,0,0,0)
EndProcedure

Macro MMK ; mouse key state
  Abs(GetAsyncKeyState_(#VK_LBUTTON) +GetAsyncKeyState_(#VK_RBUTTON)*2+GetAsyncKeyState_(#VK_MBUTTON)*3)/$8000  
EndMacro

Macro PlayMIDINote(Chan, Note, Vol=100)
  midiOutShortMsg_(_hMIDIout, #NoteOn | Chan | Note << 8 | Vol << 16) ;
EndMacro
   
Macro BPM_Msec(n) ; convert MilliSecs to Beats per Minute and vice versa
  #MSEC/n
EndMacro

Structure Metronome
  BPM.l
  Msecs.l
  Sound.B
  Vol.B
  count.l
EndStructure

Procedure ThreadMetron(*Param.Metronome)
  With *Param
  \Sound=35 ; 35=acoustic bass drum
  Repeat
  PlayMIDINote(9,\Sound,100) ; 9=perc MIDI channel  
  ; \count+1 ; for beat count
  Delay(\Msecs)
  ForEver
  EndWith  
EndProcedure

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
If OpenWindow(0, 100, 100,400,80 ,"Test Metronome", #WS_OVERLAPPEDWINDOW|#PB_Window_ScreenCentered)  
  StickyWindow(0,1)
  _TB=TrackBarGadget(#PB_Any,40,10,300,30,50,500)
  _InfoTB=TextGadget(#PB_Any,GadgetX(_TB),40,300,20,"",#PB_Text_Border)
  SetGadgetState(_TB,100)
  SetGadgetText(_InfoTB,"Beats per minute : "+Str(GetGadgetState(_TB)))
   
  BPM.Metronome
   
  BPM\Msecs=BPM_Msec(GetGadgetState(_TB))
   
  midiinit()
   
  Thread1=CreateThread(@ThreadMetron(),@BPM)
  ThreadPriority(Thread1,31)
   
  Repeat  
  If GetAsyncKeyState_(27) : End : EndIf
   
  Ev=WaitWindowEvent()  
  Select Ev
  Case #PB_Event_Gadget
  Select EventGadget()
  Case _TB
  BPM\BPM=GetGadgetState(_TB)  
  BPM\Msecs=BPM_Msec(BPM\BPM)
  SetGadgetText(_InfoTB,"Beats per minute : "+Str(BPM\BPM))
  EndSelect
  EndSelect
   
  Until Ev=#WM_CLOSE  
  End  
EndIf










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.