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; }
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); }
/* 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); } }