e@0: # -*- coding: utf-8 -*- e@0: """ e@0: Created on Fri Apr 17 10:32:20 2015 e@0: e@0: @author: Emmanouil Chourdakis e@0: """ e@0: e@0: import essentia e@0: from essentia import Pool e@0: from essentia.standard import * e@0: from sys import argv e@0: import csv e@0: e@0: # reqyures matplotlib e@0: from pylab import * e@0: e@0: #requires numpy e@0: from numpy import * e@0: e@0: #requires scikit-learn e@0: from sklearn.metrics import pairwise_distances e@0: e@0: if __name__=="__main__": e@0: if len(argv) < 3: e@0: print("Please provide an input filename and a parameter value.") e@0: else: e@0: e@0: d = {} e@0: v = {} e@0: e@0: fname = argv[1] e@0: csvfname = argv[2] e@0: csvfile = open(csvfname) e@0: reader = csv.reader(csvfile) e@0: e@0: row = reader.next() e@0: print row e@0: e@0: for i in range(0, len(row)): e@0: v[i] = i e@0: d[i] = row[i] e@0: e@0: for row in reader: e@0: print row e@0: e@0: print("Demo with `%s\'" % fname) e@0: e@0: # Sampling Rate e@0: SR = 16000.0 e@0: e@0: # Sampling Frequency e@0: T = 1.0/SR e@0: e@0: # FrameSize e@0: tframeSize = 23 #ms e@0: frameSize = int(ceil(tframeSize*SR/1000)) if mod(ceil(tframeSize*SR/1000),2) == 0 \ e@0: else int(floor(tframeSize*SR/1000)) e@0: e@0: # HopSize e@0: hopSize = frameSize/2 e@0: e@0: # Load Audio e@0: audio = MonoLoader(filename = fname)() e@0: e@0: #Window Frames e@0: w = Windowing(size = frameSize, type = 'hamming') e@0: e@0: # Spectrum e@0: spec = Spectrum() e@0: e@0: # Pool to append mean and variance e@0: pool = Pool() e@0: globalPool = Pool() e@0: e@0: # Spectral Contrast e@0: sc = SpectralContrast(frameSize = frameSize, highFrequencyBound = 8000, sampleRate = SR) e@0: e@0: # MFCCs e@0: mfccs = MFCC(highFrequencyBound = 8000, sampleRate = SR) e@0: e@0: # Onset Detection e@0: onsetdetection = OnsetDetectionGlobal(frameSize = frameSize, hopSize = hopSize, sampleRate = SR)(audio) e@0: onsets = Onsets()(essentia.array([onsetdetection]), [1]) e@0: e@0: for o in range(0, len(onsets)-1): e@0: IOI = audio[onsets[o]*SR:onsets[o+1]*SR] e@0: e@0: if len(IOI) == 0: e@0: break; e@0: e@0: for frame in FrameGenerator(IOI, frameSize, hopSize): e@0: framespectrum = spec(w(frame)) e@0: framecontrast = sc(framespectrum) e@0: mfcc_coeffs = mfccs(framespectrum)[1] e@0: e@0: pool.add('lowlevel.mfcc.coeffs', mfcc_coeffs); e@0: pool.add('lowlevel.spectrum.magnitude', framespectrum) e@0: pool.add('lowlevel.contrast.contrast', framecontrast[0]) e@0: pool.add('lowlevel.contrast.valleys', framecontrast[1]) e@0: e@0: e@0: e@0: spectrumfull = pool['lowlevel.spectrum.magnitude'] e@0: spectralcontrast = pool['lowlevel.contrast.contrast'] e@0: spectralvalleys = pool['lowlevel.contrast.valleys'] e@0: e@0: spectralfeature = concatenate((spectralcontrast,spectralvalleys),1) e@0: mfccfeature = pool['lowlevel.mfcc.coeffs'] e@0: e@0: globalPool.add('spectralcontrast', mean(spectralfeature, 0)) e@0: globalPool.add('mfccs', mean(mfccfeature, 0)) e@0: e@0: pool.clear() e@0: e@0: e@0: e@0: e@0: #simmfcc = pairwise_distances(globalPool['mfccs'], metric='cosine') e@0: # simmfcc = pairwise_distances(globalPool['spectralcontrast'], metric='cosine') e@0: e@0: #plot(simmfcc[0,:]) e@0: #figure() e@0: e@0: spectralcontrastmean = globalPool['spectralcontrast'] e@0: e@0: imshow(spectralcontrastmean.T, aspect='auto', interpolation='none') e@0: output = YamlOutput(filename = "%s.yaml" % fname.partition('/')[2].partition('.')[0])(globalPool) e@0: