From 9b226f8eb6956d1d74569a87bcd672e93c6aa42f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 16 May 2007 12:54:21 +0000 Subject: [PATCH] baby steps to virtualize AudioRegion git-svn-id: svn://localhost/ardour2/trunk@1853 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/audioregion.h | 28 +++++++++++--------- libs/ardour/ardour/configuration_vars.h | 1 + libs/ardour/audiofilesource.cc | 35 ++++++++++++++----------- libs/ardour/audioregion.cc | 10 +++++-- libs/ardour/session.cc | 2 +- 5 files changed, 44 insertions(+), 32 deletions(-) diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h index 23841af095..ccc0d82f2a 100644 --- a/libs/ardour/ardour/audioregion.h +++ b/libs/ardour/ardour/audioregion.h @@ -71,20 +71,20 @@ class AudioRegion : public Region Curve& fade_out() { return _fade_out; } Curve& envelope() { return _envelope; } - nframes_t read_peaks (PeakData *buf, nframes_t npeaks, - nframes_t offset, nframes_t cnt, - uint32_t chan_n=0, double samples_per_unit= 1.0) const; - + virtual nframes_t read_peaks (PeakData *buf, nframes_t npeaks, + nframes_t offset, nframes_t cnt, + uint32_t chan_n=0, double samples_per_unit= 1.0) const; + virtual nframes_t read_at (Sample *buf, Sample *mixdown_buf, - float *gain_buf, nframes_t position, nframes_t cnt, - uint32_t chan_n = 0, - nframes_t read_frames = 0, - nframes_t skip_frames = 0) const; - - nframes_t master_read_at (Sample *buf, Sample *mixdown_buf, - float *gain_buf, - nframes_t position, nframes_t cnt, uint32_t chan_n=0) const; - + float *gain_buf, nframes_t position, nframes_t cnt, + uint32_t chan_n = 0, + nframes_t read_frames = 0, + nframes_t skip_frames = 0) const; + + virtual nframes_t master_read_at (Sample *buf, Sample *mixdown_buf, + float *gain_buf, + nframes_t position, nframes_t cnt, uint32_t chan_n=0) const; + XMLNode& state (bool); int set_state (const XMLNode&); @@ -182,6 +182,8 @@ class AudioRegion : public Region virtual bool verify_length (nframes_t); /*virtual void recompute_at_start () = 0; virtual void recompute_at_end () = 0;*/ + + virtual nframes_t read_raw_internal (Sample*, nframes_t, nframes_t) const; }; } /* namespace ARDOUR */ diff --git a/libs/ardour/ardour/configuration_vars.h b/libs/ardour/ardour/configuration_vars.h index bed2af5f94..7e27874d0c 100644 --- a/libs/ardour/ardour/configuration_vars.h +++ b/libs/ardour/ardour/configuration_vars.h @@ -141,6 +141,7 @@ CONFIG_VARIABLE (uint32_t, saved_history_depth, "save-history-depth", 100) CONFIG_VARIABLE (bool, use_overlap_equivalency, "use-overlap-equivalency", false) CONFIG_VARIABLE (bool, periodic_safety_backups, "periodic-safety-backups", true) CONFIG_VARIABLE (uint32_t, periodic_safety_backup_interval, "periodic-safety-backup-interval", 120) +CONFIG_VARIABLE (string, possible_audio_file_regexp, "possible-audio-file-regexp", "\\.(wav|aiff|caf|w64|L|R)$") /* BWAV */ diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc index 84ccef905c..ece34539eb 100644 --- a/libs/ardour/audiofilesource.cc +++ b/libs/ardour/audiofilesource.cc @@ -627,26 +627,29 @@ bool AudioFileSource::safe_file_extension(ustring file) { return !(file.rfind(".wav") == ustring::npos && - file.rfind(".aiff")== ustring::npos && - file.rfind(".aif") == ustring::npos && - file.rfind(".snd") == ustring::npos && - file.rfind(".au") == ustring::npos && - file.rfind(".raw") == ustring::npos && - file.rfind(".sf") == ustring::npos && - file.rfind(".cdr") == ustring::npos && - file.rfind(".smp") == ustring::npos && - file.rfind(".maud")== ustring::npos && - file.rfind(".vwe") == ustring::npos && - file.rfind(".paf") == ustring::npos && + file.rfind(".aiff")== ustring::npos && + file.rfind(".aif") == ustring::npos && + file.rfind(".snd") == ustring::npos && + file.rfind(".au") == ustring::npos && + file.rfind(".raw") == ustring::npos && + file.rfind(".sf") == ustring::npos && + file.rfind(".cdr") == ustring::npos && + file.rfind(".smp") == ustring::npos && + file.rfind(".maud")== ustring::npos && + file.rfind(".vwe") == ustring::npos && + file.rfind(".paf") == ustring::npos && + /* protools convention */ + file.rfind(".L") == ustring::npos && + file.rfind(".R") == ustring::npos && #ifdef HAVE_FLAC - file.rfind(".flac")== ustring::npos && + file.rfind(".flac")== ustring::npos && #endif // HAVE_FLAC #ifdef HAVE_COREAUDIO - file.rfind(".mp3") == ustring::npos && - file.rfind(".aac") == ustring::npos && - file.rfind(".mp4") == ustring::npos && + file.rfind(".mp3") == ustring::npos && + file.rfind(".aac") == ustring::npos && + file.rfind(".mp4") == ustring::npos && #endif // HAVE_COREAUDIO - file.rfind(".voc") == ustring::npos); + file.rfind(".voc") == ustring::npos); } void diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 8b4b88e100..09fe669867 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -981,6 +981,12 @@ AudioRegion::apply (AudioFilter& filter) return filter.run (ar); } +nframes_t +AudioRegion::read_raw_internal (Sample* buf, nframes_t pos, nframes_t cnt) const +{ + return audio_source()->read (buf, pos, cnt); +} + int AudioRegion::exportme (Session& session, AudioExportSpecification& spec) { @@ -1006,7 +1012,7 @@ AudioRegion::exportme (Session& session, AudioExportSpecification& spec) if (spec.channels == 1) { - if (audio_source()->read (spec.dataF, _start + spec.pos, to_read) != to_read) { + if (read_raw_internal (spec.dataF, _start + spec.pos, to_read) != to_read) { goto out; } @@ -1096,7 +1102,7 @@ AudioRegion::normalize_to (float target_dB) /* read it in */ - if (audio_source (n)->read (buf, fpos, to_read) != to_read) { + if (read_raw_internal (buf, fpos, to_read) != to_read) { return; } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 4a0245d4c6..764f3d4dd2 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -3501,7 +3501,7 @@ Session::remove_empty_sounds () { PathScanner scanner; - vector* possible_audiofiles = scanner (sound_dir(), "\\.(wav|aiff|caf|w64|L|R)$", false, true); + vector* possible_audiofiles = scanner (sound_dir(), Config->get_possible_audio_file_regexp (), false, true); Glib::Mutex::Lock lm (source_lock);