diff --git a/libs/ardour/ardour/audio_buffer.h b/libs/ardour/ardour/audio_buffer.h index 051b75ab4b..9a9653b2c9 100644 --- a/libs/ardour/ardour/audio_buffer.h +++ b/libs/ardour/ardour/audio_buffer.h @@ -220,7 +220,13 @@ public: */ bool check_silence (pframes_t nframes, pframes_t& n) const; - void prepare () { _written = false; _silent = false; } + void prepare () { + if (!_owns_data) { + _data = 0; + } + _written = false; + _silent = false; + } bool written() const { return _written; } void set_written(bool w) { _written = w; } diff --git a/libs/ardour/audio_port.cc b/libs/ardour/audio_port.cc index e2bb20dbe9..33e41c10ad 100644 --- a/libs/ardour/audio_port.cc +++ b/libs/ardour/audio_port.cc @@ -59,8 +59,11 @@ void AudioPort::cycle_end (pframes_t nframes) { if (sends_output() && !_buffer->written()) { - if (_buffer->capacity() >= nframes) { - _buffer->silence (nframes); + if (!_buffer->data (0)) { + get_audio_buffer (nframes); + } + if (_buffer->capacity() >= nframes) { + _buffer->silence (nframes); } } }