Skip to content

Commit

Permalink
Updating parameters for librosa features
Browse files Browse the repository at this point in the history
  • Loading branch information
Oriol Nieto committed Mar 14, 2024
1 parent a3bda84 commit e35da7a
Showing 1 changed file with 65 additions and 39 deletions.
104 changes: 65 additions & 39 deletions src/compute_librosa_audio_features.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
Created by Oriol Nieto.
"""


import argparse
import glob
import json
import os
import time
import numpy as np

from joblib import Parallel, delayed
from pqdm.processes import pqdm

import librosa

Expand All @@ -23,23 +22,33 @@
N_JOBS = 12

# Features params
SR = 22050
N_MELS = 80
SR = 24000
N_FFT = 2048
HOP_LENGTH = 1024
MEL_FMIN = 0
MEL_FMAX = None
WINDOW = "hann"
CENTER = True
PAD_MODE = "constant"
POWER = 2.0
N_MELS = 256
MEL_FMIN = 30
MEL_FMAX = 12000


def compute_melspecs(audio):
"""Computes a mel-spectrogram from the given audio data."""
return librosa.feature.melspectrogram(y=audio,
sr=SR,
n_mels=N_MELS,
n_fft=N_FFT,
hop_length=HOP_LENGTH,
fmin=MEL_FMIN,
fmax=MEL_FMAX)
return librosa.feature.melspectrogram(
y=audio,
sr=SR,
n_fft=N_FFT,
hop_length=HOP_LENGTH,
window=WINDOW,
center=CENTER,
pad_mode=PAD_MODE,
power=POWER,
n_mels=N_MELS,
fmin=MEL_FMIN,
fmax=MEL_FMAX,
)


def compute_all_features(mp3_file, output_dir):
Expand All @@ -52,7 +61,8 @@ def compute_all_features(mp3_file, output_dir):

# Save
out_file = os.path.join(
output_dir, os.path.basename(mp3_file).replace(".mp3", "-mel.npy"))
output_dir, os.path.basename(mp3_file).replace(".mp3", "-mel.npy")
)
np.save(out_file, mel)


Expand All @@ -63,37 +73,48 @@ def save_params(output_dir):
"librosa_version": librosa.__version__,
"numpy_version": np.__version__,
"SR": SR,
"N_MELS": N_MELS,
"N_FFT": N_FFT,
"HOP_LENGTH": HOP_LENGTH,
"WINDOW": WINDOW,
"CENTER": CENTER,
"PAD_MODE": PAD_MODE,
"POWER": POWER,
"N_MELS": N_MELS,
"MEL_FMIN": MEL_FMIN,
"MEL_FMAX": MEL_FMAX
"MEL_FMAX": MEL_FMAX,
}
with open(out_json, 'w') as fp:
with open(out_json, "w") as fp:
json.dump(out_dict, fp, indent=4)


if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Computes audio features for the Harmonix set.",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)

parser.add_argument("-i",
"--input_dir",
default=INPUT_DIR,
action="store",
help="Path to the Harmonix set audio.")
parser.add_argument("-o",
"--output_dir",
default=OUTPUT_DIR,
action="store",
help="Output directory.")
parser.add_argument("-j",
"--n_jobs",
default=N_JOBS,
action="store",
type=int,
help="Number of jobs to run in parallel.")
description="Computes audio features for the Harmonix set.",
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
)

parser.add_argument(
"-i",
"--input_dir",
default=INPUT_DIR,
action="store",
help="Path to the Harmonix set audio.",
)
parser.add_argument(
"-o",
"--output_dir",
default=OUTPUT_DIR,
action="store",
help="Output directory.",
)
parser.add_argument(
"-j",
"--n_jobs",
default=N_JOBS,
action="store",
type=int,
help="Number of jobs to run in parallel.",
)

args = parser.parse_args()
start_time = time.time()
Expand All @@ -106,9 +127,14 @@ def save_params(output_dir):
mp3s = glob.glob(os.path.join(args.input_dir, "*.mp3"))

# Compute features for each mp3 in parallel
Parallel(n_jobs=args.n_jobs)(
delayed(compute_all_features)(mp3_file, args.output_dir)
for mp3_file in mp3s)
pqdm_args = [[mp3_file, args.output_dir] for mp3_file in mp3s]

pqdm(
pqdm_args,
compute_all_features,
n_jobs=args.n_jobs,
argument_type="args",
)

# Save parameters
save_params(args.output_dir)
Expand Down

0 comments on commit e35da7a

Please sign in to comment.