make MIDI Patch Manager search in $user_config_dir/patchfiles for midnam files as...
[ardour.git] / libs / ardour / ardour / importable_source.h
index fec670b4f5a673a4348a724c976685c0b6c8b633..804b0629699acf23e7d4bdb53996eba309610504 100644 (file)
@@ -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
 #ifndef __ardour_importable_source_h__
 #define __ardour_importable_source_h__
 
-#include <sndfile.h>
-#include <ardour/types.h>
+#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;
 };
 
 }