summaryrefslogtreecommitdiff
path: root/libs/ardour/sndfileimportable.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-02-27 02:09:03 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-02-27 02:09:03 +0000
commitf31e8c3935fa6eed48d805021935cef38622b7ca (patch)
tree0954c96ab73c92c068bc39581eb432e5be4af9bc /libs/ardour/sndfileimportable.cc
parent295b2da733f3080c2a96219bb169829ef4a2c0ce (diff)
rearrange icons/presets on xfade editor to be symmetric; refactor importable source/resampled importable source to allow for both sndfile and coreaudio handled file i/o
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3124 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/sndfileimportable.cc')
-rw-r--r--libs/ardour/sndfileimportable.cc47
1 files changed, 47 insertions, 0 deletions
diff --git a/libs/ardour/sndfileimportable.cc b/libs/ardour/sndfileimportable.cc
new file mode 100644
index 0000000000..eb0e8a8afb
--- /dev/null
+++ b/libs/ardour/sndfileimportable.cc
@@ -0,0 +1,47 @@
+#include <ardour/sndfileimportable.h>
+#include <sndfile.h>
+
+using namespace ARDOUR;
+using namespace std;
+
+SndFileImportableSource::SndFileImportableSource (const string& path)
+ : in (sf_open (path.c_str(), SFM_READ, &sf_info), sf_close)
+{
+ if (!in) throw failed_constructor();
+}
+
+SndFileImportableSource::~SndFileImportableSource ()
+{
+}
+
+nframes_t
+SndFileImportableSource::read (Sample* buffer, nframes_t nframes)
+{
+ nframes_t per_channel = nframes / sf_info.channels;
+ per_channel = sf_readf_float (in.get(), buffer, per_channel);
+ return per_channel * sf_info.channels;
+}
+
+uint
+SndFileImportableSource::channels () const
+{
+ return sf_info.channels;
+}
+
+nframes_t
+SndFileImportableSource::length () const
+{
+ return sf_info.frames;
+}
+
+nframes_t
+SndFileImportableSource::samplerate() const
+{
+ return sf_info.samplerate;
+}
+
+void
+SndFileImportableSource::seek (nframes_t pos)
+{
+ sf_seek (in.get(), 0, SEEK_SET);
+}