generated from schuler-henry/dhbw-latex-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFeatureExtractor.py
47 lines (36 loc) · 1.53 KB
/
FeatureExtractor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from FeatureExtractor.LPCExtractor import LPCExtractor
import librosa
import numpy as np
from enum import Enum
class Feature(Enum):
LPC = 0
class FeatureExtractor:
def __init__(self, frames, sr):
self.frames = frames
self.sr = sr
self.extractors = [
LPCExtractor()
]
self.last_feature_count = 0
def extract_features(self, feature_list): #(*@\label{line:extract_features}@*)
"""_summary_
Args:
feature_list ((Feature, int, int[])[]): 2D List of Features (enum) + order (int) + deltas (int[]) lists to extract #(*@\label{line:feature_list_info}@*)
Returns:
NDArray[]: Array of requested features for each frame
"""
feature_set = None
for feature_info in feature_list:
features = self.extractors[feature_info[0].value].calculate_features(self.frames, self.sr, feature_info[1])
if feature_set is None:
feature_set = np.array(features)
else:
np.concatenate((feature_set, np.array(features)), axis=1)
for delta in feature_info[2]:
delta_features = librosa.feature.delta(np.array(features), order=delta, mode='nearest')
np.concatenate((feature_set, delta_features), axis=1)
feature_set = feature_set.tolist()
self.last_feature_count = len(feature_set[0])
return feature_set
def get_last_feature_count(self):
return self.last_feature_count