AubioOnsetDetector :: AubioOnsetDetector(){
	buffersize = 1024;
	hopsize = 512;
		//aubio related setup
		o = new_aubio_onsetdetection(aubio_onset_complex, buffersize, 1);//initially in complex mode
		pv = (aubio_pvoc_t *)new_aubio_pvoc(buffersize, hopsize, 1);
		parms = new_aubio_peakpicker(threshold);
		vec = (fvec_t *)new_fvec(hopsize,1);
		
		threshold = 1;
		threshold2 = -70.;
	
	maximumDetectionValue = 10.0; 
	resetValues();
	thresholdRelativeToMedian = 1.1;
	cutoffForRepeatOnsetsMillis = 100;
	medianSpeed = 15;
	pos = 0;
	
	detectionTriggerRatio = 0.5f;
	detectionTriggerThreshold = 10;
	
	

}
Exemplo n.º 2
0
void aubio_init(int c) {
    channels = c;
    /* phase vocoder */
    pv = new_aubio_pvoc(buffer_size, overlap_size, channels);
    ibuf = new_fvec(overlap_size, channels);
    fftgrain  = new_cvec(buffer_size, channels);
    o = new_aubio_onsetdetection(type_onset, buffer_size, channels);
    parms = new_aubio_peakpicker(threshold);
    onset = new_fvec(1, channels);
    pos = 0;
    onset_n = 0;
    if (usedoubled)    {
        o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
        onset2 = new_fvec(1 , channels);
    }
}
void AubioOnsetDetector :: onsetclass_complex(){
		//aubio_onsetdetection_type
		//Complex Domain Method onset detection function 
		//Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Complex domain
		//onset detection for musical signals. In Proceedings of the Digital Audio
		//Effects Conference, DAFx-03, pages 90-93, London, UK, 2003.
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_complex, buffersize, 1);
}
void AubioOnsetDetector :: onsetclass_mkl(){

		/** Modified Kullback-Liebler onset detection function 

		Paul Brossier, ``Automatic annotation of musical audio for interactive
		systems'', Chapter 2, Temporal segmentation, PhD thesis, Centre for Digital
		music, Queen Mary University of London, London, UK, 2003.*/		
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_hfc, buffersize, 1);
}
void AubioOnsetDetector :: onsetclass_kl(){
		/** Kullback-Liebler onset detection function 
  
			Stephen Hainsworth and Malcom Macleod. Onset detection in music audio
			signals. In Proceedings of the International Computer Music Conference
			(ICMC), Singapore, 2003.
		*/
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_kl, buffersize, 1);
}
void AubioOnsetDetector :: onsetclass_specdiff(){
		/* Spectral difference method onset detection function 
		Jonhatan Foote and Shingo Uchihashi. The beat spectrum: a new approach to
		rhythm analysis. In IEEE International Conference on Multimedia and Expo
		(ICME 2001), pages 881­884, Tokyo, Japan, August 2001.
		*/
		//aubio_onsetdetection_type
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_specdiff, buffersize, 1);
}
void AubioOnsetDetector :: initialise(){
	//reinitialises our object
		o = new_aubio_onsetdetection(aubio_onset_complex, buffersize, 1);//initially in complex mode
		pv = (aubio_pvoc_t *)new_aubio_pvoc(buffersize, hopsize, 1);
		parms = new_aubio_peakpicker(threshold);
		vec = (fvec_t *)new_fvec(hopsize,1);
		pos = 0;
				fvec_write_sample(vec, 0.234, 0, pos);
				fftgrain  = (cvec_t *)new_cvec(buffersize,1);
				onset = (fvec_t *)new_fvec(1,1);
		}
