[PD-cvs] pd/src s_midi_pm.c,1.4.4.1.2.8.2.3,1.4.4.1.2.8.2.4
Mathieu Bouchard
matju at users.sourceforge.net
Tue Jul 24 05:21:49 CEST 2007
Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16979
Modified Files:
Tag: desiredata
s_midi_pm.c
Log Message:
part of a osx portmidi patch from Nathaniel Dose.
Index: s_midi_pm.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_midi_pm.c,v
retrieving revision 1.4.4.1.2.8.2.3
retrieving revision 1.4.4.1.2.8.2.4
diff -C2 -d -r1.4.4.1.2.8.2.3 -r1.4.4.1.2.8.2.4
*** s_midi_pm.c 24 Jul 2007 02:23:28 -0000 1.4.4.1.2.8.2.3
--- s_midi_pm.c 24 Jul 2007 03:21:47 -0000 1.4.4.1.2.8.2.4
***************
*** 4,11 ****
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
! this file calls portmidi to do MIDI I/O for MSW and Mac OSX.
*/
#include "m_pd.h"
#include "s_stuff.h"
--- 4,13 ----
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
! this file calls portmidi to do MIDI I/O for MSW and Mac OSX.
! applied sysexin/midiin patch by Nathaniel Dose, july 2007.
*/
+
#include "m_pd.h"
#include "s_stuff.h"
***************
*** 99,108 ****
writemidi4(mac_midioutdevlist[portno], byte, 0, 0, 0);
else if (byte == 0xf0) {
! mess[0] = 0xf7;
nbytes = 1;
sysex = 1;
} else if (byte == 0xf7) {
mess[nbytes] = byte;
! for (i = nbytes+1; i < 4; i++) mess[i] = 0;
writemidi4(mac_midioutdevlist[portno], mess[0], mess[1], mess[2], mess[3]);
sysex = 0;
--- 101,110 ----
writemidi4(mac_midioutdevlist[portno], byte, 0, 0, 0);
else if (byte == 0xf0) {
! mess[0] = 0xf0;
nbytes = 1;
sysex = 1;
} else if (byte == 0xf7) {
mess[nbytes] = byte;
! for (i = nbytes+1; i<4; i++) mess[i] = 0;
writemidi4(mac_midioutdevlist[portno], mess[0], mess[1], mess[2], mess[3]);
sysex = 0;
***************
*** 121,126 ****
nbytes++;
if (nbytes == 4) {
! writemidi4(mac_midioutdevlist[portno],
! mess[0], mess[1], mess[2], mess[3]);
nbytes = 0;
}
--- 123,127 ----
nbytes++;
if (nbytes == 4) {
! writemidi4(mac_midioutdevlist[portno], mess[0], mess[1], mess[2], mess[3]);
nbytes = 0;
}
***************
*** 145,148 ****
--- 146,160 ----
}
+ /* this is non-zero if we are in the middle of transmitting sysex */
+ int nd_sysex_mode=0;
+
+ /* send in 4 bytes of sysex data. if one of the bytes is 0xF7 (sysex end) stop and unset nd_sysex_mode */
+ void nd_sysex_inword(int midiindev, int status, int data1, int data2, int data3) {
+ if (nd_sysex_mode) {sys_midibytein(midiindev, status); if (status == 0xF7) nd_sysex_mode = 0;}
+ if (nd_sysex_mode) {sys_midibytein(midiindev, data1); if (data1 == 0xF7) nd_sysex_mode = 0;}
+ if (nd_sysex_mode) {sys_midibytein(midiindev, data2); if (data2 == 0xF7) nd_sysex_mode = 0;}
+ if (nd_sysex_mode) {sys_midibytein(midiindev, data3); if (data3 == 0xF7) nd_sysex_mode = 0;}
+ }
+
void sys_poll_midi() {
PmEvent buffer;
***************
*** 186,191 ****
sys_midibytein(i, Pm_MessageData2(msg));
break;
}
- break;
}
}
--- 198,209 ----
sys_midibytein(i, Pm_MessageData2(msg));
break;
+ case 0xf7: // from Nathaniel; don't know whether it'll work in this context.
+ nd_sysex_mode=1;
+ nd_sysex_inword(i, status, data1, data2, data3);
+ break;
+ default: // from Nathaniel too.
+ if (nd_sysex_mode) nd_sysex_inword(i, status, data1, data2, data3);
+ break;
}
}
}
More information about the Pd-cvs
mailing list