From e40fc849149dd97c248866a4a1d026dda5e57b62 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Mon, 7 Mar 2011 19:01:11 +0000 Subject: clean3 --- .../synti/zynaddsubfx/Input/OSSMidiIn.C | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C (limited to 'attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C') diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C new file mode 100644 index 00000000..5a6ae509 --- /dev/null +++ b/attic/muse_qt4_evolution/synti/zynaddsubfx/Input/OSSMidiIn.C @@ -0,0 +1,115 @@ +/* + ZynAddSubFX - a software synthesizer + + OSSMidiIn.C - Midi input for Open Sound System + Copyright (C) 2002-2005 Nasca Octavian Paul + Author: Nasca Octavian Paul + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License + as published by the Free Software Foundation. + + 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 (version 2) for more details. + + You should have received a copy of the GNU General Public License (version 2) + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "OSSMidiIn.h" +#include "../Misc/Util.h" + +OSSMidiIn::OSSMidiIn(){ + inputok=0; + midi_handle=open(config.cfg.LinuxOSSSeqInDev,O_RDONLY,0); + if (midi_handle!=-1) inputok=1; + + lastmidicmd=0; + cmdtype=0; + cmdchan=0; + +}; + +OSSMidiIn::~OSSMidiIn(){ + close(midi_handle); +}; + +unsigned char OSSMidiIn::readbyte(){ + unsigned char tmp[4]; + read(midi_handle,&tmp[0],1); + while (tmp[0]!=SEQ_MIDIPUTC){ + read(midi_handle,&tmp[0],4); + }; + return(tmp[1]); +}; + +unsigned char OSSMidiIn::getmidibyte(){ + unsigned char b; + do { + b=readbyte(); + } while (b==0xfe);//drops the Active Sense Messages + return(b); +}; + +/* + * Get the midi command,channel and parameters + */ +void OSSMidiIn::getmidicmd(MidiCmdType &cmdtype,unsigned char &cmdchan,int *cmdparams){ + unsigned char tmp,i; + if (inputok==0) { + cmdtype=MidiNull; + return; + }; + i=0; + if (lastmidicmd==0){//asteapta prima data pana cand vine prima comanda midi + while (tmp<0x80) tmp=getmidibyte(); + lastmidicmd=tmp; + }; + + tmp=getmidibyte(); + + if (tmp>=0x80) { + lastmidicmd=tmp; + tmp=getmidibyte(); + }; + + if ((lastmidicmd>=0x80)&&(lastmidicmd<=0x8f)){//Note OFF + cmdtype=MidiNoteOFF; + cmdchan=lastmidicmd%16; + cmdparams[0]=tmp;//note number + }; + + if ((lastmidicmd>=0x90)&&(lastmidicmd<=0x9f)){//Note ON + cmdtype=MidiNoteON; + cmdchan=lastmidicmd%16; + cmdparams[0]=tmp;//note number + cmdparams[1]=getmidibyte();//velocity + if (cmdparams[1]==0) cmdtype=MidiNoteOFF;//if velocity==0 then is note off + }; + if ((lastmidicmd>=0xB0)&&(lastmidicmd<=0xBF)){//Controllers + cmdtype=MidiController; + cmdchan=lastmidicmd%16; + cmdparams[0]=getcontroller(tmp); + cmdparams[1]=getmidibyte(); + }; + if ((lastmidicmd>=0xE0)&&(lastmidicmd<=0xEF)){//Pitch Wheel + cmdtype=MidiController; + cmdchan=lastmidicmd%16; + cmdparams[0]=C_pitchwheel; + cmdparams[1]=(tmp+getmidibyte()*(int) 128)-8192;//hope this is correct + }; +}; + + -- cgit v1.2.3