diff options
author | Carl Hetherington <carl@carlh.net> | 2011-10-17 20:35:55 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-10-17 20:35:55 +0000 |
commit | c7d2497e2badd3fabd29fe3b1c55978f276bbbf9 (patch) | |
tree | 1e7c0128c7c694a68525b85a2065459b4f04dc05 /libs/ardour | |
parent | 6fc823aca88dfe2e1dee1ceab81edf1a674640af (diff) |
Discard MIDI when sending to the monitor bus. Fixes
#4372.
git-svn-id: svn://localhost/ardour2/branches/3.0@10212 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/buffer_set.h | 1 | ||||
-rw-r--r-- | libs/ardour/buffer_set.cc | 22 | ||||
-rw-r--r-- | libs/ardour/internal_send.cc | 10 |
3 files changed, 25 insertions, 8 deletions
diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index 930d708989..5b0234de46 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -123,6 +123,7 @@ public: #endif void read_from(const BufferSet& in, framecnt_t nframes); + void read_from(const BufferSet& in, framecnt_t nframes, DataType); void merge_from(const BufferSet& in, framecnt_t nframes); template <typename BS, typename B> diff --git a/libs/ardour/buffer_set.cc b/libs/ardour/buffer_set.cc index 6061d360f9..663b5e8ca0 100644 --- a/libs/ardour/buffer_set.cc +++ b/libs/ardour/buffer_set.cc @@ -383,6 +383,21 @@ BufferSet::VSTBuffer::push_back (Evoral::MIDIEvent<framepos_t> const & ev) #endif /* VST_SUPPORT */ +/** Copy buffers of one type from `in' to this BufferSet */ +void +BufferSet::read_from (const BufferSet& in, framecnt_t nframes, DataType type) +{ + assert (available().get (type) >= in.count().get (type)); + + BufferSet::iterator o = begin (type); + for (BufferSet::const_iterator i = in.begin (type); i != in.end (type); ++i, ++o) { + o->read_from (*i, nframes); + } + + _count.set (type, in.count().get (type)); +} + +/** Copy buffers of all types from `in' to this BufferSet */ void BufferSet::read_from (const BufferSet& in, framecnt_t nframes) { @@ -390,13 +405,8 @@ BufferSet::read_from (const BufferSet& in, framecnt_t nframes) // Copy all buffers 1:1 for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { - BufferSet::iterator o = begin(*t); - for (BufferSet::const_iterator i = in.begin(*t); i != in.end(*t); ++i, ++o) { - o->read_from (*i, nframes); - } + read_from (in, nframes, *t); } - - set_count(in.count()); } void diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc index d8bc1ccd98..bd2efbe12d 100644 --- a/libs/ardour/internal_send.cc +++ b/libs/ardour/internal_send.cc @@ -116,8 +116,14 @@ InternalSend::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame if (_panshell && !_panshell->bypassed()) { _panshell->run (bufs, mixbufs, start_frame, end_frame, nframes); } else { - assert (mixbufs.available() >= bufs.count()); - mixbufs.read_from (bufs, nframes); + if (role() == Listen) { + /* We're going to the monitor bus, so discard MIDI data */ + assert (mixbufs.available().get (DataType::AUDIO) >= bufs.count().get (DataType::AUDIO)); + mixbufs.read_from (bufs, nframes, DataType::AUDIO); + } else { + assert (mixbufs.available() >= bufs.count()); + mixbufs.read_from (bufs, nframes); + } } /* gain control */ |