sclass SimpleBaseDrumFinder2 { double windowSize = 5.0; // seconds int imageHeight = 10; // must be >= segmenter.gridSize transient ISegmenter segmenter = mandatorySegmenterFromAGIBlue("Find base drum #1"); transient new L buf; transient int bufSize; transient BWImage lastImage; transient L ranges; L addFrequencyImageBrightnesses(float[] l) { buf.add(l); bufSize += l(last(buf)); if (bufSize < audio_estimatedFrequencyImageWidth(windowSize)) null; print("Have img! " + l(buf)); float[] data = normalizeFloatArray(concatFloatArrays(buf)); lastImage = bwImageFromColumnFloats(imageHeight, data); buf.clear(); bufSize = 0; if (segmenter == null) ret ranges = null; ranges = map rectXRange(segmenter.get(toBufferedImage(lastImage))); print(+ranges); ret ranges; } }