#include "ardour/audiofilesource.h"
#include "ardour/broadcast_info.h"
-#include "pbd/sndfile_manager.h"
namespace ARDOUR {
-class SndFileSource : public AudioFileSource {
+class LIBARDOUR_API SndFileSource : public AudioFileSource {
public:
/** Constructor to be called for existing external-to-session files */
SndFileSource (Session&, const std::string& path, int chn, Flag flags);
SampleFormat samp_format, HeaderFormat hdr_format, framecnt_t rate,
Flag flags = SndFileSource::default_writable_flags);
- /** Constructor to be called for existing in-session files */
+ /* Constructor to be called for recovering files being used for
+ * capture. They are in-session, they already exist, they should not
+ * be writable. They are an odd hybrid (from a constructor point of
+ * view) of the previous two constructors.
+ */
+ SndFileSource (Session&, const std::string& path, int chn);
+
+ /** Constructor to be called for existing in-session files during
+ * session loading
+ */
SndFileSource (Session&, const XMLNode&);
~SndFileSource ();
static int get_soundfile_info (const std::string& path, SoundFileInfo& _info, std::string& error_msg);
protected:
+ void close ();
+
void set_path (const std::string& p);
void set_header_timeline_position ();
framecnt_t write_float (Sample* data, framepos_t pos, framecnt_t cnt);
private:
- PBD::SndFileDescriptor* _descriptor;
+ SNDFILE* _sndfile;
SF_INFO _info;
BroadcastInfo *_broadcast_info;
bool _capture_end;
framepos_t capture_start_frame;
framepos_t file_pos; // unit is frames
- framecnt_t xfade_out_count;
- framecnt_t xfade_in_count;
Sample* xfade_buf;
framecnt_t crossfade (Sample* data, framecnt_t cnt, int dir);
framecnt_t nondestructive_write_unlocked (Sample *dst, framecnt_t cnt);
void handle_header_position_change ();
PBD::ScopedConnection header_position_connection;
- PBD::ScopedConnection file_manager_connection;
};
} // namespace ARDOUR