// // Programmer: Craig Stuart Sapp // Creation Date: Thu May 11 21:10:02 PDT 2000 // Last Modified: Wed Oct 3 22:18:27 PDT 2001 (frozen to ALSA 0.5) // Filename: ...sig/maint/code/control/Sequencer_alsa05.cpp // Web Address: http://sig.sapp.org/src/sig/Sequencer_alsa05.cpp // Syntax: C++ // // Description: Basic MIDI input/output functionality for the // Linux ALSA raw midi devices. This class // is inherited by the classes MidiInPort_alsa05 and // MidiOutPort_alsa05. // #if defined(LINUX) && defined(ALSA05) #include "Sequencer_alsa05.h" #include "SigCollection.h" #include #include #include #include #include #include #ifndef OLDCPP #include using namespace std; #else #include #endif typedef unsigned char uchar; // define static variables: int Sequencer_alsa05::class_count = 0; int Sequencer_alsa05::initialized = 0; // static variables for MIDI I/O information database int Sequencer_alsa05::indevcount = 0; int Sequencer_alsa05::outdevcount = 0; SigCollection Sequencer_alsa05::rawmidi_in; SigCollection Sequencer_alsa05::rawmidi_out; SigCollection Sequencer_alsa05::midiincard; SigCollection Sequencer_alsa05::midioutcard; SigCollection Sequencer_alsa05::midiindevice; SigCollection Sequencer_alsa05::midioutdevice; SigCollection Sequencer_alsa05::midiinname; SigCollection Sequencer_alsa05::midioutname; /////////////////////////////// // // Sequencer_alsa05::Sequencer_alsa05 -- // default value: autoOpen = 1; // Sequencer_alsa05::Sequencer_alsa05(int autoOpen) { if (class_count < 0) { cerr << "Unusual class instatiation count: " << class_count << endl; exit(1); } else if (class_count == 0) { buildInfoDatabase(); } if (autoOpen) { open(); } class_count++; } ////////////////////////////// // // Sequencer_alsa05::~Sequencer_alsa05 -- // Sequencer_alsa05::~Sequencer_alsa05() { if (class_count == 1) { close(); removeInfoDatabase(); } else if (class_count <= 0) { cerr << "Unusual class instatiation count: " << class_count << endl; exit(1); } class_count--; } ////////////////////////////// // // Sequencer_alsa05::close -- close the sequencer device. The device // automatically closes once the program ends. // void Sequencer_alsa05::close(void) { int i; for (i=0; i