#include #include #include #include using namespace ARDOUR; using namespace std; SndFileImportableSource::SndFileImportableSource (const string& path) { memset(&sf_info, 0 , sizeof(sf_info)); in.reset( 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); }