Un petit utilitaire plutôt pour musiciens :
- permet de connaître le nombre de mesure, en fonction du BPM, et d'une durée fournie.
- permet de connaître le temps que dure une mesure en fonction du BPM.
- petit zoom au passage sur un canvas lol.
Sinon, je n'ai pas ajouté la gestion des temps (4/4,3/4, etc...) mais bon.
J'avais besoin de ce code pour une petite application que j'ai réalisée, je me suis dit que ça pourrait pitet intéressé quelqu'un ^^.
Code : Tout sélectionner
Enumeration
#Gadget_Bpm
#Gadget_Mesure
#MarkerRegion
#Gadget_Zoom
#TimeForMesure
#MesureByTime
#SetTiming
EndEnumeration
Procedure UpdateMarker()
bpm = GetGadgetState(#Gadget_Bpm)
zoom = GetGadgetState(#Gadget_Zoom)
z.d = Zoom/100
g.d = 100 * BPM/60
If StartDrawing(CanvasOutput(#MarkerRegion))
Box(0,0,480,50,RGB(200,200,200))
DrawingMode(#PB_2DDrawing_Transparent)
; the secondes
For i = 0 To (480/(g * z))
X = i * g * z
Line(x,0,1,4,RGB(100,100,100))
DrawText(x + 2, 5,Str(i),0)
Next i
; the bpm
For i = 0 To (480/(100 * z))
X = i * 100 * z
Line(x,0,1,40,RGB(255,0,0))
DrawText(x + 2, 35,Str(i),RGB(255,0,0))
Next i
StopDrawing()
EndIf
TimeForOneMesure = 1000*BPM/60
SetGadgetText(#TimeForMesure,"Temps par mesure (en milliseconde) : "+Str(TimeForOneMesure))
timing = Val(GetGadgetText(#SetTiming))
MesureByTime.d = timing * (bpm/60)
SetGadgetText(#MesureByTime,Str(MesureByTime))
ProcedureReturn TimeForOneMesure
EndProcedure
If OpenWindow(0, 0,0,500,300,"Mesure/temps",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
SpinGadget(#Gadget_Bpm,10,10,50,20,40,200,#PB_Spin_Numeric)
SetGadgetState(#Gadget_Bpm,80)
GadgetToolTip(#Gadget_Bpm,"BPM")
TrackBarGadget(#Gadget_Zoom,70,10,200,20,20,200)
SetGadgetState(#Gadget_Zoom,100)
GadgetToolTip(#Gadget_Zoom,"Zoom")
CanvasGadget(#MarkerRegion,10,40,480,50)
TextGadget(#PB_Any, 10,100,250,40,"En noir : le temps en seconde, en fonction du BPM."+Chr(13)+"En rouge : les mesures")
TextGadget(#TimeForMesure, 10, 140,350,20,"Temps par mesure (en milliseconde) : ")
txt$="Durée (en secondes): "
TextGadget(#PB_Any, 10,200,Len(txt$)*6,20,txt$)
SpinGadget(#SetTiming,Len(txt$)*6,198,50,20,0,20000,#PB_Spin_Numeric)
SetGadgetText(#SetTiming,"240")
TextGadget(#PB_Any, 10, 230,320,20,"Nombre de mesure (arrondi sup) pour le temps imparti (au BPM) : ")
TextGadget(#MesureByTime,330,230,250,20,"")
UpdateMarker()
EndIf
Repeat
Event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_Bpm,#Gadget_Zoom,#SetTiming
UpdateMarker()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow