From 6789addf607dc4decf46aa4dffa4e54286ad79a5 Mon Sep 17 00:00:00 2001 From: Giovanni Zuliani Date: Sun, 28 Jul 2024 19:08:23 +0200 Subject: [PATCH] WIP --- src/core/channels/channelManager.cpp | 39 +++++++++++++++++++++++++--- src/glue/channel.cpp | 23 ++++++++-------- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/core/channels/channelManager.cpp b/src/core/channels/channelManager.cpp index 9ae91605d..bd028b28c 100644 --- a/src/core/channels/channelManager.cpp +++ b/src/core/channels/channelManager.cpp @@ -68,7 +68,29 @@ Channel& ChannelManager::getChannel(ID channelId) void ChannelManager::reset(Frame framesInBuffer) { - m_model.get().channels = {}; + { + m_model.get().channels = {}; + + const bool overdubProtection = false; + const Resampler::Quality rsmpQuality = m_model.get().kernelAudio.rsmpQuality; + + channelFactory::Data masterOutData = channelFactory::create( + Mixer::MASTER_OUT_CHANNEL_ID, ChannelType::MASTER, framesInBuffer, rsmpQuality, overdubProtection); + channelFactory::Data masterInData = channelFactory::create( + Mixer::MASTER_IN_CHANNEL_ID, ChannelType::MASTER, framesInBuffer, rsmpQuality, overdubProtection); + channelFactory::Data previewData = channelFactory::create( + Mixer::PREVIEW_CHANNEL_ID, ChannelType::PREVIEW, framesInBuffer, rsmpQuality, overdubProtection); + + m_model.get().channels.add(std::move(masterOutData.channel)); + m_model.get().channels.add(std::move(masterInData.channel)); + m_model.get().channels.add(std::move(previewData.channel)); + + m_model.addChannelShared(std::move(masterOutData.shared)); + m_model.addChannelShared(std::move(masterInData.shared)); + m_model.addChannelShared(std::move(previewData.shared)); + } + + /* Create hidden column with internal channels (Master In/Out, Preview). */ const bool overdubProtection = false; const Resampler::Quality rsmpQuality = m_model.get().kernelAudio.rsmpQuality; @@ -80,13 +102,22 @@ void ChannelManager::reset(Frame framesInBuffer) channelFactory::Data previewData = channelFactory::create( Mixer::PREVIEW_CHANNEL_ID, ChannelType::PREVIEW, framesInBuffer, rsmpQuality, overdubProtection); - m_model.get().channels.add(std::move(masterOutData.channel)); - m_model.get().channels.add(std::move(masterInData.channel)); - m_model.get().channels.add(std::move(previewData.channel)); + m_model.get().columns = {}; + + model::Column& column = m_model.get().columns.add(std::move(masterOutData.channel), 0, /*isInternal=*/true); + column.addChannel(std::move(masterInData.channel)); + column.addChannel(std::move(previewData.channel)); m_model.addChannelShared(std::move(masterOutData.shared)); m_model.addChannelShared(std::move(masterInData.shared)); m_model.addChannelShared(std::move(previewData.shared)); + + /* Create visible empty column. */ + + channelFactory::Data groupData = channelFactory::create(/*id=*/0, ChannelType::GROUP, framesInBuffer, rsmpQuality, overdubProtection); + + m_model.get().columns.add(std::move(groupData.channel), 200, /*isInternal=*/false); + m_model.addChannelShared(std::move(groupData.shared)); } /* -------------------------------------------------------------------------- */ diff --git a/src/glue/channel.cpp b/src/glue/channel.cpp index 6d0d4a24c..207b65570 100644 --- a/src/glue/channel.cpp +++ b/src/glue/channel.cpp @@ -67,21 +67,21 @@ void printLoadError_(int res) /* -------------------------------------------------------------------------- */ -Data makeData_(ID channelId, const v::Model::Column& column) +Data makeData_(ID channelId, const m::model::Column& modelColumn) { - const int position = column.getChannelIndex(channelId); - const int columnIndex = column.index; - return Data(g_engine->getChannelsApi().get(channelId), columnIndex, position); + const std::size_t channelIndex = modelColumn.getChannelIndex(channelId); + const std::size_t columnIndex = modelColumn.getIndex(); + return Data(g_engine->getChannelsApi().get(channelId), columnIndex, channelIndex); } /* -------------------------------------------------------------------------- */ -Column makeColumn_(const v::Model::Column& modelColumn) +Column makeColumn_(const m::model::Column& modelColumn) { - Column column{modelColumn.index, modelColumn.width, {}}; + Column column{static_cast(modelColumn.getIndex()), modelColumn.width, {}}; - for (const ID channelId : modelColumn.channels) - column.channels.push_back(makeData_(channelId, modelColumn)); + for (const m::Channel& channel : modelColumn.getChannels().getAll()) + column.channels.push_back(makeData_(channel.id, modelColumn)); return column; } @@ -153,14 +153,15 @@ bool Data::isArmed() const { return g_engine->getChannelsApi().get(id). Data getData(ID channelId) { - return makeData_(channelId, g_ui->model.columns.getColumnByChannelId(channelId)); + return makeData_(channelId, g_engine->getChannelsApi().getColumns().getByChannel(channelId)); } std::vector getColumns() { std::vector out; - for (const v::Model::Column& modelColumn : g_ui->model.columns.getAll()) // Model::columns is the source of truth - out.push_back(makeColumn_(modelColumn)); + for (const m::model::Column& modelColumn : g_engine->getChannelsApi().getColumns().getAll()) + if (!modelColumn.isInternal()) + out.push_back(makeColumn_(modelColumn)); return out; }