MCPcopy Create free account
hub / github.com/audacity/audacity / ProcessOne

Method ProcessOne

libraries/lib-builtin-effects/ClickRemovalBase.cpp:130–184  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

128}
129
130bool ClickRemovalBase::ProcessOne(
131 int count, WaveChannel& track, sampleCount start, sampleCount len)
132{
133 if (len <= windowSize / 2)
134 {
135 using namespace BasicUI;
136 ShowMessageBox(
137 XO("Selection must be larger than %d samples.").Format(windowSize / 2),
138 MessageBoxOptions {}.IconStyle(Icon::Error));
139 return false;
140 }
141
142 auto idealBlockLen = track.GetMaxBlockSize() * 4;
143 if (idealBlockLen % windowSize != 0)
144 idealBlockLen += (windowSize - (idealBlockLen % windowSize));
145
146 bool bResult = true;
147 decltype(len) s = 0;
148 Floats buffer { idealBlockLen };
149 Floats datawindow { windowSize };
150 while ((len - s) > windowSize / 2)
151 {
152 auto block = limitSampleBufferSize(idealBlockLen, len - s);
153 track.GetFloats(buffer.get(), start + s, block);
154 for (decltype(block) i = 0; i + windowSize / 2 < block;
155 i += windowSize / 2)
156 {
157 auto wcopy = std::min(windowSize, block - i);
158 for (decltype(wcopy) j = 0; j < wcopy; ++j)
159 datawindow[j] = buffer[i + j];
160 for (auto j = wcopy; j < windowSize; ++j)
161 datawindow[j] = 0;
162 mbDidSomething |= RemoveClicks(windowSize, datawindow.get());
163 for (decltype(wcopy) j = 0; j < wcopy; ++j)
164 buffer[i + j] = datawindow[j];
165 }
166
167 if (mbDidSomething)
168 {
169 // RemoveClicks() actually did something.
170 if (!track.SetFloats(buffer.get(), start + s, block))
171 {
172 bResult = false;
173 break;
174 }
175 }
176 s += block;
177 if (TrackProgress(count, s.as_double() / len.as_double()))
178 {
179 bResult = false;
180 break;
181 }
182 }
183 return bResult;
184}
185
186bool ClickRemovalBase::RemoveClicks(size_t len, float* buffer)
187{

Callers

nothing calls this directly

Calls 7

ShowMessageBoxFunction · 0.85
limitSampleBufferSizeFunction · 0.85
SetFloatsMethod · 0.80
minFunction · 0.50
GetMaxBlockSizeMethod · 0.45
GetFloatsMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected