|
|
|
from os import listdir
|
|
|
|
from os.path import isfile, join
|
|
|
|
import multiprocessing as mp
|
|
|
|
import pandas as pd
|
|
|
|
if __name__ == '__main__':
|
|
|
|
from feature_extractor import extractFeatures
|
|
|
|
else:
|
|
|
|
from .feature_extractor import extractFeatures
|
|
|
|
|
|
|
|
class bcolors:
|
|
|
|
BLUE = '\033[94m'
|
|
|
|
GREEN = '\033[92m'
|
|
|
|
YELLOW = '\033[93m'
|
|
|
|
RED = '\033[91m'
|
|
|
|
ENDC = '\033[0m'
|
|
|
|
|
|
|
|
def batchExtract(audioFilesPath, featureFilesPath, sampleRate):
|
|
|
|
audioFiles = [file for file in listdir(audioFilesPath) if isfile(join(audioFilesPath, file))]
|
|
|
|
|
|
|
|
dataframesList = [None]*len(audioFiles)
|
|
|
|
|
|
|
|
pool = mp.Pool()
|
|
|
|
for process, file in enumerate(audioFiles):
|
|
|
|
dataframesList[process] = pool.apply_async(extractFeatures,args=(audioFilesPath + file,
|
|
|
|
featureFilesPath + file[0:file.rfind('.')] + '.json',int(sampleRate))).get()
|
|
|
|
pool.close()
|
|
|
|
pool.join()
|
|
|
|
|
|
|
|
joinedDataset = pd.concat(dataframesList)
|
|
|
|
|
|
|
|
print('Batch feature extraction finished successfully.')
|
|
|
|
|
|
|
|
return joinedDataset
|
|
|
|
|
|
|
|
# Prints a nice message to let the user know the module was imported
|
|
|
|
print(bcolors.BLUE + 'batch_feature_extractor loaded' + bcolors.ENDC)
|
|
|
|
|
|
|
|
# Enables executing the module as a standalone script
|
|
|
|
if __name__ == "__main__":
|
|
|
|
import sys
|
|
|
|
batchExtract(sys.argv[1], sys.argv[2], sys.argv[3])
|