gribouillex
Messages postés172Date d'inscriptionlundi 10 octobre 2005StatutMembreDernière intervention16 mai 2011
-
3 mai 2011 à 11:43
biolo24fr
Messages postés87Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention28 mai 2013
-
3 mai 2011 à 15:49
Bonjour
Je cherche à écrire une fonction mais malgré mes tentatives, je n’arrive pas à faire quelque chose de propre (précisons que je suis un éternel débutant).
Je suis en train d’adapter un lecteur MIDI avec DirectX.
Pendant l’exécution du midifile, un Timer réglé à la milliseconde se met en route (j’utilise RSTimer, car plus précis à +/- 10ms).
Dans ce timer, j’ai besoin de savoir où j’en suis dans l’exécution du morceau en mettant (dans un premier temps en debug) :
(Dim dmState As DirectMusicSegmentState)
debug.print dmState.Getseek
Cette commande me fait bien parvenir des valeurs toutes les millisecondes mais elle revient en moyenne une centaine de fois identique avant de changer.
Illustration :
…
6314
6314
6314
6314
6314 (etc environ 100 fois à +/- 10 près)
6410
6410
6410
6410
6410 (etc environ 100 fois à +/- 10 près)
6512
6512
6512
6512
…
Voici mon but :
J’aimerais obtenir la valeur la plus précise possible à chaque interrogation dans le timer, par exemple en compensant la centaine de valeurs manquantes en incrémentant au travers d’une fonction. Une fonction qui ferait ça :
Tant que la valeur Getseek ne change pas, on renvoie valeur = valeur + 1
Dès qu’elle change on refait la boucle.
Je devrais donc être précis à +/- 10 ms, ce qui me convient tout à fait.
Voici mon problème :
Je ne sais pas du tout comment écrire cette fonction pour qu’elle soit « propre ».
Que dois-je mettre dans le timer ? Comment écrire la fonction ?
biolo24fr
Messages postés87Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention28 mai 20131 3 mai 2011 à 14:10
Salut,
Tu initialises 2 valeur à 0 pour le démarrage (i et valeur)
dans le RsTimer1.Timer() tu testes si Valeur<> segstate.GetSeek si oui alors i=0
si non alors i=i+1
et valeur prend segstate.GetSeek
comme ça i prend 1,2,3,4,5 etc... tant que segstate.GetSeek ne change pas et reviens à 0 quand sa valeur change
ce qui se traduit par :
Private Sub RSTimer1_Timer()
If Valeur <> segstate.GetSeek Then
i = 0
Else
i = i + 1
End If
Valeur = segstate.GetSeek
end sub
Voilà j'espère avoir répondu à ta question...
-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
biolo24fr
Messages postés87Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention28 mai 20131 3 mai 2011 à 15:49
content que ça t'ai aidé...
-----------------------------------------------------------------------------------------------------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.