from essentia.standard import * import glob myLib = glob.glob('/Users/milrober/Desktop/MIR/Code/240E_Homework/samples/*.wav') sndFiles = [] for snd in myLib: loader = MonoLoader(filename=snd) sndFiles.append(loader()) w = Windowing(type='hann') spectrum = Spectrum() pitchYin = PitchYinFFT() titles = [] for ml in myLib: titles.append(ml[55:]) def getPitches(audio, windowSize=2048, hop=1024): pitches = [] confidences = [] for frame in FrameGenerator(audio, frameSize=windowSize, hopSize=hop): pitch, pConf = pitchYin(spectrum(w(frame))) pitches.append(pitch) confidences.append(pConf) return pitches, confidences p1, c1 = getPitches(sndFiles[0]) plot(p1) plot(p1[2000:2100]) twinx() plot(c1[2000:2100],'r') pitches = [] confidences = [] for snd in sndFiles: p,c = getPitches(snd) pitches.append(p) confidences.append(c) #Code from Class def midi2Hz(midinote, tuning=440.0): return tuning * (2**((midinote - 69)/12.0)) num_freqs = 8*12 # eight octaves from C0 quant_freqs = [midi2Hz(i + 24) for i in range(num_freqs)] def quantize_freq(freq_list, quant_freqs, quant_offset=24): quantized = zeros_like(freq_list) for i in range(len(freq_list)): arg = argwhere(array(quant_freqs) > freq_list[i]) if arg.size == 0 or arg[0] == 0: quantized[i] = 0 elif quant_freqs[arg[0]] - freq_list[i] > freq_list[i] - quant_freqs[arg[0] - 1]: quantized[i] = arg[0] - 1 else: quantized[i] = arg[0] return quantized + quant_offset quantized_pitches = [] for p in pitches: quantized_pitches.append(quantize_freq(p,quant_freqs)) hist(quantized_pitches[0],arange(40,100)); title(titles[0]) hist(quantized_pitches[1],arange(40,100)); title(titles[1]) hist(quantized_pitches[2],arange(40,100)); title(titles[2]) hist(quantized_pitches[3],arange(40,100)); title(titles[3]) hist(quantized_pitches[4],arange(40,100)); title(titles[4]) winSize = 200 hopSize = 100 signal = pitches[1] win_start = arange(0,len(signal)-winSize,hopSize) ssm = [] for starti in win_start: for startj in win_start: wini = signal[starti:starti+winSize] winj = signal[startj:startj+winSize] ssm.append(corrcoef(wini,winj)[0,1]) ssm = array(ssm).reshape(len(win_start), len(win_start)) imshow(ssm,cmap='gray') title(titles[1]) def constructSSM(sig): winSize = 200 hopSize = 100 signal = sig win_start = arange(0,len(signal)-winSize,hopSize) ssm = [] for starti in win_start: for startj in win_start: wini = signal[starti:starti+winSize] winj = signal[startj:startj+winSize] ssm.append(corrcoef(wini,winj)[0,1]) ssm = array(ssm).reshape(len(win_start), len(win_start)) return ssm ssms = [] for p in pitches: ssms.append(constructSSM(p)) imshow(ssms[0]) title(titles[0]) imshow(ssms[2]) title(titles[2]) imshow(ssms[3],cmap='gray') title(titles[3]) imshow(ssms[4]) imshow(ssms[4],cmap='gray') title(myLib[4][55:])