def compute_ssm(wav_file, h, ssm_read_pk, is_ismir=False, tonnetz=False): """Computes the self similarity matrix from an audio file. Parameters ---------- wav_file: str Path to the wav file to be read. h : float Hop size. ssm_read_pk : bool Whether to read the ssm from a pickle file or not (note: this function utomatically saves the ssm in a pickle file). is_ismir : bool Produce the plots that appear on the ISMIR paper. tonnetz : bool Compute tonnetz instead of Chroma features. Returns ------- X : np.array((N, N)) Self-similarity matrix """ if not ssm_read_pk: # Read WAV file logging.info("Reading the WAV file...") C = utils.compute_audio_chromagram(wav_file, h) C = utils.median_filter(C, L=9) if is_ismir: ismir.plot_chroma(C) # Compute Tonnetz if needed F = C if tonnetz: F = utils.chroma_to_tonnetz(C) # Compute the self similarity matrix logging.info("Computing key-invariant self-similarity matrix...") X = utils.compute_key_inv_ssm(F, h) #plt.imshow(X, interpolation="nearest", aspect="auto") #plt.show() utils.write_cPickle(wav_file + "-audio-ssm.pk", X) else: X = utils.read_cPickle(wav_file + "-audio-ssm.pk") if is_ismir: #X = X**2.5 ismir.plot_ssm(X) ismir.plot_score_examples(X) return X
def compute_beatsync_features(ticks, audio): """Computes the HPCP and MFCC beat-synchronous features given a set of beats (ticks).""" MFCC = STFTFeature(FRAME_SIZE, HOP_SIZE, WINDOW_TYPE, ES.MFCC(numberCoefficients=14), ticks, SAMPLE_RATE) HPCP = STFTFeature(FRAME_SIZE, HOP_SIZE, WINDOW_TYPE, ES.HPCP(), ticks, SAMPLE_RATE) logging.info("Computing Beat-synchronous MFCCs...") mfcc = MFCC.compute_features(audio) logging.info("Computing Beat-synchronous HPCPs...") hpcp = HPCP.compute_features(audio) logging.info("Computing Beat-synchronous Tonnetz...") tonnetz = utils.chroma_to_tonnetz(hpcp) return mfcc.tolist(), hpcp.tolist(), tonnetz.tolist()