X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fimportable_source.h;h=804b0629699acf23e7d4bdb53996eba309610504;hb=494635b99b9cdac42fd7a14e80c78ce437d6f606;hp=fec670b4f5a673a4348a724c976685c0b6c8b633;hpb=9e8afdd306e373028f17ac8c244633664786216b;p=ardour.git diff --git a/libs/ardour/ardour/importable_source.h b/libs/ardour/ardour/importable_source.h index fec670b4f5..804b062969 100644 --- a/libs/ardour/ardour/importable_source.h +++ b/libs/ardour/ardour/importable_source.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2007 Paul Davis + Copyright (C) 2007 Paul Davis 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 @@ -20,31 +20,25 @@ #ifndef __ardour_importable_source_h__ #define __ardour_importable_source_h__ -#include -#include +#include "pbd/failed_constructor.h" +#include "ardour/types.h" namespace ARDOUR { class ImportableSource { - public: - ImportableSource (SNDFILE* sf, SF_INFO* info) : in (sf), sf_info (info) {} - virtual ~ImportableSource() {} - - virtual nframes_t read (Sample* buffer, nframes_t nframes) { - nframes_t per_channel = nframes / sf_info->channels; - per_channel = sf_readf_float (in, buffer, per_channel); - return per_channel * sf_info->channels; - } - - virtual float ratio() const { return 1.0f; } - - uint channels() const { return sf_info->channels; } - - nframes_t length() const { return sf_info->frames; } - -protected: - SNDFILE* in; - SF_INFO* sf_info; +public: + ImportableSource () {} + virtual ~ImportableSource() {} + + virtual framecnt_t read (Sample* buffer, framecnt_t nframes) = 0; + virtual float ratio() const { return 1.0f; } + virtual uint32_t channels() const = 0; + virtual framecnt_t length() const = 0; + virtual framecnt_t samplerate() const = 0; + virtual void seek (framecnt_t pos) = 0; + virtual framepos_t natural_position() const = 0; + + virtual bool clamped_at_unity () const = 0; }; }