void AubioOnsetDetector :: onsetclass_phase(){
/** Phase Based Method onset detection function 

  Juan-Pablo Bello, Mike P. Davies, and Mark B. Sandler. Phase-based note onset
  detection for music signals. In Proceedings of the IEEE International
  Conference on Acoustics Speech and Signal Processing, pages 441­444,
  Hong-Kong, 2003.*/
  		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_phase, buffersize, 1);
		
}
void AubioOnsetDetector :: onsetclass_hfc(){
/** High Frequency Content onset detection function
 
  This method computes the High Frequency Content (HFC) of the input spectral
  frame. The resulting function is efficient at detecting percussive onsets.

  Paul Masri. Computer modeling of Sound for Transformation and Synthesis of
  Musical Signal. PhD dissertation, University of Bristol, UK, 1996.*/
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_hfc, buffersize, 1);
}
Exemplo n.º 10
0
/* Allocate memory for an tempo detection */
aubio_tempo_t * new_aubio_tempo (aubio_onsetdetection_type type_onset, 
    uint_t buf_size, uint_t hop_size, uint_t channels)
{
  aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t);
  o->winlen = SQR(512)/hop_size;
  o->step = o->winlen/4;
  o->blockpos = 0;
  o->threshold = 0.3;
  o->silence = -90;
  o->blockpos = 0;
  o->dfframe  = new_fvec(o->winlen,channels);
  o->fftgrain = new_cvec(buf_size, channels);
  o->out      = new_fvec(o->step,channels);
  o->pv       = new_aubio_pvoc(buf_size, hop_size, channels);
  o->pp       = new_aubio_peakpicker(o->threshold);
  o->od       = new_aubio_onsetdetection(type_onset,buf_size,channels);
  o->of       = new_fvec(1, channels);
  o->bt       = new_aubio_beattracking(o->winlen,channels);
  /*if (usedoubled)    {
    o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
    onset2 = new_fvec(1 , channels);
  }*/
  return o;
}
void AubioOnsetDetector :: onsetclass_energy(){
		//aubio_onsetdetection_type
		aubio_onsetdetection_free (o);
		o = new_aubio_onsetdetection(aubio_onset_energy, buffersize, 1);
}
void wav2midi_init(JNIEnv* env, jobject thiz) {
    LOGV("Aubio init");
    JNIenv = env;
    counter = 0;
    const char * type_pitch_str;
    const char * type_onset_str;
    /* Read the member values from the Java Object that called sendSPAPacket() method
     */
    jclass c = (*env)->GetObjectClass(env, thiz);
    jfieldID fid = (*env)->GetFieldID(env, c, "srcfilename", "Ljava/lang/String;");
    jstring jaccess = (*env)->GetObjectField(env, thiz, fid);
    input_filename = (*env)->GetStringUTFChars(env, jaccess, 0);
    LOGD("Setting Input File: %s", input_filename);


    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "type_pitch", "Ljava/lang/String;");
    jaccess = (*env)->GetObjectField(env, thiz, fid);
    type_pitch_str = (*env)->GetStringUTFChars(env, jaccess, 0);
    LOGD("Setting Aubio Pitch Algorithm: %s", type_pitch_str);
    set_pitch_type(type_pitch_str);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "type_onset", "Ljava/lang/String;");
    jaccess = (*env)->GetObjectField(env, thiz, fid);
    type_onset_str = (*env)->GetStringUTFChars(env, jaccess, 0);
    LOGD("Setting Aubio Onset Algorithm: %s", type_onset_str);
    set_onset_type(type_onset_str);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "type_onset2", "Ljava/lang/String;");
    jaccess = (*env)->GetObjectField(env, thiz, fid);
    type_onset_str = (*env)->GetStringUTFChars(env, jaccess, 0);
    LOGD("Setting Aubio Onset 2nd Algorithm: %s", type_onset_str);
    set_onset_type2(type_onset_str);



    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "samplerate", "I");
    samplerate = (*env)->GetIntField(env, thiz, fid);
    LOGV("Setting Aubio SampleRate: %d", samplerate);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "buffer_size", "I");
    buffer_size = (*env)->GetIntField(env, thiz, fid);
    LOGV("Setting Aubio buffer_size: %d", buffer_size);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "overlap_size", "I");
    overlap_size = (*env)->GetIntField(env, thiz, fid);
    LOGV("Setting Aubio overlap_size: %d", overlap_size);

    /*
        c = (*env)->GetObjectClass(env, thiz);
        fid = (*env)->GetFieldID(env, c, "bitspersample", "I");
        bitspersample = (*env)->GetIntField(env, thiz, fid);
        LOGV("PCM Bits per sample: %d", bitspersample);
     */

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "channels", "I");
    channels = (*env)->GetIntField(env, thiz, fid);
    LOGV("Setting Aubio Channels: %d", channels);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "threshold", "F");
    if (fid != NULL) {
        threshold = (*env)->GetFloatField(env, thiz, fid);
    }
    LOGD("Setting Aubio threshold: %f", threshold);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "silence", "F");
    if (fid != NULL) {
        silence = (*env)->GetFloatField(env, thiz, fid);
    }
    LOGD("Setting Aubio silence: %f", silence);

    c = (*env)->GetObjectClass(env, thiz);
    fid = (*env)->GetFieldID(env, c, "averaging", "F");
    if (fid != NULL) {
        averaging = (*env)->GetFloatField(env, thiz, fid);
    }
    LOGD("Setting Aubio averaging: %f", averaging);


    debug("Read Java object Notes.\n");
    Note = (*env)->FindClass(env, "com.atm.android.atm.midi.Note");
    if (Note == NULL) {
        debug("Could not find Note class.\n");
        return ;
    }
    midCtor = (*env)->GetMethodID(env, Note, "<init>",
            "(IIF)V");

    debug("After init \n");
    if (midCtor == NULL){
        debug("Could not find Contructor method.\n");
        return ;
    }
    notesArray = (*env)->NewObjectArray(env, 1000, Note, NULL);




    /* Sanity checks
     */
    if (input_filename == NULL) {
        LOGV("Error: Need a file");
        return;
    }

    debug("Opening input file: %s\n", input_filename);

    file = new_aubio_sndfile_ro(input_filename);
    debug("Opening input file finished: %s\n", input_filename);
    if (file == NULL) {
        outmsg("Could not open input file %s.\n", input_filename);
        debug("Could not open input file %s.\n", input_filename);
        exit(15);
    }

    verbose = 1;
    woodblock = new_fvec(buffer_size, 1);

    //Init Aubio with params
    if (verbose) aubio_sndfile_info(file);
    channels = aubio_sndfile_channels(file);
    samplerate = aubio_sndfile_samplerate(file);

    ibuf = new_fvec(overlap_size, channels);
    obuf = new_fvec(overlap_size, channels);
    fftgrain = new_cvec(buffer_size, channels);

    if (usepitch) {
        pitchdet = new_aubio_pitchdetection(buffer_size * 4,
                overlap_size, channels, samplerate, type_pitch, mode_pitch);
        aubio_pitchdetection_set_yinthresh(pitchdet, 0.7);

        if (median) {
            note_buffer = new_fvec(median, 1);
            note_buffer2 = new_fvec(median, 1);
        }
    }
    /* phase vocoder */
    pv = new_aubio_pvoc(buffer_size, overlap_size, channels);
    /* onsets */
    parms = new_aubio_peakpicker(threshold);
    o = new_aubio_onsetdetection(type_onset, buffer_size, channels);
    onset = new_fvec(1, channels);
    if (usedoubled) {
        o2 = new_aubio_onsetdetection(type_onset2, buffer_size, channels);
        onset2 = new_fvec(1, channels);
    }

}