package at.ofai.music.beatroot;
import javax.sound.sampled.AudioInputStream;
import ch.retorte.intervalmusiccompositor.spi.bpm.BPMCalculator;
import at.ofai.music.util.EventList;
/**
* Custom front end for the beat root engine; takes a sound sample in the form
* of an {@link AudioInputStream} and determines the most plausible beat per
* minute (BPM) value.
*/
public class BeatRoot implements BPMCalculator {
@Override
public Integer calculateBPM(AudioInputStream audioInputStream) {
AudioProcessor ap = new AudioProcessor();
ap.setInputStream(audioInputStream);
ap.processFile();
EventList beats = AudioProcessor.beatTrack(ap.onsetList, null);
ap.closeStreams();
// Such empty list means that there was no candidate found.
if (beats.size() == 0) {
return null;
}
return (int) Math.round(60 / AudioProcessor.getMedianIBI(beats.toOnsetArray()));
}
}