Source code for VuVoPy.features.utils.relseosd

import numpy as np
import librosa as lib
from VuVoPy.data.containers.prepocessing import Preprocessed as pp
from VuVoPy.data.containers.sample import VoiceSample as vs
from VuVoPy.data.containers.segmentation import Segmented as sg
from VuVoPy.data.utils.vuvs_detection import Vuvs as vuvs
from VuVoPy.data.containers.voiced_sample import VoicedSample as vos

[docs] def relSEOSD(folder_path, winlen = 512, winover = 496 , wintype = 'hamm'): """ Computes the relative standard deviation of the root mean square (RMS) energy contour of a voice sample after silence removal. Parameters: ----------- folder_path : str Path to the folder containing the voice sample in WAV format. winlen : int, optional Length of the analysis window in samples. Default is 512. winover : int, optional Overlap between consecutive windows in samples. Default is 496. wintype : str, optional Type of window function to apply (e.g., 'hamm' for Hamming window). Default is 'hamm'. Returns: -------- float The relative standard deviation (standard deviation divided by the mean) of the RMS energy contour. Returns 0 if the mean RMS energy is zero. """ preprocessed_sample = pp.from_voice_sample(vs.from_wav(folder_path)) segment = sg.from_voice_sample(preprocessed_sample, winlen, wintype, winover) fs = segment.get_sampling_rate() labels = vuvs(segment, fs=fs, winlen =segment.get_window_length(), winover = segment.get_window_overlap(), wintype=segment.get_window_type(), smoothing_window=5) silence_removed_sample = vos(preprocessed_sample, labels, fs).get_silence_remove_sample() contour = lib.feature.rms(y=silence_removed_sample, frame_length=winlen, hop_length=(winlen-winover), center=False) mean_val = np.mean(contour) std_val = np.std(contour) return std_val / mean_val if mean_val != 0 else 0