Changeset 1559


Ignore:
Timestamp:
05/10/21 11:47:23 (3 years ago)
Author:
davidb
Message:

Beat tracking form mozart's laptop branch merged in

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/apollo/audio/SampledTrackModel.java

    r315 r1559  
    22
    33import java.io.IOException;
     4import java.util.ArrayList;
     5import java.util.List;
    46
    57import javax.sound.sampled.AudioFormat;
     8import javax.sound.sampled.UnsupportedAudioFileException;
    69
    710import org.apollo.io.AudioIO;
    811import org.apollo.mvc.AbstractSubject;
    912import org.apollo.mvc.SubjectChangedEvent;
     13
     14import be.tarsos.dsp.AudioDispatcher;
     15import be.tarsos.dsp.beatroot.BeatRootOnsetEventHandler;
     16import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
     17import be.tarsos.dsp.onsets.ComplexOnsetDetector;
     18import be.tarsos.dsp.onsets.OnsetHandler;
     19
    1020
    1121/**
     
    1525 *
    1626 */
    17 public class SampledTrackModel extends AbstractSubject {
     27public class SampledTrackModel extends AbstractSubject  implements OnsetHandler {
    1828       
    1929        private AudioFormat audioFormat = null;
     
    3242       
    3343        private String name = null;
     44       
     45        private List<Double> beats;
     46
    3447       
    3548        /**
     
    7386        }
    7487       
     88
     89        public void detectBeats(int audioBufferSize, int audioBufferOverlap) throws UnsupportedAudioFileException {
     90                AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(audioBytes, audioFormat,
     91                                audioBufferSize, audioBufferOverlap);
     92
     93                ComplexOnsetDetector detector = new ComplexOnsetDetector(audioBufferSize);
     94                BeatRootOnsetEventHandler handler = new BeatRootOnsetEventHandler();
     95                detector.setHandler(handler);
     96
     97                dispatcher.addAudioProcessor(detector);
     98                dispatcher.run();
     99
     100                beats = new ArrayList<Double>();
     101                handler.trackBeats(this);
     102
     103        }
     104
     105        @Override
     106        public void handleOnset(double time, double salience) {
     107                beats.add(time);
     108        }
     109
     110        public List<Double> getBeats() {
     111                return beats;
     112        }
     113
     114        public void clearBeats() {
     115                beats = null;;
     116        }
     117
     118
     119
     120               
    75121        /**
    76122         * @return True if audio bytes have been changed in some way since creation / last reset.
Note: See TracChangeset for help on using the changeset viewer.