srecord noeq HamburgerAudioHaarFeature(IAudioSample sample, double start, double end) { double[] positions = new[4]; *(IAudioSample *sample, double[] positions) { start = r.start; end = r.end; } double factor = 1; double length() { positions[3]-positions[0]; } doubleRange meatRange() { ret doubleRange(positions[1], positions[2]; } AudioHaarFeature upper() { ret new AudioHaarFeature(factor); double get(int channel) { upper() double mid = mid(); ret mul_optFor1(factor, sample.sampleSum(channel, start, mid) - sample.sampleSum(channel, mid, end)); } Channels get() { ret mapChannels get(sample.channels()); } }