+ bool clamped_at_unity () const;
+
+ static void setup_standard_crossfades (Session const &, nframes_t sample_rate);
+ static const Source::Flag default_writable_flags;
+
+ static int get_soundfile_info (const std::string& path, SoundFileInfo& _info, std::string& error_msg);
+
+ protected:
+ void set_path (const std::string& p);
+ void set_header_timeline_position ();
+
+ framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
+ framecnt_t write_unlocked (Sample *dst, framecnt_t cnt);
+ framecnt_t write_float (Sample* data, framepos_t pos, framecnt_t cnt);
+
+ private:
+ PBD::SndFileDescriptor* _descriptor;
+ SF_INFO _info;
+ BroadcastInfo *_broadcast_info;
+
+ void init_sndfile ();
+ int open();
+ int setup_broadcast_info (framepos_t when, struct tm&, time_t);
+ void file_closed ();
+
+ /* destructive */
+
+ static framecnt_t xfade_frames;
+ static gain_t* out_coefficient;
+ static gain_t* in_coefficient;
+
+ bool _capture_start;
+ 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);
+ void set_timeline_position (framepos_t);
+ framecnt_t destructive_write_unlocked (Sample *dst, framecnt_t cnt);
+ 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;