无法使用 librosa 中的 Harmonic 和 rp_entropy 函数

问题描述 投票:0回答:1

我正在尝试使用 librosa 从音频文件中提取某些特征,但它不断引发谐波和熵函数的 AttributeError 。我尝试将 python 版本从 3.8 更改为 3.12,反之亦然,但错误仍然存在。

我使用的是librosa版本0.10.1,我在文档中找不到librosa.harmonic()函数。我做错了什么,如何解决这个问题?

这是代码:

import librosa
import numpy as np
from python_speech_features import mfcc, logfbank

def extract_audio_features(audio_file):
    # Load the audio file
    y, sr = librosa.load(audio_file)

    # Extract MDVP features
    f0, _, _ = librosa.pyin(y, fmin=librosa.note_to_hz('C2'), fmax=librosa.note_to_hz('C7'))
    mdvp_fo = np.mean(f0)  # Average vocal fundamental frequency
    mdvp_fhi = np.max(f0)  # Maximum vocal fundamental frequency
    mdvp_flo = np.min(f0)  # Minimum vocal fundamental frequency

    # Extract jitter and shimmer features
    jitter = np.mean(np.abs(np.diff(f0)) / f0[:-1])
    shimmer = np.mean(np.abs(np.diff(y)) / y[:-1])

    # Extract noise-to-tonal ratio features
    y_harmonic, y_non_harmonic = librosa.harmonic(y, f0)
    nhr = np.sum(y_non_harmonic ** 2) / np.sum(y ** 2)
    hnr = np.sum(y_harmonic ** 2) / np.sum(y ** 2)

    # Extract nonlinear dynamical complexity measures
    rpde = librosa.feature.rp_entropy(y)
    d2 = librosa.feature.delta(y)

    # Extract signal fractal scaling exponent
    dfa = librosa.feature.fractal_dimension(y, stride=512)

    # Extract nonlinear measures of fundamental frequency variation
    mfccs = mfcc(y, sr, nfft=1024)
    spread1 = np.mean(np.diff(mfccs, axis=0))
    spread2 = np.std(np.diff(mfccs, axis=0))
    ppe = np.mean(np.diff(mfccs, axis=0) ** 2)

    # Create a dictionary containing all the extracted features
    features = {
        'mdvp_fo': mdvp_fo,
        'mdvp_fhi': mdvp_fhi,
        'mdvp_flo': mdvp_flo,
        'jitter': jitter,
        'shimmer': shimmer,
        'nhr': nhr,
        'hnr': hnr,
        'rpde': rpde,
        'd2': d2,
        'dfa': dfa,
        'spread1': spread1,
        'spread2': spread2,
        'ppe': ppe
    }

    return features

# Example usage
audio_file = 'songwithvocals.mp3'
features_dict = extract_audio_features(audio_file)
print(features_dict)

提出此错误:

Traceback (most recent call last):
  File "C:\Users\OneDrive\Desktop\python\geminiapi\liibrosaa_audio.py", line 58, in <module>
    features_dict = extract_audio_features(audio_file)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\OneDrive\Desktop\python\geminiapi\liibrosaa_audio.py", line 20, in extract_audio_features
    y_harmonic, y_non_harmonic = librosa.harmonic(y, f0)
                                 ^^^^^^^^^^^^^^^^
  File "C:\Users\OneDrive\Desktop\python\geminiapi\env\Lib\site-packages\lazy_loader\__init__.py", line 94, in __getattr__
    raise AttributeError(f"No {package_name} attribute {name}")
AttributeError: No librosa attribute harmonic
python feature-extraction librosa audio-processing
1个回答
0
投票

该函数位于effects子包中。所以你应该导入 librosa.effects 并使用 librosa.effects.harmonic(...)。

https://librosa.org/doc/latest/ generated/librosa.effects.harmonic.html

© www.soinside.com 2019 - 2024. All rights reserved.