X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudiofilesource.cc;h=5a59ff339bc023c81a5e220d95df75d992190d43;hb=5ada17eba0195d90f0685776251b384efdf5168e;hp=ed189152e5fcac46d972ba72dbe2cf3572a7ca50;hpb=a86aa9e5bc4d2520087310caa4afb3508480b0d7;p=ardour.git diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc index ed189152e5..5a59ff339b 100644 --- a/libs/ardour/audiofilesource.cc +++ b/libs/ardour/audiofilesource.cc @@ -30,6 +30,7 @@ #include #include +#include "pbd/gstdio_compat.h" #include "pbd/convert.h" #include "pbd/basename.h" #include "pbd/file_utils.h" @@ -42,7 +43,6 @@ #include -#include #include #include #include @@ -61,26 +61,24 @@ #include #endif // HAVE_COREAUDIO -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; using namespace PBD; using namespace Glib; -string AudioFileSource::peak_dir = ""; - PBD::Signal0 AudioFileSource::HeaderPositionOffsetChanged; -framecnt_t AudioFileSource::header_position_offset = 0; +samplecnt_t AudioFileSource::header_position_offset = 0; /* XXX maybe this too */ char AudioFileSource::bwf_serial_number[13] = "000000000000"; struct SizedSampleBuffer { - framecnt_t size; + samplecnt_t size; Sample* buf; - SizedSampleBuffer (framecnt_t sz) : size (sz) { + SizedSampleBuffer (samplecnt_t sz) : size (sz) { buf = new Sample[size]; } @@ -133,7 +131,12 @@ AudioFileSource::AudioFileSource (Session& s, const string& path, Source::Flag f } -/** Constructor used for existing internal-to-session files via XML. File must exist. */ +/** Constructor used for sources listed in session-files (XML) + * and missing sources (SilentFileSource). + * + * If _origin is an absolute path after ::set_state(), then the + * file is external to the session. + */ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exist) : Source (s, node) , AudioSource (s, node) @@ -143,6 +146,10 @@ AudioFileSource::AudioFileSource (Session& s, const XMLNode& node, bool must_exi throw failed_constructor (); } + if (Glib::path_is_absolute (_origin)) { + _path = _origin; + } + if (init (_path, must_exist)) { throw failed_constructor (); } @@ -201,10 +208,9 @@ XMLNode& AudioFileSource::get_state () { XMLNode& root (AudioSource::get_state()); - char buf[32]; - snprintf (buf, sizeof (buf), "%u", _channel); - root.add_property (X_("channel"), buf); - root.add_property (X_("origin"), _origin); + root.set_property (X_("channel"), _channel); + root.set_property (X_("origin"), _origin); + root.set_property (X_("gain"), _gain); return root; } @@ -243,7 +249,7 @@ AudioFileSource::move_dependents_to_trash() } void -AudioFileSource::set_header_position_offset (framecnt_t offset) +AudioFileSource::set_header_position_offset (samplecnt_t offset) { header_position_offset = offset; HeaderPositionOffsetChanged (); @@ -276,6 +282,20 @@ AudioFileSource::setup_peakfile () } } +void +AudioFileSource::set_gain (float g, bool temporarily) +{ + if (_gain == g) { + return; + } + _gain = g; + if (temporarily) { + return; + } + close_peakfile(); + setup_peakfile (); +} + bool AudioFileSource::safe_audio_file_extension(const string& file) { @@ -329,7 +349,7 @@ AudioFileSource::safe_audio_file_extension(const string& file) } Sample* -AudioFileSource::get_interleave_buffer (framecnt_t size) +AudioFileSource::get_interleave_buffer (samplecnt_t size) { SizedSampleBuffer* ssb; @@ -345,4 +365,4 @@ AudioFileSource::get_interleave_buffer (framecnt_t size) return ssb->buf; } - +