From 3615fef6e7be4063e804f33b2f0cd20de8f6b8d3 Mon Sep 17 00:00:00 2001 From: gvnnz Date: Mon, 20 May 2024 22:35:40 +0200 Subject: [PATCH] Use model::ChannelView for rendering channels in Renderer --- src/core/rendering/renderer.cpp | 26 ++++++++++++++++++-------- src/core/rendering/renderer.h | 21 +++++++++++++++++---- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/core/rendering/renderer.cpp b/src/core/rendering/renderer.cpp index f56e60e18..1c08d41ac 100644 --- a/src/core/rendering/renderer.cpp +++ b/src/core/rendering/renderer.cpp @@ -137,7 +137,7 @@ void Renderer::render(mcl::AudioBuffer& out, const mcl::AudioBuffer& in, const m renderMasterIn(masterInCh, mixer.getInBuffer()); if (!document_RT.locked) - renderNormalChannels(channels.getAll(), out, mixer.getInBuffer(), hasSolos, sequencer.isRunning()); + renderNormalChannels(channels.getView(), out, mixer.getInBuffer(), hasSolos, sequencer.isRunning()); renderMasterOut(masterOutCh, out); if (mixer.renderPreview) @@ -185,19 +185,29 @@ void Renderer::advanceChannel( /* -------------------------------------------------------------------------- */ -void Renderer::renderNormalChannels(const std::vector& channels, mcl::AudioBuffer& out, - const mcl::AudioBuffer& in, bool hasSolos, bool seqIsRunning) const +void Renderer::renderNormalChannels( + const std::vector& views, + mcl::AudioBuffer& out, + const mcl::AudioBuffer& in, + bool hasSolos, + bool seqIsRunning) const { - for (const Channel& c : channels) - if (!c.isInternal()) - renderNormalChannel(c, out, in, hasSolos, seqIsRunning); + for (const model::ChannelView& view : views) + if (!view.channel->isInternal()) + renderNormalChannel(view, out, in, hasSolos, seqIsRunning); } /* -------------------------------------------------------------------------- */ -void Renderer::renderNormalChannel(const Channel& ch, mcl::AudioBuffer& out, - const mcl::AudioBuffer& in, bool mixerHasSolos, bool seqIsRunning) const +void Renderer::renderNormalChannel( + const model::ChannelView& view, + mcl::AudioBuffer& out, + const mcl::AudioBuffer& in, + bool mixerHasSolos, + bool seqIsRunning) const { + const Channel& ch = *view.channel; + ch.shared->audioBuffer.clear(); if (ch.type == ChannelType::SAMPLE) diff --git a/src/core/rendering/renderer.h b/src/core/rendering/renderer.h index 330664c5e..9995a1373 100644 --- a/src/core/rendering/renderer.h +++ b/src/core/rendering/renderer.h @@ -86,10 +86,23 @@ class Renderer geompp::Range, Frame quantizerStep) const; - void renderNormalChannels(const std::vector& channels, mcl::AudioBuffer& out, - const mcl::AudioBuffer& in, bool hasSolos, bool seqIsRunning) const; - void renderNormalChannel(const Channel& ch, mcl::AudioBuffer& out, - const mcl::AudioBuffer& in, bool mixerHasSolos, bool seqIsRunning) const; + /* renderNormalChannels + Generates audio out of non-internal channels. */ + + void renderNormalChannels( + const std::vector&, + mcl::AudioBuffer& out, + const mcl::AudioBuffer& in, + bool hasSolos, + bool seqIsRunning) const; + + void renderNormalChannel( + const model::ChannelView&, + mcl::AudioBuffer& out, + const mcl::AudioBuffer& in, + bool mixerHasSolos, + bool seqIsRunning) const; + void renderMasterIn(const Channel&, mcl::AudioBuffer& in) const; void renderMasterOut(const Channel&, mcl::AudioBuffer& out) const; void renderPreview(const Channel&, mcl::AudioBuffer& out) const;