+static double compute_peak(SilenceRemoveContext *s, double sample)
+{
+ double new_sum;
+
+ new_sum = s->sum;
+ new_sum -= *s->window_current;
+ new_sum += fabs(sample);
+
+ return new_sum / s->window_size;
+}
+
+static void update_peak(SilenceRemoveContext *s, double sample)
+{
+ s->sum -= *s->window_current;
+ *s->window_current = fabs(sample);
+ s->sum += *s->window_current;
+
+ s->window_current++;
+ if (s->window_current >= s->window_end)
+ s->window_current = s->window;
+}
+
+static double compute_rms(SilenceRemoveContext *s, double sample)
+{
+ double new_sum;
+
+ new_sum = s->sum;
+ new_sum -= *s->window_current;
+ new_sum += sample * sample;
+
+ return sqrt(new_sum / s->window_size);
+}
+
+static void update_rms(SilenceRemoveContext *s, double sample)
+{
+ s->sum -= *s->window_current;
+ *s->window_current = sample * sample;
+ s->sum += *s->window_current;
+
+ s->window_current++;
+ if (s->window_current >= s->window_end)
+ s->window_current = s->window;
+}
+