//////////////////////////////////////////////////////////////////////// // This file is part of the SndObj library // // 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 // // Copyright (c)Victor Lazzarini, 1997-2004 // See License.txt for a disclaimer of all warranties // and licensing information //************************************************************// // SndIO.h: interface of the SndIO base class. // // // // // // // //************************************************************// #ifndef _SNDIO_H #define _SNDIO_H #include #include "SndObj.h" enum{FLOATSAM=0, BYTESAM, SHORTSAM_LE}; const int SHORTSAM_BE = -2; const int S24LE = 3; const int S24BE = -3; const int LONGSAM = 4; enum{SND_INPUT, SND_OUTPUT, SND_IO}; #ifdef WIN const int SHORTSAM = SHORTSAM_LE; #endif #ifdef OSS const int SHORTSAM = SHORTSAM_LE; #endif #ifdef ALSA const int SHORTSAM = SHORTSAM_LE; const int LONGSAM_LE = LONGSAM; const int LONGSAM_BE = 5; const int TWENTY_FOUR = 6; const int TWENTYFOUR_LE = TWENTY_FOUR; const int TWENTYFOUR_BE = 7; #endif #ifdef SGI const int SHORTSAM = SHORTSAM_BE; #endif #if defined(MACOSX) && defined(WORDS_BIGENDIAN) const int SHORTSAM = SHORTSAM_BE; #endif #if defined(MACOSX) && !defined(WORDS_BIGENDIAN) const int SHORTSAM = SHORTSAM_LE; #endif struct _24Bit { char s[3]; }; class SndIO { protected: SndObj** m_IOobjs; double* m_output; double m_sr; short m_channels; short m_bits; int m_vecsize; int m_vecsize_max; int m_vecpos; int m_error; int m_samples; short VerifySR(SndObj *InObj){ if(InObj->GetSr() != m_sr) return 0; else return 1; } public: short m_sampsize; double GetSr(){ return m_sr; } int GetVectorSize() { return m_vecsize; } void SetVectorSize(int vecsize); void LimitVectorSize(int limit) { if(limit <= m_vecsize_max){ m_vecsize = limit; m_samples = m_vecsize*m_channels; } } void RestoreVectorSize(){ m_vecsize = m_vecsize_max; } short GetChannels() { return m_channels; } short GetSize() { return m_bits; } double Output(int pos){ return m_output[pos]; } double Output(int pos, int channel){ return m_output[(pos*m_channels)+(channel-1)]; } short SetOutput(short channel, SndObj* input){ if(channel <= m_channels){ m_IOobjs[channel-1] = input; return 1; } else return 0; } SndIO(short channels=1, short bits=16,SndObj** inputlist=0, int vecsize = DEF_VECSIZE, double sr = DEF_SR); virtual ~SndIO(); virtual short Read(); virtual short Write(); virtual const char* ErrorMessage(); int Error() { return m_error; } }; #endif