From ceac394c2133d44e81db2eb633ff54a9ad6ce7c5 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 10 Nov 2005 05:52:11 +0000 Subject: This commit was generated by cvs2svn to compensate for changes in r3865, which included commits to RCS files with non-trunk default branches. svn path=/trunk/extensions/gripd/; revision=3866 --- src/midi.cpp | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/midi.cpp (limited to 'src/midi.cpp') diff --git a/src/midi.cpp b/src/midi.cpp new file mode 100644 index 0000000..1d63446 --- /dev/null +++ b/src/midi.cpp @@ -0,0 +1,146 @@ +/* GrIPD v0.1.1 - Graphical Interface for Pure Data +** Copyright (C) 2003 Joseph A. Sarlo +** +** This program is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License +** as published by the Free Software Foundation; either version 2 +** of the License, or (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +** +** jsarlo@ucsd.edu +*/ + +#include "midiiolib.h" +#include +#ifndef NT +#include +#endif +#define MAXDEVS 16 +#define MAXEVENTS 4096 + +#ifndef VISUAL +using namespace std; +#endif + +static int eventCount[MAXDEVS]; +static int eventCommand[MAXEVENTS][MAXDEVS]; +static int eventP0[MAXEVENTS][MAXDEVS]; +static int eventP1[MAXEVENTS][MAXDEVS]; +static int eventP2[MAXEVENTS][MAXDEVS]; +static int eventP3[MAXEVENTS][MAXDEVS]; +static MidiInput mInput[MAXDEVS]; +static int devCount = 0; +static int devList[MAXDEVS]; + +int openDevice(int dev) { + int i, devId, numPorts; + + numPorts = MidiInPort::getNumPorts(); + if (dev >= numPorts || dev < 0) { + return (-1); + } + else { + if (devCount == 0) { + for (i = 0; i < MAXDEVS; i++) { + devList[i] = 0; + } + } + for (i = 0; i < MAXDEVS; i++) { + if (devList[i] == 0) { + devId = i; + i = MAXDEVS; + } + } + devCount++; + eventCount[devId] = 0; + devList[devId] = 1; + mInput[devId].setPort(dev); + mInput[devId].open(); + return (devId); + } +} + +int closeDevice(int devno) { + if (devList[devno]) { + devCount--; + devList[devno] = 0; +#ifndef LINUX + mInput[devno].close(); +#endif + return (1); + } + else + return (-1); +} + +int readEvents(int devno) { + int i; + MidiMessage message; + + if (devno < 0 || devno >= MAXDEVS) + return (-1); + eventCount[devno] = mInput[devno].getCount(); + if (eventCount[devno] > MAXEVENTS) { + eventCount[devno] = MAXEVENTS; + } + for (i = 0; i < eventCount[devno]; i++) { + message = mInput[devno].extract(); + eventCommand[i][devno] = message.getCommand(); + eventP0[i][devno] = message.getP0(); + eventP1[i][devno] = message.getP1(); + eventP2[i][devno] = message.getP2(); + eventP3[i][devno] = message.getP3(); + } + return (eventCount[devno]); +} + +int getEventCount(int devno) { + if (devno < 0 || devno >= MAXDEVS) + return (-1); + else + return (eventCount[devno]); +} + +int getEventCommand(int devno, int eNum) { + if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS) + return (-1); + else + return eventCommand[eNum][devno]; +} + +int getEventP0(int devno, int eNum) { + if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS) + return (-1); + else + return eventP0[eNum][devno]; +} + +int getEventP1(int devno, int eNum) { + if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS) + return (-1); + else + return eventP1[eNum][devno]; +} + +int getEventP2(int devno, int eNum) { + if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS) + return (-1); + else + return eventP2[eNum][devno]; +} + +int getEventP3(int devno, int eNum) { + if (eNum < 0 || eNum >= eventCount[devno] || devno < 0 || devno >= MAXDEVS) + return (-1); + else + return eventP3[eNum][devno]; +} + -- cgit v1.2.1