view experiment-reverb/code/segment1.py @ 2:c87a9505f294 tip

Added LICENSE for code, removed .wav files
author Emmanouil Theofanis Chourdakis <e.t.chourdakis@qmul.ac.uk>
date Sat, 30 Sep 2017 13:25:50 +0100
parents 246d5546657c
children
line wrap: on
line source
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 17 10:32:20 2015

@author: Emmanouil Chourdakis
"""

import essentia
from essentia import Pool
from essentia.standard import  *
from sys import argv
import csv

# reqyures matplotlib
from pylab import *

#requires numpy
from numpy import *

#requires scikit-learn
from sklearn.metrics import pairwise_distances

if __name__=="__main__":
    if len(argv) < 3:
        print("Please provide an input filename and a parameter value.")
    else:
        
        d = {}
        v = {}
        
        fname = argv[1]
        csvfname = argv[2]
        csvfile = open(csvfname)
        reader = csv.reader(csvfile)
        
        row = reader.next()
        print row
        
        for i in range(0, len(row)):
            v[i] = i
            d[i] = row[i]
        
        for row in reader:
            print row
        
        print("Demo with `%s\'" % fname)

        # Sampling Rate
        SR = 16000.0
        
        # Sampling Frequency
        T = 1.0/SR

        # FrameSize
        tframeSize = 23 #ms    
        frameSize = int(ceil(tframeSize*SR/1000)) if mod(ceil(tframeSize*SR/1000),2) == 0 \
                                                  else int(floor(tframeSize*SR/1000))
                                                  
        # HopSize
        hopSize = frameSize/2
        
        # Load Audio
        audio = MonoLoader(filename = fname)()
                        
        #Window Frames
        w = Windowing(size = frameSize, type = 'hamming')    
        
        # Spectrum
        spec = Spectrum()
        
        # Pool to append mean and variance
        pool = Pool()
        globalPool = Pool()
        
        # Spectral Contrast
        sc =  SpectralContrast(frameSize = frameSize, highFrequencyBound = 8000, sampleRate = SR)        
        
        # MFCCs
        mfccs = MFCC(highFrequencyBound = 8000, sampleRate = SR)
        
        # Onset Detection
        onsetdetection = OnsetDetectionGlobal(frameSize = frameSize, hopSize = hopSize, sampleRate = SR)(audio)
        onsets = Onsets()(essentia.array([onsetdetection]), [1])

        for o in range(0, len(onsets)-1):
            IOI = audio[onsets[o]*SR:onsets[o+1]*SR]
            
            if len(IOI) == 0:
                break;
                
            for frame in FrameGenerator(IOI, frameSize, hopSize):
                framespectrum = spec(w(frame))
                framecontrast = sc(framespectrum)
                mfcc_coeffs = mfccs(framespectrum)[1]
                
                pool.add('lowlevel.mfcc.coeffs', mfcc_coeffs);
                pool.add('lowlevel.spectrum.magnitude', framespectrum)
                pool.add('lowlevel.contrast.contrast',  framecontrast[0])  
                pool.add('lowlevel.contrast.valleys',  framecontrast[1])            
                
                
            
            spectrumfull = pool['lowlevel.spectrum.magnitude']
            spectralcontrast = pool['lowlevel.contrast.contrast']
            spectralvalleys = pool['lowlevel.contrast.valleys']
            
            spectralfeature = concatenate((spectralcontrast,spectralvalleys),1)
            mfccfeature = pool['lowlevel.mfcc.coeffs']
            
            globalPool.add('spectralcontrast', mean(spectralfeature, 0))
            globalPool.add('mfccs', mean(mfccfeature, 0))
            
            pool.clear()

            

    
        #simmfcc = pairwise_distances(globalPool['mfccs'], metric='cosine')
       # simmfcc = pairwise_distances(globalPool['spectralcontrast'], metric='cosine')        
        
        #plot(simmfcc[0,:])
        #figure()
        
        spectralcontrastmean = globalPool['spectralcontrast']
        
        imshow(spectralcontrastmean.T, aspect='auto', interpolation='none')
        output = YamlOutput(filename = "%s.yaml" % fname.partition('/')[2].partition('.')[0])(globalPool)