1
1
//=========================================================
3
3
// Linux Music Editor
4
// $Id: midirawdev.cpp,v 1.2 2002/02/07 08:14:48 muse Exp $
4
// $Id: midirawdev.cpp,v 1.1.1.1 2003/10/29 10:06:11 wschweer Exp $
5
5
// (C) Copyright 1999 Werner Schweer (ws@seh.de)
6
6
//=========================================================
8
8
#include "midirawdev.h"
11
12
#include "midictrl.h"
54
55
fprintf(stderr, "midi write error: %s\n", strerror(errno));
59
fprintf(stderr, "midi write: written %d from %d\n", nn, n);
60
64
int n = iobuffer + IO_BUFFERSIZE - rp;
61
66
int nn = write(rp, n);
63
68
fprintf(stderr, "midi write error: %s\n", strerror(errno));
72
fprintf(stderr, "midi write: written %d from %d\n", nn, n);
68
76
int n = wp - iobuffer;
164
175
//---------------------------------------------------------
166
void MidiRawDevice::putEvent(const MidiEvent* e)
177
void MidiRawDevice::putEvent(const MidiPlayEvent* e)
168
179
int chn = e->channel();
169
180
int a = e->dataA();
170
181
int b = e->dataB();
173
case MidiEvent::Note:
174
chnEvent2(chn, 0x90, a, b);
176
case MidiEvent::NoteOff:
177
chnEvent2(chn, 0x80, a, b);
179
case MidiEvent::Program:
180
chnEvent1(chn, 0xc0, a);
182
case MidiEvent::Ctrl7:
183
chnEvent2(chn, 0xb0, a, b);
185
case MidiEvent::Ctrl14:
186
chnEvent2(chn, 0xb0, a, b & 0x7f);
187
chnEvent2(chn, 0xb0, a >> 7, b >> 7);
190
chnEvent2(chn, 0xb0, CTRL_LDATA, b & 0x7f);
191
chnEvent2(chn, 0xb0, CTRL_HDATA, b >> 7);
192
chnEvent2(chn, 0xb0, CTRL_LRPN, a & 0x7f);
193
chnEvent2(chn, 0xb0, CTRL_HRPN, a >> 7);
195
case MidiEvent::NRPN:
196
chnEvent2(chn, 0xb0, CTRL_LDATA, b & 0x7f);
197
chnEvent2(chn, 0xb0, CTRL_HDATA, b >> 7);
198
chnEvent2(chn, 0xb0, CTRL_LNRPN, a & 0x7f);
199
chnEvent2(chn, 0xb0, CTRL_HNRPN, a >> 7);
201
case MidiEvent::Pitch:
203
int lval = (a - 8192) & 0x7f;
204
int hval = ((a - 8192) >> 7) & 0x7f;
205
chnEvent2(chn, 0xe0, lval, hval);
208
case MidiEvent::PAfter:
209
chnEvent2(chn, 0xa0, a, b);
211
case MidiEvent::CAfter:
212
chnEvent1(chn, 0xd0, a);
214
case MidiEvent::Sysex:
190
chnEvent2(chn, typ, a, b);
194
chnEvent1(chn, typ, a);
216
198
const unsigned char* data = e->data();
217
int n = e->dataLen();
276
258
void MidiRawDevice::sysexReceived(const unsigned char* p, int n)
278
MidiEvent* event = new MidiEvent(port(), 0, 0, MidiEvent::Sysex, n, p);
260
MidiPlayEvent* event = new MidiPlayEvent(port(), p, n);
279
261
midiThread->eventReceived(event);