#ifndef __pcmbuffer_hpp__ #define __pcmbuffer_hpp__ #include "buffer.hpp" class PcmBuffer : public Buffer { private: unsigned int numsamples, maxsamples; void *data; unsigned int samplerate; unsigned int channels; unsigned int bytespersample; protected: public: PcmBuffer() : data((void*)0) { } virtual ~PcmBuffer(); virtual Type GetType() const { return TYPE_PCM; } unsigned int GetBlockSize() const { return channels*bytespersample; } unsigned int GetMaxSamples() const { return maxsamples; } void * GetData() const { return data; } void * GetDataAt(int sample) const { return (void*)((char*)data + (GetBlockSize()*(sample%numsamples))); } unsigned int GetNumSamples() const { return numsamples; } unsigned int GetSampleRate() const { return samplerate; } unsigned int GetNumChannels() const { return channels; } unsigned int GetBytesPerSample() const { return bytespersample; } unsigned int GetBitsPerSample() const { return bytespersample * 8; } void SetNumSamples(unsigned int s) { if (s > maxsamples) s = maxsamples; numsamples = s; } bool Allocate(unsigned int nsamp, unsigned int srate, unsigned int chans, unsigned int bps); bool ConvertToNByte(int n); }; #endif