Warning: session_start(): open(/var/lib/php/sessions/sess_t1utkoa3ik6mu23ogbch4g0j9l, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
sclass SimpleBaseDrumFinder1 {
int windowSize = 30;
long count;
double factor = 10; // how much higher max must be than avg
int maxAscentTime = 4; // wait if it keeps ascending before triggering
int minDownTime = 10; // don't trigger again for this long
transient RollingAverage ra;
transient RollingMaximum rm;
transient double lastValue, avgAtAscendStart;
transient long ascendingSince = 0, downSince = 0;
transient Pair lastBaseDrum;
void addFrequencyImageBrightness(double b) {
if (ra == null) ra = new RollingAverage(windowSize);
if (rm == null) rm = new RollingMaximum(windowSize);
ra.add(b);
double max = rm.addAndGet(b), avg = ra!;
++count;
bool ascending = b >= lastValue;
lastValue = b;
if (downSince != 0 && count < downSince+minDownTime) ret;
// mark start of ascent
if (ascending && ascendingSince == 0) {
ascendingSince = count;
avgAtAscendStart = avg;
}
if (ascendingSince != 0 && (!ascending || ascendingSince+maxAscentTime == count))
trigger(ascendingSince, count-1, b/max(0.001, avgAtAscendStart)*factor);
if (!ascending) ascendingSince = 0;
}
void trigger(long begin, long end, double ratio) {
if (ratio < 1) ret;
print("Base drum found from " + begin + " to " + end + ", ratio=" + ratio);
lastBaseDrum = pair(longRange(begin, end), ratio);
downSince = end;
}
}