/*
- 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
#ifndef __ardour_importable_source_h__
#define __ardour_importable_source_h__
-#include <sndfile.h>
-#include <ardour/types.h>
+#include "pbd/failed_constructor.h"
+#include "ardour/libardour_visibility.h"
+#include "ardour/types.h"
namespace ARDOUR {
-class ImportableSource {
- public:
- ImportableSource (SNDFILE* sf, SF_INFO* info) : in (sf), sf_info (info) {}
- virtual ~ImportableSource() {}
+class LIBARDOUR_API ImportableSource {
+public:
+ ImportableSource () {}
+ 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 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 (framepos_t pos) = 0;
+ virtual framepos_t natural_position() const = 0;
- 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;
+ virtual bool clamped_at_unity () const = 0;
};
}