Bonjour,
Je souhaite récupérer les messages SYSEX envoyés par un TYOS 5 (Yamaha)
Pour le moment je suis dans la CallBack ...
j'ai ouvert mon port Midi IN et l'écoute : ça ça fonctionne
J'appuie sur un bouton du TYROS : je vais bien dans ma fonction CallBack
Je récupere le contenu de wMsg, de dwParam1 et dwParam 2
et là je tourne en rond pour décoder les infos
Voilà le PB posé
Ce que j'ai fait
Mes structures
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 //----------------------------------------------------------------------------------------------------------------------------- STMIDIHDR est une Structure DataPtr est une chaîne // Address of MIDI data BufferLength est un entier sur 8 // Size of the buffer BytesRecorded est un entier sur 8 // Actual amount of data in the buffer. This value should be less than or equalto the value given in the dwBufferLength member MhdrID est un entier sur 8 // Custom user data Flags est un entier sur 8 // Flags giving information about the buffer Reserved1 est un entier sur 8 // Reserved - do not use Reserved2 est un entier sur 8 // Reserved - do not use CallbackOffset est un entier //Type C : DWORD offset into Buffer WHEN callback is performed Reserved3a est un entier sur 8 octets //Type C : DWORD Reserved3b est un entier sur 8 octets //Type C : DWORD Reserved3c est un entier sur 8 octets //Type C : DWORD Reserved3d est un entier sur 8 octets //Type C : DWORD FIN gstHDRMidi est un STMIDIHDR gstPMidiHdr est un STMIDIHDR
Ouverture et Ecoute
Ma fonction CallBack
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 //******************************************************************************************** PROCEDURE MidiIN_Lance(nDevice est un entier système) //******************************************************************************************** nRetFonc2 est un entier nRetFoncStart est un entier nsyNGnIDProced est un entier système = &MidiInCalBak // pointeur de la fonction de callback nRetourMidiIn est un entier sTestSaisie est une chaîne FEN_PRINCIPALE.BTN_MidiInDemarre..Visible = Faux // Pour ne pas ouvrir plusieurs à la fois et ne pas planter //FEN_PRINCIPALE.ListeMidiIN..Visible = Faux //POUR i = 1 _A_ NumSysexBuffers //Marshal.FreeHGlobal(MidiInHdr[i].DataPtr) //Liberer MidiInHdr[i] //midiInUnprepareHeader(i) nRetourMidiIn = API("WINMM.DLL","midiInUnprepareHeader",gnHandleMidiIn, &gstHDRMidi, Dimension(gstHDRMidi)) StopCapture() nRetFonc2 = API("WINMM.DLL","midiInOpen",&gnHandleMidiIn,nDevice, &MidiHandlerBack,0,CALLBACK_FUNCTION)// On lance l'écoute du driver sélectionné ThreadExécute("EcouteIN",threadNormal,StartMidiIn) //nRetFoncStart = StartMidiIn() //RetFoncStart = API("WINMM.DLL","midiInStart",gnHandleMidiIn) // On démarre l'écoute // Il faudra recupérer un Numero de partition , afficher une partition et relancer le thread FEN_PRINCIPALE.LIB_Message..Libellé = "Sysex -> J'attend le sysex....." // Si pas d'appui sur un bouton du TYROS : c'est une partition affichée et il faut laisser la main à la fenetre principale sTestSaisie = FEN_PRINCIPALE.SAI_TestPendantThread //------------------------------------------------------------------------------------------- PROCEDURE StartMidiIn() //------------------------------------------------------------------------------------------- nRetFoncStart est un entier nRet2,nRet3 est un entier nRetFoncStart = API("WINMM.DLL","midiInStart",gnHandleMidiIn) // On démarre l'écoute nRet2 = API("WINMM.DLL","midiInPrepareHeader",gnHandleMidiIn, &gstHDRMidi, Dimension(gstHDRMidi)) nRet3 = API("WINMM.DLL","midiInAddBuffer",gnHandleMidiIn, &gstHDRMidi, Dimension( &gstHDRMidi)) RENVOYER nRetFoncStart //********************************************************************************* PROCEDURE StopCapture() //********************************************************************************* nRetFonc,nRetFonc1,nRetFonc2 est un entier // on veut quitter nRetFonc = API("WINMM.DLL","midiInReset",gnHandleMidiIn) // on réinitialise nRetFonc1 = API("WINMM.DLL","midiInStop",gnHandleMidiIn) nRetFonc2 = API("WINMM.DLL","midiInClose",gnHandleMidiIn)
CE que je reçois
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152 //------------------------------------------------------------------------------------------------------------- PROCEDURE MidiHandlerBack( nStINMidi est un entier,wMsg est un entier système,dwParam1 est un entier système,DwParam2 est un entier système) //------------------------------------------------------------------------------------------------------------- //PROCEDURE MidiHandlerBack( stINMidi est un entier,wMsg est un entier systeme,nsyDwInstance est un entier systeme,dwParam1 est un entier système,DwParam2 est un entier système) //STTMidiBufferItem est une Structure // timestamp est un entier sans signe sur 2 octets // Timestamp IN milliseconds after midiInStart } // data est un entier sans signe sur 2 octets // MIDI Message received } // stLeSYSEX est un entier systeme // Pointer TO SYSEX MIDIHDR, nil IF NOT SYSEX } //FIN //PMidiBufferItem est un STTMidiBufferItem //TCircularBuffer est une Structure // RecordHandle est un entier système // Windows memory Handle FOR this record } // BufferHandle est un entier système // Windows memory Handle FOR the buffer } // pStart est un entier systeme // ptr TO start of buffer } // pEnd est un entier systeme // ptr TO END of buffer } // pNextPut est un entier systeme // next location TO fill } // //pNextGet est un STTMidiBufferItem // next location TO empty } // pNextGet est un entier systeme // Anomalie est un entier sans signe sur 2 octets // Error code from MMSYSTEM functions } // Capacity est un entier sans signe sur 2 octets // buffer size (IN TMidiBufferItems) } // EventCount est un entier sans signe sur 2 octets // Number of events IN buffer } //PCircularBuffer est un TCircularBuffer //TMidiCtlInfo est une Structure // hMem est un entier système // Memory Handle FOR this record } // nsyPBuffer est un entier systeme // Pointer TO the MIDI Input data buffer } // hWindow est un entier système // Control's window Handle } // SysexOnly est un booléen // Only process System Exclusive Input } // FilterMTC est un booléen // Filter Midi Time Code messages out } // FilterAS est un booléen // Filter Active Sensing messages out } //FIN //stPMidiCtlInfo est un TMidiCtlInfo stThisEvent est un STTMidiBufferItem stthisCtlInfo est un TMidiCtlInfo stthisBuffer est un TCircularBuffer bProcessThisMessage est un booléen bResCircbuf est un booléen nsyPointeurDataSysex est un entier système nsyPointeurDataSysex = &gstHDRMidi.DataPtr FEN_PRINCIPALE.LIB_Message1 = "je suis dans la CallBack nStInMidi = " + nStINMidi SELON wMsg CAS MM_MIM_RIEN // Code 254 CAS MM_MIM_OPEN //nothing}; CAS MM_MIM_ERROR //TODO: handle (message to trigger exception?) }; CAS MM_MIM_DATA, MM_MIM_LONGDATA, MM_MIM_LONGERROR // Note: mim_Longerror included because there's a bug in the Maui // input driver that sends MIM_LONGERROR for subsequent buffers when //the input buffer is smaller than the sysex block being received } //stthisCtlInfo = nsydwInstance // Filter messages if enabled (is there a more efficient way? SELON dwParam1 //case dwParam1 of CAS MIDI_ACTIVESENSING //254 bProcessThisMessage = PAS stthisCtlInfo.FilterAS CAS MIDI_TIMINGCLOCK //248 bProcessThisMessage = PAS stthisCtlInfo.FilterMTC AUTRE CAS bProcessThisMessage = Vrai FIN SI bProcessThisMessage ALORS // The device driver passes us the instance data pointer we // specified for midiInOpen. Use this to get the buffer address // and window handle for the MIDI control } stthisBuffer.pStart = stthisCtlInfo.nsyPBuffer // Screen out short messages if we've been asked to } SI ((wMsg <> MM_MIM_DATA) OR (stthisCtlInfo.SysexOnly = Faux)) ET (stthisCtlInfo <> Null) AND (stthisBuffer <> Null) ALORS stThisEvent.timestamp = DwParam2 stThisEvent.data = nsyPointeurDataSysex stthisCtlInfo.nsyPBuffer = nsyPointeurDataSysex SI DwParam2 <> MM_MIM_RIEN ALORS Trace("Event est Param 2:" +"wMsg = "+wMsg + " " + "param 1 = "+dwParam1+" "+"Param 2 = "+DwParam2 + " Data = "+ gstPMidiHdr.DataPtr) TableAjouteLigne(FEN_PRINCIPALE.TABLE_InfocallBack,"Event est Param2 : wMsg = ",wMsg,dwParam1,DwParam2,nsyPointeurDataSysex) // La faudrait décoder et envoyer .... je sais pas ou FIN bResCircbuf = CircbufPutEvent(stthisBuffer, stThisEvent) SINON SI DwParam2 <> MM_MIM_RIEN ALORS Trace("Event est Param 1:" +" wMsg = "+wMsg + " " + "param 1 = "+dwParam1+" "+"Param 2 = "+DwParam2+ " Data = "+ gstPMidiHdr.DataPtr) TableAjouteLigne(FEN_PRINCIPALE.TABLE_InfocallBack,"Event est Param1 : wMsg = ",wMsg,dwParam1,DwParam2,gstPMidiHdr.DataPtr) // La faudrait décoder et envoyer .... je sais pas ou FIN stThisEvent.data = dwParam1 SI (wMsg = MM_MIM_LONGDATA) OU (wMsg = MM_MIM_LONGERROR) ALORS stThisEvent.data = 0 stThisEvent.stLeSYSEX = dwParam1 FIN stThisEvent.stLeSYSEX = Null FIN FIN SI bResCircbuf ALORS // Send a message to the control to say input's arrived } PostMessage(stthisCtlInfo.hWindow, MM_MIM_DATA, 0, 0) SINON // Buffer overflow } //PostMessage(stthisCtlInfo.hWindow, gnmim_Overflow, 0, 0); //PostMessage(stthisCtlInfo.hWindow, WM_USER, 0, 0) FIN CAS MOM_DONE // Sysex output complete, dwParam1 is pointer to MIDIHDR } // Notify the control that its sysex output is finished. // The control should call midiOutUnprepareHeader before freeing the buffer } PostMessage(stPMidiCtlInfo.hWindow, MOM_DONE, 0, dwParam1) FIN //{ SELON wMsg } //------------------------------------------------------------------------------------------------------ PROCEDURE CircbufPutEvent(stPBuffer est un TCircularBuffer, stPTheEvent est un STTMidiBufferItem) //------------------------------------------------------------------------------------------------------ // Add an event to the circular input buffer. bValeurRetour est un booléen //Trace("stPBuffer.EventCount = " + stPBuffer.EventCount) //Trace("stPBuffer.Capacity = " + stPBuffer.Capacity) //Trace("stPBuffer.pNextPut = " + stPBuffer.pNextPut) //Trace("stPBuffer.pEnd = " + stPBuffer.pEnd) //Trace("stPBuffer.pStart = " + stPBuffer.pStart) SI (stPBuffer.EventCount < stPBuffer.Capacity) ALORS stPBuffer.EventCount++ // Todo: better way of copying this record } //with PBuffer^.PNextput^ do stPTheEvent.timestamp = stPTheEvent.timestamp stPTheEvent.data = stPTheEvent.data stPTheEvent.stLeSYSEX = stPTheEvent.stLeSYSEX // Move to next put location, with wrap } stPBuffer.pNextPut++ SI (stPBuffer.pNextPut = stPBuffer.pEnd) ALORS stPBuffer.pNextPut = stPBuffer.pStart bValeurRetour = Vrai FIN SINON bValeurRetour = Faux FIN RENVOYER bValeurRetour
ce que j'ai reçu de BomeSendX pour le même bouton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257 Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 176 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7413936 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 192 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6555568 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26032 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91312 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2120624 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6815921 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 336049 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 193 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6293425 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 3016625 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4606641 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26033 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91313 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1727409 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 179 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7676083 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 12739 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 3606451 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2885555 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1574323 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26035 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91315 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 3300275 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 178 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7545010 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 194 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6555570 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1458 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26034 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91314 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1727410 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2623412 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2623413 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2623414 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2623415 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2493108 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2493109 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2493110 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2493111 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24254 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24253 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24252 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1334971 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24250 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24249 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24248 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24254 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24253 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24252 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1334971 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24250 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24249 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24248 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 176 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7413936 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 192 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6555568 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4197040 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 8326064 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2120624 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 23984 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24240 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26032 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 25776 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 132784 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26032 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 156848 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26032 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91312 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4194528 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 208 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 432 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16560 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16816 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17072 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17328 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212912 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212656 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213168 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213424 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1456 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91056 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 549552 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91056 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 615088 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91056 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 680624 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91056 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6578864 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196016 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9904 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6815921 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 336049 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 193 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 3016625 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4197041 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 8326065 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1727409 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 23985 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24241 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26033 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 25777 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 132785 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26033 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 156849 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26033 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91313 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4194529 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 209 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 433 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16561 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16817 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17073 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17329 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212913 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212657 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213169 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4606641 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1457 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91057 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 549553 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91057 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 615089 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91057 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 680625 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91057 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6578865 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196017 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9905 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 179 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7676083 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 12739 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 2885555 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4197043 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 8326067 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 3300275 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 23987 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24243 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26035 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 25779 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1715 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26035 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 156851 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26035 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91315 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4194531 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 211 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 435 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16563 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16819 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17075 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17331 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212915 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212659 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213171 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213427 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1574323 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91059 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 549555 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91059 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 615091 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91059 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 680627 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91059 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6578867 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196019 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9907 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 178 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 7545010 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 194 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6555570 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4197042 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 8326066 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1727410 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 23986 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 24242 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26034 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 25778 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 132786 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26034 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 156850 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 26034 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91314 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4194530 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 210 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 434 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16562 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 16818 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17074 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 17330 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212914 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4212658 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213170 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4213426 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 1458 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91058 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 549554 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91058 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 615090 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91058 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 680626 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 4196018 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 9906 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 91058 Data = Event est Param 2:wMsg = 963 param 1 = 0 Param 2 = 6578866 Data =
Théoriquement il faut que j'applique un filtre F9 qui a la valeur dans mes constantes: FILTER_F9 = 0xF9 //filter undefined F9F0 43 10 4C 08 00 76 10 F7
F0 43 10 4C 08 00 72 6C F7
F0 43 10 4C 08 00 73 60 F7
F0 43 10 4C 08 01 0D 3A F7
F0 43 10 4C 08 01 0C 43 F7
F0 43 10 4C 08 01 0C 47 F7
F0 43 10 4C 08 01 76 10 F7
F0 43 10 4C 08 01 72 40 F7
F0 43 10 4C 08 01 77 2B F7
F0 43 10 4C 08 01 73 67 F7
F0 43 10 4C 08 03 1E 37 F7
F0 43 10 4C 0A 03 40 28 F7
F0 43 10 4C 0A 03 42 47 F7
F0 43 10 4C 08 03 0D 40 F7
F0 43 10 4C 08 02 1E 2A F7
F0 43 10 4C 08 02 76 10 F7
F0 43 10 4C 08 02 77 2F F7
F0 43 10 4C 03 03 00 15 00 F7
F0 43 10 4C 03 03 0C 03 F7
F0 43 10 4C 03 03 0B 24 F7
F0 43 10 4C 03 04 00 57 10 F7
F0 43 10 4C 03 04 0B 0C F7
F0 43 10 4C 10 00 0B 00 F7
F0 43 10 4C 10 00 13 1E F7
F0 43 10 4C 04 00 00 5A 17 F7
F0 43 10 4C 04 00 0C 7F F7
F0 43 10 4C 04 00 18 7F F7
F0 43 10 4C 04 00 19 7F F7
F0 43 10 4C 04 00 1A 00 F7
F0 43 10 4C 04 00 1B 00 F7
F0 43 73 01 11 00 50 10 02 F7
F0 43 10 4C 04 00 60 00 00 F7
F0 43 10 4C 02 01 00 01 20 F7
F0 43 10 4C 02 01 20 41 00 F7
F0 43 10 4C 02 01 40 15 00 F7
F0 43 10 4C 02 01 5A 01 F7
F0 43 10 4C 02 01 42 00 08 F7
F0 43 10 4C 02 40 01 49 F7
F0 43 10 4C 02 40 02 1F F7
F0 43 10 4C 02 40 03 14 F7
F0 43 10 4C 02 40 05 47 F7
F0 43 10 4C 02 40 06 1B F7
F0 43 10 4C 02 40 07 0C F7
F0 43 10 4C 02 40 09 46 F7
F0 43 10 4C 02 40 0A 26 F7
F0 43 10 4C 02 40 0B 10 F7
F0 43 10 4C 02 40 0D 45 F7
F0 43 10 4C 02 40 0E 2A F7
F0 43 10 4C 02 40 0F 19 F7
F0 43 10 4C 02 40 11 49 F7
F0 43 10 4C 02 40 12 36 F7
F0 43 10 4C 02 40 13 0A F7
F0 43 10 4C 02 01 40 40 00 F7
F0 7E 7F 09 01 F7
F0 43 10 4C 02 01 00 01 20 F7
F0 43 10 4C 02 01 0C 40 F7
F0 43 10 4C 02 01 0D 40 F7
F0 43 10 4C 02 01 20 41 00 F7
F0 43 10 4C 02 01 2D 40 F7
F0 43 10 4C 02 01 2E 00 F7
F0 00 00 04 04 F7 <---------------------------C'est celui-là et seulement celui-là qui m'intéresse: partition N° 44
F0 43 10 4C 02 01 40 15 00 F7
F0 43 10 4C 02 01 5A 01 F7
F0 43 10 4C 02 01 5B 7F F7
F0 43 10 4C 02 01 42 00 08 F7
F0 43 10 4C 02 01 56 40 F7
F0 43 10 4C 02 01 57 40 F7
F0 43 10 4C 02 01 58 00 F7
F0 43 10 4C 02 01 59 00 F7
F0 43 10 4C 02 01 5C 40 F7
F0 43 10 4C 02 01 5D 40 F7
F0 43 10 4C 02 01 5E 40 F7
F0 43 10 4C 02 01 5F 40 F7
F0 43 10 4C 02 01 60 40 F7
F0 43 10 4C 08 08 14 00 F7
F0 43 10 4C 08 09 14 00 F7
F0 43 10 4C 08 0A 14 00 F7
F0 43 10 4C 08 0B 14 14 F7
F0 43 10 4C 08 0C 14 00 F7
F0 43 10 4C 08 0D 14 00 F7
F0 43 10 4C 08 0E 14 00 F7
F0 43 10 4C 08 0F 14 00 F7
F0 43 10 4C 04 00 00 5A 17 F7
F0 43 10 4C 08 00 11 7F F7
F0 43 10 4C 08 00 72 6C F7
F0 43 10 4C 08 00 73 60 F7
F0 43 10 4C 08 00 76 10 F7
F0 43 10 4C 08 00 77 2F F7
F0 43 10 4C 08 00 1E 2A F7
F0 43 10 4C 08 00 20 00 F7
F0 43 10 4C 08 01 11 7F F7
F0 43 10 4C 08 01 72 40 F7
F0 43 10 4C 08 01 73 67 F7
F0 43 10 4C 08 01 76 10 F7
F0 43 10 4C 08 01 77 2B F7
F0 43 10 4C 08 01 0C 47 F7
F0 43 10 4C 08 01 0D 3A F7
F0 43 10 4C 08 01 1E 2A F7
F0 43 10 4C 08 01 20 00 F7
F0 43 10 4C 08 03 11 7F F7
F0 43 10 4C 08 03 72 40 F7
F0 43 10 4C 08 03 73 40 F7
F0 43 10 4C 08 03 76 10 F7
F0 43 10 4C 08 03 77 2F F7
F0 43 10 4C 0A 03 40 28 F7
F0 43 10 4C 0A 03 42 47 F7
F0 43 10 4C 08 03 1E 37 F7
F0 43 10 4C 08 03 20 00 F7
F0 43 10 4C 08 02 11 7F F7
F0 43 10 4C 08 02 72 40 F7
F0 43 10 4C 08 02 73 40 F7
F0 43 10 4C 08 02 76 10 F7
F0 43 10 4C 08 02 77 2F F7
F0 43 10 4C 08 02 1E 2A F7
F0 43 10 4C 08 02 20 00 F7
parce que mon sysex n'a pas la structure standard des sysex : donc il doit sortir en exception
J'ai essayé de convertir du code DELPHI mais je tricote dans les pointeurs et les classes (Mes connaissances Pascal datent d'il y a au moins 30 ans donc j'ai un peu oublié
Si une âme charitable pouvait me donner un début de solution pour passer d'un Param 2 = 2885555 à une info SYSEX Exploitable F0........F7
Mon dernier problème
J'ai lancé l'écoute dans un Thread
donc mon programme passe à la suite tant que je n'ai pas appuyé sur un bouton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nRetFonc2 = API("WINMM.DLL","midiInOpen",&gnHandleMidiIn,nDevice, &MidiHandlerBack,0,CALLBACK_FUNCTION)// On lance l'écoute du driver sélectionné ThreadExécute("EcouteIN",threadNormal,StartMidiIn)
J'appuie sur une registration : Ma table se remplit avec les codes Param2 (comme indiqué plus haut)
Pour le moment je sors manuellement et relance une nouvelle écoute
Il faudrait que :
Dès que j'ai récupéré le sysex qui m'intéresse :
- Je quitte la CallBack et l'écoute
- J'appelle ma partition
- Je relance l'écoute
Voilà le lien du Source de mon programme de test (En Windev 20)
https://share.orange.fr/#aE0lwQAfYC3cb9d8dacf
Je remercie par avance tous les spécialistes qui voudront bien me donner un coup de main
Partager