@@ -64,19 +64,15 @@ class CommonAverageRefTests : public testing::Test
6464 }
6565 }
6666
67- /* * Checks that all samples in a channel are equal (almost equal) to zero */
68- bool checkSamplesZero (int chan)
67+ /* * Checks that all samples in a channel are equal (almost equal) to a given value */
68+ bool checkSamplesEqual (int chan, float expected )
6969 {
70- for (auto stream : processor-> getDataStreams () )
70+ for (int j = 0 ; j < signal-> getNumSamples (); j++ )
7171 {
72- for (int j = 0 ; j < signal->getNumSamples (); j++)
73- {
74- float diff = fabs (signal->getSample (chan, j) - 0 .0f );
75- if (std::isgreater (diff, 1e-5 ))
76- return false ;
77- }
72+ float diff = fabs (signal->getSample (chan, j) - expected);
73+ if (std::isgreater (diff, 0 .01f )) // Allow a small tolerance
74+ return false ;
7875 }
79-
8076 return true ;
8177 }
8278
@@ -110,7 +106,7 @@ TEST_F (CommonAverageRefTests, ContructorTest)
110106 ASSERT_EQ (processor->getDisplayName (), " Common Avg Ref" );
111107}
112108
113- TEST_F (CommonAverageRefTests, CommonAverageTest )
109+ TEST_F (CommonAverageRefTests, SineWaveTest )
114110{
115111 const float sampleRate = 30000 ;
116112 const int bufferSize = 50 ;
@@ -127,18 +123,15 @@ TEST_F (CommonAverageRefTests, CommonAverageTest)
127123 affectedChans->currentValue = Array<var> ({ 1 });
128124 }
129125
130- Array<float > posSine = generateSineWave (150.0 , 1.0 , bufferSize, sampleRate);
131- Array<float > negSine = generateSineWave (150.0 , -1.0 , bufferSize, sampleRate);
126+ Array<float > sineData = generateSineWave (150.0 , 1.0 , bufferSize, sampleRate);
132127
133128 signal = std::make_unique<AudioBuffer<float >> (2 , bufferSize);
134129
135130 for (auto stream : processor->getDataStreams ())
136131 {
137- // Add positive sine wave data to first channel in each dataStream
138- signal->copyFrom (0 , 0 , posSine.data (), bufferSize, 0 .0f );
139-
140- // Add negative sine wave data to second channel in each dataStream
141- signal->copyFrom (1 , 0 , negSine.data (), bufferSize, 0 .0f );
132+ // Add positive sine wave data to first two channel in each dataStream
133+ signal->copyFrom (0 , 0 , sineData.data (), bufferSize, 1 .0f );
134+ signal->copyFrom (1 , 0 , sineData.data (), bufferSize, 1 .0f );
142135
143136 AccessClass::ExternalProcessorAccessor::injectNumSamples (processor,
144137 stream->getStreamId (),
@@ -148,5 +141,100 @@ TEST_F (CommonAverageRefTests, CommonAverageTest)
148141 processor->process (*(signal.get ()));
149142
150143 // check that signal is common average referenced
151- ASSERT_TRUE (checkSamplesZero (1 ));
144+ ASSERT_TRUE (checkSamplesEqual (1 , 0 .0f ));
145+ }
146+
147+ TEST_F (CommonAverageRefTests, GainZeroLeavesAffectedUnchanged)
148+ {
149+ const int bufferSize = 8 ;
150+ processor->update ();
151+
152+ for (auto stream : processor->getDataStreams ())
153+ {
154+ auto referenceChans = (MaskChannelsParameter*) stream->getParameter (" reference" );
155+ referenceChans->currentValue = Array<var> ({ 0 });
156+ auto affectedChans = (MaskChannelsParameter*) stream->getParameter (" affected" );
157+ affectedChans->currentValue = Array<var> ({ 1 });
158+ auto gainParam = (FloatParameter*) stream->getParameter (" gain" );
159+ gainParam->currentValue = 0 .0f ;
160+ }
161+
162+ signal = std::make_unique<AudioBuffer<float >> (2 , bufferSize);
163+ for (int i = 0 ; i < bufferSize; ++i)
164+ {
165+ signal->setSample (0 , i, 1 .0f ); // reference
166+ signal->setSample (1 , i, 2 .0f ); // affected
167+ }
168+
169+ for (auto stream : processor->getDataStreams ())
170+ {
171+ AccessClass::ExternalProcessorAccessor::injectNumSamples (processor, stream->getStreamId (), bufferSize);
172+ }
173+
174+ processor->process (*(signal.get ()));
175+ ASSERT_TRUE (checkSamplesEqual (1 , 2 .0f ));
176+ }
177+
178+ TEST_F (CommonAverageRefTests, GainHalfSubtractsHalfReference)
179+ {
180+ const int bufferSize = 8 ;
181+ processor->update ();
182+
183+ for (auto stream : processor->getDataStreams ())
184+ {
185+ auto referenceChans = (MaskChannelsParameter*) stream->getParameter (" reference" );
186+ referenceChans->currentValue = Array<var> ({ 0 });
187+ auto affectedChans = (MaskChannelsParameter*) stream->getParameter (" affected" );
188+ affectedChans->currentValue = Array<var> ({ 1 });
189+ auto gainParam = (FloatParameter*) stream->getParameter (" gain" );
190+ gainParam->currentValue = 50 .0f ;
191+ }
192+
193+ signal = std::make_unique<AudioBuffer<float >> (2 , bufferSize);
194+ for (int i = 0 ; i < bufferSize; ++i)
195+ {
196+ signal->setSample (0 , i, 1 .0f ); // reference
197+ signal->setSample (1 , i, 2 .0f ); // affected
198+ }
199+
200+ for (auto stream : processor->getDataStreams ())
201+ {
202+ AccessClass::ExternalProcessorAccessor::injectNumSamples (processor, stream->getStreamId (), bufferSize);
203+ }
204+
205+ processor->process (*(signal.get ()));
206+ // 2.0 - 0.5*1.0 = 1.5
207+ ASSERT_TRUE (checkSamplesEqual (1 , 1 .5f ));
208+ }
209+
210+ TEST_F (CommonAverageRefTests, GainFullSubtractsFullReference)
211+ {
212+ const int bufferSize = 8 ;
213+ processor->update ();
214+
215+ for (auto stream : processor->getDataStreams ())
216+ {
217+ auto referenceChans = (MaskChannelsParameter*) stream->getParameter (" reference" );
218+ referenceChans->currentValue = Array<var> ({ 0 });
219+ auto affectedChans = (MaskChannelsParameter*) stream->getParameter (" affected" );
220+ affectedChans->currentValue = Array<var> ({ 1 });
221+ auto gainParam = (FloatParameter*) stream->getParameter (" gain" );
222+ gainParam->currentValue = 100 .0f ;
223+ }
224+
225+ signal = std::make_unique<AudioBuffer<float >> (2 , bufferSize);
226+ for (int i = 0 ; i < bufferSize; ++i)
227+ {
228+ signal->setSample (0 , i, 1 .0f ); // reference
229+ signal->setSample (1 , i, 2 .0f ); // affected
230+ }
231+
232+ for (auto stream : processor->getDataStreams ())
233+ {
234+ AccessClass::ExternalProcessorAccessor::injectNumSamples (processor, stream->getStreamId (), bufferSize);
235+ }
236+
237+ processor->process (*(signal.get ()));
238+ // 2.0 - 1.0*1.0 = 1.0
239+ ASSERT_TRUE (checkSamplesEqual (1 , 1 .0f ));
152240}
0 commit comments