public static Map<String, Boolean> beatDetect(String deviceName, NodeContext context) {
   BeatDetect beat = (BeatDetect) context.getData().get(deviceName + ".beat");
   if (beat == null) return ImmutableMap.of();
   ImmutableMap.Builder<String, Boolean> mb = ImmutableMap.builder();
   mb.put("beat", beat.isOnset());
   mb.put("kick", beat.isKick());
   mb.put("snare", beat.isSnare());
   mb.put("hat", beat.isHat());
   return mb.build();
 }
Example #2
0
  public SoundControl(String s) throws IOException {
    MinimObject minimObj = new MinimObject();
    minim = new Minim(minimObj);
    maxBass = Constants.MAX_PLAYER_SIZE;
    frame = Constants.FRAME_TO_GENERATE_ENEMIES;
    fftThreshold = Constants.FFT_THRESHOLD;
    fftLeftThreshold = Constants.FFT_LEFT_THRESHOLD;
    consecFramesGenned = 0;

    song = minim.loadFile(s);
    songLength = song.length();
    songOver = false;

    fadeEnter = false;

    fft = new FFT(song.bufferSize(), song.sampleRate());
    fft.linAverages(bands);
    setFftLog(new FFT(song.bufferSize(), song.sampleRate()));
    getFftLog().logAverages(22, 12);

    fftPrev = new float[bands];
    fftDiff = new float[bands];
    groupings = new int[120];
    beats = new boolean[120];

    beat = new BeatDetect(song.bufferSize(), song.sampleRate());
    beat.setSensitivity(10);

    bl = new BeatListener(beat, song);
  }
Example #3
0
  public int getBassBeat() {
    if (bass > 0) bass--;

    if (beat.isKick()) { // TODO: base off of fft, not just jump to maxBass
      bass = maxBass;
    }
    return bass;
  }
Example #4
0
  public void setup() {
    size(1200, 200, JAVA2D);
    preview = createGraphics(width, 100);
    minim = new Minim(this);
    mimp = new JSMinim(this);
    mimp.debugOn();
    // specify that we want the audio buffers of the AudioPlayer
    // to be 1024 samples long because our FFT needs to have
    // a power-of-two buffer size and this is a good size.
    jingle = minim.loadFile(filename, 1024);
    // loop the file indefinitely
    jingle.loop();

    // create an FFT object that has a time-domain buffer
    // the same size as jingle's sample buffer
    // note that this needs to be a power of two
    // and that it means the size of the spectrum will be half as large.
    fft = new FFT(jingle.bufferSize(), jingle.sampleRate());
    MultiChannelBuffer sampleBuffer = new MultiChannelBuffer(0, 0); // params don't matter!
    float jingleBuffer = loadFileIntoBuffer(filename, sampleBuffer);
    totalSamples = sampleBuffer.getBufferSize();
    beat = new BeatDetect(4096 * 4, jingle.sampleRate());
    beat.setSensitivity(1);
    beat.detectMode(BeatDetect.FREQ_ENERGY);
    // find ALL beats
    float data[] = new float[2048];
    samples = sampleBuffer.getChannel(1);

    //		for( int i = 0; i < samples.length; i+= data.length ){
    //			int j = Math.min( samples.length-1, i + data.length - 1 );
    ////			System.out.println( "copy up to including " + ( j ) + " / " + samples.length);
    //			System.arraycopy( samples, i, data, 0, 1 + j - i );
    //			beat.detect( data );
    //			if( beat.isOnset() ){
    //				beats.add( i );
    //				System.out.println( i + ": " + beat.isKick() );
    //			}
    //		}

    // pick some starting point ...
    loopEnd = samples.length;
    int start = (int) random(3 * samples.length / 5);
    analyze(start);
    new Thread() {
      public void run() {
        try {
          while (true) {
            Thread.sleep(1);
            // figure it out
            int s = (int) (loopStart * 1000l / jingle.getFormat().getSampleRate());
            int e = (int) (loopEnd * 1000l / jingle.getFormat().getSampleRate());
            if (jingle.position() < s) jingle.cue(s + 10);
            else if (jingle.position() > e) jingle.cue(s);
            else continue;
            Thread.sleep(500);
          }
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }.start();

    //		System.exit(0);
  }