diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-27 02:09:03 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-02-27 02:09:03 +0000 |
commit | f31e8c3935fa6eed48d805021935cef38622b7ca (patch) | |
tree | 0954c96ab73c92c068bc39581eb432e5be4af9bc /libs/ardour/sndfileimportable.cc | |
parent | 295b2da733f3080c2a96219bb169829ef4a2c0ce (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.cc | 47 |
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); +} |