def __init__(self, file_struct, feat_type, sr=config.sample_rate, hop_length=config.hop_size, mode=config.cqt.mode, norm=config.cqt.norm, epsilon=config.cqt.epsilon, ref_power=config.cqt.ref_power): """Constructor of the class. Parameters ---------- file_struct: `msaf.input_output.FileStruct` Object containing the file paths from where to extract/read the features. feat_type: `FeatureTypes` Enum containing the type of features. sr: int > 0 Sampling rate for the analysis. hop_length: int > 0 Hop size in frames for the analysis. mode: {'stack', 'merge'} Mode for flattening multi-track piano-rolls. norm: bool True to normalize the piano-rolls. False to do nothing. epsilon: float A small number added to the results to avoid divide by zero errors. ref_power: function The reference power for logarithmic scaling. """ # Init the parent super().__init__(file_struct=file_struct, sr=sr, hop_length=hop_length, feat_type=feat_type) # Init the CQT parameters if mode not in ('stack', 'merge'): raise FeatureParamsError("Wrong value for mode") self.mode = mode self.norm = norm self.epsilon = epsilon if ref_power == "max": self.ref_power = np.max elif ref_power == "min": self.ref_power = np.min elif ref_power == "median": self.ref_power = np.median else: raise FeatureParamsError("Wrong value for ref_power")
def __init__(self, file_struct, feat_type, sr=config.sample_rate, hop_length=config.hop_size, n_fft=config.n_fft, n_mels=config.mfcc.n_mels, n_mfcc=config.mfcc.n_mfcc, ref_power=config.mfcc.ref_power, n_bins=config.cqt.bins, norm=config.cqt.norm, filter_scale=config.cqt.filter_scale): """Constructor of the class. Parameters ---------- file_struct: `msaf.input_output.FileStruct` Object containing the file paths from where to extract/read the features. feat_type: `FeatureTypes` Enum containing the type of features. sr: int > 0 Sampling rate for the analysis. hop_length: int > 0 Hop size in frames for the analysis. n_fft: int > 0 Number of frames for the FFT. n_mels: int > 0 Number of mel filters. n_mfcc: int > 0 Number of mel coefficients. ref_power: function The reference power for logarithmic scaling. """ # Init the parent super().__init__(file_struct=file_struct, sr=sr, hop_length=hop_length, feat_type=feat_type) # Init the MFCC parameters self.n_fft = n_fft self.n_mels = n_mels self.n_mfcc = n_mfcc # Init the CQT parameters self.n_bins = n_bins self.norm = norm self.filter_scale = filter_scale if ref_power == "max": self.ref_power = np.max elif ref_power == "min": self.ref_power = np.min elif ref_power == "median": self.ref_power = np.median else: raise FeatureParamsError("Wrong value for ref_power")
def __init__(self, file_struct, feat_type, sr=config.sample_rate, hop_length=config.hop_size, n_bins=config.cqt.bins, norm=config.cqt.norm, filter_scale=config.cqt.filter_scale, ref_power=config.cqt.ref_power): """Constructor of the class. Parameters ---------- file_struct: `msaf.input_output.FileStruct` Object containing the file paths from where to extract/read the features. feat_type: `FeatureTypes` Enum containing the type of features. sr: int > 0 Sampling rate for the analysis. hop_length: int > 0 Hop size in frames for the analysis. n_bins: int > 0 Number of frequency bins for the CQT. norm: float Type of norm to use for basis function normalization. filter_scale: float The scale of the filter for the CQT. ref_power: str The reference power for logarithmic scaling. See `configdefaults.py` for the possible values. """ # Init the parent super().__init__(file_struct=file_struct, sr=sr, hop_length=hop_length, feat_type=feat_type) # Init the CQT parameters self.n_bins = n_bins self.norm = norm self.filter_scale = filter_scale if ref_power == "max": self.ref_power = np.max elif ref_power == "min": self.ref_power = np.min elif ref_power == "median": self.ref_power = np.median else: raise FeatureParamsError("Wrong value for ref_power")
def read_features(self, tol=1e-3): """Reads the features from a file and stores them in the current object. Parameters ---------- tol: float Tolerance level to detect duration of audio. """ try: # Read JSON file with open(self.file_struct.features_file) as f: feats = json.load(f) # Store duration if self.dur is None: self.dur = float(feats["globals"]["dur"]) # Check that we have the correct global parameters assert (np.isclose(self.dur, float(feats["globals"]["dur"]), rtol=tol)) assert (self.sr == int(feats["globals"]["sample_rate"])) assert (self.hop_length == int(feats["globals"]["hop_length"])) assert (os.path.basename( self.file_struct.audio_file) == os.path.basename( feats["globals"]["audio_file"])) # Check for specific features params feat_params_err = FeatureParamsError( "Couldn't find features for %s id in file %s" % (self.get_id(), self.file_struct.features_file)) if self.get_id() not in feats.keys(): raise feat_params_err for param_name in self.get_param_names(): value = getattr(self, param_name) if hasattr(value, '__call__'): # Special case of functions if value.__name__ != \ feats[self.get_id()]["params"][param_name]: raise feat_params_err else: if str(value) != \ feats[self.get_id()]["params"][param_name]: raise feat_params_err # Store actual features self._est_beats_times = np.array(feats["est_beats"]) self._est_beatsync_times = np.array(feats["est_beatsync_times"]) self._est_beats_frames = librosa.core.time_to_frames( self._est_beats_times, sr=self.sr, hop_length=self.hop_length) self._framesync_features = \ np.array(feats[self.get_id()]["framesync"]) self._est_beatsync_features = \ np.array(feats[self.get_id()]["est_beatsync"]) # Read annotated beats if available if "ann_beats" in feats.keys(): self._ann_beats_times = np.array(feats["ann_beats"]) self._ann_beatsync_times = np.array( feats["ann_beatsync_times"]) self._ann_beats_frames = librosa.core.time_to_frames( self._ann_beats_times, sr=self.sr, hop_length=self.hop_length) self._ann_beatsync_features = \ np.array(feats[self.get_id()]["ann_beatsync"]) except KeyError: raise WrongFeaturesFormatError( "The features file %s is not correctly formatted" % self.file_struct.features_file) except AssertionError: raise FeaturesNotFound( "The features for the given parameters were not found in " "features file %s" % self.file_struct.features_file) except IOError: raise NoFeaturesFileError("Could not find features file %s", self.file_struct.features_file)