Récupérer sysex , comment formater

Signaler
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Bonjour ,
J' essaye de recupérer un sysex d'un yamaha T4 ,
Voici ce que je reçois
25426032913124196016990426033913134196017990591059615091452369999072603591315419601999079105961509141960199907260349131441960189906254
ou encore ceci
FE65B0164B04006B026B065B1164B14006B126B1163B3962B34506B326B365B3164B34006B326B3163B3962B34006B326B365B2164B24006B226B2FE
et je voudrais récupérer quelque chose comme ceci(ceci est un vrau sysex mais récuperer via un autre programme je doit le récupérer par vb)
F0 43 10 4C 08 02 20 00 F7

F0 43 10 4C 08 02 77 2B F7

MErci

6 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
quel est ton code permettant ces dumps ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
Bonjour Renfield ,

J'ai pris une source de vbfrance pour tester, car c'est pour placer dans mon programme de lecture de partition.
la source c'est ici
Source Capture Midi

Merci de ton aide

Robert
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
quel est le code executé dans cette fonction de callback (ou dans ton Text1_Change, pour reprendre la topologie de la source citée)

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
Bonjour Renfield

Je fait ceci
Public Function MidiIn_Event(ByVal MidiInHandle As Long, ByVal Message As Long, ByVal Instance As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
     If dw1 > 2 Then Form1.Text1.Text = dw1
    
End Function


puis dans le texte1_change je fait ceci
Text2.Text = Left(Right("00000000" + Hex(Text1.Text), 6), 4)

j' ai essaye ceci aussi
 Text4.Text = Int("&H" + Right(Text2.Text, 2))


Merci

Une bouteille de vin à celui qui m'aide a trouvé la solution
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
dangereuses conversions...
le fait que le callback plante si on ne passe pas par un Event est simple a comprendre : il est important que la procédure reste disponible.

si tu débugge ton code, l'appli est endormie. tu as prévenu ton driver de déclencher une procédure qui ne réagit pas => plantage

en passant par les evenements, tu rends la main au pilote illico...

pas top malgré cela de passer par ce genre de conversion (Long => texte => Hexa)

tu y verra plus clair en faisant :
Public Function MidiIn_Event(ByVal MidiInHandle As Long, ByVal Message As Long, ByVal Instance As Long, ByVal dw1 As Long, ByVal dw2 As Long) As Long
     If dw1 > 2 Then
         Form1.Text1.Text = Hex$(dw1)
     End If
End Function

Private Function Hex$(Number, Optional Taille As Long = 6)
    Hex = Conversion.Hex$(Number)
    If Taille > Len(Buffer) Then
        Hex = String(Taille - Len(Hex), "0") & Hex
    End If
End Function


Et dans ton _change, tu peux manipuler le .Text sans souci :

l'idée est de ne pas faire de Hex sur un String... srtout qu'au départ on a bien un numérique.

Text2.Text = Left$(Text1.Text, 4)
Text4.Text = Val("&H" + Right(Text2.Text, 2) & "&")

Alors non, ca ne va surement rien solutionner, mais au moins tu y verra plus clair dans ton code.

a voir aussi quand tu fais un dump de ce type :

FE65B0164B04006B026B065B1164B14006B126B1163B3962B34506B326B365B3164B34006B326B3163B3962B34006B326B365B2164B24006B226B2FE

a bien mettre des espaces pour séparer les octets

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
675
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
26 mai 2013
1
RE ,
j' ai essayer avec ton idée c'est plus découpé ça oui mais mon probleme n 'est pas la , le probleme est que je ne récupère pas la même chose

je veux dire que 25426032913124196016990426033913134196017990591059615091452369999072603591315419601999079105961509141960199907260349131441960189906254

c'est la même chose que ceci (enfin ici ce n'est que les deux premiere ligne)

F0 43 10 4C 08 02 20 00 F7

F0 43 10 4C 08 02 77 2B F7
c'est ça que j'essaye de faire ,