Spaces:
Runtime error
Runtime error
import numpy as np | |
import librosa | |
import sys | |
sys.path.append('../../../data/') | |
from src.music.utilities.processing_models import piano_detection_model | |
from src.music.config import CHKPT_PATH_PIANO_EVAL | |
PIANO_SOLO_DETECTOR = piano_detection_model.PianoSoloDetector(CHKPT_PATH_PIANO_EVAL) | |
exclude_playlist_folders = ['synth_audio_recorded', 'from_url'] | |
def clean_start_and_end_blanks(probs): | |
if len(probs) > 20: | |
# clean up to 10s in each direction | |
n_zeros_start = 0 | |
for i in range(10): | |
if probs[i] <= 0.001: | |
n_zeros_start += 1 | |
else: | |
break | |
n_zeros_end = 0 | |
for i in range(10): | |
if probs[-(i + 1)] <= 0.001: | |
n_zeros_end += 1 | |
else: | |
break | |
if n_zeros_end == 0: | |
return probs[n_zeros_start:] | |
else: | |
return probs[n_zeros_start:-n_zeros_end] | |
else: | |
return probs | |
def calculate_piano_solo_prob(audio_path, verbose=False): | |
"""Calculate the piano solo probability of all downloaded mp3s, and append | |
the probability to the meta csv file. Code from https://github.com/bytedance/GiantMIDI-Piano | |
""" | |
try: | |
error_msg = 'Error in audio loading?' | |
(audio, _) = librosa.core.load(audio_path, sr=piano_detection_model.SR, mono=True) | |
error_msg += ' Nope. Error in solo prediction?' | |
probs = PIANO_SOLO_DETECTOR.predict(audio) | |
# probs = clean_start_and_end_blanks(probs) # remove blanks at start and end (<=10s each way). If not piano, the rest of the song will be enough to tell. | |
piano_solo_prob = np.mean(probs) | |
error_msg += ' Nope. ' | |
return piano_solo_prob, '' | |
except: | |
return None, error_msg + 'Yes.' | |