srecord noeq HamburgerAudioHaarFeature(IAudioSample sample, double start, double end) { double[] positions = new[4]; *(IAudioSample *sample, double... *positions) { } double factor = 1; double length() { ret positions[3]-positions[0]; } DoubleRange meatRange() { ret doubleRange(positions[1], positions[2]; } double meatHeight() { ret l(meatRange()); } double blackArea() { ret length()-meatHeight(); } double whiteArea() { ret meatHeight(); } double get(int channel) { double blackArea = blackArea(); double whiteArea = whiteArea(); double whiteSum = sample.sampleSum(channel, positions[1], positions[2]); double blackSum = sample.sampleSum(channel, positions[0], positions[1]) + sample.sampleSum(channel, positions[2], positions[3]); ret mul_optFor1(factor, (doubleRatio(whiteSum, whiteArea) - doubleRatio(blackSum, blackArea))/255.0); } Channels get() { ret mapChannels get(sample.channels()); } }