| 
							- /*
 -   Copyright (C) 2006-2011 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
 - */
 - 
 - #pragma once
 - 
 - #include "../globals.h"
 - 
 - #include "../JuceLibraryCode/JuceHeader.h"
 - 
 - class InputS
 - {
 - public:
 - 		InputS()
 -         {
 - 			skipbufsize=1024;
 - 			skipbuf.setSize(1, skipbufsize);
 - 		};
 - 
 - 		virtual ~InputS()
 -         {
 - 			
 - 		};
 - 		virtual bool openAudioFile(File file)=0;
 - 		virtual void close()=0;
 - 
 - 		virtual int readNextBlock(AudioBuffer<float>& abuf, int smps, int numchans)=0;
 - 		void skip(int nsmps)
 - 		{
 - 			while ((nsmps>0)&&(m_silenceoutputted<1))
 - 			{
 - 				int readsize=(nsmps<skipbufsize)?nsmps:skipbufsize;
 - 				if (skipbuf.getNumSamples() < readsize)
 - 					skipbuf.setSize(1, readsize);
 - 				readNextBlock(skipbuf,readsize,1);
 - 				nsmps-=readsize;
 - 			};
 - 		};
 - 		virtual void seek(double pos, bool immediate)=0;//0=start,1.0=end
 - 
 - 		struct {
 - 			int64_t nsamples=0;
 - 			int nchannels=0;
 - 			int samplerate=0;
 - 			
 - 		} info;
 - 		
 -     
 -     int getSilenceOutputtedAfterActiveRange()
 - 	{
 - 		return m_silenceoutputted;
 - 	}
 - 	Range<double> getActiveRange() { return m_activerange; }
 - 	double getLengthSeconds()
 - 	{
 - 		if (info.nsamples == 0 || info.samplerate==0)
 - 			return 0.0;
 - 		return (double)info.nsamples / info.samplerate;
 - 	}
 - 	virtual void setActiveRange(Range<double> rng) = 0;
 - 	bool isLooping() { return m_loop_enabled; }
 - 	virtual void setLoopEnabled(bool b) = 0;
 - 	int64_t getCurrentPosition() { return m_currentsample; }
 - 	double getCurrentPositionPercent() { return 1.0 / info.nsamples*m_currentsample; }
 - 	virtual bool hasEnded()
 - 	{
 - 		return m_currentsample >= info.nsamples*m_activerange.getEnd();
 - 	}
 -     virtual AudioBuffer<float>* getAudioBuffer()=0;
 - 	int64_t getDiskReadSampleCount() { return m_disk_read_count; }
 - protected:
 - 	volatile int64_t m_currentsample = 0;
 - 	int m_silenceoutputted = 0;
 - 	bool m_loop_enabled = false;
 - 	Range<double> m_activerange{ 0.0,1.0 };
 - 	int64_t m_disk_read_count = 0;
 - private:
 - 	int skipbufsize;
 - 	AudioBuffer<float> skipbuf;
 - 	JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(InputS)
 - };
 
 
  |