@@ -59,6 +59,8 @@ void ChannelMapSettings::updateNumChannels(int newChannelCount)
5959 isEnabled.add (true );
6060 }
6161
62+ numChannels = newChannelCount;
63+
6264}
6365
6466void ChannelMapSettings::toXml (XmlElement* xml)
@@ -108,6 +110,27 @@ void ChannelMapSettings::fromJson(File filename)
108110 PrbFormat::read (filename, this );
109111}
110112
113+ void ChannelMapSettings::setStream (const DataStream* stream)
114+ {
115+ numChannels = stream->getChannelCount ();
116+ sampleRate = stream->getSampleRate ();
117+ streamName = stream->getName ();
118+ streamId = stream->getStreamId ();
119+ sourceNodeId = stream->getSourceNodeId ();
120+ }
121+
122+ void ChannelMapSettings::reset ()
123+ {
124+ channelOrder.clear ();
125+ isEnabled.clear ();
126+
127+ for (int i = 0 ; i < numChannels; i++)
128+ {
129+ channelOrder.add (i);
130+ isEnabled.add (true );
131+ }
132+ }
133+
111134// =====================================================
112135
113136ChannelMappingNode::ChannelMappingNode ()
@@ -124,14 +147,54 @@ AudioProcessorEditor* ChannelMappingNode::createEditor()
124147}
125148
126149
150+ ChannelMapSettings* ChannelMappingNode::findMatchingStreamSettings (ChannelMapSettings* s)
151+ {
152+ for (auto streamId : previousStreamIds)
153+ {
154+ if ((s->sourceNodeId == settings[streamId]->sourceNodeId ) &&
155+ (s->streamName == settings[streamId]->streamName ))
156+ {
157+ // perfect match
158+ return settings[streamId];
159+ }
160+
161+ if ((s->streamName == settings[streamId]->streamName ))
162+ {
163+ // matching name
164+ return settings[streamId];
165+ }
166+ }
167+
168+ return nullptr ;
169+ }
170+
127171void ChannelMappingNode::updateSettings ()
128172{
129173
130174 settings.update (getDataStreams ());
131175
132176 for (auto stream : getDataStreams ())
133177 {
134- settings[stream->getStreamId ()]->updateNumChannels (stream->getChannelCount ());
178+
179+ const uint16 streamId = stream->getStreamId ();
180+
181+ if ( settings[streamId]->sourceNodeId == -1 ) // no stream applied yet
182+ {
183+ settings[streamId]->setStream (stream);
184+
185+ ChannelMapSettings* s = findMatchingStreamSettings (settings[streamId]);
186+
187+ if (s != nullptr )
188+ {
189+ settings[streamId]->channelOrder = s->channelOrder ;
190+ settings[streamId]->isEnabled = s->isEnabled ;
191+ }
192+
193+ previousStreamIds.add (streamId);
194+
195+ }
196+
197+ settings[streamId]->updateNumChannels (stream->getChannelCount ());
135198
136199 if ((*stream)[" enable_stream" ])
137200 {
@@ -140,19 +203,19 @@ void ChannelMappingNode::updateSettings()
140203 for (int ch = 0 ; ch < stream->getChannelCount (); ch++)
141204 {
142205
143- int localIndex = settings[stream-> getStreamId () ]->channelOrder [ch];
206+ int localIndex = settings[streamId ]->channelOrder [ch];
144207 Array<ContinuousChannel*> channelsForStream = stream->getContinuousChannels ();
145208
146209 int globalIndex = channelsForStream[localIndex]->getGlobalIndex ();
147210
148- if (settings[stream-> getStreamId () ]->isEnabled [ch])
211+ if (settings[streamId ]->isEnabled [ch])
149212 {
150213 newChannelOrder.add (channelsForStream[localIndex]);
151214 }
152215
153216 }
154217
155- DataStream* currentStream = getDataStream (stream-> getStreamId () );
218+ DataStream* currentStream = getDataStream (streamId );
156219
157220 currentStream->clearContinuousChannels ();
158221
@@ -164,7 +227,6 @@ void ChannelMappingNode::updateSettings()
164227
165228}
166229
167-
168230void ChannelMappingNode::setChannelEnabled (uint16 streamId, int channelNum, int isEnabled)
169231{
170232 settings[streamId]->isEnabled .set (channelNum, isEnabled);
@@ -175,6 +237,11 @@ void ChannelMappingNode::setChannelOrder(uint16 streamId, Array<int> order)
175237 settings[streamId]->channelOrder = order;
176238}
177239
240+ void ChannelMappingNode::resetStream (uint16 streamId)
241+ {
242+ settings[streamId]->reset ();
243+ }
244+
178245Array<int > ChannelMappingNode::getChannelOrder (uint16 streamId)
179246{
180247 return settings[streamId]->channelOrder ;
0 commit comments