diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/audioregion.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/coreaudiosource.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/sndfilesource.h | 1 | ||||
-rw-r--r-- | libs/ardour/audioregion.cc | 31 |
4 files changed, 39 insertions, 1 deletions
diff --git a/libs/ardour/ardour/audioregion.h b/libs/ardour/ardour/audioregion.h index 8e510b3e43..086544f3aa 100644 --- a/libs/ardour/ardour/audioregion.h +++ b/libs/ardour/ardour/audioregion.h @@ -73,7 +73,11 @@ class LIBARDOUR_API AudioRegion : public Region bool speed_mismatch (float) const; boost::shared_ptr<AudioSource> audio_source (uint32_t n=0) const; - + + // if several audio files associated with a region, + // information about file with MAX channel count will be provided + uint32_t get_related_audio_file_channel_count () const; + void set_scale_amplitude (gain_t); gain_t scale_amplitude() const { return _scale_amplitude; } diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h index 5e8e696bf9..44016b46a4 100644 --- a/libs/ardour/ardour/coreaudiosource.h +++ b/libs/ardour/ardour/coreaudiosource.h @@ -39,6 +39,8 @@ class LIBARDOUR_API CoreAudioSource : public AudioFileSource { float sample_rate() const; int update_header (framepos_t when, struct tm&, time_t); + uint32_t channel_count () const { return n_channels; } + int flush_header () {return 0;}; void set_header_timeline_position () {}; bool clamped_at_unity () const { return false; } diff --git a/libs/ardour/ardour/sndfilesource.h b/libs/ardour/ardour/sndfilesource.h index 5a4a11515c..45e049e35f 100644 --- a/libs/ardour/ardour/sndfilesource.h +++ b/libs/ardour/ardour/sndfilesource.h @@ -66,6 +66,7 @@ class LIBARDOUR_API SndFileSource : public AudioFileSource { bool set_destructive (bool yn); bool one_of_several_channels () const; + uint32_t channel_count () const { return _info.channels; } bool clamped_at_unity () const; diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 8113b261f9..13576c3ca5 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -49,6 +49,9 @@ #include "ardour/parameter_descriptor.h" #include "ardour/progress.h" +#include "ardour/sndfilesource.h" +#include "ardour/coreaudiosource.h" + #include "i18n.h" #include <locale.h> @@ -1562,6 +1565,34 @@ AudioRegion::audio_source (uint32_t n) const return boost::dynamic_pointer_cast<AudioSource>(source(n)); } +uint32_t +AudioRegion::get_related_audio_file_channel_count () const +{ + uint32_t chan_count = 0; + for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { + + boost::shared_ptr<SndFileSource> sndf = dynamic_pointer_cast<SndFileSource>(*i); + if (sndf ) { + + if (sndf->channel_count() > chan_count) { + chan_count = sndf->channel_count(); + } + } +#ifdef HAVE_COREAUDIO + else { + boost::shared_ptr<CoreAudioSource> cauf = dynamic_pointer_cast<CoreAudioSource>(*i); + if (cauf) { + if (cauf->channel_count() > chan_count) { + chan_count = cauf->channel_count(); + } + } + } +#endif // HAVE_COREAUDIO + } + + return chan_count; +} + int AudioRegion::adjust_transients (frameoffset_t delta) { |