/*  SpiralSynth
 *  Copyleft (C) 2000 David Griffiths <dave@pawfal.org>
 *
 *  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.
*/ 

#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream.h>
#include <limits.h>

#ifndef MIDI
#define MIDI

class MidiEvent
{
public:
	enum type{NONE,ON,OFF,PITCHBEND,PARAMETER};

	MidiEvent() {m_Type=NONE;}
	MidiEvent(type t, int octave, int note, float v) 
		{m_Type=t; m_Octave=octave; m_Note=note; m_Volume=v;}
		
	type GetType() {return m_Type;}
	float GetVolume() {return m_Volume;}
	int GetOctave() {return m_Octave;}
	int GetNote() {return m_Note;}
private:
	float m_Volume;
	type  m_Type;
	int   m_Octave;
	int   m_Note;
};

class MidiDevice
{
public:
	MidiDevice();
	~MidiDevice();
	
	MidiEvent GetEvent();
	void CollectEvents();
	void Close();

private:
	void Init();
	int m_MidiFd;
	int   m_Pipefd[2];
	int   m_ChildPID;
};

#endif
