!7 sclass MarkedImage { BWImage image; int start, end; } static L markedImages; p-exp { L files = audioRecordingsWithSingleClip(); pnl(files); markedImages = map_printProgress(files, func(File f) -> MarkedImage { BWImage image = wavToFrequencyImage(f); L parts = markerIntRangesForWAV(f, image); ret nu(MarkedImage, +image, start := first(parts).start, end := first(parts).end); }); //showOriginalClips(); //showYAveraged(); showYAveragedOnDifferentBands(); } svoid showYAveragedOnDifferentBands { // Select a band, y-average, auto-contrast repeat with sleep 5 { int h = first(markedImages).image.getHeight(); double a = random()*0.9, b = a+0.1; final int y1 = iround(a*h), y2 = iround(b*h); print("Band: " + y1 + " to " + y2 + " of " + h); quickShowImage(mergeBWImagesVertically(map(markedImages, func(MarkedImage img) -> BWImage { BWImage bandImage = clipBWImage(img.image, 0, y1, img.image.getWidth(), y2-y1); ret markIntRangesOnTopOfBWImage( bwAutoContrast(squishBWImage(squishBWImage(bandImage, 1), 20)), ll(intRange(img.start, img.end))); }))); } } svoid showYAveraged { // Show y-averaged, auto-contrasted on whole image showImage(mergeBWImagesVertically(map(markedImages, func(MarkedImage img) -> BWImage { markIntRangesOnTopOfBWImage( bwAutoContrast(squishBWImage(squishBWImage(img.image, 1), 20)), ll(intRange(img.start, img.end))) }))); } svoid showOriginalClips { showImage(mergeBWImagesVertically(map(markedImages, func(MarkedImage img) -> BWImage { markIntRangesOnTopOfBWImage(img.image, ll(intRange(img.start, img.end))) }))); }