class Yaafe(EnhancedObject): '''Yaafe toolbox wrapper. To be used with Database object. Attributes: sample_rate The Files' sample rate plan_filename The Featue Plan filename Methods: process(audiofile) Process audiofile and return features get_X(entries_list, feat) Fetch array of processed data from Database get_y Fetch subdir i's from Database ` Init: Yaafe(sample_rate, feature_plan) ''' _features = { 'spec_rolloff': ("SpectralRolloff blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spec_shape': ("SpectralShapeStatistics blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spec_flux': ("SpectralFlux blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'amp_mod': ("AmplitudeModulation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'auto': ("AutoCorrelation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'lpc': ("LPC blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'loudness': ("Loudness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'mfcc': ("MFCC blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'mel_spectrum': ("MelSpectrum blockSize=512, stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'obsi': ("OBSI blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'obsir': ("OBSIR blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'perc_sharp': ("PerceptualSharpness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'perc_spread': ("PerceptualSpread blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_crest': ("SpectralCrestFactorPerBand blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), 'spec_decr': ("SpectralDecrease blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_flat': ("SpectralFlatness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_flat_band': ("SpectralFlatnessPerBand blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), 'spect_slope': ("SpectralSlope blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_var': ("SpectralVariation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'temp_shape': ("TemporalShapeStatistics blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'zcr': ("ZCR blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'env_shape': ("EnvelopeShapeStatistics blockSize=512 stepSize=128" " > StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'comp_onest': ("ComplexDomainOnsetDetection blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), } def __init__(self, sample_rate, features=None): if features is None: features = self._features self.sample_rate = sample_rate self.initialize(features) self.features = features def initialize(self, feature_dict): """ Run the required boilerplate for yaafe """ self.feature_dict = feature_dict self.fp = FeaturePlan(sample_rate=self.sample_rate, normalize=0.98) for name, desc in self.feature_dict.items(): self.fp.addFeature("{0}: {1}".format(name, desc)) self.df = self.fp.getDataFlow() self.engine = Engine() self.engine.load(self.df) self.afp = AudioFileProcessor() return self def save_fplan(self, name): """ Save a feature plan (text file) """ text_file = open("{}.txt".format(name), 'w') for name, desc in self.features.items(): text_file.write("{}: {}".format(name, desc)) text_file.close() def process(self, audiofile): """ Process function for running a file through yaafe's feature extractor """ self.afp.processFile(self.engine, audiofile) out = self.engine.readAllOutputs() self.engine.flush() return sorted(out)
class Yaafe(EnhancedObject): '''Yaafe toolbox wrapper. To be used with Database object. Attributes: sample_rate The Files' sample rate plan_filename The Featue Plan filename Methods: process(audiofile) Process audiofile and return features get_X(entries_list, feat) Fetch array of processed data from Database get_y Fetch subdir i's from Database ` Init: Yaafe(sample_rate, feature_plan) ''' _features = { 'spec_rolloff': ("SpectralRolloff blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spec_shape': ("SpectralShapeStatistics blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spec_flux': ("SpectralFlux blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'amp_mod': ("AmplitudeModulation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'auto': ("AutoCorrelation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'lpc': ("LPC blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'loudness': ("Loudness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'mfcc': ("MFCC blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'mel_spectrum': ("MelSpectrum blockSize=512, stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'obsi': ("OBSI blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'obsir': ("OBSIR blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'perc_sharp': ("PerceptualSharpness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'perc_spread': ("PerceptualSpread blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_crest': ("SpectralCrestFactorPerBand blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), 'spec_decr': ("SpectralDecrease blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_flat': ("SpectralFlatness blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_flat_band': ("SpectralFlatnessPerBand blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), 'spect_slope': ("SpectralSlope blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'spect_var': ("SpectralVariation blockSize=512 stepSize=128 >" "StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'temp_shape': ("TemporalShapeStatistics blockSize=512 stepSize=128 " "> StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'zcr': ("ZCR blockSize=512 stepSize=128 > StatisticalIntegrator " "NbFrames=40 StepNbFrames=8"), 'env_shape': ("EnvelopeShapeStatistics blockSize=512 stepSize=128" " > StatisticalIntegrator NbFrames=40 StepNbFrames=8"), 'comp_onest': ("ComplexDomainOnsetDetection blockSize=512 " "stepSize=128 > StatisticalIntegrator NbFrames=40 " "StepNbFrames=8"), } def __init__(self, sample_rate, features=None): if features is None: features = self._features self.sample_rate = sample_rate self.initialize(features) self.features = features def initialize(self, feature_dict): """ Run the required boilerplate for yaafe """ self.feature_dict = feature_dict self.fp = FeaturePlan( sample_rate=self.sample_rate, normalize=0.98) for name, desc in self.feature_dict.items(): self.fp.addFeature("{0}: {1}".format(name, desc)) self.df = self.fp.getDataFlow() self.engine = Engine() self.engine.load(self.df) self.afp = AudioFileProcessor() return self def save_fplan(self, name): """ Save a feature plan (text file) """ text_file = open("{}.txt".format(name), 'w') for name, desc in self.features.items(): text_file.write("{}: {}".format(name, desc)) text_file.close() def process(self, audiofile): """ Process function for running a file through yaafe's feature extractor """ self.afp.processFile(self.engine, audiofile) out = self.engine.readAllOutputs() self.engine.flush() return sorted(out)
import numpy as np import matplotlib.pyplot as plt from yaafelib import FeaturePlan, Engine, AudioFileProcessor FPLAN = FeaturePlan(sample_rate=44100) FPLAN.addFeature("mfcc: MFCC blockSize=512 stepSize=128") FPLAN.addFeature("mfcc_stat: MFCC blockSize=512 stepSize=128 > " "StatisticalIntegrator NbFrames=40 StepNbFrames=8") ENGINE = Engine() ENGINE.load(FPLAN.getDataFlow()) PROCESSOR = AudioFileProcessor() PROCESSOR.processFile(ENGINE, 'track.wav') DATA = ENGINE.readAllOutputs() ENGINE.flush() X_MFCC = DATA['mfcc'] X_MFCC_STAT = DATA['mfcc_stat'] MFCC_DESC = list() for i in range(1, 14): desc = "Average for Band {}".format(i) MFCC_DESC.append(desc) for i in range(1, 14): desc = "Standard Dev. for Band {}".format(i) MFCC_DESC.append(desc) plt.ion() FIG = plt.figure() FIG.set_size_inches(14, 8)
""" Stand-alone application to demonstrate yaafe's transformations """ import numpy as np import matplotlib.pyplot as plt from yaafelib import FeaturePlan, Engine, AudioFileProcessor FPLAN = FeaturePlan(sample_rate=44100) FPLAN.addFeature("mfcc: MFCC blockSize=512 stepSize=128") FPLAN.addFeature("mfcc_stat: MFCC blockSize=512 stepSize=128 > " "StatisticalIntegrator NbFrames=40 StepNbFrames=8") ENGINE = Engine() ENGINE.load(FPLAN.getDataFlow()) PROCESSOR = AudioFileProcessor() PROCESSOR.processFile(ENGINE, 'track.wav') DATA = ENGINE.readAllOutputs() ENGINE.flush() X_MFCC = DATA['mfcc'] X_MFCC_STAT = DATA['mfcc_stat'] MFCC_DESC = list() for i in range(1, 14): desc = "Average for Band {}".format(i) MFCC_DESC.append(desc) for i in range(1, 14): desc = "Standard Dev. for Band {}".format(i) MFCC_DESC.append(desc) plt.ion() FIG = plt.figure() FIG.set_size_inches(14, 8)